xonecode 0.8.25 → 0.8.26
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/dist/agent/dispositivos/juezVisual.js +88 -4
- package/dist/agent/dispositivos/juezVisual.js.map +1 -1
- package/dist/agent/grafo/criticaVisual.js +134 -24
- package/dist/agent/grafo/criticaVisual.js.map +1 -1
- package/dist/agent/grafo/xoneAgent.js +1 -1
- package/dist/agent/grafo/xoneAgent.js.map +1 -1
- package/dist/agent/sesiones/checkpointer.js +183 -1
- package/dist/agent/sesiones/checkpointer.js.map +1 -1
- package/dist/cli/main.js +9 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/podar.js +112 -0
- package/dist/cli/podar.js.map +1 -0
- package/dist/core/artefactos.js +18 -0
- package/dist/core/artefactos.js.map +1 -1
- package/dist/core/podaDeCheckpoint.js +74 -0
- package/dist/core/podaDeCheckpoint.js.map +1 -0
- package/dist/web/servidor/arranque.js +26 -1
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +22 -0
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/package.json +1 -1
|
@@ -57,17 +57,82 @@ export const PROMPT_VISUAL = [
|
|
|
57
57
|
"",
|
|
58
58
|
'Contesta SOLO este JSON: {"veredicto":"verde"|"rojo","hallazgos":["lo que se ve", …],"necesito":["Coleccion", …]}',
|
|
59
59
|
].join("\n");
|
|
60
|
+
/**
|
|
61
|
+
* Lo que se le pide CUANDO hay maqueta delante, y existe por una medida.
|
|
62
|
+
*
|
|
63
|
+
* **El modelo ve las imágenes de sobra; lo que decide qué ve es qué se le pide describir.**
|
|
64
|
+
* Sobre la calculadora de MyAllXOne el crítico acertó que una captura era el login y no la
|
|
65
|
+
* pantalla pedida, y leyó los rótulos `AP_EXPRESION`/`AP_RESULTADO` cortados contra el borde.
|
|
66
|
+
* Luego dio VERDE sobre una pantalla cuyas teclas eran rectángulos donde la maqueta tenía
|
|
67
|
+
* píldoras y cuyo resultado era 1,4 veces la expresión donde la maqueta pedía 2,7. No falló:
|
|
68
|
+
* `PROMPT_VISUAL` le dice literalmente que NO opine de la paleta ni de los gustos, y la
|
|
69
|
+
* fidelidad cae entera en ese conjunto excluido. La prueba de que era la pregunta y no la
|
|
70
|
+
* vista: el orquestador llegó a escribirle «las teclas llevan esquinas redondeadas (radio
|
|
71
|
+
* alto)» y el crítico no protestó, porque no se le pidió comparar.
|
|
72
|
+
*
|
|
73
|
+
* Tres cosas que no son de forma:
|
|
74
|
+
*
|
|
75
|
+
* - **Se nombra QUÉ comparar** —proporciones, jerarquía de tamaños, forma y alineación— en
|
|
76
|
+
* vez de pedir «¿se parecen?». Una pregunta abierta devuelve impresiones; ésta devuelve
|
|
77
|
+
* sitios.
|
|
78
|
+
* - **El COLOR se compara, el GUSTO no.** «El botón es coral donde la maqueta lo pone gris»
|
|
79
|
+
* es un hecho comprobable contra una imagen que está delante; «la paleta es fría» sigue
|
|
80
|
+
* siendo una opinión y sigue fuera. Sin referencia no se puede distinguir, y por eso allí
|
|
81
|
+
* se excluyen los dos.
|
|
82
|
+
* - **Se conserva «no diagnostiques la causa»**, que está medido seis veces: describe un
|
|
83
|
+
* texto CORTADO como «girado 180°». Acierta DÓNDE y falla en el PORQUÉ, y eso no cambia
|
|
84
|
+
* porque haya una maqueta al lado.
|
|
85
|
+
*
|
|
86
|
+
* Y se conserva que una diferencia deliberada no es un defecto: una plataforma no da todo lo
|
|
87
|
+
* que da un navegador, así que lo que se pide es lo que SE VE distinto, no un veredicto de
|
|
88
|
+
* si estuvo bien decidido.
|
|
89
|
+
*/
|
|
90
|
+
export const PROMPT_VISUAL_CON_REFERENCIA = [
|
|
91
|
+
"Eres un revisor VISUAL de la pantalla de una app móvil. Te doy DOS imágenes:",
|
|
92
|
+
"1) la MAQUETA: cómo tendría que verse.",
|
|
93
|
+
"2) la CAPTURA del aparato: cómo se ve de verdad.",
|
|
94
|
+
"",
|
|
95
|
+
"Di en qué se DIFERENCIAN, sin diagnosticar: describe lo que se ve, no la causa ni cómo",
|
|
96
|
+
"arreglarlo. Quien lo lea tiene el código delante y tú no.",
|
|
97
|
+
"",
|
|
98
|
+
"Compara, y nombra el control concreto en cada diferencia:",
|
|
99
|
+
"- FORMA: esquinas (redondeadas, en píldora, en círculo o rectas), bordes, sombras.",
|
|
100
|
+
"- TAMAÑOS Y JERARQUÍA: qué es más grande que qué, y cuánto. Si en la maqueta un texto es",
|
|
101
|
+
" el doble que otro y en la captura son casi iguales, eso es una diferencia.",
|
|
102
|
+
"- COLOR: solo comparado con la maqueta —«es gris donde la maqueta lo pone coral»—. NO",
|
|
103
|
+
" opines de si la paleta te gusta.",
|
|
104
|
+
"- COLOCACIÓN: alineación, márgenes, huecos, orden de los elementos, qué falta y qué sobra.",
|
|
105
|
+
"- Y lo de siempre: texto cortado, ilegible, solapado o fuera de la pantalla.",
|
|
106
|
+
"",
|
|
107
|
+
"No toda diferencia es un error: una app nativa no puede dar todo lo que da un navegador.",
|
|
108
|
+
"Di lo que VES distinto y deja que lo valore quien lee.",
|
|
109
|
+
"",
|
|
110
|
+
"Si no ves ninguna diferencia que merezca contarse, dilo con la lista vacía.",
|
|
111
|
+
"",
|
|
112
|
+
"Si para dictaminar necesitas ver OTRA pantalla, pídela en `necesito` por el NOMBRE de su",
|
|
113
|
+
"colección y nada más (por ejemplo «Productos»), no con una frase. Alguien irá a por ella.",
|
|
114
|
+
"Si con lo que tienes te basta, déjalo vacío.",
|
|
115
|
+
"",
|
|
116
|
+
'Contesta SOLO este JSON: {"veredicto":"verde"|"rojo","hallazgos":["lo que se ve", …],"necesito":["Coleccion", …]}',
|
|
117
|
+
].join("\n");
|
|
60
118
|
/**
|
|
61
119
|
* Le enseña la captura al modelo y devuelve su veredicto.
|
|
62
120
|
*
|
|
63
121
|
* `invocar` entra por parámetro, así que `npm test` no le pregunta a ningún modelo — el mismo
|
|
64
122
|
* molde que `JuezDeTareaPort`.
|
|
65
123
|
*/
|
|
66
|
-
export async function juzgarPantalla(imagen, contexto, invocar
|
|
67
|
-
|
|
124
|
+
export async function juzgarPantalla(imagen, contexto, invocar,
|
|
125
|
+
/**
|
|
126
|
+
* La maqueta, si la hay. **Cuarto parámetro y opcional**, así los dos llamadores de
|
|
127
|
+
* `cli/` no cambian: lo que hace un `xonecode` de diagnóstico es mirar una pantalla, no
|
|
128
|
+
* compararla contra nada.
|
|
129
|
+
*/
|
|
130
|
+
referencia) {
|
|
131
|
+
const base = referencia === undefined ? PROMPT_VISUAL : PROMPT_VISUAL_CON_REFERENCIA;
|
|
132
|
+
const prompt = `${base}\n\nLa captura es de la pantalla «${contexto.pantalla}».`;
|
|
68
133
|
let texto;
|
|
69
134
|
try {
|
|
70
|
-
texto = await invocar(PAPEL_DEL_JUEZ_VISUAL, prompt, imagen);
|
|
135
|
+
texto = await invocar(PAPEL_DEL_JUEZ_VISUAL, prompt, imagen, referencia);
|
|
71
136
|
}
|
|
72
137
|
catch (error) {
|
|
73
138
|
throw new ErrorDelJuezVisual(error instanceof Error ? error.message : String(error));
|
|
@@ -116,7 +181,7 @@ export async function juzgarPantalla(imagen, contexto, invocar) {
|
|
|
116
181
|
* el cuerpo remoto y con él cabeceras y claves redactadas.
|
|
117
182
|
*/
|
|
118
183
|
export function invocarVisualConModelos(modelos) {
|
|
119
|
-
return async (papel, prompt, imagen) => {
|
|
184
|
+
return async (papel, prompt, imagen, referencia) => {
|
|
120
185
|
let modelo;
|
|
121
186
|
try {
|
|
122
187
|
modelo = modelos.paraPapel(papel);
|
|
@@ -146,10 +211,29 @@ export function invocarVisualConModelos(modelos) {
|
|
|
146
211
|
* clase de fuga que un argumento de tool en un evento. Lo que la persona tiene que
|
|
147
212
|
* leer es lo que el harness decide contar con ese veredicto, no el JSON.
|
|
148
213
|
*/
|
|
214
|
+
/**
|
|
215
|
+
* **Cada imagen va DETRÁS de la línea que dice cuál es.** Con dos adjuntas y el prompt
|
|
216
|
+
* describiéndolas arriba, cuál es la maqueta y cuál el aparato dependería del orden en
|
|
217
|
+
* que el proveedor las numere — y eso no es un contrato, es una suposición. Una
|
|
218
|
+
* etiqueta pegada a cada una lo vuelve un dato. Si se invirtieran, el crítico contaría
|
|
219
|
+
* las diferencias al revés y se leerían igual de bien: es el fallo mudo de siempre.
|
|
220
|
+
*
|
|
221
|
+
* El orden es el del prompt: primero la MAQUETA, después la CAPTURA.
|
|
222
|
+
*/
|
|
149
223
|
const respuesta = await modelo.invoke([
|
|
150
224
|
new HumanMessage({
|
|
151
225
|
content: [
|
|
152
226
|
{ type: "text", text: prompt },
|
|
227
|
+
...(referencia === undefined
|
|
228
|
+
? []
|
|
229
|
+
: [
|
|
230
|
+
{ type: "text", text: "MAQUETA (cómo tendría que verse):" },
|
|
231
|
+
{
|
|
232
|
+
type: "image_url",
|
|
233
|
+
image_url: { url: `data:${referencia.mime};base64,${referencia.base64}` },
|
|
234
|
+
},
|
|
235
|
+
{ type: "text", text: "CAPTURA del aparato (cómo se ve de verdad):" },
|
|
236
|
+
]),
|
|
153
237
|
{ type: "image_url", image_url: { url: `data:${imagen.mime};base64,${imagen.base64}` } },
|
|
154
238
|
],
|
|
155
239
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"juezVisual.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/juezVisual.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAU,SAAS,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAEtD,qEAAqE;AACrE,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,MAAc;QACxB,KAAK,CAAC,kDAAkD,qBAAqB,OAAO,MAAM,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"juezVisual.js","sourceRoot":"","sources":["../../../src/agent/dispositivos/juezVisual.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tool } from "@langchain/core/tools";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { esRutaDeArtefacto, mimeDeArtefacto, nombreDeArtefacto } from "../../core/artefactos.js";
|
|
3
|
+
import { esRutaDeArtefacto, mimeDeArtefacto, nombreDeArtefacto, rutaRelativaDeArtefacto, } from "../../core/artefactos.js";
|
|
4
4
|
import { juzgarPantalla, TOPE_DE_PETICIONES, } from "../dispositivos/juezVisual.js";
|
|
5
5
|
/**
|
|
6
6
|
* `xone_critica_visual`: enseñarle una captura al crítico y traer su veredicto.
|
|
@@ -35,39 +35,135 @@ const Entrada = z.object({
|
|
|
35
35
|
pantalla: z
|
|
36
36
|
.string()
|
|
37
37
|
.describe("De qué pantalla o colección es la captura, para que el crítico sepa qué mira"),
|
|
38
|
+
/**
|
|
39
|
+
* La MAQUETA, y su ausencia significa algo — por eso lo dice el `describe`.
|
|
40
|
+
*
|
|
41
|
+
* Sin ella el crítico solo busca ROTURAS y no dice nada de si la pantalla se parece a lo
|
|
42
|
+
* que se pidió. Medido: dio verde sobre una calculadora cuyas teclas eran rectángulos donde
|
|
43
|
+
* la maqueta tenía píldoras, y el verde se leyó como «está bien». Un parámetro que no dice
|
|
44
|
+
* qué pasa cuando falta deja ese malentendido intacto.
|
|
45
|
+
*/
|
|
46
|
+
referencia: z
|
|
47
|
+
.string()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("OPCIONAL. La ruta virtual bajo /artefactos/ de la MAQUETA o diseño de referencia. " +
|
|
50
|
+
"Pásala SIEMPRE que el encargo traiga un diseño: con ella comparo la captura contra " +
|
|
51
|
+
"la maqueta (forma, tamaños, colocación). SIN ella solo busco roturas y NO digo nada " +
|
|
52
|
+
"sobre si se parece al diseño."),
|
|
38
53
|
});
|
|
54
|
+
/**
|
|
55
|
+
* Qué es esta ruta, o el motivo en palabras. **Comprueba y NO lee.**
|
|
56
|
+
*
|
|
57
|
+
* Separada de la lectura a propósito: con dos imágenes en juego, el orden importa. Si se
|
|
58
|
+
* comprobara y abriera cada una por turno, una referencia con la ruta mal escrita se
|
|
59
|
+
* descubriría DESPUÉS de haber leído la captura — y lo que la guarda promete es que no se
|
|
60
|
+
* abre nada hasta que todo lo que se va a abrir está comprobado. Es lo mismo que exige el
|
|
61
|
+
* test de siempre («no se lee NADA antes de comprobarlo»), solo que ahora hay dos.
|
|
62
|
+
*
|
|
63
|
+
* `que` cambia únicamente cómo se nombra en el mensaje: la comprobación es la MISMA para las
|
|
64
|
+
* dos, porque las dos acaban dentro de un modelo.
|
|
65
|
+
*/
|
|
66
|
+
function veredictoDeImagen(ruta, que) {
|
|
67
|
+
// Lista BLANCA de forma, sobre el TEXTO que escribe el modelo. `esRutaDeArtefacto` no es
|
|
68
|
+
// un `startsWith`: comprueba la forma entera, segmento a segmento.
|
|
69
|
+
if (!esRutaDeArtefacto(ruta)) {
|
|
70
|
+
return `«${ruta}» no es ${que} de esta sesión. Solo puedo mirar lo que hay bajo /artefactos/.`;
|
|
71
|
+
}
|
|
72
|
+
const nombre = nombreDeArtefacto(ruta);
|
|
73
|
+
const mime = mimeDeArtefacto(nombre);
|
|
74
|
+
if (mime === undefined || !mime.startsWith("image/")) {
|
|
75
|
+
return `«${nombre}» no es una imagen, así que no hay nada que mirar.`;
|
|
76
|
+
}
|
|
77
|
+
return { mime };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Los bytes, ya con la ruta comprobada. Nunca lanza: que falte una imagen no puede llevarse
|
|
81
|
+
* el turno por delante.
|
|
82
|
+
*
|
|
83
|
+
* **Se abre por la ruta RELATIVA y se NOMBRA por el último segmento**, que son dos preguntas
|
|
84
|
+
* distintas y confundirlas era un botón muerto: un `unzip` deja un ÁRBOL, y una maqueta
|
|
85
|
+
* descomprimida vive en `/artefactos/diseno/screen.png`. Con el basename, el `join` de quien
|
|
86
|
+
* lee apuntaba a `<carpeta>/screen.png` y contestaba «no pude abrir» sobre un fichero que
|
|
87
|
+
* estaba ahí y que la propia foto había anunciado.
|
|
88
|
+
*/
|
|
89
|
+
async function leer(ruta, mime, deps) {
|
|
90
|
+
try {
|
|
91
|
+
const bytes = await deps.leerArtefacto(rutaRelativaDeArtefacto(ruta));
|
|
92
|
+
return { base64: bytes.toString("base64"), mime };
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
// El mensaje de un error de Node lleva la ruta absoluta y esto va al modelo: solo el
|
|
96
|
+
// NOMBRE del error.
|
|
97
|
+
return `No pude abrir «${nombreDeArtefacto(ruta)}» (${error instanceof Error ? error.name : "error"}).`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* **Fail-closed: una referencia que se pidió y no se pudo usar es un NO.**
|
|
102
|
+
*
|
|
103
|
+
* Lo tentador es juzgar sin ella y avisar. Es justo el fallo que este parámetro existe para
|
|
104
|
+
* cerrar: un veredicto sin maqueta vuelve como «verde» y se lee como «se parece al diseño».
|
|
105
|
+
* Así que no se juzga nada, y el paso siguiente que se escribe es ARREGLAR LA RUTA — nunca
|
|
106
|
+
* «o llámame sin ella», que sería dejar el modo ciego escrito dentro de la propia tool como
|
|
107
|
+
* alternativa legítima.
|
|
108
|
+
*/
|
|
109
|
+
function sinJuzgar(motivo) {
|
|
110
|
+
return [
|
|
111
|
+
motivo,
|
|
112
|
+
"NO he juzgado la captura: comparar contra media maqueta no es comparar, y mi veredicto",
|
|
113
|
+
"se leería como que la pantalla se parece al diseño. Comprueba la ruta de la maqueta",
|
|
114
|
+
"—tiene que ser la que anunció su evento `artefacto`, con sus subcarpetas— y vuelve a",
|
|
115
|
+
"llamarme.",
|
|
116
|
+
].join("\n");
|
|
117
|
+
}
|
|
39
118
|
export function crearCriticaVisual(deps) {
|
|
40
119
|
return tool(async (entrada) => {
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
return
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
120
|
+
// Se comprueban las DOS antes de abrir ninguna: ver `veredictoDeImagen`.
|
|
121
|
+
const deLaCaptura = veredictoDeImagen(entrada.captura, "una captura");
|
|
122
|
+
if (typeof deLaCaptura === "string")
|
|
123
|
+
return deLaCaptura;
|
|
124
|
+
const deLaReferencia = entrada.referencia === undefined
|
|
125
|
+
? undefined
|
|
126
|
+
: veredictoDeImagen(entrada.referencia, "la referencia");
|
|
127
|
+
if (typeof deLaReferencia === "string")
|
|
128
|
+
return sinJuzgar(deLaReferencia);
|
|
129
|
+
const abierta = await leer(entrada.captura, deLaCaptura.mime, deps);
|
|
130
|
+
if (typeof abierta === "string")
|
|
131
|
+
return abierta;
|
|
132
|
+
let referencia;
|
|
133
|
+
if (entrada.referencia !== undefined && deLaReferencia !== undefined) {
|
|
134
|
+
const abiertaRef = await leer(entrada.referencia, deLaReferencia.mime, deps);
|
|
135
|
+
/**
|
|
136
|
+
* **Fail-closed: una referencia que se pidió y no se pudo abrir es un NO.**
|
|
137
|
+
*
|
|
138
|
+
* Lo tentador es juzgar sin ella y avisar. Es justo el fallo que este parámetro
|
|
139
|
+
* existe para cerrar: un veredicto sin maqueta vuelve como «verde» y se lee como
|
|
140
|
+
* «se parece al diseño». Así que no se juzga nada, y el paso siguiente que se
|
|
141
|
+
* escribe es ARREGLAR LA RUTA — nunca «o llámame sin referencia», que sería dejar
|
|
142
|
+
* el modo ciego escrito dentro de la propia tool como alternativa legítima.
|
|
143
|
+
*/
|
|
144
|
+
if (typeof abiertaRef === "string")
|
|
145
|
+
return sinJuzgar(abiertaRef);
|
|
146
|
+
referencia = abiertaRef;
|
|
60
147
|
}
|
|
61
148
|
let veredicto;
|
|
62
149
|
try {
|
|
63
|
-
veredicto = await juzgarPantalla(
|
|
150
|
+
veredicto = await juzgarPantalla(abierta, { pantalla: entrada.pantalla }, deps.invocar, referencia);
|
|
64
151
|
}
|
|
65
152
|
catch (error) {
|
|
66
153
|
// Fallo del ENTORNO —sin modelo, sin clave, sin red—: se dice, y no se convierte en un
|
|
67
154
|
// veredicto. Un rojo inventado culparía al trabajo de un problema de la máquina.
|
|
68
155
|
return `No se pudo consultar al crítico visual: ${error instanceof Error ? error.message : "error"}`;
|
|
69
156
|
}
|
|
70
|
-
|
|
157
|
+
/**
|
|
158
|
+
* **La cabecera dice si se COMPARÓ, y no repite la ruta de la referencia.** Lo primero
|
|
159
|
+
* porque «verde» contesta dos preguntas distintas según el modo y quien lo lea tiene
|
|
160
|
+
* que saber cuál le han contestado. Lo segundo porque el argumento lo acaba de escribir
|
|
161
|
+
* quien llama: devolvérselo entero es el eco que ya paga el campo `pantalla`.
|
|
162
|
+
*/
|
|
163
|
+
const comparado = referencia === undefined ? "" : " (comparado con la referencia)";
|
|
164
|
+
const lineas = [
|
|
165
|
+
`Veredicto visual de «${entrada.pantalla}»${comparado}: ${veredicto.veredicto}.`,
|
|
166
|
+
];
|
|
71
167
|
if (veredicto.observaciones.length > 0) {
|
|
72
168
|
/**
|
|
73
169
|
* **El aviso no es cortesía: está medido.** Seis vueltas sobre la misma captura
|
|
@@ -111,7 +207,18 @@ export function crearCriticaVisual(deps) {
|
|
|
111
207
|
* puede, porque llegar a una pantalla necesita abrir cajones y mirar el árbol.
|
|
112
208
|
*/
|
|
113
209
|
if (veredicto.veredicto === "rojo") {
|
|
114
|
-
|
|
210
|
+
/**
|
|
211
|
+
* **Con referencia, el arreglo es de `designer-xone`.** No es un cambio de criterio:
|
|
212
|
+
* una diferencia contra una maqueta es visual por definición —forma, tamaño,
|
|
213
|
+
* colocación, color— y eso es literalmente lo que su `.md` reclama («del color o del
|
|
214
|
+
* tamaño equivocado… también cuando se arregle en un `.xne`»). Sin referencia el
|
|
215
|
+
* hallazgo puede ser cualquier cosa, así que esa rama se queda como estaba.
|
|
216
|
+
*/
|
|
217
|
+
const aQuien = referencia === undefined ? "developer-xone" : "designer-xone";
|
|
218
|
+
lineas.push("Esto es un defecto del proyecto SIN ARREGLAR, y qué hacer con él depende de TU", "encargo — que lo sabes tú y no yo:", `- Si el encargo incluye ARREGLAR o dejar la app bien: encárgaselo a \`${aQuien}\``, " pasándole estas observaciones tal cual, y cuando lo haya corregido manda otra vez", " al conductor a esta misma pantalla y vuelve a llamarme con la captura nueva.", referencia === undefined
|
|
219
|
+
? " No des la pantalla por buena hasta que yo la vea en verde."
|
|
220
|
+
: " Y vuelve CON LA MISMA `referencia`: sin ella mi verde solo diría que nada" +
|
|
221
|
+
"\n está roto, no que la pantalla se parezca al diseño.", "- Si el encargo es OTRO —documentar, medir, inventariar—: NO toques el proyecto por", " esto. Anótalo donde estés contando lo que ves y sigue con lo tuyo.", "Lo que NO vale en ninguno de los dos casos es callártelo.");
|
|
115
222
|
}
|
|
116
223
|
if (veredicto.necesito.length > 0) {
|
|
117
224
|
lineas.push(`Necesita ver ${veredicto.necesito.length === 1 ? "otra pantalla" : "otras pantallas"} para dictaminar: ${veredicto.necesito.join(", ")}.`, `Encarga al conductor que llegue ahí y capture, y vuelve a llamarme con esa captura (como mucho ${TOPE_DE_PETICIONES} veces).`);
|
|
@@ -121,7 +228,10 @@ export function crearCriticaVisual(deps) {
|
|
|
121
228
|
name: "xone_critica_visual",
|
|
122
229
|
description: "Enseña una captura de pantalla del aparato a un revisor visual y devuelve qué se ve " +
|
|
123
230
|
"mal: texto cortado, controles solapados o fuera de la pantalla, cosas ilegibles. " +
|
|
124
|
-
"Ve lo que ninguna comprobación estática puede ver. Puede pedir otras pantallas."
|
|
231
|
+
"Ve lo que ninguna comprobación estática puede ver. Puede pedir otras pantallas. " +
|
|
232
|
+
"Si el encargo trae un DISEÑO o una MAQUETA, pásala en `referencia` y además comparo " +
|
|
233
|
+
"la pantalla contra ella (forma, tamaños, colocación, color). SIN `referencia` mi " +
|
|
234
|
+
"verde significa «nada roto», NO «se parece al diseño».",
|
|
125
235
|
schema: Entrada,
|
|
126
236
|
});
|
|
127
237
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criticaVisual.js","sourceRoot":"","sources":["../../../src/agent/grafo/criticaVisual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"criticaVisual.js","sourceRoot":"","sources":["../../../src/agent/grafo/criticaVisual.ts"],"names":[],"mappings":"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"}
|
|
@@ -139,7 +139,7 @@ export function promptOrquestador(agentes) {
|
|
|
139
139
|
* los fallos visuales. Por eso se decide contra el encargo y no contra el fichero.
|
|
140
140
|
*/
|
|
141
141
|
hay("developer-xone") && hay("device-controller")
|
|
142
|
-
? "Si el encargo incluye PROBARLO en un móvil o emulador, son DOS pasos y en este orden: `developer-xone` escribe, y luego `device-controller` lo despliega y lo comprueba. Dile SIEMPRE a qué pantalla o colección tiene que llegar, no solo «pruébalo». Si tienes `xone_critica_visual`, pásale la captura que deje: ve fallos de pintado que ninguna comprobación estática detecta, y si te pide otra pantalla, encárgasela al conductor y vuelve. De lo que saque, MANDA A CORREGIR solo lo que sirva al encargo que te hicieron: un defecto que ya estaba ahí y que tu cambio no ha causado NO se arregla, se CUENTA en tu respuesta para que lo decida quien te encargó el trabajo. Y no des por buena una pantalla que nadie ha mirado."
|
|
142
|
+
? "Si el encargo incluye PROBARLO en un móvil o emulador, son DOS pasos y en este orden: `developer-xone` escribe, y luego `device-controller` lo despliega y lo comprueba. Dile SIEMPRE a qué pantalla o colección tiene que llegar, no solo «pruébalo». Si tienes `xone_critica_visual`, pásale la captura que deje: ve fallos de pintado que ninguna comprobación estática detecta, y si te pide otra pantalla, encárgasela al conductor y vuelve. Y si el encargo traía un DISEÑO o una MAQUETA, pásasela SIEMPRE en `referencia`: sin ella su verde solo dice que nada está roto, no que la pantalla se parezca a lo que te pidieron. De lo que saque, MANDA A CORREGIR solo lo que sirva al encargo que te hicieron: un defecto que ya estaba ahí y que tu cambio no ha causado NO se arregla, se CUENTA en tu respuesta para que lo decida quien te encargó el trabajo. Y no des por buena una pantalla que nadie ha mirado."
|
|
143
143
|
: "",
|
|
144
144
|
"Los especialistas no comparten el transcript: al encadenarlos, incluye en la descripción",
|
|
145
145
|
"de la siguiente `task` un bloque `HANDOFF DE ANÁLISIS` compacto con los hechos verificados,",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xoneAgent.js","sourceRoot":"","sources":["../../../src/agent/grafo/xoneAgent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xoneAgent.js","sourceRoot":"","sources":["../../../src/agent/grafo/xoneAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { closeSync, existsSync, mkdirSync, openSync } from "node:fs";
|
|
1
|
+
import { closeSync, existsSync, mkdirSync, openSync, statSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { SqliteSaver } from "../../vendor/sqliteSaver.js";
|
|
4
|
+
import { debePodar } from "../../core/podaDeCheckpoint.js";
|
|
4
5
|
/**
|
|
5
6
|
* El checkpointer PERSISTENTE de un proyecto: la memoria del agente entre arranques.
|
|
6
7
|
*
|
|
@@ -124,4 +125,185 @@ export async function olvidarHilo(checkpointer, hilo) {
|
|
|
124
125
|
// sí se van, y lo que quede aquí es un hilo huérfano que nadie puede reabrir.
|
|
125
126
|
}
|
|
126
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Las filas que hacen falta para que un hilo siga reanudando, y **son solo dos por espacio**.
|
|
130
|
+
*
|
|
131
|
+
* Sale de leer qué pide de verdad este harness, no de adivinar:
|
|
132
|
+
*
|
|
133
|
+
* - **xonecode le pide al checkpointer EXACTAMENTE dos cosas** —`getTuple({ thread_id })` y
|
|
134
|
+
* `deleteThread`— y este fichero es su único llamador. Ni `list()`, ni historial, ni viaje
|
|
135
|
+
* en el tiempo. Y `getTuple` sin `checkpoint_id` resuelve a
|
|
136
|
+
* `ORDER BY checkpoint_id DESC LIMIT 1` (`vendor/sqliteSaver.ts#prepareSql`): **el último y
|
|
137
|
+
* nada más**. Todo lo anterior es peso muerto.
|
|
138
|
+
* - **Y su PADRE, que es la parte que no se ve.** La subconsulta `pending_sends` del mismo
|
|
139
|
+
* `prepareSql` lee los `writes` del `parent_checkpoint_id` (canal de tareas). Quitar los
|
|
140
|
+
* writes del padre es la forma sutil de romper esto: la consulta no falla, devuelve vacío.
|
|
141
|
+
*
|
|
142
|
+
* Por espacio (`checkpoint_ns`) y no solo del hilo: cada delegación abre el suyo (`tools:*`)
|
|
143
|
+
* y el orquestador vive en `''`. Medido, los subagentes eran el 70 % del fichero.
|
|
144
|
+
*/
|
|
145
|
+
const SQL_CONSERVAR = `
|
|
146
|
+
WITH ultimo AS (
|
|
147
|
+
SELECT thread_id, checkpoint_ns, checkpoint_id, parent_checkpoint_id
|
|
148
|
+
FROM checkpoints c
|
|
149
|
+
WHERE checkpoint_id = (
|
|
150
|
+
SELECT MAX(checkpoint_id) FROM checkpoints x
|
|
151
|
+
WHERE x.thread_id = c.thread_id AND x.checkpoint_ns = c.checkpoint_ns)
|
|
152
|
+
)
|
|
153
|
+
SELECT thread_id, checkpoint_ns, checkpoint_id FROM ultimo
|
|
154
|
+
UNION
|
|
155
|
+
SELECT thread_id, checkpoint_ns, parent_checkpoint_id FROM ultimo
|
|
156
|
+
WHERE parent_checkpoint_id IS NOT NULL`;
|
|
157
|
+
/**
|
|
158
|
+
* Lo que ocupa esto en disco, o `undefined` si no hay base todavía.
|
|
159
|
+
*
|
|
160
|
+
* **Y el `-wal` CUENTA, que es la trampa.** Este checkpointer corre en modo WAL —viene de
|
|
161
|
+
* serie y es lo que deja que la web y el terminal no se pisen—, así que lo recién escrito
|
|
162
|
+
* vive en `checkpoint.sqlite-wal` hasta que SQLite lo consolida. Mirando solo el fichero
|
|
163
|
+
* principal, una base con cientos de MB todavía en el WAL contesta que ocupa 4 KB y la cota
|
|
164
|
+
* no dispara nunca: la regla queda escrita y muerta, con todo en verde. Se descubrió porque
|
|
165
|
+
* el test que exige que el fichero ENCOJA daba `4096` antes y después.
|
|
166
|
+
*
|
|
167
|
+
* El `-shm` no entra: son 32 KB de índice compartido, no datos.
|
|
168
|
+
*/
|
|
169
|
+
export function tamanoDelCheckpointer(raiz) {
|
|
170
|
+
const ruta = rutaDelCheckpointer(raiz);
|
|
171
|
+
let total;
|
|
172
|
+
try {
|
|
173
|
+
total = statSync(ruta).size;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
total += statSync(`${ruta}-wal`).size;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Sin WAL no hay nada que sumar: es el caso de una base recién consolidada.
|
|
183
|
+
}
|
|
184
|
+
return total;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Adelgaza el `checkpoint.sqlite` de un proyecto: borra lo que ya no reanuda y compacta.
|
|
188
|
+
*
|
|
189
|
+
* Cuatro decisiones, y ninguna es de conveniencia:
|
|
190
|
+
*
|
|
191
|
+
* - **Sobre la conexión que YA existe**, la de `crearCheckpointerDeProyecto`. Abrir una
|
|
192
|
+
* segunda sería competir con nosotros mismos por un lock exclusivo que `VACUUM` necesita.
|
|
193
|
+
* - **El borrado va en una transacción y el `VACUUM` FUERA**, porque SQLite no lo admite
|
|
194
|
+
* dentro de una. Si el `VACUUM` no entra, el borrado ya está hecho y el fichero encoge en
|
|
195
|
+
* el siguiente — lo que se pierde es la devolución del espacio, no la corrección.
|
|
196
|
+
* - **Fail-soft con el cerrojo.** `VACUUM` reescribe el fichero entero y en este repo puede
|
|
197
|
+
* haber dos procesos sobre el mismo proyecto (la web y el terminal). Un `SQLITE_BUSY` no
|
|
198
|
+
* es un error que contar: esto es mantenimiento, y la vuelta siguiente llega al cerrar el
|
|
199
|
+
* turno que viene. Por eso NUNCA lanza.
|
|
200
|
+
* - **No comprueba la cota**: eso es `debePodar` y vive en `core/`. Aquí solo se ejecuta,
|
|
201
|
+
* para que la regla se pueda probar sin una base delante.
|
|
202
|
+
*
|
|
203
|
+
* Medido sobre el fichero real de 879 MB: 2.794 checkpoints → 44, y 20,9 MB, en 2,5 s. El
|
|
204
|
+
* hilo sigue vivo en los dos sentidos —se relee igual y admite un `put` nuevo—.
|
|
205
|
+
*/
|
|
206
|
+
export function podarCheckpointer(checkpointer, raiz) {
|
|
207
|
+
const db = checkpointer?.db;
|
|
208
|
+
if (db === undefined)
|
|
209
|
+
return undefined;
|
|
210
|
+
const antes = tamanoDelCheckpointer(raiz);
|
|
211
|
+
if (antes === undefined)
|
|
212
|
+
return undefined;
|
|
213
|
+
let checkpointsBorrados = 0;
|
|
214
|
+
let writesBorrados = 0;
|
|
215
|
+
try {
|
|
216
|
+
db.transaction(() => {
|
|
217
|
+
checkpointsBorrados = db
|
|
218
|
+
.prepare(`DELETE FROM checkpoints WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (${SQL_CONSERVAR})`)
|
|
219
|
+
.run().changes;
|
|
220
|
+
writesBorrados = db
|
|
221
|
+
.prepare(`DELETE FROM writes WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (${SQL_CONSERVAR})`)
|
|
222
|
+
.run().changes;
|
|
223
|
+
})();
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Ni el borrado se pudo hacer: no hay nada que contar y no se toca el `VACUUM`.
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
try {
|
|
230
|
+
db.prepare("VACUUM").run();
|
|
231
|
+
/**
|
|
232
|
+
* **Y se CONSOLIDA el WAL, o el espacio no vuelve al disco.** El `VACUUM` reconstruye la
|
|
233
|
+
* base, pero en modo WAL lo reconstruido se queda en `checkpoint.sqlite-wal` hasta que
|
|
234
|
+
* alguien lo pasa al fichero principal. Sin esto, la poda funciona y el disco sigue
|
|
235
|
+
* igual de lleno — que es el único resultado que a quien lo pidió le importa.
|
|
236
|
+
*/
|
|
237
|
+
db.prepare("PRAGMA wal_checkpoint(TRUNCATE)").run();
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Cerrojo de otro proceso. El borrado ya está hecho; el fichero encoge en la siguiente.
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
antes,
|
|
244
|
+
despues: tamanoDelCheckpointer(raiz) ?? antes,
|
|
245
|
+
checkpointsBorrados,
|
|
246
|
+
writesBorrados,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* ¿Hay trabajo del grafo a medias en cualquier parte de la base?
|
|
251
|
+
*
|
|
252
|
+
* **La señal son los `writes` colgados del ÚLTIMO checkpoint de un espacio.** Un `write` es
|
|
253
|
+
* el resultado de un paso que todavía no se ha doblado en un checkpoint nuevo, así que sobre
|
|
254
|
+
* el último significa que el grafo se paró ahí: típicamente un subagente esperando una
|
|
255
|
+
* aprobación, que es justo el caso que no se puede podar. Los miles de `writes` de una sesión
|
|
256
|
+
* cerrada cuelgan de checkpoints ANTERIORES y no cuentan.
|
|
257
|
+
*
|
|
258
|
+
* Se pregunta por la base ENTERA y no por el hilo del turno que acaba de cerrar: en un
|
|
259
|
+
* proyecto hay varias sesiones y una puede estar parada en una aprobación mientras otra
|
|
260
|
+
* trabaja. Si algo está pendiente en cualquier sitio, no se poda nada y se vuelve a intentar
|
|
261
|
+
* al cerrar el turno siguiente — esto es mantenimiento, no una operación que urja.
|
|
262
|
+
*
|
|
263
|
+
* **Un fallo al preguntar contesta `true`**, o sea «no se poda»: es la dirección conservadora,
|
|
264
|
+
* la misma de `hayCheckpoint` por el otro lado.
|
|
265
|
+
*/
|
|
266
|
+
export function hayPendientesEnLaBase(checkpointer) {
|
|
267
|
+
const db = checkpointer?.db;
|
|
268
|
+
if (db === undefined)
|
|
269
|
+
return true;
|
|
270
|
+
try {
|
|
271
|
+
const fila = db
|
|
272
|
+
.prepare(`SELECT COUNT(*) AS n FROM writes w WHERE w.checkpoint_id = (
|
|
273
|
+
SELECT MAX(checkpoint_id) FROM checkpoints c
|
|
274
|
+
WHERE c.thread_id = w.thread_id AND c.checkpoint_ns = w.checkpoint_ns)`)
|
|
275
|
+
.get();
|
|
276
|
+
return (fila?.n ?? 1) > 0;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* La poda de MANTENIMIENTO: mira la cota y poda solo si toca. Es lo que se engancha al cierre
|
|
284
|
+
* del turno.
|
|
285
|
+
*
|
|
286
|
+
* **El orden importa y es el barato primero**: un `statSync` (microsegundos) decide el caso
|
|
287
|
+
* normal, y solo si pasa de la cota se le pregunta a la base si hay algo a medias. Al revés,
|
|
288
|
+
* cada turno pagaría una consulta para tirarla.
|
|
289
|
+
*
|
|
290
|
+
* Nunca lanza: esto corre en el `finally` de un turno, y un mantenimiento que reviente el
|
|
291
|
+
* cierre es peor que un fichero grande.
|
|
292
|
+
*/
|
|
293
|
+
export function mantenimientoDelCheckpointer(checkpointer, raiz) {
|
|
294
|
+
try {
|
|
295
|
+
const bytes = tamanoDelCheckpointer(raiz);
|
|
296
|
+
if (bytes === undefined)
|
|
297
|
+
return undefined;
|
|
298
|
+
// La cota primero: sin ella, esto no llega a tocar la base.
|
|
299
|
+
if (!debePodar({ bytes, hayPendientes: false }))
|
|
300
|
+
return undefined;
|
|
301
|
+
if (!debePodar({ bytes, hayPendientes: hayPendientesEnLaBase(checkpointer) }))
|
|
302
|
+
return undefined;
|
|
303
|
+
return podarCheckpointer(checkpointer, raiz);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
127
309
|
//# sourceMappingURL=checkpointer.js.map
|