xonecode 0.31.0 → 0.33.0

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.
Files changed (68) hide show
  1. package/apps/web/dist/assets/{EditorDeFichero-ChyJtiiz.js → EditorDeFichero-H_kGeZt2.js} +1 -1
  2. package/apps/web/dist/assets/{index-IptObD2z.css → index-CWBaotdZ.css} +1 -1
  3. package/apps/web/dist/assets/index-DnGuOvbb.js +499 -0
  4. package/apps/web/dist/assets/{php-B91ZcS-9.js → php-CMFQiZgk.js} +1 -1
  5. package/apps/web/dist/assets/{ruby-DrxrTSz0.js → ruby-Dj3BOBHc.js} +1 -1
  6. package/apps/web/dist/index.html +2 -2
  7. package/dist/agent/config/modelosDeMotor.js +4 -2
  8. package/dist/agent/config/modelosDeMotor.js.map +1 -1
  9. package/dist/agent/config/settingsEnDisco.js +26 -0
  10. package/dist/agent/config/settingsEnDisco.js.map +1 -1
  11. package/dist/agent/dispositivos/cajasDeMaqueta.js +130 -0
  12. package/dist/agent/dispositivos/cajasDeMaqueta.js.map +1 -0
  13. package/dist/agent/dispositivos/geometriaEnDisco.js +25 -0
  14. package/dist/agent/dispositivos/geometriaEnDisco.js.map +1 -0
  15. package/dist/agent/dispositivos/juezVisual.js +84 -3
  16. package/dist/agent/dispositivos/juezVisual.js.map +1 -1
  17. package/dist/agent/grafo/criticaVisual.js +240 -11
  18. package/dist/agent/grafo/criticaVisual.js.map +1 -1
  19. package/dist/agent/grafo/lectorDeReferencias.js +21 -0
  20. package/dist/agent/grafo/lectorDeReferencias.js.map +1 -1
  21. package/dist/agent/motores/motoresLocales.js +429 -0
  22. package/dist/agent/motores/motoresLocales.js.map +1 -0
  23. package/dist/agent/motores/trueforge/sesionTrueforge.js +30 -3
  24. package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
  25. package/dist/agent/motores/trueforge/toolsDeFichero.js +24 -6
  26. package/dist/agent/motores/trueforge/toolsDeFichero.js.map +1 -1
  27. package/dist/agent/sesiones/adjuntosDeSesion.js +125 -5
  28. package/dist/agent/sesiones/adjuntosDeSesion.js.map +1 -1
  29. package/dist/agent/subagentes/ejecutableEnWindows.js +139 -0
  30. package/dist/agent/subagentes/ejecutableEnWindows.js.map +1 -0
  31. package/dist/agent/subagentes/subagenteCodex.js +7 -2
  32. package/dist/agent/subagentes/subagenteCodex.js.map +1 -1
  33. package/dist/agent/subagentes/subagenteOpencode.js +12 -5
  34. package/dist/agent/subagentes/subagenteOpencode.js.map +1 -1
  35. package/dist/core/adjuntos.js +10 -2
  36. package/dist/core/adjuntos.js.map +1 -1
  37. package/dist/core/descripcionDePantalla.js +354 -0
  38. package/dist/core/descripcionDePantalla.js.map +1 -0
  39. package/dist/core/estiloMedido.js +332 -0
  40. package/dist/core/estiloMedido.js.map +1 -0
  41. package/dist/core/geometriaDePantalla.js +437 -0
  42. package/dist/core/geometriaDePantalla.js.map +1 -0
  43. package/dist/core/motoresLocales.js +128 -0
  44. package/dist/core/motoresLocales.js.map +1 -0
  45. package/dist/core/nucleoXone.js +6 -6
  46. package/dist/core/nucleoXone.js.map +1 -1
  47. package/dist/core/settings.js +5 -0
  48. package/dist/core/settings.js.map +1 -1
  49. package/dist/core/shellDeAgente.js +13 -0
  50. package/dist/core/shellDeAgente.js.map +1 -1
  51. package/dist/core/zipDeAdjunto.js +79 -0
  52. package/dist/core/zipDeAdjunto.js.map +1 -0
  53. package/dist/web/servidor/arranque.js +84 -0
  54. package/dist/web/servidor/arranque.js.map +1 -1
  55. package/dist/web/servidor/transporte.js.map +1 -1
  56. package/package.json +1 -1
  57. package/skills/xone-development/SKILL.md +2 -1
  58. package/skills/xone-development/references/css/buenas-practicas-y-parser.md +2 -1
  59. package/skills/xone-development/references/css/de-una-maqueta-a-xone.md +81 -0
  60. package/skills/xone-development/references/css/patrones-material-y-temas.md +15 -13
  61. package/skills/xone-development/references/css/propiedades-y-herencia.md +2 -2
  62. package/skills/xone-development/references/css/selectores-unidades-colores.md +8 -3
  63. package/skills/xone-development/references/indice-completo.md +1 -0
  64. package/skills/xone-hotswap/lib/geometria.mjs +147 -0
  65. package/skills/xone-hotswap/scripts/xone-captura-android +6 -0
  66. package/skills/xone-hotswap/scripts/xone-hotswap +8 -0
  67. package/skills/xone-hotswap/scripts/xone-recargar-android +15 -0
  68. package/apps/web/dist/assets/index-CFIrUOmW.js +0 -499
@@ -2,6 +2,9 @@ import { tool } from "@langchain/core/tools";
2
2
  import { z } from "zod";
3
3
  import { esRutaDeArtefacto, mimeDeArtefacto, nombreDeArtefacto, rutaRelativaDeArtefacto, } from "../../core/artefactos.js";
4
4
  import { imagenReferida } from "../../core/referenciasDeImagen.js";
5
+ import { compararConMaqueta, controlesDelArbol, filas as filasDeCajas, filasDelAparato, hallazgosDeGeometria, informeDeGeometria, } from "../../core/geometriaDePantalla.js";
6
+ import { compararDescripciones, hayQueArreglar, htmlComoAparato, informeDeComparacion, maquetaDeLaDescripcion, } from "../../core/descripcionDePantalla.js";
7
+ import { compararBloques, pantallaMedida } from "../../core/estiloMedido.js";
5
8
  import { juzgarPantalla, TOPE_DE_PETICIONES, } from "../dispositivos/juezVisual.js";
6
9
  /**
7
10
  * `xone_critica_visual`: enseñarle una captura al crítico y traer su veredicto.
@@ -52,6 +55,116 @@ const Entrada = z.object({
52
55
  "la maqueta (forma, tamaños, colocación). SIN ella solo busco roturas y NO digo nada " +
53
56
  "sobre si se parece al diseño."),
54
57
  });
58
+ /**
59
+ * La geometría de esta captura (`core/geometriaDePantalla.ts`), o `undefined` si este montaje no la tiene.
60
+ * Nunca lanza: lo que no se puede medir se dice en el bloque, y el crítico sigue con su opinión.
61
+ */
62
+ async function geometriaDe(entrada, referida, referencia, deps, descrita) {
63
+ if (deps.leerGeometria === undefined)
64
+ return undefined;
65
+ let crudo;
66
+ try {
67
+ crudo = await deps.leerGeometria(nombreDeArtefacto(entrada.captura));
68
+ }
69
+ catch {
70
+ crudo = undefined;
71
+ }
72
+ const g = crudo;
73
+ if (g === undefined || g.arbol === undefined || g.pantalla === undefined) {
74
+ return {
75
+ lineas: [
76
+ "GEOMETRÍA: esta captura no trae su árbol de controles, así que no hay nada MEDIDO (qué está tapado, qué",
77
+ "falta, filas, tamaños). Sácala con `xone-captura-android` o `xone-hotswap shot`, que lo guardan a la vez.",
78
+ ],
79
+ hechos: [],
80
+ bloqueante: false,
81
+ };
82
+ }
83
+ const controles = controlesDelArbol(g.arbol);
84
+ // Una captura de UN CONTROL (`shot name=…`) es más pequeña que lo que ocupa el árbol: sus cajas son de la pantalla
85
+ // entera y medirían píxeles que no son. El script ya no la guarda así; esto cubre las de antes.
86
+ // La pantalla la dice la barra de navegación; sin ella, lo que ocupa el árbol (que puede pasarse: un pie flotante).
87
+ const navegacion = g.barras?.navegacion;
88
+ const extension = navegacion !== undefined
89
+ ? { ancho: navegacion.derecha, alto: navegacion.abajo }
90
+ : controles.reduce((e, c) => ({ ancho: Math.max(e.ancho, c.caja.x + c.caja.ancho), alto: Math.max(e.alto, c.caja.y + c.caja.alto) }), { ancho: 0, alto: 0 });
91
+ if (g.pantalla.alto < extension.alto * 0.95 || g.pantalla.ancho < extension.ancho * 0.95) {
92
+ return {
93
+ lineas: [
94
+ "GEOMETRÍA: esta captura es de una PARTE de la pantalla (un control), no de la pantalla entera, así que no hay nada",
95
+ "MEDIDO. Para comparar con la maqueta, captura la pantalla entera (`xone-hotswap shot` sin `name=`).",
96
+ ],
97
+ hechos: [],
98
+ bloqueante: false,
99
+ parcial: true,
100
+ };
101
+ }
102
+ const aparato = {
103
+ pantalla: g.pantalla,
104
+ ...(g.barras === undefined ? {} : { barras: g.barras }),
105
+ controles,
106
+ };
107
+ let maqueta;
108
+ const notas = [];
109
+ if (referida !== undefined && referencia !== undefined && deps.cajasDeMaqueta !== undefined) {
110
+ let medida;
111
+ try {
112
+ medida = await deps.cajasDeMaqueta(referida, Buffer.from(referencia.base64, "base64"));
113
+ }
114
+ catch {
115
+ medida = { motivo: "no se pudo medir" };
116
+ }
117
+ const conDescripcion = descrita === undefined ? "" : " (la estructura de la maqueta va abajo, según su descripción)";
118
+ if (medida === undefined)
119
+ notas.push(`la maqueta es solo una imagen (sin code.html al lado): aquí, solo lo que se ve en el propio aparato${conDescripcion}.`);
120
+ else if ("motivo" in medida)
121
+ notas.push(`no pude medir las cajas de la maqueta: ${medida.motivo}. Aquí, solo lo del propio aparato${conDescripcion}.`);
122
+ else
123
+ maqueta = medida;
124
+ }
125
+ const h = hallazgosDeGeometria(aparato, maqueta);
126
+ const lineas = informeDeGeometria({ ...h, notas: [...h.notas, ...notas] }, maqueta !== undefined);
127
+ if (descrita !== undefined)
128
+ lineas.push(...estructuraDescrita(descrita, aparato, maqueta));
129
+ return {
130
+ lineas,
131
+ hechos: [...h.bloqueantes, ...h.diferencias],
132
+ bloqueante: h.bloqueantes.length > 0,
133
+ aparato,
134
+ ...(maqueta === undefined ? {} : { maqueta }),
135
+ };
136
+ }
137
+ /**
138
+ * Lo que aporta la maqueta DESCRITA, en un bloque APARTE del medido: nunca decide el rojo.
139
+ *
140
+ * - **Sin `code.html`**, es la única estructura de la maqueta que hay: sus filas, orden y anchos contra el
141
+ * árbol medido. Así una maqueta que es solo un PNG también dice «la = va en otra fila».
142
+ * - **Con `code.html`**, la estructura la dan las cajas medidas, y la descripción solo VIGILA que la imagen
143
+ * y el HTML cuenten lo mismo: la imagen es lo que se aprobó, y si el HTML se aparta, alguien tiene que
144
+ * decirlo.
145
+ */
146
+ function estructuraDescrita(descrita, aparato, maqueta) {
147
+ if (maqueta !== undefined) {
148
+ const h = compararConMaqueta(maquetaDeLaDescripcion(descrita, false), htmlComoAparato(maqueta), {
149
+ aproximada: true,
150
+ nombres: { maqueta: "la imagen de la maqueta", aparato: "su code.html" },
151
+ });
152
+ if (h.diferencias.length === 0)
153
+ return [];
154
+ return [
155
+ "",
156
+ "LA IMAGEN DE LA MAQUETA Y SU code.html NO CUENTAN LO MISMO (según la descripción de la imagen, que hizo un modelo; míralo):",
157
+ ...h.diferencias.map((d) => `- ${d}`),
158
+ ];
159
+ }
160
+ const h = compararConMaqueta(maquetaDeLaDescripcion(descrita), aparato, { aproximada: true });
161
+ return [
162
+ "",
163
+ "ESTRUCTURA CONTRA LA MAQUETA DESCRITA (las filas, el orden y los anchos de la maqueta los dijo un modelo mirándola sola; los del aparato están medidos. Orientativo: compruébalo antes de cambiar nada):",
164
+ ...(h.diferencias.length === 0 ? ["- Nada: las filas y el orden cuadran con lo descrito."] : h.diferencias.map((d) => `- ${d}`)),
165
+ ...h.notas.map((n) => `- (nota) ${n}`),
166
+ ];
167
+ }
55
168
  /**
56
169
  * Qué es esta ruta, o el motivo en palabras. **Comprueba y NO lee.**
57
170
  *
@@ -127,6 +240,51 @@ function sinJuzgar(motivo) {
127
240
  "llamarme.",
128
241
  ].join("\n");
129
242
  }
243
+ /**
244
+ * La comparación de estilo MEDIDA, o `undefined` si no hay con qué (sin decodificador, sin árbol, o la imagen no se
245
+ * pudo leer). `completa`: hubo maqueta con cajas y la comparación es control a control; si no, solo los recortes de
246
+ * la captura. Nunca lanza.
247
+ */
248
+ function medirEstilo(captura, referencia, geometria, deps) {
249
+ if (deps.decodificar === undefined || geometria?.aparato === undefined)
250
+ return undefined;
251
+ try {
252
+ const comoMedir = (fila) => fila.map((c) => ({ texto: c.texto ?? `[${c.nombre ?? "sin nombre"}]`, caja: c.caja }));
253
+ const imagenDeLaCaptura = deps.decodificar(Buffer.from(captura.base64, "base64"));
254
+ const vista = pantallaMedida(imagenDeLaCaptura, filasDelAparato(geometria.aparato).map(comoMedir));
255
+ if (referencia === undefined || geometria.maqueta === undefined) {
256
+ const sola = compararDescripciones({ filas: [], extras: [] }, vista);
257
+ return { comparacion: { diferencias: [], faltan: [], recortes: sola.recortes, extras: { maqueta: [], captura: [] } }, completa: false };
258
+ }
259
+ // Las cajas del `code.html` están en el viewport de la maqueta; la imagen puede estar a 2x o 3x.
260
+ const imagen = deps.decodificar(Buffer.from(referencia.base64, "base64"));
261
+ const escala = imagen.ancho / geometria.maqueta.ancho;
262
+ const m = geometria.maqueta;
263
+ const indice = filasDeCajas(m.elementos.map((e) => e.caja));
264
+ const porFila = new Map();
265
+ m.elementos.forEach((e, i) => {
266
+ const caja = { x: e.caja.x * escala, y: e.caja.y * escala, ancho: e.caja.ancho * escala, alto: e.caja.alto * escala };
267
+ porFila.set(indice[i], [...(porFila.get(indice[i]) ?? []), { texto: e.texto, caja }]);
268
+ });
269
+ const filasDeLaMaqueta = [...porFila.entries()].sort((a, b) => a[0] - b[0]).map(([, f]) => f.sort((a, b) => a.caja.x - b.caja.x));
270
+ const comparacion = compararDescripciones(pantallaMedida(imagen, filasDeLaMaqueta), vista);
271
+ // Y los BLOQUES anchos (cabecera, visor, panel): su color y su forma también son el diseño.
272
+ const g = geometria.aparato;
273
+ const util = { arriba: g.barras?.estado?.abajo ?? 0, abajo: g.barras?.navegacion?.arriba ?? g.pantalla.alto };
274
+ const bloquesDelAparato = g.controles
275
+ .filter((c) => (c.tipo === "frame" || c.tipo === "group") && c.caja.ancho >= g.pantalla.ancho * 0.85 && c.caja.alto >= 40 && c.caja.alto <= g.pantalla.alto * 0.6 && c.caja.y >= util.arriba - 2)
276
+ .map((c) => c.caja);
277
+ const bloques = m.bloques === undefined || bloquesDelAparato.length === 0
278
+ ? []
279
+ : compararBloques({ img: imagen, bloques: m.bloques.map((b) => ({ x: b.x * escala, y: b.y * escala, ancho: b.ancho * escala, alto: b.alto * escala })), util: { arriba: 0, abajo: m.alto * escala } }, { img: imagenDeLaCaptura, bloques: bloquesDelAparato, util });
280
+ return { comparacion: { ...comparacion, diferencias: [...bloques, ...comparacion.diferencias] }, completa: true };
281
+ }
282
+ catch {
283
+ return undefined;
284
+ }
285
+ }
286
+ /** La tabla de traducción de Tailwind a XOne de la skill, por su ruta virtual. */
287
+ export const TABLA_DE_TRADUCCION = "`read_file /skills/xone-development/references/css/de-una-maqueta-a-xone.md`";
130
288
  export function crearCriticaVisual(deps) {
131
289
  return tool(async (entrada) => {
132
290
  // Se comprueban las DOS antes de abrir ninguna: ver `veredictoDeImagen`.
@@ -165,9 +323,49 @@ export function crearCriticaVisual(deps) {
165
323
  return sinJuzgar(abiertaRef);
166
324
  referencia = abiertaRef;
167
325
  }
326
+ // Lo MEDIDO primero: el modelo lo recibe como hechos y no tiene que adivinar la estructura.
327
+ // La maqueta, DESCRITA aparte y antes —geometría y luego estilo—: sin ella, el estilo queda a la memoria
328
+ // del modelo y una maqueta sin code.html no tiene estructura. No poder describirla no impide juzgar.
329
+ let descrita;
330
+ if (referencia !== undefined && deps.describirPantalla !== undefined) {
331
+ try {
332
+ descrita = await deps.describirPantalla(referencia);
333
+ }
334
+ catch {
335
+ descrita = undefined;
336
+ }
337
+ }
338
+ const geometria = await geometriaDe(entrada, referida, referencia, deps, descrita);
339
+ /**
340
+ * **Con maqueta, la foto de UN CONTROL no se juzga**: la maqueta es la pantalla entera, y comparar contra un
341
+ * trozo es la opinión de un modelo sobre lo que falta alrededor. Medido en la calculadora: el desarrollador pasaba
342
+ * una y otra vez la foto del visor, el crítico le decía «captura la pantalla entera» y opinaba igual. Se contesta
343
+ * al momento y sin modelo, con el paso siguiente escrito.
344
+ */
345
+ if (referencia !== undefined && geometria?.parcial === true) {
346
+ return [
347
+ "NO he juzgado la captura: es de UN CONTROL (un trozo de la pantalla), y la maqueta es la pantalla entera.",
348
+ "Comparar un trozo contra el diseño entero no dice nada. Pide al conductor una captura de la PANTALLA ENTERA",
349
+ "con `xone-hotswap shot` (sin `name=`) y vuelve a llamarme con ella y con la misma `referencia`.",
350
+ ].join("\n");
351
+ }
352
+ /**
353
+ * **El estilo se MIDE en los píxeles de cada control**, con el MISMO esquema para la maqueta y para la captura
354
+ * (`core/estiloMedido.ts`): en la captura, en las cajas del árbol; en la maqueta, en las de su `code.html`.
355
+ * Describirlo con el modelo no valía —medido sobre la calculadora: la misma imagen descrita dos veces difería en
356
+ * diecisiete teclas, y ninguna pasada vio el texto recortado—; medido, cada vez sale lo mismo, en milisegundos.
357
+ * Sin `code.html` no hay cajas en la maqueta: se mide solo lo que se ve mal en el propio aparato (el recorte).
358
+ */
359
+ const estilo = medirEstilo(abierta, referencia, geometria, deps);
360
+ const comparacion = estilo?.comparacion;
168
361
  let veredicto;
169
362
  try {
170
- veredicto = await juzgarPantalla(abierta, { pantalla: entrada.pantalla }, deps.invocar, referencia);
363
+ // Con la comparación MEDIDA contra la maqueta, decide ella; sin maqueta que medir, el crítico opina y los
364
+ // recortes medidos le llegan como hechos.
365
+ veredicto =
366
+ comparacion !== undefined && estilo?.completa === true
367
+ ? { veredicto: hayQueArreglar(comparacion) ? "rojo" : "verde", observaciones: [], necesito: [] }
368
+ : await juzgarPantalla(abierta, { pantalla: entrada.pantalla }, deps.invocar, referencia, [...(geometria?.hechos ?? []), ...(comparacion?.recortes ?? [])]);
171
369
  }
172
370
  catch (error) {
173
371
  // Fallo del ENTORNO —sin modelo, sin clave, sin red—: se dice, y no se convierte en un
@@ -181,9 +379,31 @@ export function crearCriticaVisual(deps) {
181
379
  * quien llama: devolvérselo entero es el eco que ya paga el campo `pantalla`.
182
380
  */
183
381
  const comparado = referencia === undefined ? "" : " (comparado con la referencia)";
382
+ /**
383
+ * **Lo medido decide.** Un control tapado, fuera de la pantalla o que falta es rojo aunque el modelo
384
+ * diga verde: lo saca el árbol de controles, no una opinión — y medido, el modelo no vio la «=»
385
+ * tapada de la calculadora.
386
+ */
387
+ const medidoEnRojo = geometria?.bloqueante === true || (comparacion !== undefined && comparacion.recortes.length > 0);
388
+ const final = medidoEnRojo ? "rojo" : veredicto.veredicto;
184
389
  const lineas = [
185
- `Veredicto visual de «${entrada.pantalla}»${comparado}: ${veredicto.veredicto}.`,
390
+ `Veredicto visual de «${entrada.pantalla}»${comparado}: ${final}${medidoEnRojo && veredicto.veredicto !== "rojo" ? " (lo decide lo medido)" : ""}.`,
186
391
  ];
392
+ if (geometria !== undefined)
393
+ lineas.push("", ...geometria.lineas, "");
394
+ if (comparacion !== undefined) {
395
+ lineas.push(...(estilo?.completa === true
396
+ ? [
397
+ ...informeDeComparacion(comparacion, "medida"),
398
+ // Lo que falla aquí es casi siempre CÓMO se escribe en XOne una clase de Tailwind (una píldora, un
399
+ // botón sin contorno, una fuente): la tabla está medida en el aparato. Se nombra donde hace falta.
400
+ ...(hayQueArreglar(comparacion) ? [`Cómo se escribe en XOne cada clase de la maqueta (medido en el aparato): ${TABLA_DE_TRADUCCION}`] : []),
401
+ ]
402
+ : [
403
+ "MEDIDO en los píxeles de la captura (sin cajas de la maqueta que medir, solo lo que se ve mal en el aparato):",
404
+ ...(comparacion.recortes.length === 0 ? ["- Ningún texto recortado."] : comparacion.recortes.map((r) => `- ${r}`)),
405
+ ]), "");
406
+ }
187
407
  if (veredicto.observaciones.length > 0) {
188
408
  /**
189
409
  * **El aviso no es cortesía: está medido.** Seis vueltas sobre la misma captura
@@ -191,7 +411,9 @@ export function crearCriticaVisual(deps) {
191
411
  * diagnostique no lo evitó. A dónde apunta sí acertó las seis veces. Sin esta línea,
192
412
  * el desarrollador se pone a buscar una rotación que no existe.
193
413
  */
194
- lineas.push("Lo que dice que ve (la REDACCIÓN no es fiable: describe mal la causa. Fíate de QUÉ", "control señala, no de su explicación, y míralo tú):");
414
+ lineas.push(geometria === undefined
415
+ ? "Lo que dice que ve (la REDACCIÓN no es fiable: describe mal la causa. Fíate de QUÉ"
416
+ : "ESTILO, lo que dice el modelo que ve (una OPINIÓN; la redacción no es fiable: fíate de QUÉ", "control señala, no de su explicación, y míralo tú):");
195
417
  for (const o of veredicto.observaciones)
196
418
  lineas.push(`- ${o}`);
197
419
  }
@@ -226,15 +448,13 @@ export function crearCriticaVisual(deps) {
226
448
  * (`conVerificacion`), y eso pide conducir el aparato desde código — medido: no se
227
449
  * puede, porque llegar a una pantalla necesita abrir cajones y mirar el árbol.
228
450
  */
229
- if (veredicto.veredicto === "rojo") {
451
+ if (final === "rojo") {
230
452
  /**
231
- * **Con referencia, el arreglo es de `designer-xone`.** No es un cambio de criterio:
232
- * una diferencia contra una maqueta es visual por definición —forma, tamaño,
233
- * colocación, color— y eso es literalmente lo que su `.md` reclama («del color o del
234
- * tamaño equivocado… también cuando se arregle en un `.xne`»). Sin referencia el
235
- * hallazgo puede ser cualquier cosa, así que esa rama se queda como estaba.
453
+ * **El arreglo es de `developer-xone`, haya maqueta o no.** Mandaba a `designer-xone` con referencia, y el
454
+ * diseñador ya solo escribe en `icons/`: el layout y el CSS, también lo que se ve mal, son del desarrollador.
455
+ * Un rojo dirigido a quien no puede tocar el `.xne` era un arreglo sin dueño.
236
456
  */
237
- const aQuien = referencia === undefined ? "developer-xone" : "designer-xone";
457
+ const aQuien = "developer-xone";
238
458
  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
239
459
  ? " No des la pantalla por buena hasta que yo la vea en verde."
240
460
  : " Y vuelve CON LA MISMA `referencia`: sin ella mi verde solo diría que nada" +
@@ -243,7 +463,16 @@ export function crearCriticaVisual(deps) {
243
463
  if (veredicto.necesito.length > 0) {
244
464
  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).`);
245
465
  }
246
- return lineas.join("\n");
466
+ const informe = lineas.join("\n");
467
+ if (deps.guardarInforme !== undefined) {
468
+ try {
469
+ await deps.guardarInforme(nombreDeArtefacto(entrada.captura), informe);
470
+ }
471
+ catch {
472
+ // Guardarlo es para auditar: que falle no cambia lo que se contesta.
473
+ }
474
+ }
475
+ return informe;
247
476
  }, {
248
477
  name: "xone_critica_visual",
249
478
  description: "Enseña una captura de pantalla del aparato a un revisor visual y devuelve qué se ve " +
@@ -1 +1 @@
1
- {"version":3,"file":"criticaVisual.js","sourceRoot":"","sources":["../../../src/agent/grafo/criticaVisual.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"criticaVisual.js","sourceRoot":"","sources":["../../../src/agent/grafo/criticaVisual.ts"],"names":[],"mappings":"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"}
@@ -16,4 +16,25 @@ export function crearLectorDeReferencias(carpetas) {
16
16
  return readFileSync(real);
17
17
  };
18
18
  }
19
+ /**
20
+ * El `code.html` que acompaña a una maqueta —el de Stitch: `screen.png` y `code.html` en la misma carpeta—,
21
+ * con su ruta en disco, o `undefined` si no hay. Con la MISMA comprobación que la lectura: por el texto de
22
+ * la carpeta y por el `realpath`, para que un enlace no lleve a renderizar un HTML de fuera.
23
+ */
24
+ export function crearLocalizadorDeHtmlDeMaqueta(carpetas) {
25
+ return (imagen) => {
26
+ const base = imagen.origen === "artefactos" ? carpetas.artefactos : imagen.origen === "adjuntos" ? carpetas.adjuntos : carpetas.raiz;
27
+ if (base === undefined)
28
+ return undefined;
29
+ const carpetaRelativa = imagen.relativa.includes("/") ? imagen.relativa.slice(0, imagen.relativa.lastIndexOf("/")) : "";
30
+ try {
31
+ const real = realpathSync(join(base, carpetaRelativa, "code.html"));
32
+ const baseReal = realpathSync(base);
33
+ return real.startsWith(baseReal.endsWith(sep) ? baseReal : baseReal + sep) ? real : undefined;
34
+ }
35
+ catch {
36
+ return undefined;
37
+ }
38
+ };
39
+ }
19
40
  //# sourceMappingURL=lectorDeReferencias.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lectorDeReferencias.js","sourceRoot":"","sources":["../../../src/agent/grafo/lectorDeReferencias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAwBtC,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAA8B;IACrE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrI,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,4BAA4B;QACpF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;YAC9F,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lectorDeReferencias.js","sourceRoot":"","sources":["../../../src/agent/grafo/lectorDeReferencias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAwBtC,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAA8B;IACrE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrI,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,4BAA4B;QACpF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;YAC9F,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAAC,QAA8B;IAC5E,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrI,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxH,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}