xonecode 0.8.17 → 0.8.25
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-DKZqgHtg.css +1 -0
- package/apps/web/dist/assets/index-LdUr7EoT.js +478 -0
- package/apps/web/dist/assets/{php-Cu6F_QCJ.js → php-Cg-eWGpQ.js} +1 -1
- package/apps/web/dist/assets/{ruby-BiqQPoC6.js → ruby-EcV7Hon3.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/grafo/artefactosEnDisco.js +15 -4
- package/dist/agent/grafo/artefactosEnDisco.js.map +1 -1
- package/dist/agent/grafo/proyecto.js +101 -22
- package/dist/agent/grafo/proyecto.js.map +1 -1
- package/dist/agent/raizDelPaquete.js +1 -1
- package/dist/agent/subagentes/agentesEnDisco.js +3 -1
- package/dist/agent/subagentes/agentesEnDisco.js.map +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/actos.js.map +1 -1
- package/dist/core/artefactos.js +29 -0
- package/dist/core/artefactos.js.map +1 -1
- package/dist/core/dispositivos.js +3 -3
- package/dist/core/hotswap.js +71 -0
- package/dist/core/hotswap.js.map +1 -0
- 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/shellDeAgente.js +12 -0
- package/dist/core/shellDeAgente.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/web/servidor/arranque.js +128 -33
- 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 +49 -5
- package/dist/web/servidor/consolaWeb.js.map +1 -1
- package/dist/web/servidor/pielWeb.js +13 -4
- package/dist/web/servidor/pielWeb.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/skills/xone-hotswap/SKILL.md +8 -4
- package/skills/xone-hotswap/scripts/xone-hotswap +42 -7
- package/apps/web/dist/assets/index-Boak51UP.css +0 -1
- package/apps/web/dist/assets/index-Cg28x6nG.js +0 -477
package/dist/cli/tui/sidebar.js
CHANGED
|
@@ -53,7 +53,7 @@ export function Sidebar(d) {
|
|
|
53
53
|
// flexGrow para llenar la columna: el separador de abajo empuja el pie al fondo.
|
|
54
54
|
_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { backgroundColor: temaInk.marca, bold: true, children: ` ${d.proyecto}`.padEnd(anchoInterior, " ") }), _jsx(Text, { backgroundColor: fondo, color: temaInk.mudo, wrap: "truncate-end", children: (d.rama !== undefined ? `${d.ruta}:${d.rama}` : d.ruta).padEnd(anchoInterior, " ") }), logos.map((fila, i) => (_jsx(Text, { backgroundColor: fondo, color: temaInk.acento, children: fila.padEnd(anchoInterior, " ") }, i)))] }), tokenIn > 0 || tokenOut > 0 || d.contexto > 0 ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { backgroundColor: fondo, bold: true, color: temaInk.acento, children: "Tokens".padEnd(anchoInterior, " ") }), tokenIn > 0 ? _jsx(Text, { backgroundColor: fondo, children: `Token In ${compacto(tokenIn)}`.padEnd(anchoInterior, " ") }) : null, tokenOut > 0 ? _jsx(Text, { backgroundColor: fondo, children: `Token Out ${compacto(tokenOut)}`.padEnd(anchoInterior, " ") }) : null, d.contexto > 0 ? (_jsx(Text, { backgroundColor: fondo, color: temaInk.mudo, children: textoContexto.padEnd(anchoInterior, " ") })) : null] })) : null, _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { backgroundColor: fondo, bold: true, color: temaInk.acento, children: "Modelo".padEnd(anchoInterior, " ") }), _jsx(Text, { backgroundColor: fondo, wrap: "truncate-end", children: d.modelo.padEnd(anchoInterior, " ") }), Object.entries(d.modelosPorPapel)
|
|
55
55
|
.filter(([papel]) => papel !== "trabajo")
|
|
56
|
-
.map(([papel, m]) => (_jsx(Text, { backgroundColor: fondo, color: temaInk.mudo, wrap: "truncate-end", children: `${papel}: ${m}`.padEnd(anchoInterior, " ") }, papel)))] }), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: Array.from({ length: huecos }, (_, i) => (_jsx(Text, { backgroundColor: fondo, children: " ".repeat(anchoInterior) }, i))) }), _jsx(Box, { flexDirection: "column", children: _jsxs(Text, { backgroundColor: fondo, wrap: "truncate-end", children: [_jsx(Text, { color: temaInk.exito, children: "● " }), _jsx(Text, { color: temaInk.mudo, children: `
|
|
56
|
+
.map(([papel, m]) => (_jsx(Text, { backgroundColor: fondo, color: temaInk.mudo, wrap: "truncate-end", children: `${papel}: ${m}`.padEnd(anchoInterior, " ") }, papel)))] }), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: Array.from({ length: huecos }, (_, i) => (_jsx(Text, { backgroundColor: fondo, children: " ".repeat(anchoInterior) }, i))) }), _jsx(Box, { flexDirection: "column", children: _jsxs(Text, { backgroundColor: fondo, wrap: "truncate-end", children: [_jsx(Text, { color: temaInk.exito, children: "● " }), _jsx(Text, { color: temaInk.mudo, children: `XOneCode ${d.version}` }), " ".repeat(anchoInterior)] }) })] }));
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
59
|
* El pie a dos extremos: la ruta a la izquierda; a la derecha las cifras de contexto y
|
package/dist/core/actos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actos.js","sourceRoot":"","sources":["../../src/core/actos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"actos.js","sourceRoot":"","sources":["../../src/core/actos.ts"],"names":[],"mappings":"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"}
|
package/dist/core/artefactos.js
CHANGED
|
@@ -73,6 +73,35 @@ export function esRutaDeArtefacto(ruta) {
|
|
|
73
73
|
return false;
|
|
74
74
|
return segmentos.every((s) => SEGMENTO.test(s) && s !== "." && s !== "..");
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Lo que aparece en la carpeta de artefactos y NO es un artefacto que enseñar.
|
|
78
|
+
*
|
|
79
|
+
* Existe porque la foto que toma la shell (`agent/grafo/proyecto.ts#anunciarArtefactosDeLaShell`)
|
|
80
|
+
* mira la carpeta ENTERA, subcarpetas incluidas: un `unzip` deja un árbol, no un fichero. Y
|
|
81
|
+
* un `.zip` hecho desde el Finder no trae solo lo que se empaquetó — trae `__MACOSX/` con
|
|
82
|
+
* una sombra `._<fichero>` por cada uno, del mismo nombre y la misma extensión que el bueno.
|
|
83
|
+
* Sin esto, descomprimir una maqueta de tres ficheros pintaba seis tarjetas, tres de ellas
|
|
84
|
+
* con `mime: image/png` y doscientos bytes dentro: una imagen rota con nombre de imagen.
|
|
85
|
+
*
|
|
86
|
+
* **No es `BASURA_DEL_SO` (`agent/sesiones/gitSync.ts`) y no puede serlo**, y no solo porque
|
|
87
|
+
* `core/` no importe de `agent/`: aquella contesta «qué no se commitea NUNCA» y vive del
|
|
88
|
+
* lado de git, con su lista cerrada apuntando a `info/exclude`. Esta contesta «qué no se le
|
|
89
|
+
* ENSEÑA a una persona como salida del agente», que es otra pregunta y otro conjunto — el
|
|
90
|
+
* `__MACOSX/` de un zip no tiene nada que hacer en el `info/exclude` de la app del cliente.
|
|
91
|
+
* Comparten tres nombres por coincidencia, no por ser la misma regla.
|
|
92
|
+
*
|
|
93
|
+
* Se mira SEGMENTO a segmento: un `__MACOSX` a media ruta se lleva lo que cuelgue de él, y
|
|
94
|
+
* un `notas-sobre-__MACOSX.md` no es basura por contener el nombre. La sombra se reconoce
|
|
95
|
+
* por el prefijo `._` y no por «empieza por punto», que dejaría fuera un `.perfil.json` que
|
|
96
|
+
* el agente sí escribió a propósito.
|
|
97
|
+
*/
|
|
98
|
+
const BASURA = new Set(["__MACOSX", ".DS_Store", "Thumbs.db", "desktop.ini"]);
|
|
99
|
+
export function esBasuraDeArtefacto(relativa) {
|
|
100
|
+
return relativa
|
|
101
|
+
.split("/")
|
|
102
|
+
.filter((s) => s.length > 0)
|
|
103
|
+
.some((s) => BASURA.has(s) || s.startsWith("._"));
|
|
104
|
+
}
|
|
76
105
|
/**
|
|
77
106
|
* ¿Es esta ruta un artefacto escrito en el SITIO EQUIVOCADO? Y si lo es, dónde iba.
|
|
78
107
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artefactos.js","sourceRoot":"","sources":["../../src/core/artefactos.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artefactos.js","sourceRoot":"","sources":["../../src/core/artefactos.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,7 +58,7 @@ export function recetaDeEmuladorAndroid(plataforma, estado) {
|
|
|
58
58
|
],
|
|
59
59
|
nota: "Son unos cientos de MB. Ni la fórmula ni el cask piden la contraseña de " +
|
|
60
60
|
"administrador —instalan dentro del prefijo de Homebrew, que es tuyo—, así que " +
|
|
61
|
-
"puedes pegarlo en un terminal o dejar que lo haga
|
|
61
|
+
"puedes pegarlo en un terminal o dejar que lo haga XOneCode.",
|
|
62
62
|
// `sdkmanager` es lo que instala el cask: si está, el paso está hecho.
|
|
63
63
|
hecho: estado.sdkmanager,
|
|
64
64
|
// **Este es el paso del que colgaban los otros dos.** Sin él, en una máquina nueva la
|
|
@@ -81,7 +81,7 @@ export function recetaDeEmuladorAndroid(plataforma, estado) {
|
|
|
81
81
|
comandos: [
|
|
82
82
|
'sdkmanager --install "platform-tools" "emulator" "platforms;android-35" "system-images;android-35;google_apis;arm64-v8a"',
|
|
83
83
|
],
|
|
84
|
-
nota: "Son 2-3 GB. Puedes pegarlo en un terminal o dejar que lo haga
|
|
84
|
+
nota: "Son 2-3 GB. Puedes pegarlo en un terminal o dejar que lo haga XOneCode.",
|
|
85
85
|
hecho: estado.emulator,
|
|
86
86
|
// Se puede lanzar en cuanto están las herramientas del paso 1: no pide contraseña.
|
|
87
87
|
ejecutable: puedeLanzar,
|
|
@@ -125,7 +125,7 @@ export function recetaDeEmuladorAndroid(plataforma, estado) {
|
|
|
125
125
|
'export JAVA_HOME="$(brew --prefix openjdk@17)"',
|
|
126
126
|
],
|
|
127
127
|
nota: "Va en `~/.zshrc`, y luego abre un terminal nuevo o haz `source ~/.zshrc`. " +
|
|
128
|
-
"
|
|
128
|
+
"XOneCode NO lo necesita —ya mira la carpeta de Homebrew para encontrar el SDK—: " +
|
|
129
129
|
"esto es para que `emulator` y `adb` te funcionen en tu terminal, y sin ello el " +
|
|
130
130
|
"comando de abajo hay que escribirlo con la ruta entera. No es un paso: no se mide, " +
|
|
131
131
|
"no se lanza desde aquí y la receta no espera a que lo hagas.",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dónde deja una shell lo que saca del CONTEXTO, y por qué eso no es un artefacto.
|
|
3
|
+
*
|
|
4
|
+
* El script `xone-hotswap` (skill de serie) no imprime una respuesta del aparato que pase de
|
|
5
|
+
* un par de miles de caracteres: la escribe a fichero y en la salida del comando deja una
|
|
6
|
+
* línea que dice dónde está. El motivo es bueno —el árbol de controles de una pantalla llena
|
|
7
|
+
* son varios miles de caracteres, y volcarlo en la salida es meterlo en el contexto del
|
|
8
|
+
* agente para siempre—. Lo que estaba mal era el DESTINO: escribía en la carpeta de
|
|
9
|
+
* artefactos, que es la que se ANUNCIA.
|
|
10
|
+
*
|
|
11
|
+
* **Y se anunciaban diez volcados de los que seis no volvía a abrir nadie.** Medido sobre una
|
|
12
|
+
* sesión real de `device-controller` (MyAllXOne, 22-09-2026): de 10 `respuesta-status-*.json`
|
|
13
|
+
* de 8 KB, 4 se volvieron a tocar y 6 no se abrieron jamás; los que sí, 9 veces por shell y 4
|
|
14
|
+
* por `read_file`, y cuando se abrían se recortaban —`print(json.dumps(d)[:1500])` de un
|
|
15
|
+
* fichero de 8 KB—. Ningún otro lector los mira: ni el juez del turno, ni el verificador, ni
|
|
16
|
+
* la persona. El contraste está medido al lado: las CAPTURAS sí tienen un segundo lector
|
|
17
|
+
* —`capturasDelTurno` se lleva la última al crítico de pantalla—, y por eso las capturas se
|
|
18
|
+
* quedan donde estaban.
|
|
19
|
+
*
|
|
20
|
+
* Y había un segundo efecto, que es el que esta carpeta arregla de paso: **el agente no sabía
|
|
21
|
+
* cómo volver a abrirlos**. El script devolvía un nombre pelado (`<guardado como
|
|
22
|
+
* respuesta-status-….json>`) y lo único que el entorno le daba era `XONECODE_ARTEFACTOS`, que
|
|
23
|
+
* es la carpeta del DISCO. En la traza se le ve intentando leer el mismo fichero por tres
|
|
24
|
+
* rutas —la absoluta de la máquina y `/.xonecode/sesiones/…`, denegada— antes de rendirse y
|
|
25
|
+
* usar `python3`. De regalo, esa ruta absoluta viajó por el cable dentro de la línea de la
|
|
26
|
+
* tool, que es justo lo que `sinRutas` existe para impedir.
|
|
27
|
+
*
|
|
28
|
+
* Así que esto es la MISMA pieza que `/large_tool_results/` (`core/descargas.ts`) y por la
|
|
29
|
+
* misma razón declarada allí: «un artefacto es una salida para una persona y por eso se
|
|
30
|
+
* anuncia; esto es el andamio del agente». Cambia quién descarga —allí la librería, aquí un
|
|
31
|
+
* script nuestro— y no cambia nada más.
|
|
32
|
+
*
|
|
33
|
+
* Este módulo es `core/`: el nombre y dónde va la carpeta. Quién la monta es de `agent/`
|
|
34
|
+
* (`agent/grafo/proyecto.ts#backendConHotswap`), y quién escribe ahí es el script.
|
|
35
|
+
*/
|
|
36
|
+
import { dirname, join } from "node:path";
|
|
37
|
+
/**
|
|
38
|
+
* El prefijo virtual, con barra final: `CompositeBackend` la exige para no reconstruir
|
|
39
|
+
* `//nombre` fuera de la raíz montada — la misma trampa medida con `/skills/`.
|
|
40
|
+
*
|
|
41
|
+
* **El nombre ata el harness a UNA skill, y eso se declara en vez de disimularse.** Lo
|
|
42
|
+
* honesto sería un nombre que diga la función y no el protocolo (`/volcados/`), porque
|
|
43
|
+
* mañana otra skill querrá lo mismo; se deja `hotswap` porque hoy hay exactamente un
|
|
44
|
+
* escritor, y un nombre genérico con un solo usuario es una abstracción que nadie ha medido.
|
|
45
|
+
* El día que haya un segundo, el sitio de la decisión es este.
|
|
46
|
+
*/
|
|
47
|
+
export const RUTA_HOTSWAP = "/hotswap/";
|
|
48
|
+
/** El nombre llano de la carpeta en disco: `/hotswap/` → `hotswap`. */
|
|
49
|
+
const CARPETA = RUTA_HOTSWAP.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
50
|
+
/**
|
|
51
|
+
* Dónde cae en DISCO: al LADO de la de artefactos de la sesión, nunca dentro.
|
|
52
|
+
*
|
|
53
|
+
* **Hermana y no subcarpeta**, y eso no es estética: desde que la foto de
|
|
54
|
+
* `anunciarArtefactosDeLaShell` es recursiva, cualquier cosa que cuelgue de `artefactos/` se
|
|
55
|
+
* anuncia — o sea que un `artefactos/hotswap/` volvería a llenar la pestaña de volcados, que
|
|
56
|
+
* es justo lo que esto viene a quitar.
|
|
57
|
+
*
|
|
58
|
+
* Se deriva de la carpeta de artefactos en vez de recibir su propio parámetro, por lo mismo
|
|
59
|
+
* que `carpetaDeDescargas`: esa carpeta ya lleva dentro la única decisión que hace falta
|
|
60
|
+
* —¿hay una sesión con IDENTIDAD?—, que `turnoReal.ts` resuelve pasando
|
|
61
|
+
* `.xonecode/sesiones/<id>/artefactos` en la web y cayendo a `.xonecode/artefactos` en el
|
|
62
|
+
* terminal. Dos parámetros serían dos sitios donde contestar la misma pregunta, y el segundo
|
|
63
|
+
* es justo el que se cae en un cableado de ocho saltos.
|
|
64
|
+
*
|
|
65
|
+
* Y de vivir ahí cuelga gratis lo que si no habría que escribir: `borrarSesion` borra la
|
|
66
|
+
* carpeta `<id>` entera, así que borrar una conversación se lleva también sus volcados.
|
|
67
|
+
*/
|
|
68
|
+
export function carpetaDeHotswap(carpetaDeArtefactos) {
|
|
69
|
+
return join(dirname(carpetaDeArtefactos), CARPETA);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=hotswap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotswap.js","sourceRoot":"","sources":["../../src/core/hotswap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AAExC,uEAAuE;AACvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAErE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAAC,mBAA2B;IAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # El modo de escritura de una sesión
|
|
3
|
+
*
|
|
4
|
+
* Dos modos y nada más: **supervisado**, donde cada escritura para con su diff delante, y
|
|
5
|
+
* **autónomo**, donde el agente escribe los ficheros del proyecto sin preguntar.
|
|
6
|
+
*
|
|
7
|
+
* **Vive en la SESIÓN, no en el disco.** Antes esto era `settings.sinAprobacion`, un ajuste
|
|
8
|
+
* por RUTA en `settings.json` que se ponía una vez y se quedaba puesto para siempre, en
|
|
9
|
+
* todas las sesiones y todos los procesos. Se retiró entero: un mando que está dentro de la
|
|
10
|
+
* caja del chat se lee como «esta conversación», y una bandera global encendida sobre la app
|
|
11
|
+
* de un cliente que nadie recuerda haber dejado encendida es el peor final posible. Es la
|
|
12
|
+
* misma decisión que el esfuerzo de razonamiento (`core/esfuerzo.ts`), que también se elige
|
|
13
|
+
* por sesión, se anota en el índice y vuelve al reabrirla — y que tampoco tiene defecto
|
|
14
|
+
* global, porque un tercer valor «para todas las nuevas» decide en nombre de conversaciones
|
|
15
|
+
* que todavía no existen.
|
|
16
|
+
*
|
|
17
|
+
* **Lo que el modo gobierna son las escrituras LOCALES, y solo eso.** No toca la subida:
|
|
18
|
+
* `/sync subir` conserva su plan delante y su aprobación fail-closed por TIPO en los dos
|
|
19
|
+
* modos, porque subir es llevar el trabajo a la app de otras personas y eso no es lo que
|
|
20
|
+
* esta palanca decide. Y no toca las guardas de RUTA: `/.env`, `/.git`, `/.xonecode`, las
|
|
21
|
+
* vistas aplanadas y un artefacto fuera de sitio se siguen denegando igual en autónomo. El
|
|
22
|
+
* modo quita la PREGUNTA, nunca la BARRERA.
|
|
23
|
+
*
|
|
24
|
+
* **Y por eso se levantó la condición de CloudStudio**, que era la que prohibía todo esto en
|
|
25
|
+
* un proyecto conectado. El argumento medido: escribir no sube; el commit por turno es git,
|
|
26
|
+
* o sea recuperable; y la subida sigue teniendo su propia aprobación. La incoherencia que lo
|
|
27
|
+
* hizo insostenible: sobre ese MISMO proyecto conectado, una tarea de fondo ya escribía sin
|
|
28
|
+
* preguntar y la consola no podía.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Una sesión que no ha dicho nada PREGUNTA.
|
|
32
|
+
*
|
|
33
|
+
* Ausente no es «no consta» aquí, y esa es la diferencia con el esfuerzo o el dispositivo:
|
|
34
|
+
* de esto hay que decidir algo en cada escritura, así que el hueco tiene que resolverse, y
|
|
35
|
+
* la única dirección segura para resolverlo es la que enseña el diff.
|
|
36
|
+
*/
|
|
37
|
+
export const MODO_POR_OMISION = "supervisado";
|
|
38
|
+
/**
|
|
39
|
+
* Cuántas rondas de aprobación admite un turno de la CONSOLA, en los dos modos.
|
|
40
|
+
*
|
|
41
|
+
* El `MAX_APPROVAL_ROUNDS` de `vendor/hitl.ts` son cinco y se dimensionaron para un modelo
|
|
42
|
+
* que insiste tras cada rechazo — «te lo he preguntado cinco veces, para». Medido después,
|
|
43
|
+
* eso no es lo que corta: lo que corta son trabajos legítimos a la mitad, porque una ronda
|
|
44
|
+
* no es una insistencia, es una TANDA de escrituras. Ya lo pagaron las tareas de fondo
|
|
45
|
+
* —`core/tareas.ts#TOPE_DE_RONDAS_DE_TAREA`, con un turno que acabó con cuatro ficheros
|
|
46
|
+
* escritos, una escritura abandonada y el verificador sin correr— y lo paga igual una
|
|
47
|
+
* sesión en modo autónomo, que es la misma forma de trabajar con alguien delante.
|
|
48
|
+
*
|
|
49
|
+
* **Es el MISMO 20 que la tarea, y sale de la misma medida**, no de una segunda
|
|
50
|
+
* observación: lo único medido es el turno que se cortó necesitando cinco tandas, y veinte
|
|
51
|
+
* deja sitio a un encargo bastante mayor. Sigue siendo un número provisional, y lo que lo
|
|
52
|
+
* hace aceptable es su MODO DE FALLO: al agotarse se DICE, quedan escrituras sin aplicar y
|
|
53
|
+
* el turno sale con `cortadoPorTope`. Un tope corto que para con un motivo verdadero se
|
|
54
|
+
* afina luego; lo que no se puede es que al agotarse mienta.
|
|
55
|
+
*
|
|
56
|
+
* **Vive aparte del de la tarea aunque hoy valgan lo mismo**: son dos situaciones y no una
|
|
57
|
+
* —aquí hay alguien que puede rechazar o pulsar parar, allí no hay nadie mirando—, así que
|
|
58
|
+
* fundirlos ataría dos decisiones que se van a afinar por separado.
|
|
59
|
+
*/
|
|
60
|
+
export const TOPE_DE_RONDAS_DE_CONSOLA = 20;
|
|
61
|
+
/** ¿Es uno de los dos nombres EXACTOS del modo? Nada de tildes ni sinónimos: eso es `modoDeTexto`. */
|
|
62
|
+
export function esModoDeEscritura(candidato) {
|
|
63
|
+
return candidato === "supervisado" || candidato === "autonomo";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Lo que alguien TECLEA, traducido a un modo.
|
|
67
|
+
*
|
|
68
|
+
* Acepta las dos parejas de palabras: la nueva —la que se lee en la pastilla y viaja por el
|
|
69
|
+
* cable— y la vieja de `/aprobacion [humana|automatica]`, que lleva meses en la ayuda y en
|
|
70
|
+
* los dedos de quien la usa. Un comando que deja de entender lo que siempre entendió es una
|
|
71
|
+
* regresión aunque el concepto sea el mismo.
|
|
72
|
+
*
|
|
73
|
+
* Las tildes se aceptan al ENTRAR y nunca se guardan: el valor que viaja y se persiste es
|
|
74
|
+
* siempre `autonomo` a secas, que es el que compara `esModoDeEscritura`.
|
|
75
|
+
*
|
|
76
|
+
* **Lo que no reconoce es `undefined`, jamás un modo por omisión**: quien llame decide qué
|
|
77
|
+
* hacer con un «no lo entiendo», y aquí adivinar sería adivinar en la dirección peligrosa la
|
|
78
|
+
* mitad de las veces.
|
|
79
|
+
*/
|
|
80
|
+
export function modoDeTexto(texto) {
|
|
81
|
+
const limpio = texto
|
|
82
|
+
.trim()
|
|
83
|
+
.toLowerCase()
|
|
84
|
+
.normalize("NFD")
|
|
85
|
+
.replace(/[̀-ͯ]/g, "");
|
|
86
|
+
if (limpio === "supervisado" || limpio === "humana")
|
|
87
|
+
return "supervisado";
|
|
88
|
+
if (limpio === "autonomo" || limpio === "automatica")
|
|
89
|
+
return "autonomo";
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* ¿Las escrituras de esta sesión se aplican SIN preguntar, ahora mismo?
|
|
94
|
+
*
|
|
95
|
+
* Las dos condiciones son AND y ninguna sobra:
|
|
96
|
+
*
|
|
97
|
+
* - **El modo de la sesión es autónomo.** Lo eligió quien está en esta conversación.
|
|
98
|
+
* - **Hay alguien delante.** Auto-aprobar significa «el humano que está aquí ha decidido no
|
|
99
|
+
* pulsar», no «no hace falta humano». Es la única condición que sobrevivió al rediseño, y
|
|
100
|
+
* no es celo: `consolaWeb` declara `interactivo` a fuego, así que quien llama pasa la
|
|
101
|
+
* misma cuenta que `pedirDecisiones` (`interactivo && !eof()`). Con ella, una pestaña que
|
|
102
|
+
* se cierra a mitad de turno devuelve la escritura al camino de aprobación, donde el eof
|
|
103
|
+
* la rechaza — y `xonecode run` en CI y las tuberías siguen sin aplicar nada, que es lo
|
|
104
|
+
* que hacen hoy y lo que el código de salida 2 del contrato significa.
|
|
105
|
+
*
|
|
106
|
+
* Se pregunta en CADA RONDA, nunca se captura al abrir: el modo se cambia con la sesión en
|
|
107
|
+
* marcha, y un booleano capturado dejaría el cambio sin efecto hasta reabrir — la mitad de
|
|
108
|
+
* las veces en la dirección peligrosa.
|
|
109
|
+
*/
|
|
110
|
+
export function seEscribeSinPreguntar(opciones) {
|
|
111
|
+
if (opciones.modo !== "autonomo")
|
|
112
|
+
return false;
|
|
113
|
+
return opciones.interactivo;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=modoDeEscritura.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modoDeEscritura.js","sourceRoot":"","sources":["../../src/core/modoDeEscritura.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB,aAAa,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,sGAAsG;AACtG,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,OAAO,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,UAAU,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,KAAK;SACjB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC1E,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC;IACxE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAGrC;IACC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC"}
|
|
@@ -67,11 +67,14 @@ export function mudanzasPendientes(opciones) {
|
|
|
67
67
|
* Una ruta absoluta ya grabada en disco, traducida al reparto de ahora — o AUSENTE si esta
|
|
68
68
|
* mudanza no la toca.
|
|
69
69
|
*
|
|
70
|
-
* Existe
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
70
|
+
* Existe por el almacén que tiene raíces absolutas escritas: `proyecto.raiz` del índice de
|
|
71
|
+
* tareas (`~/.xonecode/tareas/indice.json`). Sin reescribirlas, una tarea pendiente abriría
|
|
72
|
+
* una carpeta que ya no está.
|
|
73
|
+
*
|
|
74
|
+
* Fueron DOS: las claves de `settings.sinAprobacion` también eran rutas, y perderlas dejaba
|
|
75
|
+
* sin aplicar una autorización que el usuario dio por puesta. Ese ajuste se retiró cuando el
|
|
76
|
+
* modo de escritura pasó a vivir en la SESIÓN (`core/modoDeEscritura.ts`) y con él se fue su
|
|
77
|
+
* mudanza; esta función sigue siendo general porque el problema no era suyo.
|
|
75
78
|
*
|
|
76
79
|
* Se compara por SEGMENTOS y no por prefijo de texto, la misma trampa que `dentroDelWorkspace`:
|
|
77
80
|
* `…/AppDemoViejo` empieza por `…/AppDemo` y no tiene nada que ver. Y ausente significa «esto
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mudanzaDeWorkspace.js","sourceRoot":"","sources":["../../src/core/mudanzaDeWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AAsBrD,0EAA0E;AAC1E,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,0FAA0F;AAC1F,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS;IAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAMiB;IAEjB,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YAAE,SAAS;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QAEtC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACrE,+EAA+E;YAC/E,mFAAmF;YACnF,qFAAqF;YACrF,sDAAsD;YACtD,IAAI,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;gBAAE,SAAS;YAC9C,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"mudanzaDeWorkspace.js","sourceRoot":"","sources":["../../src/core/mudanzaDeWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC;AAsBrD,0EAA0E;AAC1E,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,0FAA0F;AAC1F,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS;IAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAMiB;IAEjB,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YAAE,SAAS;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QAEtC,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACrE,+EAA+E;YAC/E,mFAAmF;YACnF,qFAAqF;YACrF,sDAAsD;YACtD,IAAI,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;gBAAE,SAAS;YAC9C,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAA4B;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAAE,SAAS;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAAE,SAAS;QAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -221,7 +221,7 @@ export function motivoDeBloqueo(causa) {
|
|
|
221
221
|
// Larga a propósito: lo que un despliegue tiene que decir es QUÉ falta, DE DÓNDE sale y
|
|
222
222
|
// qué pasa si se ignora. Una frase corta aquí manda a la persona a buscar sola y la deja
|
|
223
223
|
// creyendo que el fichero lo pone xonecode.
|
|
224
|
-
return `app.xml declara la conexión «${causa.connstring}» y ese fichero no está en el proyecto. La base la genera el simulador fuera de
|
|
224
|
+
return `app.xml declara la conexión «${causa.connstring}» y ese fichero no está en el proyecto. La base la genera el simulador fuera de XOneCode —XOneCode no la crea—, así que hay que abrir el proyecto en XOne Studio y arrancarlo una vez, o traerlo de donde se generó. Sin él la app recibe el lanzamiento y muere en un diálogo «Error opening database».`;
|
|
225
225
|
case "falta-la-base":
|
|
226
226
|
// La hermana de la de arriba, y la que más veces va a salir: medido, tres de cada cuatro
|
|
227
227
|
// proyectos reales NO declaran su base y la necesitan igual, porque la ruta es la de por
|
|
@@ -231,9 +231,9 @@ export function motivoDeBloqueo(causa) {
|
|
|
231
231
|
// el PROYECTO, y una app que ya se lanzó antes en ese dispositivo tiene allí su copia, así
|
|
232
232
|
// que volver a lanzarla no la necesita. No se puede preguntar al aparato todavía, así que
|
|
233
233
|
// lo honesto es decir que no se puede prometer — y lo que hay que hacer si ese es el caso.
|
|
234
|
-
return `El proyecto no tiene ${RUTA_DE_LA_BASE}, que es la base local de XOne: la usa POR DEFECTO, se declare en app.xml o no, y sin ella la app recibe el lanzamiento y muere en un diálogo «Error opening database». La genera el simulador fuera de
|
|
234
|
+
return `El proyecto no tiene ${RUTA_DE_LA_BASE}, que es la base local de XOne: la usa POR DEFECTO, se declare en app.xml o no, y sin ella la app recibe el lanzamiento y muere en un diálogo «Error opening database». La genera el simulador fuera de XOneCode —XOneCode no la crea—, así que hay que abrir el proyecto en XOne Studio y arrancarlo una vez, o traerla de donde se generó. (Se mira el proyecto, no el aparato: si esta app ya se lanzó antes en ese dispositivo, allí sigue su copia y no hace falta esto.)`;
|
|
235
235
|
case "plataforma-sin-camino":
|
|
236
|
-
return `Lanzar desde
|
|
236
|
+
return `Lanzar desde XOneCode todavía solo está montado para Android —el túnel, el canal y la subida son los de esa plataforma—, así que sobre ${nombreDePlataforma(causa.plataforma)} no hay camino. Elige un dispositivo de Android en Ajustes → Dispositivos, o lanza la app desde XOne Studio.`;
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
//# sourceMappingURL=puedeLanzarse.js.map
|
|
@@ -49,7 +49,7 @@ export function comandoDelSelector(plataforma, desde) {
|
|
|
49
49
|
" on error",
|
|
50
50
|
" set inicio to path to home folder",
|
|
51
51
|
" end try",
|
|
52
|
-
' set elegida to choose folder with prompt "Dónde se bajan los proyectos de
|
|
52
|
+
' set elegida to choose folder with prompt "Dónde se bajan los proyectos de XOneCode" default location inicio',
|
|
53
53
|
" return POSIX path of elegida",
|
|
54
54
|
"end run",
|
|
55
55
|
].join("\n");
|
|
@@ -61,7 +61,7 @@ export function comandoDelSelector(plataforma, desde) {
|
|
|
61
61
|
argumentos: [
|
|
62
62
|
"--file-selection",
|
|
63
63
|
"--directory",
|
|
64
|
-
"--title=Dónde se bajan los proyectos de
|
|
64
|
+
"--title=Dónde se bajan los proyectos de XOneCode",
|
|
65
65
|
...(desde === undefined ? [] : [`--filename=${desde.replace(/\/*$/, "/")}`]),
|
|
66
66
|
],
|
|
67
67
|
};
|
package/dist/core/settings.js
CHANGED
|
@@ -27,30 +27,6 @@ export function seMira(ajustes, plataforma) {
|
|
|
27
27
|
* porque ese fichero es el dueño de la planificación; este solo guarda la ELECCIÓN.
|
|
28
28
|
*/
|
|
29
29
|
export const TOPE_DE_CONCURRENCIA_DE_TAREAS = 8;
|
|
30
|
-
/**
|
|
31
|
-
* ¿Se aplican las escrituras de este proyecto SIN pedir aprobación?
|
|
32
|
-
*
|
|
33
|
-
* Las tres condiciones son AND, y ninguna es redundante:
|
|
34
|
-
*
|
|
35
|
-
* - **Lo ha dicho el dueño de la máquina**, para esta ruta, en `settings.json`.
|
|
36
|
-
* - **El proyecto es OFFLINE de verdad**, y eso NO se le pregunta al `modo` del
|
|
37
|
-
* `config.json`: se mira si hay un bloque `cloudstudio`. Un proyecto conectado escribe en
|
|
38
|
-
* una copia que después sube a CloudStudio, o sea al trabajo de otras personas, y ahí la
|
|
39
|
-
* aprobación no es una preferencia. Mirar el `modo` sería creerle a un campo que puede
|
|
40
|
-
* venir en la misma carpeta que la marca.
|
|
41
|
-
* - **Hay alguien delante.** Auto-aprobar significa «el humano que está aquí ha decidido no
|
|
42
|
-
* pulsar», no «no hace falta humano». Sin interactivo —`xonecode run` en CI, una tubería—
|
|
43
|
-
* se sigue sin aplicar nada, que es lo que esos caminos hacen hoy: cambiar eso volcaría
|
|
44
|
-
* el significado de un código de salida del contrato por un ajuste que nadie escribió
|
|
45
|
-
* pensando en CI.
|
|
46
|
-
*/
|
|
47
|
-
export function seAplicaSinAprobacion(opciones) {
|
|
48
|
-
if (opciones.sinAprobacion?.[opciones.raiz] !== true)
|
|
49
|
-
return false;
|
|
50
|
-
if (opciones.cloudstudio !== undefined)
|
|
51
|
-
return false;
|
|
52
|
-
return opciones.interactivo;
|
|
53
|
-
}
|
|
54
30
|
/**
|
|
55
31
|
* Misma disciplina que `config.json` (`CLAVES_DENEGADAS`, reexportada de `config.ts` como
|
|
56
32
|
* fuente ÚNICA — dos listas de nombres de credencial ya divergieron una vez, medido: «key»,
|
|
@@ -137,38 +113,17 @@ export function validarSettings(bruto) {
|
|
|
137
113
|
}
|
|
138
114
|
const workspace = typeof objeto.workspace === "string" ? objeto.workspace : undefined;
|
|
139
115
|
const dispositivos = validarDispositivos(objeto.dispositivos);
|
|
140
|
-
const sinAprobacion = validarSinAprobacion(objeto.sinAprobacion);
|
|
141
116
|
const concurrenciaDeTareas = validarConcurrenciaDeTareas(objeto.concurrenciaDeTareas);
|
|
142
117
|
return {
|
|
143
118
|
settings: {
|
|
144
119
|
entornos,
|
|
145
120
|
...(workspace === undefined ? {} : { workspace }),
|
|
146
121
|
...(dispositivos === undefined ? {} : { dispositivos }),
|
|
147
|
-
...(sinAprobacion === undefined ? {} : { sinAprobacion }),
|
|
148
122
|
...(concurrenciaDeTareas === undefined ? {} : { concurrenciaDeTareas }),
|
|
149
123
|
},
|
|
150
124
|
avisos,
|
|
151
125
|
};
|
|
152
126
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Solo rutas absolutas con valor booleano `true`, y nada más.
|
|
155
|
-
*
|
|
156
|
-
* Un `false` no se guarda: significa lo mismo que no estar —pedir aprobación— y dejarlo
|
|
157
|
-
* escrito solo daría dos formas de decir que no. Un `"true"` de CADENA se descarta, por lo
|
|
158
|
-
* de siempre. Y una clave que no sea una ruta absoluta tampoco entra: la comparación de
|
|
159
|
-
* `seAplicaSinAprobacion` es exacta contra la raíz, así que una relativa no casaría nunca y
|
|
160
|
-
* quedaría en el fichero pareciendo que hace algo.
|
|
161
|
-
*/
|
|
162
|
-
function validarSinAprobacion(candidato) {
|
|
163
|
-
if (typeof candidato !== "object" || candidato === null || Array.isArray(candidato))
|
|
164
|
-
return undefined;
|
|
165
|
-
const salida = {};
|
|
166
|
-
for (const [ruta, valor] of Object.entries(candidato)) {
|
|
167
|
-
if (valor === true && (ruta.startsWith("/") || /^[A-Za-z]:[\\/]/.test(ruta)))
|
|
168
|
-
salida[ruta] = true;
|
|
169
|
-
}
|
|
170
|
-
return Object.keys(salida).length === 0 ? undefined : salida;
|
|
171
|
-
}
|
|
172
127
|
/**
|
|
173
128
|
* Solo BOOLEANOS, y solo los cuatro nombres conocidos: lo que no lo sea se descarta sin
|
|
174
129
|
* aviso, como cualquier campo desconocido. Un `"false"` de cadena NO se toma por falso —es
|
|
@@ -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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"}
|
|
@@ -57,6 +57,16 @@ const PREFIJO_DE_CLAVE = "XONECODE_CLAVE_";
|
|
|
57
57
|
* `artefactoFueraDeSitio` prohíbe a las tools de fichero, y una shell no pasa por ahí.
|
|
58
58
|
*/
|
|
59
59
|
export const VARIABLE_DE_ARTEFACTOS = "XONECODE_ARTEFACTOS";
|
|
60
|
+
/**
|
|
61
|
+
* Y la que nombra la carpeta donde dejar lo que **no** se le enseña a nadie: lo que un script
|
|
62
|
+
* saca del contexto para no metérselo al agente en el hilo (`core/hotswap.ts`).
|
|
63
|
+
*
|
|
64
|
+
* Son dos variables y no una porque son dos preguntas: la de arriba dice «dónde dejo lo que
|
|
65
|
+
* quiero que vea», ésta «dónde dejo lo que quiero poder releer». Con una sola, el script
|
|
66
|
+
* escribía sus volcados donde se anuncian — medido: diez tarjetas en el hilo, seis de ellas
|
|
67
|
+
* de ficheros que nadie volvió a abrir.
|
|
68
|
+
*/
|
|
69
|
+
export const VARIABLE_DE_HOTSWAP = "XONECODE_HOTSWAP";
|
|
60
70
|
/**
|
|
61
71
|
* Cómo se llama la variable que lleva la ruta real de una skill.
|
|
62
72
|
*
|
|
@@ -136,6 +146,8 @@ export function entornoDeShell(opciones) {
|
|
|
136
146
|
}
|
|
137
147
|
if (opciones.artefactos !== undefined)
|
|
138
148
|
limpio[VARIABLE_DE_ARTEFACTOS] = opciones.artefactos;
|
|
149
|
+
if (opciones.hotswap !== undefined)
|
|
150
|
+
limpio[VARIABLE_DE_HOTSWAP] = opciones.hotswap;
|
|
139
151
|
// Después de la copia del entorno heredado, así que lo que resuelve el localizador gana
|
|
140
152
|
// sobre un valor que viniera de fuera: el localizador SÍ ha comprobado que el fichero está.
|
|
141
153
|
Object.assign(limpio, opciones.android ?? {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellDeAgente.js","sourceRoot":"","sources":["../../src/core/shellDeAgente.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,sGAAsG;AACtG,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAiE;IAEjE,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,SAAS;QAAE,SAAS,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC;IACvE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC3C,IAAI,GAAG,KAAK,SAAS;QAAE,SAAS,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"shellDeAgente.js","sourceRoot":"","sources":["../../src/core/shellDeAgente.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
|