xonecode 0.6.0 → 0.8.1
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/{index-rqecK6s2.css → index-Boak51UP.css} +1 -1
- package/apps/web/dist/assets/index-Cg28x6nG.js +477 -0
- package/apps/web/dist/assets/{php-BBij3Lhc.js → php-Cu6F_QCJ.js} +1 -1
- package/apps/web/dist/assets/{ruby-Dq2YEaLo.js → ruby-BiqQPoC6.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/cloudstudio/cloudstudioClient.js +10 -0
- package/dist/agent/cloudstudio/cloudstudioClient.js.map +1 -1
- package/dist/agent/cloudstudio/cloudstudioMcp.js +84 -8
- package/dist/agent/cloudstudio/cloudstudioMcp.js.map +1 -1
- package/dist/agent/cloudstudio/descarga.js +14 -4
- package/dist/agent/cloudstudio/descarga.js.map +1 -1
- package/dist/agent/cloudstudio/ramaActiva.js +11 -0
- package/dist/agent/cloudstudio/ramaActiva.js.map +1 -0
- package/dist/agent/cloudstudio/subida.js +13 -4
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/config/catalogoModelos.js +45 -0
- package/dist/agent/config/catalogoModelos.js.map +1 -1
- package/dist/agent/config/modelos.js +103 -12
- package/dist/agent/config/modelos.js.map +1 -1
- package/dist/agent/config/mudanzaEnDisco.js +121 -0
- package/dist/agent/config/mudanzaEnDisco.js.map +1 -0
- package/dist/agent/config/selectorEnMaquina.js +45 -0
- package/dist/agent/config/selectorEnMaquina.js.map +1 -0
- package/dist/agent/config/settingsEnDisco.js +35 -0
- package/dist/agent/config/settingsEnDisco.js.map +1 -1
- package/dist/agent/dispositivos/juezVisual.js +152 -0
- package/dist/agent/dispositivos/juezVisual.js.map +1 -0
- package/dist/agent/dispositivos/sensorDeArranque.js +154 -0
- package/dist/agent/dispositivos/sensorDeArranque.js.map +1 -0
- package/dist/agent/exportarPdf.js +140 -0
- package/dist/agent/exportarPdf.js.map +1 -0
- package/dist/agent/grafo/criticaVisual.js +115 -0
- package/dist/agent/grafo/criticaVisual.js.map +1 -0
- package/dist/agent/grafo/navegacionXone.js +37 -4
- package/dist/agent/grafo/navegacionXone.js.map +1 -1
- package/dist/agent/grafo/perfiles.js +52 -9
- package/dist/agent/grafo/perfiles.js.map +1 -1
- package/dist/agent/grafo/proyecto.js +74 -7
- package/dist/agent/grafo/proyecto.js.map +1 -1
- package/dist/agent/grafo/skills.js +32 -0
- package/dist/agent/grafo/skills.js.map +1 -1
- package/dist/agent/grafo/xoneAgent.js +103 -13
- package/dist/agent/grafo/xoneAgent.js.map +1 -1
- package/dist/agent/navegacion/estilosEnDisco.js +110 -0
- package/dist/agent/navegacion/estilosEnDisco.js.map +1 -0
- package/dist/agent/navegacion/hechosEnDisco.js +26 -0
- package/dist/agent/navegacion/hechosEnDisco.js.map +1 -0
- package/dist/agent/navegacion/indiceEnDisco.js +15 -0
- package/dist/agent/navegacion/indiceEnDisco.js.map +1 -1
- package/dist/agent/subagentes/agentesEnDisco.js +85 -24
- package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
- package/dist/agent/subagentes/escrituraExterna.js +53 -0
- package/dist/agent/subagentes/escrituraExterna.js.map +1 -1
- package/dist/agent/subagentes/pluginDeSkills.js +99 -0
- package/dist/agent/subagentes/pluginDeSkills.js.map +1 -0
- package/dist/agent/subagentes/subagenteExterno.js +48 -0
- package/dist/agent/subagentes/subagenteExterno.js.map +1 -1
- package/dist/agent/subagentes/subagenteOpencode.js +53 -1
- package/dist/agent/subagentes/subagenteOpencode.js.map +1 -1
- package/dist/agent/tareas/juezDeTarea.js +1 -1
- package/dist/agent/tareas/juezDeTarea.js.map +1 -1
- package/dist/agent/tareas/tareasEnDisco.js +49 -0
- package/dist/agent/tareas/tareasEnDisco.js.map +1 -1
- package/dist/agent/turno/diagnosticoDeTools.js +5 -1
- package/dist/agent/turno/diagnosticoDeTools.js.map +1 -1
- package/dist/agent/turno/informeDeTraza.js +27 -4
- package/dist/agent/turno/informeDeTraza.js.map +1 -1
- package/dist/agent/turno/puente.js +24 -1
- package/dist/agent/turno/puente.js.map +1 -1
- package/dist/agent/turno/resumenDeContexto.js +88 -4
- package/dist/agent/turno/resumenDeContexto.js.map +1 -1
- package/dist/agent/turno/resumenDeTool.js +18 -0
- package/dist/agent/turno/resumenDeTool.js.map +1 -1
- package/dist/agent/turno/rubrica.js +91 -0
- package/dist/agent/turno/rubrica.js.map +1 -0
- package/dist/agent/turno/turnoReal.js +172 -11
- package/dist/agent/turno/turnoReal.js.map +1 -1
- package/dist/cli/consola.js +63 -0
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/main.js +51 -4
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/run.js +8 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/core/agentes.js +111 -9
- package/dist/core/agentes.js.map +1 -1
- package/dist/core/esfuerzo.js +141 -0
- package/dist/core/esfuerzo.js.map +1 -0
- package/dist/core/estilos.js +78 -0
- package/dist/core/estilos.js.map +1 -0
- package/dist/core/exportacion.js +140 -0
- package/dist/core/exportacion.js.map +1 -0
- package/dist/core/hechosDelProyecto.js +87 -0
- package/dist/core/hechosDelProyecto.js.map +1 -0
- package/dist/core/logDeDispositivo.js +143 -0
- package/dist/core/logDeDispositivo.js.map +1 -0
- package/dist/core/modelos.js +32 -0
- package/dist/core/modelos.js.map +1 -1
- package/dist/core/mudanzaDeWorkspace.js +93 -0
- package/dist/core/mudanzaDeWorkspace.js.map +1 -0
- package/dist/core/planes.js +70 -0
- package/dist/core/planes.js.map +1 -0
- package/dist/core/ports.js +4 -0
- package/dist/core/ports.js.map +1 -1
- package/dist/core/rubrica.js +90 -0
- package/dist/core/rubrica.js.map +1 -0
- package/dist/core/selectorDeCarpeta.js +87 -0
- package/dist/core/selectorDeCarpeta.js.map +1 -0
- package/dist/core/settings.js +54 -5
- package/dist/core/settings.js.map +1 -1
- package/dist/core/shellDeAgente.js +45 -0
- package/dist/core/shellDeAgente.js.map +1 -1
- package/dist/core/topeAgotado.js +69 -0
- package/dist/core/topeAgotado.js.map +1 -0
- package/dist/web/servidor/arranque.js +324 -9
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/sesiones.js +30 -2
- package/dist/web/servidor/sesiones.js.map +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +55 -6
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/package.json +2 -1
- package/skills/xone-hotswap/SKILL.md +31 -9
- package/skills/xone-hotswap/scripts/xone-arrancar-android +202 -0
- package/skills/xone-hotswap/scripts/xone-captura-android +93 -0
- package/skills/xone-hotswap/scripts/xone-desplegar-android +28 -0
- package/skills/xone-hotswap/scripts/xone-hotswap +39 -9
- package/skills/xone-hotswap/scripts/xone-reiniciar-android +28 -0
- package/skills/xone-plan-builder/SKILL.md +22 -4
- package/skills/xone-spec-builder/SKILL.md +37 -7
- package/apps/web/dist/assets/index-DBZTodio.js +0 -477
package/dist/core/modelos.js
CHANGED
|
@@ -327,4 +327,36 @@ export function pideThinkingAdaptativo(proveedor, modelo) {
|
|
|
327
327
|
return false;
|
|
328
328
|
return FAMILIAS_CON_ADAPTATIVO_A_MANO.some((prefijo) => modelo.startsWith(prefijo));
|
|
329
329
|
}
|
|
330
|
+
/**
|
|
331
|
+
* ¿Este modelo ACEPTA que se le pida `thinking: {type:"adaptive"}`?
|
|
332
|
+
*
|
|
333
|
+
* Es la hermana de `pideThinkingAdaptativo` y contesta otra pregunta. Aquélla dice si hace
|
|
334
|
+
* falta pedirlo —o sea, si omitirlo significa «no pienses»—; ésta dice si se PUEDE pedir
|
|
335
|
+
* sin que sea un 400. Son distintas justo en la generación 5, que ya corre adaptativo por
|
|
336
|
+
* omisión: no hace falta pedírselo, pero admite que se le pida.
|
|
337
|
+
*
|
|
338
|
+
* Existe por un acoplamiento MEDIDO contra el validador del propio cliente
|
|
339
|
+
* (`@langchain/anthropic` 1.5.2, `validateInvocationParamCompatibility`): con un `effort`
|
|
340
|
+
* puesto, `claude-opus-5` RECHAZA la combinación si el `thinking` no va explícito —
|
|
341
|
+
* «thinking.type="disabled" is not supported for claude-opus-5 with
|
|
342
|
+
* outputConfig.effort="max"»—. O sea que pedir esfuerzo sin pedir razonamiento es una
|
|
343
|
+
* petición que ni sale de esta máquina. Y la recomendación de la casa va en la misma
|
|
344
|
+
* dirección: el esfuerzo se combina con el razonamiento adaptativo.
|
|
345
|
+
*
|
|
346
|
+
* **Opus 4.5 NO está**, aunque el validador local lo deje pasar: ese validador solo mira la
|
|
347
|
+
* forma, y el adaptativo llegó en 4.6 — mandárselo sería un 400 en el servidor, que es el
|
|
348
|
+
* único sitio donde ya no hay red que lo pare.
|
|
349
|
+
*/
|
|
350
|
+
const FAMILIAS_QUE_ACEPTAN_ADAPTATIVO = [
|
|
351
|
+
...FAMILIAS_CON_ADAPTATIVO_A_MANO,
|
|
352
|
+
"claude-opus-5",
|
|
353
|
+
"claude-sonnet-5",
|
|
354
|
+
"claude-fable",
|
|
355
|
+
"claude-mythos",
|
|
356
|
+
];
|
|
357
|
+
export function aceptaThinkingAdaptativo(proveedor, modelo) {
|
|
358
|
+
if (proveedor !== "anthropic")
|
|
359
|
+
return false;
|
|
360
|
+
return FAMILIAS_QUE_ACEPTAN_ADAPTATIVO.some((prefijo) => modelo.startsWith(prefijo));
|
|
361
|
+
}
|
|
330
362
|
//# sourceMappingURL=modelos.js.map
|
package/dist/core/modelos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../src/core/modelos.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../src/core/modelos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { rutaDeWorkspace } from "./settings.js";
|
|
3
|
+
/**
|
|
4
|
+
* El literal que vivía en MEDIO del reparto: `<base>/<entorno>/workspace/<proyecto>`.
|
|
5
|
+
*
|
|
6
|
+
* Vive aquí y no en `settings.ts` a propósito: `rutaDeWorkspace` ya no lo compone, y
|
|
7
|
+
* dejarlo allí sería una constante de producción que solo usa la mudanza. Cuando no quede
|
|
8
|
+
* nadie con el reparto viejo en disco, este fichero entero se va de una pieza.
|
|
9
|
+
*/
|
|
10
|
+
export const CARPETA_DEL_REPARTO_VIEJO = "workspace";
|
|
11
|
+
/** Un segmento que no puede salirse de su carpeta ni inventar niveles. */
|
|
12
|
+
function esSegmentoLlano(valor) {
|
|
13
|
+
return valor !== "" && valor !== "." && valor !== ".." && !/[/\\]/.test(valor);
|
|
14
|
+
}
|
|
15
|
+
function normalizar(ruta) {
|
|
16
|
+
return posix.normalize(ruta).replace(/\/+$/, "");
|
|
17
|
+
}
|
|
18
|
+
/** ¿Son la misma ruta, o una es antepasada de la otra? Por SEGMENTOS, nunca por texto. */
|
|
19
|
+
function unaCuelgaDeLaOtra(a, b) {
|
|
20
|
+
const uno = normalizar(a).split("/");
|
|
21
|
+
const otro = normalizar(b).split("/");
|
|
22
|
+
const corto = uno.length <= otro.length ? uno : otro;
|
|
23
|
+
const largo = corto === uno ? otro : uno;
|
|
24
|
+
return corto.every((seg, i) => largo[i] === seg);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Qué copias locales siguen en el reparto viejo y adónde van.
|
|
28
|
+
*
|
|
29
|
+
* **Por PROYECTO y no por entorno.** Mover la carpeta `<entorno>/workspace` entera parece
|
|
30
|
+
* más barato, pero no vale en el caso de quien ya tenía `settings.workspace` configurado:
|
|
31
|
+
* ahí el destino (`<workspace>/<entorno>`) es el PADRE del origen, y la mudanza de una
|
|
32
|
+
* pieza sería mover una carpeta encima de sí misma. Proyecto a proyecto funciona en los
|
|
33
|
+
* dos casos con un solo camino.
|
|
34
|
+
*
|
|
35
|
+
* **Un destino que ya existe NUNCA se pisa**, y se cuenta aparte en `chocadas` en vez de
|
|
36
|
+
* callarse: en esa carpeta hay una historia de git, unas sesiones y un checkpoint, y dos
|
|
37
|
+
* copias del mismo proyecto sin que nadie lo diga son peor que una mudanza que no se hizo.
|
|
38
|
+
*
|
|
39
|
+
* Nada de esto toca el disco: quien llama decide, mueve y lo cuenta.
|
|
40
|
+
*/
|
|
41
|
+
export function mudanzasPendientes(opciones) {
|
|
42
|
+
const mudanzas = [];
|
|
43
|
+
const chocadas = [];
|
|
44
|
+
for (const entorno of opciones.entornos) {
|
|
45
|
+
if (!esSegmentoLlano(entorno))
|
|
46
|
+
continue;
|
|
47
|
+
const vieja = posix.join(opciones.legado, entorno, CARPETA_DEL_REPARTO_VIEJO);
|
|
48
|
+
if (!opciones.existe(vieja))
|
|
49
|
+
continue;
|
|
50
|
+
for (const proyecto of opciones.listar(vieja)) {
|
|
51
|
+
if (!esSegmentoLlano(proyecto))
|
|
52
|
+
continue;
|
|
53
|
+
const desde = posix.join(vieja, proyecto);
|
|
54
|
+
const hacia = rutaDeWorkspace(opciones.workspace, entorno, proyecto);
|
|
55
|
+
// El degenerado: un proyecto que se llame «workspace» deja `desde` COLGANDO de
|
|
56
|
+
// `hacia` (`…/webstudio/workspace/workspace` → `…/webstudio/workspace`), o sea una
|
|
57
|
+
// carpeta que se muda encima de su propio padre. No es un choque —contarlo ahí diría
|
|
58
|
+
// que hay dos copias— : es que no hay nada que mudar.
|
|
59
|
+
if (unaCuelgaDeLaOtra(desde, hacia))
|
|
60
|
+
continue;
|
|
61
|
+
(opciones.existe(hacia) ? chocadas : mudanzas).push({ entorno, proyecto, desde, hacia });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { mudanzas, chocadas };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Una ruta absoluta ya grabada en disco, traducida al reparto de ahora — o AUSENTE si esta
|
|
68
|
+
* mudanza no la toca.
|
|
69
|
+
*
|
|
70
|
+
* Existe porque hay dos almacenes con raíces absolutas escritas: `proyecto.raiz` del índice
|
|
71
|
+
* de tareas (`~/.xonecode/tareas/indice.json`) y las claves de `settings.sinAprobacion`. Sin
|
|
72
|
+
* reescribirlas, una tarea pendiente abriría una carpeta que ya no está y una autorización
|
|
73
|
+
* de escritura sin preguntar dejaría de aplicarse en silencio — que es la dirección segura,
|
|
74
|
+
* pero es un ajuste que el usuario dio por puesto.
|
|
75
|
+
*
|
|
76
|
+
* Se compara por SEGMENTOS y no por prefijo de texto, la misma trampa que `dentroDelWorkspace`:
|
|
77
|
+
* `…/AppDemoViejo` empieza por `…/AppDemo` y no tiene nada que ver. Y ausente significa «esto
|
|
78
|
+
* no lo mudé yo», que es distinto de «no cambia»: quien llama necesita saber si tocó la
|
|
79
|
+
* entrada para decidir si reescribe el fichero.
|
|
80
|
+
*/
|
|
81
|
+
export function rutaMudada(ruta, mudanzas) {
|
|
82
|
+
const partes = normalizar(ruta).split("/");
|
|
83
|
+
for (const mudanza of mudanzas) {
|
|
84
|
+
const origen = normalizar(mudanza.desde).split("/");
|
|
85
|
+
if (partes.length < origen.length)
|
|
86
|
+
continue;
|
|
87
|
+
if (!origen.every((seg, i) => partes[i] === seg))
|
|
88
|
+
continue;
|
|
89
|
+
return posix.join(normalizar(mudanza.hacia), ...partes.slice(origen.length));
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=mudanzaDeWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mudanzaDeWorkspace.js","sourceRoot":"","sources":["../../src/core/mudanzaDeWorkspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dónde viven los PLANES, y por qué no es ninguno de los dos sitios obvios.
|
|
3
|
+
*
|
|
4
|
+
* Un plan lo escribe quien analiza y lo consume quien desarrolla, que marca ahí mismo lo que
|
|
5
|
+
* va haciendo. O sea que no es un entregable que se enseña una vez: es **estado de trabajo
|
|
6
|
+
* compartido**. Eso descarta los dos sitios que se prueban primero:
|
|
7
|
+
*
|
|
8
|
+
* - **La raíz del proyecto NO**: es la app del cliente. Lo que se escribe ahí pasa por
|
|
9
|
+
* aprobación, entra en el commit de cada turno y **sube a CloudStudio**. Un plan de
|
|
10
|
+
* desarrollo no es parte de la aplicación que el cliente instala. (Y «pongo un `.gitignore`»
|
|
11
|
+
* tampoco resuelve: un `.gitignore` es un fichero DEL PROYECTO y subiría él mismo — la misma
|
|
12
|
+
* razón por la que la basura del SO va a `info/exclude` y nunca al `.gitignore`.)
|
|
13
|
+
* - **`/artefactos/` tampoco**, aunque ahí se probó primero y funciona: un artefacto es algo
|
|
14
|
+
* que se ENSEÑA —se anuncia con su evento, se abre en un iframe— y es PLANO, así que dos
|
|
15
|
+
* planes a la vez se pisan el nombre.
|
|
16
|
+
*
|
|
17
|
+
* Queda `.xonecode/planes/`, que es donde escribe el propio harness: está fuera del índice de
|
|
18
|
+
* git (`sacarXonecodeDelIndice`), fuera del diff del turno y fuera de la subida, y vive en el
|
|
19
|
+
* repo LOCAL, así que un plan sobrevive a la sesión que lo escribió — se planifica un día y se
|
|
20
|
+
* implementa otro.
|
|
21
|
+
*
|
|
22
|
+
* El agente lo ve por la ruta VIRTUAL `/planes/`, nunca por `.xonecode`, que le está denegado
|
|
23
|
+
* entero. Es el mismo truco que `/MEMORIA_PROYECTO.md`.
|
|
24
|
+
*/
|
|
25
|
+
import { motivoDeNombreInaceptable } from "./agentes.js";
|
|
26
|
+
/** La ruta virtual. La barra final es obligatoria: `CompositeBackend` la retira al delegar. */
|
|
27
|
+
export const RUTA_PLANES = "/planes/";
|
|
28
|
+
/** Dónde caen de verdad, relativo a la raíz del proyecto. */
|
|
29
|
+
export const CARPETA_DE_PLANES = ".xonecode/planes";
|
|
30
|
+
/**
|
|
31
|
+
* **Un plan es una CARPETA, no un fichero**, porque dentro de una sesión puede haber varios y
|
|
32
|
+
* porque un plan son tres cosas que se acompañan (`PLAN.md`, `TASKS.md`, `CONTEXT.md`) más sus
|
|
33
|
+
* ADRs. Con ficheros sueltos, dos planes a la vez se pisan.
|
|
34
|
+
*/
|
|
35
|
+
export const FICHEROS_DE_UN_PLAN = ["PLAN.md", "TASKS.md", "CONTEXT.md"];
|
|
36
|
+
/**
|
|
37
|
+
* Por qué un nombre de plan no vale, o `undefined` si vale.
|
|
38
|
+
*
|
|
39
|
+
* **La MISMA regla que la de un subagente o una skill**, y a propósito: el nombre se convierte
|
|
40
|
+
* en un segmento de ruta, y tres reglas distintas para lo mismo son tres sitios donde discrepar
|
|
41
|
+
* sobre qué es un nombre seguro.
|
|
42
|
+
*/
|
|
43
|
+
export function motivoDePlanInaceptable(nombre) {
|
|
44
|
+
return motivoDeNombreInaceptable(nombre);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* ¿Es una ruta de plan bien formada? Lista BLANCA de forma, no un `startsWith`.
|
|
48
|
+
*
|
|
49
|
+
* Tiene que ser `/planes/<slug>/<algo>`: con el slug validado y sin salirse por un `..`, un
|
|
50
|
+
* `\` ni una barra de más. Es la misma clase de criba que `esRutaDeArtefacto`, y existe por lo
|
|
51
|
+
* mismo: lo que el modelo escribe es texto, y de ahí sale una ruta del disco.
|
|
52
|
+
*/
|
|
53
|
+
export function esRutaDePlan(ruta) {
|
|
54
|
+
if (ruta === undefined || !ruta.startsWith(RUTA_PLANES))
|
|
55
|
+
return false;
|
|
56
|
+
const resto = ruta.slice(RUTA_PLANES.length);
|
|
57
|
+
const partes = resto.split("/");
|
|
58
|
+
if (partes.length < 2)
|
|
59
|
+
return false;
|
|
60
|
+
const [plan, ...dentro] = partes;
|
|
61
|
+
if (plan === undefined || motivoDePlanInaceptable(plan) !== undefined)
|
|
62
|
+
return false;
|
|
63
|
+
// Ningún segmento vacío, ni `.`/`..`, ni nada con separadores raros o el byte nulo.
|
|
64
|
+
return dentro.every((s) => s !== "" && s !== "." && s !== ".." && !/[\\\0]/.test(s));
|
|
65
|
+
}
|
|
66
|
+
/** La carpeta de un plan, tal como la ve el agente. */
|
|
67
|
+
export function rutaDelPlan(nombre) {
|
|
68
|
+
return `${RUTA_PLANES}${nombre}/`;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=planes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planes.js","sourceRoot":"","sources":["../../src/core/planes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACpF,oFAAoF;IACpF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,CAAC;AACpC,CAAC"}
|
package/dist/core/ports.js
CHANGED
|
@@ -249,6 +249,10 @@ export class CloudStudioEnMemoria {
|
|
|
249
249
|
}
|
|
250
250
|
async contexto() {
|
|
251
251
|
this.exigirAbierto();
|
|
252
|
+
// Después de `exigirAbierto`: el fallo medido ocurre con el proyecto ABIERTO, y
|
|
253
|
+
// ponerlo antes convertiría este doble en otro camino para «no hay proyecto».
|
|
254
|
+
if (this.opciones.contextoFalla !== undefined)
|
|
255
|
+
throw new Error(this.opciones.contextoFalla);
|
|
252
256
|
return { proyecto: this.abierto, rama: this.ramaActual };
|
|
253
257
|
}
|
|
254
258
|
async descargarZip() {
|
package/dist/core/ports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La rúbrica: qué significa «hecho» en ESTE encargo, y qué se hace cuando no lo está.
|
|
3
|
+
*
|
|
4
|
+
* Portado del `RubricMiddleware` de deepagents, que existe en su SDK de **Python** y no en el
|
|
5
|
+
* de JS. El diseño es suyo y es bueno: en la parada natural del agente —el modelo contesta sin
|
|
6
|
+
* pedir más tools— un CALIFICADOR juzga lo hecho contra unos criterios, y si dice que falta
|
|
7
|
+
* algo su comentario vuelve como mensaje y el bucle sigue, con tope de vueltas.
|
|
8
|
+
*
|
|
9
|
+
* ## Qué es esto y qué NO es
|
|
10
|
+
*
|
|
11
|
+
* **No sustituye al verificador** (`turnoReal.ts#conVerificacion`), lo complementa, y la
|
|
12
|
+
* frontera es lo que cada uno puede saber. El simulador contesta lo OBJETIVO —esto parsea, este
|
|
13
|
+
* atributo existe, este JavaScript no revienta— y por eso su veredicto se puede creer. Un
|
|
14
|
+
* calificador contesta lo que el simulador no ve: si el título se lee entero, si se hizo lo que
|
|
15
|
+
* se pidió, si se cambió algo que nadie pidió. Medido hoy: un especialista cambió
|
|
16
|
+
* `editable="false"` por `locked="true"` dentro de un arreglo visual, y ninguna comprobación
|
|
17
|
+
* estática tiene nada que decir de eso.
|
|
18
|
+
*
|
|
19
|
+
* **Y por eso un rojo suyo no es el rojo del verificador.** El del simulador es una medida; éste
|
|
20
|
+
* es la opinión de un modelo sobre un transcript. Se dice con esas palabras donde se enseñe.
|
|
21
|
+
*
|
|
22
|
+
* ## Dos cosas del original que NO se copian
|
|
23
|
+
*
|
|
24
|
+
* - **Terminar sin satisfacer no puede ser mudo.** Ellos documentan que con `failed`,
|
|
25
|
+
* `max_iterations_reached` o `grader_error` no tocan los mensajes, así que la última respuesta
|
|
26
|
+
* es la del modelo y quien llama tiene que ir a mirar un campo privado del estado. Eso es el
|
|
27
|
+
* mismo fallo que el tope de llamadas tenía aquí: trabajo que acaba a medias sin que nadie se
|
|
28
|
+
* entere. Aquí el estado no satisfecho SE DICE.
|
|
29
|
+
* - **El calificador entra por un PUERTO**, no como un modelo construido dentro. Así esto se
|
|
30
|
+
* prueba sin red ni clave, que es el invariante que sostiene el diseño de este repo.
|
|
31
|
+
*
|
|
32
|
+
* Puro: aquí está la política. Quién llama al modelo y quién monta el middleware es de `agent/`.
|
|
33
|
+
*/
|
|
34
|
+
/** Un estado terminal cierra el bucle; `necesita-revision` es el único que lo continúa. */
|
|
35
|
+
export function esTerminal(estado) {
|
|
36
|
+
return estado !== "necesita-revision";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Cuántas vueltas se le dan.
|
|
40
|
+
*
|
|
41
|
+
* Tres es el valor del original. **Aquí importa más que allí**: cada vuelta puede traer
|
|
42
|
+
* escrituras, y cada escritura pasa por una aprobación — así que un tope alto no es solo gasto,
|
|
43
|
+
* son paradas delante de una persona. Y en una tarea de fondo no hay nadie que frene el bucle,
|
|
44
|
+
* que es el mismo argumento por el que existen `TOPE_REPARACIONES` y el tope de tandas.
|
|
45
|
+
*/
|
|
46
|
+
export const TOPE_DE_VUELTAS = 3;
|
|
47
|
+
/**
|
|
48
|
+
* El mensaje con que vuelve el trabajo al agente.
|
|
49
|
+
*
|
|
50
|
+
* Va con voz del HARNESS y no del usuario: quien lo lee tiene que saber que esto no es alguien
|
|
51
|
+
* pidiendo otra cosa, es una comprobación diciendo que lo pedido no está. Si se disfrazara de
|
|
52
|
+
* petición nueva, el agente podría tomarlo por un cambio de encargo y empezar otra cosa.
|
|
53
|
+
*
|
|
54
|
+
* Y dice de qué vuelta va: sin eso, tres mensajes iguales seguidos se leen como un bucle y el
|
|
55
|
+
* modelo no sabe cuánto margen le queda.
|
|
56
|
+
*/
|
|
57
|
+
export function mensajeDeRevision(comentario, vuelta, tope) {
|
|
58
|
+
return [
|
|
59
|
+
`[harness] Revisión ${vuelta} de ${tope}: lo que se pidió NO está hecho del todo.`,
|
|
60
|
+
"",
|
|
61
|
+
comentario.trim(),
|
|
62
|
+
"",
|
|
63
|
+
"Arregla eso y nada más. No es un encargo nuevo ni un cambio de opinión: es la misma tarea,",
|
|
64
|
+
"que todavía no cumple. Si crees que ya está y la revisión se equivoca, dilo y explica por qué",
|
|
65
|
+
"en vez de volver a cambiar lo mismo.",
|
|
66
|
+
].join("\n");
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Lo que se le dice a quien mira cuando el bucle acaba SIN satisfacer.
|
|
70
|
+
*
|
|
71
|
+
* Existe porque el original no lo tiene: allí el estado no satisfecho vive en un campo privado
|
|
72
|
+
* y la última respuesta sigue siendo la del modelo, que puede estar afirmando que terminó. Un
|
|
73
|
+
* trabajo que no cumple y lo dice como si cumpliera es peor que uno que falla.
|
|
74
|
+
*/
|
|
75
|
+
export function avisoDeNoSatisfecho(estado, comentario) {
|
|
76
|
+
if (estado === "satisfecho" || estado === "necesita-revision")
|
|
77
|
+
return undefined;
|
|
78
|
+
const porQue = estado === "tope-de-vueltas"
|
|
79
|
+
? `se agotaron las ${TOPE_DE_VUELTAS} revisiones y seguía sin cumplir`
|
|
80
|
+
: estado === "fallido"
|
|
81
|
+
? "la rúbrica no se pudo evaluar contra este trabajo"
|
|
82
|
+
: "la revisión no llegó a dar veredicto (fallo del entorno, no del trabajo)";
|
|
83
|
+
const detalle = comentario?.trim();
|
|
84
|
+
return [
|
|
85
|
+
`⚠ revisión NO satisfecha: ${porQue}.`,
|
|
86
|
+
...(detalle === undefined || detalle === "" ? [] : [` ${detalle}`]),
|
|
87
|
+
" Es la opinión de un modelo sobre lo hecho, no una medida como la del verificador.",
|
|
88
|
+
].join("\n");
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=rubrica.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubrica.js","sourceRoot":"","sources":["../../src/core/rubrica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAcH,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,OAAO,MAAM,KAAK,mBAAmB,CAAC;AACxC,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,MAAc,EAAE,IAAY;IAChF,OAAO;QACL,sBAAsB,MAAM,OAAO,IAAI,2CAA2C;QAClF,EAAE;QACF,UAAU,CAAC,IAAI,EAAE;QACjB,EAAE;QACF,4FAA4F;QAC5F,+FAA+F;QAC/F,sCAAsC;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAuB,EAAE,UAAmB;IAC9E,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAChF,MAAM,MAAM,GACV,MAAM,KAAK,iBAAiB;QAC1B,CAAC,CAAC,mBAAmB,eAAe,kCAAkC;QACtE,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,mDAAmD;YACrD,CAAC,CAAC,0EAA0E,CAAC;IACnF,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,OAAO;QACL,6BAA6B,MAAM,GAAG;QACtC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QACpE,qFAAqF;KACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El selector de carpeta NATIVO: qué comando lo abre en cada sistema y cómo se lee su
|
|
3
|
+
* respuesta.
|
|
4
|
+
*
|
|
5
|
+
* **Por qué no lo pone el navegador, que es lo primero que uno intenta.** Una página no
|
|
6
|
+
* puede devolver una ruta absoluta y no es un descuido de nadie: `showDirectoryPicker()`
|
|
7
|
+
* entrega un handle del que solo se puede leer el NOMBRE de la carpeta, y un
|
|
8
|
+
* `<input webkitdirectory>` entrega rutas RELATIVAS a lo elegido. Las dos cosas son
|
|
9
|
+
* deliberadas —una web no tiene por qué saber cómo está montado tu disco— y las dos son
|
|
10
|
+
* justo lo que aquí no sirve: `settings.workspace` necesita la ruta entera.
|
|
11
|
+
*
|
|
12
|
+
* **Por qué tampoco un explorador propio servido por nosotros.** Se puede: el servidor lista
|
|
13
|
+
* carpetas y el cliente navega. El precio es que el ÁRBOL DE CARPETAS de la máquina empieza
|
|
14
|
+
* a viajar por el cable, y eso es exactamente lo que `sinRutas` evita — una ruta del
|
|
15
|
+
* workspace es la excepción declarada; el mapa del disco entero no lo es, y sería una
|
|
16
|
+
* excepción mucho más ancha para el mismo resultado.
|
|
17
|
+
*
|
|
18
|
+
* **Así que lo abre el sistema donde corre la consola.** Solo cruza el cable la carpeta que
|
|
19
|
+
* la persona elige, que es la misma que iba a teclear. El precio declarado es que el diálogo
|
|
20
|
+
* sale en ESA máquina: con la consola por un túnel, el botón no sirve — por eso el campo de
|
|
21
|
+
* texto sigue siendo el camino principal y esto es un atajo, nunca el único.
|
|
22
|
+
*
|
|
23
|
+
* Esta parte es pura: compone el comando y lee su salida. Lanzarlo es de
|
|
24
|
+
* `agent/config/selectorEnMaquina.ts`.
|
|
25
|
+
*/
|
|
26
|
+
/** Lo que tarda un diálogo en contestar lo pone una persona, así que el tope es largo: solo
|
|
27
|
+
* existe para que un diálogo que nadie cierra no deje un proceso vivo para siempre. */
|
|
28
|
+
export const TOPE_DEL_SELECTOR_MS = 5 * 60 * 1000;
|
|
29
|
+
/**
|
|
30
|
+
* El comando que abre el selector, o AUSENTE si este sistema no tiene ninguno conocido.
|
|
31
|
+
*
|
|
32
|
+
* Ausente no es un fallo: es «aquí no hay selector», y entonces no se ofrece el botón. Un
|
|
33
|
+
* botón que no hace nada es peor que no tenerlo, y el campo de texto ya resuelve el caso.
|
|
34
|
+
*
|
|
35
|
+
* `desde` es dónde se abre el diálogo — la carpeta que hay puesta ahora, para no empezar en
|
|
36
|
+
* un sitio cualquiera. Se pasa como argumento SEPARADO, nunca interpolado en el guion de
|
|
37
|
+
* AppleScript: ahí dentro una comilla en un nombre de carpeta cerraría la cadena.
|
|
38
|
+
*/
|
|
39
|
+
export function comandoDelSelector(plataforma, desde) {
|
|
40
|
+
if (plataforma === "darwin") {
|
|
41
|
+
// `choose folder` con la ubicación por argumento (`argv of me`), y no pegada al guion.
|
|
42
|
+
// Un `POSIX file` que no existe hace fallar el diálogo entero, así que el guion cae a la
|
|
43
|
+
// casa cuando no se le da ninguna o la que se le da no vale.
|
|
44
|
+
const guion = [
|
|
45
|
+
"on run argumentos",
|
|
46
|
+
" set destino to item 1 of argumentos",
|
|
47
|
+
" try",
|
|
48
|
+
' set inicio to POSIX file destino as alias',
|
|
49
|
+
" on error",
|
|
50
|
+
" set inicio to path to home folder",
|
|
51
|
+
" end try",
|
|
52
|
+
' set elegida to choose folder with prompt "Dónde se bajan los proyectos de xonecode" default location inicio',
|
|
53
|
+
" return POSIX path of elegida",
|
|
54
|
+
"end run",
|
|
55
|
+
].join("\n");
|
|
56
|
+
return { programa: "osascript", argumentos: ["-e", guion, desde ?? ""] };
|
|
57
|
+
}
|
|
58
|
+
if (plataforma === "linux") {
|
|
59
|
+
return {
|
|
60
|
+
programa: "zenity",
|
|
61
|
+
argumentos: [
|
|
62
|
+
"--file-selection",
|
|
63
|
+
"--directory",
|
|
64
|
+
"--title=Dónde se bajan los proyectos de xonecode",
|
|
65
|
+
...(desde === undefined ? [] : [`--filename=${desde.replace(/\/*$/, "/")}`]),
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* La carpeta elegida, leída de lo que escupió el comando — o AUSENTE si no se eligió ninguna.
|
|
73
|
+
*
|
|
74
|
+
* **Cancelar no es un fallo y se cuenta igual que no elegir.** `osascript` sale con código 1
|
|
75
|
+
* y `zenity` con 1 cuando la persona cierra el diálogo, así que quien llama no puede
|
|
76
|
+
* distinguir un «no, gracias» de una avería por el código; lo que sí distingue es que no hay
|
|
77
|
+
* ruta, y con eso basta: el campo se queda como estaba.
|
|
78
|
+
*
|
|
79
|
+
* Se recorta el salto de línea final, que es del terminal y no del dato, y se exige que
|
|
80
|
+
* empiece por `/`: cualquier otra cosa que salga por ahí no es una carpeta y no se cuela
|
|
81
|
+
* hasta el validador disfrazada de ruta.
|
|
82
|
+
*/
|
|
83
|
+
export function carpetaDeLaSalida(salida) {
|
|
84
|
+
const limpia = salida.trim().replace(/\/+$/, "");
|
|
85
|
+
return limpia.startsWith("/") ? limpia : undefined;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=selectorDeCarpeta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectorDeCarpeta.js","sourceRoot":"","sources":["../../src/core/selectorDeCarpeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;wFACwF;AACxF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAOlD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,KAAc;IACnE,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,uFAAuF;QACvF,yFAAyF;QACzF,6DAA6D;QAC7D,MAAM,KAAK,GAAG;YACZ,mBAAmB;YACnB,uCAAuC;YACvC,OAAO;YACP,+CAA+C;YAC/C,YAAY;YACZ,uCAAuC;YACvC,WAAW;YACX,+GAA+G;YAC/G,gCAAgC;YAChC,SAAS;SACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE;gBACV,kBAAkB;gBAClB,aAAa;gBACb,kDAAkD;gBAClD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;aAC7E;SACF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC"}
|
package/dist/core/settings.js
CHANGED
|
@@ -216,16 +216,27 @@ export function segmentoSeguro(valor, que) {
|
|
|
216
216
|
return valor;
|
|
217
217
|
}
|
|
218
218
|
/**
|
|
219
|
-
* Dónde queda la copia local de un proyecto
|
|
219
|
+
* Dónde queda la copia local de un proyecto: `<workspace>/<entorno>/<proyecto>`.
|
|
220
220
|
*
|
|
221
|
-
*
|
|
222
|
-
* lo que hace predecible encontrar una copia sin consultar un índice.
|
|
221
|
+
* El WORKSPACE es configurable (`settings.workspace`); la disposición de dentro NO, porque
|
|
222
|
+
* es lo que hace predecible encontrar una copia sin consultar un índice.
|
|
223
|
+
*
|
|
224
|
+
* **El literal `workspace` vivía aquí, en MEDIO** (`<base>/<entorno>/workspace/<proyecto>`),
|
|
225
|
+
* y se ha mudado a la omisión de la base (`~/.xonecode/workspace`). Dos motivos medidos:
|
|
226
|
+
* con la base en `~/.xonecode`, los ids de los entornos quedaban de HERMANOS de `agentes/`,
|
|
227
|
+
* `skills/`, `tareas/` y `auth.json` —la casa del harness mezclada con el trabajo—; y quien
|
|
228
|
+
* eligiera una carpeta suya se encontraba un nivel `workspace/` que no había pedido. Con el
|
|
229
|
+
* literal en la base, lo que se configura ES el workspace.
|
|
230
|
+
*
|
|
231
|
+
* **El segmento del ENTORNO se queda, y no es decoración**: el mismo nombre de proyecto
|
|
232
|
+
* existe a la vez en dos entornos, y sin ese nivel serían la misma carpeta (ver
|
|
233
|
+
* `Wizard.tsx`, que ya explica por qué un on-premise necesita id propio).
|
|
223
234
|
*/
|
|
224
235
|
/**
|
|
225
236
|
* ¿Esa raíz es una copia que creó xonecode, o una carpeta del usuario?
|
|
226
237
|
*
|
|
227
238
|
* De esto depende si el harness puede COMMITEAR solo al cerrar cada turno. En
|
|
228
|
-
* `<
|
|
239
|
+
* `<workspace>/<entorno>/<proyecto>` la carpeta la creó él y es suya; en la que abrió
|
|
229
240
|
* una persona —un proyecto offline, o `./bin/xonecode` dentro de su propio repo— un commit
|
|
230
241
|
* por turno sería ensuciarle el historial cada vez que habla con el agente.
|
|
231
242
|
*
|
|
@@ -240,7 +251,45 @@ export function dentroDelWorkspace(raiz, base) {
|
|
|
240
251
|
const fuera = normal(base);
|
|
241
252
|
return dentro.length > fuera.length && fuera.every((seg, i) => dentro[i] === seg);
|
|
242
253
|
}
|
|
254
|
+
/**
|
|
255
|
+
* Un `~/…` tecleado, resuelto contra la casa. Solo `~` y `~/…`: un `~otro` es la casa de
|
|
256
|
+
* OTRA persona en la sintaxis del shell, y aquí no se resuelve — se deja tal cual y se
|
|
257
|
+
* rechaza después por no ser absoluta.
|
|
258
|
+
*
|
|
259
|
+
* Es una comodidad de ENTRADA y nada más. **Lo que se enseña y lo que se guarda es la ruta
|
|
260
|
+
* ENTERA**: se probó a mandarla abreviada por el cable, para que el caso normal no llevara
|
|
261
|
+
* el nombre de la cuenta del sistema, y no se sostiene — la cabecera de esa misma consola ya
|
|
262
|
+
* saluda por el nombre del usuario, así que el `~` no tapaba nada que no estuviera ya, y a
|
|
263
|
+
* cambio dejaba en pantalla una ruta que no se puede comprobar de un vistazo, que es justo
|
|
264
|
+
* para lo que ese campo existe. `casa` entra por parámetro: este módulo es puro.
|
|
265
|
+
*/
|
|
266
|
+
export function expandirConCasa(ruta, casa) {
|
|
267
|
+
const limpio = ruta.trim();
|
|
268
|
+
if (limpio === "~")
|
|
269
|
+
return casa;
|
|
270
|
+
return limpio.startsWith("~/") ? posix.join(casa, limpio.slice(2)) : limpio;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* ¿Vale eso como workspace? Ausente = sí.
|
|
274
|
+
*
|
|
275
|
+
* Se comprueba sobre la ruta ya EXPANDIDA. Tres noes, y ninguno es de estilo: vacío no es
|
|
276
|
+
* una elección, una ruta relativa dependería del directorio desde el que se arrancó la
|
|
277
|
+
* consola —que no es el proyecto ni nada estable— y la raíz del disco convertiría cada id de
|
|
278
|
+
* entorno en una carpeta de primer nivel del sistema.
|
|
279
|
+
*/
|
|
280
|
+
export function motivoDeWorkspaceInaceptable(ruta) {
|
|
281
|
+
const limpio = ruta.trim();
|
|
282
|
+
if (limpio === "")
|
|
283
|
+
return "escribe una carpeta: en blanco no es una elección";
|
|
284
|
+
if (!posix.isAbsolute(limpio)) {
|
|
285
|
+
return "tiene que ser una ruta absoluta, que empiece por «/» o por «~/»";
|
|
286
|
+
}
|
|
287
|
+
if (posix.normalize(limpio).replace(/\/+$/, "") === "") {
|
|
288
|
+
return "la raíz del disco no: ahí cada entorno sería una carpeta de primer nivel del sistema";
|
|
289
|
+
}
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
243
292
|
export function rutaDeWorkspace(base, entorno, proyecto) {
|
|
244
|
-
return posix.join(base, segmentoSeguro(entorno, "id de entorno"),
|
|
293
|
+
return posix.join(base, segmentoSeguro(entorno, "id de entorno"), segmentoSeguro(proyecto, "nombre de proyecto"));
|
|
245
294
|
}
|
|
246
295
|
//# sourceMappingURL=settings.js.map
|
|
@@ -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;AAsBD;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"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"}
|