xonecode 0.17.2 → 0.20.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-BRVuyPBf.js → index-BvPUqjUm.js} +72 -72
- package/apps/web/dist/assets/{index-DLfF2uEK.css → index-CGEXMJBx.css} +1 -1
- package/apps/web/dist/assets/{php-B5LpMCn-.js → php-Dk28VW45.js} +1 -1
- package/apps/web/dist/assets/{ruby-Clm-qfwM.js → ruby-CPzEcmdp.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/config/iconosEnRed.js +47 -0
- package/dist/agent/config/iconosEnRed.js.map +1 -0
- package/dist/agent/config/modelos.js +13 -8
- package/dist/agent/config/modelos.js.map +1 -1
- package/dist/agent/dispositivos/decodificarImagen.js +62 -0
- package/dist/agent/dispositivos/decodificarImagen.js.map +1 -0
- package/dist/agent/grafo/atributosXone.js +58 -0
- package/dist/agent/grafo/atributosXone.js.map +1 -0
- package/dist/agent/grafo/buscarIcono.js +92 -0
- package/dist/agent/grafo/buscarIcono.js.map +1 -0
- package/dist/agent/grafo/compararCapturas.js +103 -0
- package/dist/agent/grafo/compararCapturas.js.map +1 -0
- package/dist/agent/grafo/criticaVisual.js +23 -3
- package/dist/agent/grafo/criticaVisual.js.map +1 -1
- package/dist/agent/grafo/diferenciaDeCapturas.js +88 -0
- package/dist/agent/grafo/diferenciaDeCapturas.js.map +1 -0
- package/dist/agent/grafo/generarFondoSvg.js +83 -0
- package/dist/agent/grafo/generarFondoSvg.js.map +1 -0
- package/dist/agent/grafo/lectorDeReferencias.js +19 -0
- package/dist/agent/grafo/lectorDeReferencias.js.map +1 -0
- package/dist/agent/grafo/xoneAgent.js +11 -3
- package/dist/agent/grafo/xoneAgent.js.map +1 -1
- package/dist/agent/motores/trueforge/capacidades.js +49 -1
- package/dist/agent/motores/trueforge/capacidades.js.map +1 -1
- package/dist/agent/motores/trueforge/esperas.js +61 -0
- package/dist/agent/motores/trueforge/esperas.js.map +1 -0
- package/dist/agent/motores/trueforge/eventosTrueforge.js +11 -1
- package/dist/agent/motores/trueforge/eventosTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/informesDeHijos.js +63 -0
- package/dist/agent/motores/trueforge/informesDeHijos.js.map +1 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.js +118 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.js.map +1 -0
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.js +186 -0
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.js.map +1 -0
- package/dist/agent/motores/trueforge/modeloLangchain.js +5 -0
- package/dist/agent/motores/trueforge/modeloLangchain.js.map +1 -1
- package/dist/agent/motores/trueforge/resumenSeguro.js +52 -0
- package/dist/agent/motores/trueforge/resumenSeguro.js.map +1 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.js +545 -26
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/toolsDeFichero.js +69 -3
- package/dist/agent/motores/trueforge/toolsDeFichero.js.map +1 -1
- package/dist/agent/subagentes/agentesEnDisco.js +88 -19
- package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
- package/dist/agent/turno/diagnosticoDeTools.js +44 -3
- package/dist/agent/turno/diagnosticoDeTools.js.map +1 -1
- package/dist/agent/turno/informeDeTraza.js +66 -4
- package/dist/agent/turno/informeDeTraza.js.map +1 -1
- package/dist/agent/turno/registroDeFallos.js +6 -1
- package/dist/agent/turno/registroDeFallos.js.map +1 -1
- package/dist/agent/turno/resumenDeTool.js +12 -0
- package/dist/agent/turno/resumenDeTool.js.map +1 -1
- package/dist/agent/turno/turnoReal.js +8 -2
- package/dist/agent/turno/turnoReal.js.map +1 -1
- package/dist/cli/run.js +11 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/core/agentes.js +36 -2
- package/dist/core/agentes.js.map +1 -1
- package/dist/core/analisisDeSesion.js +198 -0
- package/dist/core/analisisDeSesion.js.map +1 -0
- package/dist/core/atributosXone.js +187 -0
- package/dist/core/atributosXone.js.map +1 -0
- package/dist/core/compararCapturas.js +405 -0
- package/dist/core/compararCapturas.js.map +1 -0
- package/dist/core/esfuerzo.js +33 -0
- package/dist/core/esfuerzo.js.map +1 -1
- package/dist/core/fallos.js.map +1 -1
- package/dist/core/fondosSvg.js +223 -0
- package/dist/core/fondosSvg.js.map +1 -0
- package/dist/core/iconos.js +140 -0
- package/dist/core/iconos.js.map +1 -0
- package/dist/core/modoDeEscritura.js +40 -0
- package/dist/core/modoDeEscritura.js.map +1 -1
- package/dist/core/notify.js +8 -0
- package/dist/core/notify.js.map +1 -1
- package/dist/core/nucleoXone.js +113 -0
- package/dist/core/nucleoXone.js.map +1 -0
- package/dist/core/paqueteDeSoporte.js +118 -0
- package/dist/core/paqueteDeSoporte.js.map +1 -0
- package/dist/core/ports.js +31 -0
- package/dist/core/ports.js.map +1 -1
- package/dist/core/referenciasDeImagen.js +55 -0
- package/dist/core/referenciasDeImagen.js.map +1 -0
- package/dist/core/selectorDeCarpeta.js +15 -1
- package/dist/core/selectorDeCarpeta.js.map +1 -1
- package/dist/core/settings.js +19 -4
- package/dist/core/settings.js.map +1 -1
- package/dist/core/shellDeAgente.js +39 -0
- package/dist/core/shellDeAgente.js.map +1 -1
- package/dist/core/tareasDelPlan.js +69 -7
- package/dist/core/tareasDelPlan.js.map +1 -1
- package/dist/web/servidor/arranque.js +110 -0
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/sesiones.js +8 -0
- package/dist/web/servidor/sesiones.js.map +1 -1
- package/dist/web/servidor/soporte.js +571 -0
- package/dist/web/servidor/soporte.js.map +1 -0
- package/dist/web/servidor/transporte.js.map +1 -1
- package/package.json +4 -1
- package/skills/xone-development/references/css/propiedades-y-herencia.md +2 -0
- package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +2 -2
- package/skills/xone-development/references/datos/appdata.md +5 -3
- package/skills/xone-development/references/fundamentos/errores-comunes.md +49 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +2 -0
- package/skills/xone-hotswap/SKILL.md +4 -0
- package/skills/xone-hotswap/scripts/xone-log-android +18 -1
- package/skills/xone-plan-builder/SKILL.md +18 -10
- package/skills/xone-plan-builder/references/TASKS-FORMAT.md +13 -5
- package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +1 -0
- package/skills/xone-spec-builder/SKILL.md +3 -3
package/dist/core/esfuerzo.js
CHANGED
|
@@ -150,4 +150,37 @@ export function esfuerzoAplicable(elegido, proveedor, modelo, vivas) {
|
|
|
150
150
|
return undefined;
|
|
151
151
|
return nivelesDeEsfuerzo(proveedor, modelo, vivas)?.includes(elegido) === true ? elegido : undefined;
|
|
152
152
|
}
|
|
153
|
+
export function claseDeTrabajo(a) {
|
|
154
|
+
return a.ejecucion === true ? "mecanica" : undefined;
|
|
155
|
+
}
|
|
156
|
+
export function esPensamiento(valor) {
|
|
157
|
+
return valor === "apagado" || valor === "activo";
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Qué modelos admiten apagar el pensamiento con `thinking: {type: "disabled"}`. Solo DeepSeek, y MEDIDO contra la
|
|
161
|
+
* API: sin nada piensa, con `low` o `high` piensa casi igual (25, 23 y 23 tokens con una pregunta fácil), y con
|
|
162
|
+
* `thinking` desactivado la salida bajó de 27 tokens a 1. Lo demás no se sabe, y un parámetro que un modelo no
|
|
163
|
+
* conoce se paga en un 400: sin fila no hay interruptor.
|
|
164
|
+
*/
|
|
165
|
+
export function admiteApagarElPensamiento(proveedor, modelo) {
|
|
166
|
+
return proveedor === "deepseek" && modelo.startsWith("deepseek");
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* El pensamiento POR OMISIÓN de un subagente, por FAMILIA de proveedor y clase de trabajo: el que vale cuando
|
|
170
|
+
* su `.md` no dice nada. Antes esto fue un nivel `low` para lo mecánico, y no hacía nada: en una pasada real
|
|
171
|
+
* el conductor con `low` seguía dedicando el 80 % de su salida a razonar. Lo mecánico —leer una salida, lanzar
|
|
172
|
+
* un comando— se apaga. **Lo que NO está medido** es que apagarlo no empeore el resultado del conductor al
|
|
173
|
+
* interpretar un log raro; la traza (razonamiento por origen) es lo que permite comprobarlo.
|
|
174
|
+
*/
|
|
175
|
+
const PENSAMIENTO_POR_FAMILIA = {
|
|
176
|
+
deepseek: { mecanica: "apagado" },
|
|
177
|
+
};
|
|
178
|
+
export function pensamientoPorOmision(proveedor, clase) {
|
|
179
|
+
return clase === undefined ? undefined : PENSAMIENTO_POR_FAMILIA[proveedor]?.[clase];
|
|
180
|
+
}
|
|
181
|
+
/** El pensamiento que se va a aplicar de verdad: lo que dice el agente, o la omisión de su familia, y solo si el modelo lo admite. */
|
|
182
|
+
export function pensamientoAplicable(elegido, proveedor, modelo, clase) {
|
|
183
|
+
const quiere = elegido ?? pensamientoPorOmision(proveedor, clase);
|
|
184
|
+
return quiere === "apagado" && admiteApagarElPensamiento(proveedor, modelo) ? "apagado" : quiere === "activo" ? "activo" : undefined;
|
|
185
|
+
}
|
|
153
186
|
//# sourceMappingURL=esfuerzo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esfuerzo.js","sourceRoot":"","sources":["../../src/core/esfuerzo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"esfuerzo.js","sourceRoot":"","sources":["../../src/core/esfuerzo.ts"],"names":[],"mappings":"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"}
|
package/dist/core/fallos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallos.js","sourceRoot":"","sources":["../../src/core/fallos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;
|
|
1
|
+
{"version":3,"file":"fallos.js","sourceRoot":"","sources":["../../src/core/fallos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fondos SVG para frames y botones: degradados, sombras y resplandores (IXCODE-18).
|
|
3
|
+
*
|
|
4
|
+
* XOne no tiene degradados ni desenfoques propios, y el `imgbk` acepta SVG. Es la parte PURA:
|
|
5
|
+
* una plantilla por tipo, sin red ni puerto. Lo que vuelve es texto que `write_file` escribe.
|
|
6
|
+
*
|
|
7
|
+
* ## Por qué un generador y no un SVG tecleado por el modelo
|
|
8
|
+
*
|
|
9
|
+
* Un degradado son ids, `url(#…)`, offsets y coordenadas, y un error ahí no da error: XOne
|
|
10
|
+
* ignora en silencio lo que no entiende y el fondo simplemente no se ve. Una plantilla no se
|
|
11
|
+
* equivoca en eso, y valida los colores antes de escribir nada.
|
|
12
|
+
*
|
|
13
|
+
* ## Lo que se midió en un emulador Android (`docs/DECISIONES.md`, «Fondos SVG en XOne»)
|
|
14
|
+
*
|
|
15
|
+
* - `linearGradient`, `radialGradient` y `stop-opacity` SE PINTAN. Los FILTROS (`feGaussianBlur`,
|
|
16
|
+
* `feDropShadow`) SE IGNORAN: por eso aquí no hay ni un `<filter>`. La sombra son rectángulos
|
|
17
|
+
* apilados de opacidad baja, y el resplandor un degradado que acaba transparente.
|
|
18
|
+
* - `border-corner-radius` NO recorta el `imgbk`: **la esquina se DIBUJA en el SVG**.
|
|
19
|
+
* - Con `preserveAspectRatio="none"` y una proporción distinta a la del control, la esquina sale
|
|
20
|
+
* achatada; con el `viewBox` de la MISMA proporción sale limpia. Por eso se pide el ancho y el
|
|
21
|
+
* alto del control, y el `viewBox` los lleva.
|
|
22
|
+
*
|
|
23
|
+
* Sin `preserveAspectRatio`, XOne ya estira el SVG hasta llenar el control (medido: uno 1:1 en un
|
|
24
|
+
* frame ancho se deformó a elipse, sin bandas). Se escribe `none` igualmente: es lo que se mide
|
|
25
|
+
* hoy y no depende de que otro renderizador use `meet` y deje bandas vacías.
|
|
26
|
+
*
|
|
27
|
+
* ## Todo va RELATIVO al alto
|
|
28
|
+
*
|
|
29
|
+
* El `viewBox` mide 100 de alto y `ancho/alto·100` de ancho, y el radio, el margen y la sombra
|
|
30
|
+
* están en esa escala. Así solo importa la PROPORCIÓN del control, no sus píxeles: el mismo SVG
|
|
31
|
+
* vale en cualquier densidad mientras la relación ancho/alto se mantenga.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* ## Los colores llegan COMO EN XONE, y se convierten
|
|
35
|
+
*
|
|
36
|
+
* XOne escribe un color `#RRGGBB` o `#AARRGGBB` —el alfa PRIMERO, como Android (la documentación:
|
|
37
|
+
* `fillcolor: "#7F00FF00"`, «ARGB: semi-transparente»)—. SVG y CSS de HTML lo esperan al final,
|
|
38
|
+
* `#RRGGBBAA`. Copiar un `#7F00FF00` tal cual a un SVG lo leería como rojo 7F, azul FF y alfa 0:
|
|
39
|
+
* transparente y del color equivocado, sin un solo error. Por eso la tool acepta la forma de XOne
|
|
40
|
+
* y aquí se separa en `#RRGGBB` + opacidad (`stop-opacity`/`fill-opacity`), que es lo que SVG
|
|
41
|
+
* entiende en cualquier renderizador.
|
|
42
|
+
*/
|
|
43
|
+
export const NOMBRE_GENERAR_FONDO = "generar_fondo_svg";
|
|
44
|
+
/**
|
|
45
|
+
* Las medidas de un control se declaran en XOne mezclando unidades (`width="90%" height="60p"`),
|
|
46
|
+
* y la tool las acepta así. **Es una ESTIMACIÓN**, sobre el aparato donde se midió: un ancho de
|
|
47
|
+
* pantalla de 1080 px y 1,144 px por `p` (`90%`×`90p` salieron 972×103 en el árbol de controles).
|
|
48
|
+
* En otro dispositivo el `%` sigue a la pantalla y la `p` a la densidad, así que la proporción
|
|
49
|
+
* cambia; la respuesta de la tool lo dice.
|
|
50
|
+
*/
|
|
51
|
+
export const ANCHO_DE_PANTALLA_DE_REFERENCIA = 1080;
|
|
52
|
+
export const PIXELES_POR_P = 1.144;
|
|
53
|
+
/** De `90%`, `60p`, `120px` o `120` a píxeles de referencia. `%` solo en el ancho. */
|
|
54
|
+
export function medidaEnPixeles(valor, eje) {
|
|
55
|
+
if (typeof valor === "number") {
|
|
56
|
+
return Number.isFinite(valor) && valor > 0 ? { px: valor } : { motivo: `el ${eje} tiene que ser positivo` };
|
|
57
|
+
}
|
|
58
|
+
const m = /^\s*(\d+(?:[.,]\d+)?)\s*(%|p|px)?\s*$/.exec(valor);
|
|
59
|
+
if (m === null)
|
|
60
|
+
return { motivo: `«${valor}» no es una medida: \`90%\`, \`60p\`, \`120px\` o un número` };
|
|
61
|
+
const n = Number(m[1].replace(",", "."));
|
|
62
|
+
if (!(n > 0))
|
|
63
|
+
return { motivo: `el ${eje} tiene que ser positivo` };
|
|
64
|
+
if (m[2] === "%") {
|
|
65
|
+
return eje === "ancho"
|
|
66
|
+
? { px: (n / 100) * ANCHO_DE_PANTALLA_DE_REFERENCIA }
|
|
67
|
+
: { motivo: "el alto en % depende del contenedor y no se puede estimar: dalo en `p` o en píxeles" };
|
|
68
|
+
}
|
|
69
|
+
return { px: m[2] === "p" ? n * PIXELES_POR_P : n };
|
|
70
|
+
}
|
|
71
|
+
export const TIPOS_DE_FONDO = ["degradado-lineal", "degradado-radial", "sombra", "glow"];
|
|
72
|
+
/** Proporción ancho/alto aceptada: fuera de ella la tarjeta de la sombra no cabe o no es un botón. */
|
|
73
|
+
export const PROPORCION_MINIMA = 0.5;
|
|
74
|
+
export const PROPORCION_MAXIMA = 40;
|
|
75
|
+
const ALTO = 100;
|
|
76
|
+
const PORCENTAJE_DE_RADIO_POR_OMISION = 25;
|
|
77
|
+
/** Margen a cada lado de la tarjeta de la sombra: cabe la difusión (`DIFUSION`) sin salirse. */
|
|
78
|
+
const MARGEN_DE_SOMBRA = 14;
|
|
79
|
+
const DIFUSION_DE_SOMBRA = 12;
|
|
80
|
+
const CAPAS_DE_SOMBRA = 7;
|
|
81
|
+
const DESPLAZAMIENTO_DE_SOMBRA = 5;
|
|
82
|
+
const INTENSIDAD_DE_SOMBRA = { suave: 0.03, media: 0.05, fuerte: 0.08 };
|
|
83
|
+
export const INTENSIDADES = Object.keys(INTENSIDAD_DE_SOMBRA);
|
|
84
|
+
const COLOR_DE_XONE = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
85
|
+
/** Por qué no vale como color de XOne, o `undefined`. Vale `#RGB`, `#RRGGBB` y `#AARRGGBB`. */
|
|
86
|
+
export function motivoDeColorDeXoneInaceptable(color) {
|
|
87
|
+
return COLOR_DE_XONE.test(color)
|
|
88
|
+
? undefined
|
|
89
|
+
: `«${color}» no vale: el color va como en XOne, #RRGGBB o #AARRGGBB (alfa primero). Un nombre CSS o currentColor no se usan`;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* De un color de XOne al de SVG. **`#AARRGGBB` de XOne → `#RRGGBB` + opacidad**: el alfa es el
|
|
93
|
+
* PRIMER byte, no el último como en el `#RRGGBBAA` de HTML.
|
|
94
|
+
*/
|
|
95
|
+
export function colorDeXoneASvg(color) {
|
|
96
|
+
const h = color.slice(1);
|
|
97
|
+
if (h.length === 3)
|
|
98
|
+
return { hex: `#${[...h].map((c) => c + c).join("")}`, opacidad: 1 };
|
|
99
|
+
if (h.length === 8)
|
|
100
|
+
return { hex: `#${h.slice(2)}`, opacidad: Number((parseInt(h.slice(0, 2), 16) / 255).toFixed(2)) };
|
|
101
|
+
return { hex: `#${h}`, opacidad: 1 };
|
|
102
|
+
}
|
|
103
|
+
/** Un nombre de fichero sin ruta ni punto: el fichero será `bg_<nombre>.svg`. */
|
|
104
|
+
export function motivoDeNombreDeFondoInaceptable(nombre) {
|
|
105
|
+
return /^[a-z][a-z0-9_]{0,39}$/.test(nombre)
|
|
106
|
+
? undefined
|
|
107
|
+
: `«${nombre}» no vale como nombre: minúsculas, dígitos y guion bajo, empezando por letra (menú_inicio no; menu_inicio sí)`;
|
|
108
|
+
}
|
|
109
|
+
export function nombreDeFicheroDeFondo(nombre) {
|
|
110
|
+
return `bg_${nombre}.svg`;
|
|
111
|
+
}
|
|
112
|
+
export function rutaDeFondo(nombre) {
|
|
113
|
+
return `/icons/${nombreDeFicheroDeFondo(nombre)}`;
|
|
114
|
+
}
|
|
115
|
+
/** Por qué la petición no vale, o `undefined`. Las cosas que la plantilla no sabría dibujar. */
|
|
116
|
+
export function motivoDePeticionInaceptable(p) {
|
|
117
|
+
if (!Number.isFinite(p.ancho) || !Number.isFinite(p.alto) || p.ancho <= 0 || p.alto <= 0) {
|
|
118
|
+
return "ancho y alto son los del control y tienen que ser positivos";
|
|
119
|
+
}
|
|
120
|
+
const proporcion = p.ancho / p.alto;
|
|
121
|
+
if (proporcion < PROPORCION_MINIMA || proporcion > PROPORCION_MAXIMA) {
|
|
122
|
+
return `la proporción ancho/alto (${redondear(proporcion)}) queda fuera de ${PROPORCION_MINIMA}–${PROPORCION_MAXIMA}`;
|
|
123
|
+
}
|
|
124
|
+
const [minimo, maximo] = p.tipo === "degradado-lineal" || p.tipo === "degradado-radial" ? [2, 4] : [1, 1];
|
|
125
|
+
if (p.colores.length < minimo || p.colores.length > maximo) {
|
|
126
|
+
return minimo === maximo
|
|
127
|
+
? `«${p.tipo}» lleva exactamente ${minimo} color en \`colores\``
|
|
128
|
+
: `«${p.tipo}» lleva de ${minimo} a ${maximo} colores`;
|
|
129
|
+
}
|
|
130
|
+
for (const c of [...p.colores, ...(p.fondo === undefined ? [] : [p.fondo])]) {
|
|
131
|
+
const motivo = motivoDeColorDeXoneInaceptable(c);
|
|
132
|
+
if (motivo !== undefined)
|
|
133
|
+
return motivo;
|
|
134
|
+
}
|
|
135
|
+
if (p.radio !== undefined && (!Number.isFinite(p.radio) || p.radio < 0 || p.radio > 50)) {
|
|
136
|
+
return "`radio` es un porcentaje del alto entre 0 y 50";
|
|
137
|
+
}
|
|
138
|
+
if (p.angulo !== undefined && !Number.isFinite(p.angulo))
|
|
139
|
+
return "`angulo` tiene que ser un número";
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
function redondear(n) {
|
|
143
|
+
return Number(n.toFixed(2));
|
|
144
|
+
}
|
|
145
|
+
const num = (n) => String(redondear(n));
|
|
146
|
+
function paradas(colores, opacidades) {
|
|
147
|
+
const ultimo = Math.max(colores.length - 1, 1);
|
|
148
|
+
return colores
|
|
149
|
+
.map((c, i) => {
|
|
150
|
+
const op = redondear((opacidades?.[i] ?? 1) * c.opacidad);
|
|
151
|
+
return `<stop offset="${num((i / ultimo) * 100)}%" stop-color="${c.hex}"${op < 1 ? ` stop-opacity="${op}"` : ""}/>`;
|
|
152
|
+
})
|
|
153
|
+
.join("");
|
|
154
|
+
}
|
|
155
|
+
const relleno = (c) => `fill="${c.hex}"${c.opacidad < 1 ? ` fill-opacity="${c.opacidad}"` : ""}`;
|
|
156
|
+
const envolver = (ancho, dentro) => `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${num(ancho)} ${ALTO}" preserveAspectRatio="none">${dentro}</svg>`;
|
|
157
|
+
/**
|
|
158
|
+
* El SVG de la petición. **Lanza si no es válida**: quien lo llama comprueba antes con
|
|
159
|
+
* `motivoDePeticionInaceptable` y devuelve el motivo como texto (la tool no lanza).
|
|
160
|
+
*/
|
|
161
|
+
export function generarFondo(p) {
|
|
162
|
+
const motivo = motivoDePeticionInaceptable(p);
|
|
163
|
+
if (motivo !== undefined)
|
|
164
|
+
throw new Error(motivo);
|
|
165
|
+
const W = redondear((p.ancho / p.alto) * ALTO);
|
|
166
|
+
const H = ALTO;
|
|
167
|
+
const colores = p.colores.map(colorDeXoneASvg);
|
|
168
|
+
const r = Math.min(p.radio ?? PORCENTAJE_DE_RADIO_POR_OMISION, 50);
|
|
169
|
+
const esquina = r > 0 ? ` rx="${num(r)}" ry="${num(r)}"` : "";
|
|
170
|
+
if (p.tipo === "degradado-lineal") {
|
|
171
|
+
// Los extremos van de borde a borde del rectángulo a lo largo del ángulo (como el `linear-
|
|
172
|
+
// gradient` de CSS) y en coordenadas ABSOLUTAS: en un rectángulo que no es cuadrado, el ángulo
|
|
173
|
+
// en coordenadas relativas al objeto se tuerce.
|
|
174
|
+
const a = ((p.angulo ?? 90) * Math.PI) / 180;
|
|
175
|
+
const dx = Math.cos(a);
|
|
176
|
+
const dy = Math.sin(a);
|
|
177
|
+
const largo = Math.abs((W / 2) * dx) + Math.abs((H / 2) * dy);
|
|
178
|
+
const x1 = W / 2 - dx * largo;
|
|
179
|
+
const y1 = H / 2 - dy * largo;
|
|
180
|
+
const x2 = W / 2 + dx * largo;
|
|
181
|
+
const y2 = H / 2 + dy * largo;
|
|
182
|
+
return {
|
|
183
|
+
anchoDelViewBox: W,
|
|
184
|
+
svg: envolver(W, `<defs><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="${num(x1)}" y1="${num(y1)}" x2="${num(x2)}" y2="${num(y2)}">${paradas(colores)}</linearGradient></defs>` +
|
|
185
|
+
`<rect width="${num(W)}" height="${H}"${esquina} fill="url(#g)"/>`),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
if (p.tipo === "degradado-radial") {
|
|
189
|
+
// Circular, no estirado: el radio llega al borde del lado MÁS LARGO.
|
|
190
|
+
return {
|
|
191
|
+
anchoDelViewBox: W,
|
|
192
|
+
svg: envolver(W, `<defs><radialGradient id="g" gradientUnits="userSpaceOnUse" cx="${num(W / 2)}" cy="${num(H / 2)}" r="${num(Math.max(W, H) / 2)}">${paradas(colores)}</radialGradient></defs>` +
|
|
193
|
+
`<rect width="${num(W)}" height="${H}"${esquina} fill="url(#g)"/>`),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (p.tipo === "sombra") {
|
|
197
|
+
// Sin filtros —se ignoran—: rectángulos apilados, cada vez más grandes y más transparentes.
|
|
198
|
+
// La tarjeta es más pequeña que el control para que la difusión quepa dentro de su caja.
|
|
199
|
+
const opacidad = INTENSIDAD_DE_SOMBRA[p.intensidad ?? "media"];
|
|
200
|
+
const cx = MARGEN_DE_SOMBRA;
|
|
201
|
+
const cy = 8;
|
|
202
|
+
const cw = W - 2 * MARGEN_DE_SOMBRA;
|
|
203
|
+
const ch = H - cy - MARGEN_DE_SOMBRA - DESPLAZAMIENTO_DE_SOMBRA - DIFUSION_DE_SOMBRA + 4;
|
|
204
|
+
let capas = "";
|
|
205
|
+
for (let i = CAPAS_DE_SOMBRA; i >= 1; i--) {
|
|
206
|
+
const s = (i / CAPAS_DE_SOMBRA) * DIFUSION_DE_SOMBRA;
|
|
207
|
+
capas += `<rect x="${num(cx - s)}" y="${num(cy + DESPLAZAMIENTO_DE_SOMBRA - s)}" width="${num(cw + 2 * s)}" height="${num(ch + 2 * s)}" rx="${num(r + s)}" ry="${num(r + s)}" fill="#000000" fill-opacity="${opacidad}"/>`;
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
anchoDelViewBox: W,
|
|
211
|
+
svg: envolver(W, `${capas}<rect x="${num(cx)}" y="${num(cy)}" width="${num(cw)}" height="${num(ch)}" rx="${num(r)}" ry="${num(r)}" ${relleno(colores[0])}/>`),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// glow: una elipse que llena la caja, con un degradado que acaba transparente.
|
|
215
|
+
const luz = colores[0];
|
|
216
|
+
const detras = p.fondo === undefined ? "" : `<rect width="${num(W)}" height="${H}"${esquina} ${relleno(colorDeXoneASvg(p.fondo))}/>`;
|
|
217
|
+
return {
|
|
218
|
+
anchoDelViewBox: W,
|
|
219
|
+
svg: envolver(W, `<defs><radialGradient id="g" cx="50%" cy="50%" r="50%">${paradas([luz, luz], [0.9, 0])}</radialGradient></defs>` +
|
|
220
|
+
`${detras}<ellipse cx="${num(W / 2)}" cy="${num(H / 2)}" rx="${num(W / 2)}" ry="${num(H / 2)}" fill="url(#g)"/>`),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=fondosSvg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fondosSvg.js","sourceRoot":"","sources":["../../src/core/fondosSvg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iconos para quien no tiene los assets (IXCODE-18): buscar uno en Iconify y traer su SVG.
|
|
3
|
+
*
|
|
4
|
+
* Es la parte PURA: las reglas de qué se pide y qué se acepta de vuelta. La red entra por
|
|
5
|
+
* `IconosPort` (`core/ports.ts`) y la hace `agent/config/iconosEnRed.ts`; la tool es
|
|
6
|
+
* `agent/grafo/buscarIcono.ts`.
|
|
7
|
+
*
|
|
8
|
+
* ## Por qué se pide el color Y el tamaño, siempre
|
|
9
|
+
*
|
|
10
|
+
* Medido contra `api.iconify.design`: sin `color` el SVG trae `stroke="currentColor"`, y sin
|
|
11
|
+
* `height` trae `width="1em" height="1em"`. La documentación de XOne no dice qué hace su render
|
|
12
|
+
* con ninguna de las dos —ni tiñe por CSS ni resuelve `em`—, y XOne ignora en silencio lo que
|
|
13
|
+
* no entiende: un icono sin tinte válido saldría negro, o sin tamaño, sin un solo aviso. Así
|
|
14
|
+
* que el color entra como hexadecimal EXPLÍCITO, la altura como píxeles, y el SVG que vuelve
|
|
15
|
+
* ya los lleva cocidos. La regla es del código, no de un prompt.
|
|
16
|
+
*
|
|
17
|
+
* ## Un SVG es TEXTO, y va al proyecto
|
|
18
|
+
*
|
|
19
|
+
* Por eso no hay tool de escritura propia: lo escribe `write_file` con su diff y su
|
|
20
|
+
* aprobación de siempre. Y por eso se le pide a lo que vuelve de la red una forma mínima
|
|
21
|
+
* (`svgAceptable`): un `<script>` o un `onload` dentro de un fichero que acaba en la app del
|
|
22
|
+
* cliente no es un icono.
|
|
23
|
+
*/
|
|
24
|
+
export const NOMBRE_BUSCAR_ICONO = "buscar_icono";
|
|
25
|
+
/**
|
|
26
|
+
* Quién la recibe: quien escribe el proyecto entero, que es quien puede dejar el icono en
|
|
27
|
+
* `icons/`. Regla de DATO —la misma que `recibeIncorporarAdjunto`—, no una lista de nombres: de
|
|
28
|
+
* los de serie, `designer-xone` y `developer-xone`. Vive en `core/` porque la usan DOS: la tool
|
|
29
|
+
* (`agent/grafo/buscarIcono.ts`) y la ficha con la que el orquestador conoce a su equipo
|
|
30
|
+
* (`fichaDeAgente`), y dos copias de la regla serían dos sitios donde puede divergir.
|
|
31
|
+
*
|
|
32
|
+
* Solo llega a `motor: "modelo"`: un especialista de motor externo corre en otro proceso y no
|
|
33
|
+
* recibe tools propias (la ficha lo comprueba aparte).
|
|
34
|
+
*/
|
|
35
|
+
export function recibeBuscarIcono(a) {
|
|
36
|
+
if (a.soloLectura || a.ejecucion === true)
|
|
37
|
+
return false;
|
|
38
|
+
// Sin `escribeEn` escribe el proyecto entero; con él, solo si una de sus carpetas cubre `icons/` —el diseñador, que
|
|
39
|
+
// es quien hace los recursos—. El documentador (`/doc/`) sigue sin ellas.
|
|
40
|
+
const carpetas = a.escribeEn ?? [];
|
|
41
|
+
return carpetas.length === 0 || carpetas.some((c) => `/${CARPETA_DE_ICONOS}/`.startsWith(c.endsWith("/") ? c : `${c}/`));
|
|
42
|
+
}
|
|
43
|
+
/** La carpeta de una app XOne donde viven los iconos (`fundamentos/plataforma-y-anatomia…`). */
|
|
44
|
+
export const CARPETA_DE_ICONOS = "icons";
|
|
45
|
+
/** Tope de la llamada de red: una búsqueda o un SVG son unos cientos de bytes. */
|
|
46
|
+
export const TOPE_DE_ICONOS_MS = 10_000;
|
|
47
|
+
/** Lo que se acepta de vuelta. Un icono de Iconify son unos cientos de bytes; esto es holgura. */
|
|
48
|
+
export const TOPE_DE_SVG_BYTES = 16 * 1024;
|
|
49
|
+
export const LIMITES_DE_BUSQUEDA = { porOmision: 12, maximo: 32 };
|
|
50
|
+
export const LIMITES_DE_TAMANO = { porOmision: 24, minimo: 8, maximo: 512 };
|
|
51
|
+
const ID_DE_ICONO = /^[a-z0-9]+(?:-[a-z0-9]+)*:[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
52
|
+
const PREFIJO = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
53
|
+
const COLOR_HEX = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
|
|
54
|
+
/** La base es UNA constante: un host distinto es una decisión, no un parámetro. */
|
|
55
|
+
export const BASE_DE_ICONIFY = "https://api.iconify.design";
|
|
56
|
+
/** Por qué un id no vale, o `undefined`. Forma `prefijo:nombre`, en minúsculas y con guiones. */
|
|
57
|
+
export function motivoDeIdInaceptable(id) {
|
|
58
|
+
return ID_DE_ICONO.test(id) ? undefined : `«${id}» no es un id de icono: la forma es prefijo:nombre (lucide:home)`;
|
|
59
|
+
}
|
|
60
|
+
export function motivoDePrefijoInaceptable(prefijo) {
|
|
61
|
+
return PREFIJO.test(prefijo) ? undefined : `«${prefijo}» no es un prefijo de colección (lucide, mdi, tabler…)`;
|
|
62
|
+
}
|
|
63
|
+
/** Solo hexadecimal: `currentColor` o un nombre CSS dejarían el tinte a merced del render. */
|
|
64
|
+
export function motivoDeColorInaceptable(color) {
|
|
65
|
+
// Un color de XOne con alfa (#AARRGGBB): no se acepta en silencio sin el alfa, ni se lee como
|
|
66
|
+
// #RRGGBBAA. El icono no lleva transparencia en su color, así que se dice.
|
|
67
|
+
if (/^#[0-9a-fA-F]{8}$/.test(color)) {
|
|
68
|
+
if (color.slice(1, 3).toUpperCase() === "FF")
|
|
69
|
+
return undefined; // opaco: vale, y se normaliza
|
|
70
|
+
return `«${color}» es #AARRGGBB (XOne, alfa primero) y no es opaco: un icono no lleva transparencia en el color. Usa #${color.slice(3)} (#RRGGBB)`;
|
|
71
|
+
}
|
|
72
|
+
return COLOR_HEX.test(color)
|
|
73
|
+
? undefined
|
|
74
|
+
: `«${color}» no vale: el color va como hexadecimal (#1a73e8). currentColor y los nombres CSS no se usan, porque XOne no los documenta`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* El color como lo pide Iconify: `#RRGGBB`. Un `#FFRRGGBB` de XOne (opaco) pierde su alfa `FF`, que
|
|
78
|
+
* no dice nada; uno con alfa menor ya lo rechazó `motivoDeColorInaceptable`. Se llama DESPUÉS de validar.
|
|
79
|
+
*/
|
|
80
|
+
export function colorParaIconify(color) {
|
|
81
|
+
return /^#[0-9a-fA-F]{8}$/.test(color) ? `#${color.slice(3)}` : color;
|
|
82
|
+
}
|
|
83
|
+
export function urlDeBusqueda(consulta, limite, prefijo) {
|
|
84
|
+
const url = new URL(`${BASE_DE_ICONIFY}/search`);
|
|
85
|
+
url.searchParams.set("query", consulta);
|
|
86
|
+
url.searchParams.set("limit", String(limite));
|
|
87
|
+
if (prefijo !== undefined)
|
|
88
|
+
url.searchParams.set("prefix", prefijo);
|
|
89
|
+
return url.toString();
|
|
90
|
+
}
|
|
91
|
+
/** El id ya viene validado: sin barras ni `..` no hay forma de salirse de `/prefijo/nombre.svg`. */
|
|
92
|
+
export function urlDeSvg(id, color, tamano) {
|
|
93
|
+
const [prefijo, nombre] = id.split(":");
|
|
94
|
+
const url = new URL(`${BASE_DE_ICONIFY}/${prefijo}/${nombre}.svg`);
|
|
95
|
+
url.searchParams.set("color", color);
|
|
96
|
+
url.searchParams.set("height", String(tamano));
|
|
97
|
+
return url.toString();
|
|
98
|
+
}
|
|
99
|
+
/** De la respuesta de `/search`, solo los ids con forma de id: lo demás no es del contrato. */
|
|
100
|
+
export function idsDeBusqueda(cuerpo) {
|
|
101
|
+
if (typeof cuerpo !== "object" || cuerpo === null)
|
|
102
|
+
return [];
|
|
103
|
+
const iconos = cuerpo.icons;
|
|
104
|
+
if (!Array.isArray(iconos))
|
|
105
|
+
return [];
|
|
106
|
+
return iconos.filter((i) => typeof i === "string" && motivoDeIdInaceptable(i) === undefined);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Por qué lo que volvió de la red no se acepta como icono, o `undefined`.
|
|
110
|
+
*
|
|
111
|
+
* Lista de rechazo corta y a propósito: el SVG de Iconify no lleva nada de esto, así que
|
|
112
|
+
* cualquier aparición es señal de que lo devuelto no es lo pedido.
|
|
113
|
+
*/
|
|
114
|
+
export function motivoDeSvgInaceptable(svg) {
|
|
115
|
+
if (Buffer.byteLength(svg, "utf8") > TOPE_DE_SVG_BYTES)
|
|
116
|
+
return "el SVG supera el tope de tamaño";
|
|
117
|
+
if (!/^\s*<svg[\s>]/.test(svg))
|
|
118
|
+
return "la respuesta no es un SVG";
|
|
119
|
+
if (/<\s*(script|foreignObject|iframe|object|embed)\b|\son\w+\s*=|javascript:/i.test(svg)) {
|
|
120
|
+
return "el SVG trae contenido activo";
|
|
121
|
+
}
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* El nombre del fichero, por la convención de XOne (`ic_<descripcion>`, guiones bajos):
|
|
126
|
+
* `lucide:arrow-right` → `ic_arrow_right.svg`. Es también lo que se pone en `img`/`path`: los
|
|
127
|
+
* ejemplos de la plataforma referencian el nombre A SECAS (`img="add.png"`) y XOne lo busca en
|
|
128
|
+
* `icons/`; con `icons/` delante buscaría `icons/icons/…` y el icono no saldría, sin un aviso.
|
|
129
|
+
* El prefijo de la colección no entra: la regla es UNA colección por app, y así el nombre no
|
|
130
|
+
* cambia si se cambia de colección.
|
|
131
|
+
*/
|
|
132
|
+
export function nombreDeFicheroDeIcono(id) {
|
|
133
|
+
const nombre = id.split(":")[1] ?? id;
|
|
134
|
+
return `ic_${nombre.replace(/-/g, "_")}.svg`;
|
|
135
|
+
}
|
|
136
|
+
/** Dónde escribirlo (ruta virtual del backend): `/icons/ic_home.svg`. */
|
|
137
|
+
export function rutaDeIcono(id) {
|
|
138
|
+
return `/${CARPETA_DE_ICONOS}/${nombreDeFicheroDeIcono(id)}`;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=iconos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconos.js","sourceRoot":"","sources":["../../src/core/iconos.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,28 @@ export const MODO_POR_OMISION = "supervisado";
|
|
|
58
58
|
* fundirlos ataría dos decisiones que se van a afinar por separado.
|
|
59
59
|
*/
|
|
60
60
|
export const TOPE_DE_RONDAS_DE_CONSOLA = 20;
|
|
61
|
+
/**
|
|
62
|
+
* El tope de rondas de `xonecode run --real` que se puede subir por ENTORNO, para medir.
|
|
63
|
+
*
|
|
64
|
+
* `run` no tiene a nadie delante, así que su tope es el corto (`MAX_APPROVAL_ROUNDS`, cinco). Medido
|
|
65
|
+
* sobre una calculadora hecha por los agentes, **las cinco pasadas se cortaron con él**, y siempre en
|
|
66
|
+
* el mismo punto: justo antes de la última vuelta del bucle de calidad, la que compara la captura
|
|
67
|
+
* final con la maqueta. El tope era un artefacto de medir con `run`, no del agente: en la consola
|
|
68
|
+
* son veinte. Con esto una prueba puede pedir el de la consola sin tocar el código.
|
|
69
|
+
*
|
|
70
|
+
* **Solo lo lee `run`**, nunca la consola ni las tareas, que ya tienen el suyo. Un valor que no sea un
|
|
71
|
+
* entero entre 1 y `TOPE_MAXIMO_DE_RONDAS_DE_ENTORNO` no se aplica y `run` lo DICE: el tope existe para
|
|
72
|
+
* cortar un bucle que nadie puede parar, y un `999999` por un descuido lo dejaría sin freno.
|
|
73
|
+
*/
|
|
74
|
+
export const VARIABLE_DEL_TOPE_DE_RONDAS = "XONECODE_TOPE_DE_RONDAS";
|
|
75
|
+
export const TOPE_MAXIMO_DE_RONDAS_DE_ENTORNO = 50;
|
|
76
|
+
export function topeDeRondasDeEntorno(valor) {
|
|
77
|
+
const v = valor?.trim();
|
|
78
|
+
if (v === undefined || !/^[1-9][0-9]{0,2}$/.test(v))
|
|
79
|
+
return undefined;
|
|
80
|
+
const n = Number(v);
|
|
81
|
+
return n <= TOPE_MAXIMO_DE_RONDAS_DE_ENTORNO ? n : undefined;
|
|
82
|
+
}
|
|
61
83
|
/** ¿Es uno de los dos nombres EXACTOS del modo? Nada de tildes ni sinónimos: eso es `modoDeTexto`. */
|
|
62
84
|
export function esModoDeEscritura(candidato) {
|
|
63
85
|
return candidato === "supervisado" || candidato === "autonomo";
|
|
@@ -112,4 +134,22 @@ export function seEscribeSinPreguntar(opciones) {
|
|
|
112
134
|
return false;
|
|
113
135
|
return opciones.interactivo;
|
|
114
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Cuántas preguntas de UN turno se contestan solas en modo autónomo. Un modelo que encadena
|
|
139
|
+
* preguntas no puede dejar el turno dando vueltas: pasado el tope, la siguiente le llega a la persona.
|
|
140
|
+
*/
|
|
141
|
+
export const TOPE_DE_PREGUNTAS_CONTESTADAS_SOLAS = 8;
|
|
142
|
+
const MARCA_DE_RECOMENDADA = /\((?:recommended|recomendad[ao])\)/i;
|
|
143
|
+
/**
|
|
144
|
+
* La opción que el agente MARCÓ como recomendada, o `undefined`. Solo cuenta lo que el modelo
|
|
145
|
+
* escribió: sin marca no se elige por él, y la pregunta llega a la persona.
|
|
146
|
+
*
|
|
147
|
+
* **El modo autónomo quitaba la pregunta de las ESCRITURAS y no la del agente**, y una sesión
|
|
148
|
+
* autónoma se paraba igual a pedir «alcance» y «tipografías», cada una con su recomendada.
|
|
149
|
+
* Contestarla sola es decidir por la persona, así que se DICE en el chat, con la opción elegida.
|
|
150
|
+
*/
|
|
151
|
+
export function opcionRecomendada(opciones) {
|
|
152
|
+
const marcadas = opciones.filter((o) => MARCA_DE_RECOMENDADA.test(o));
|
|
153
|
+
return marcadas.length === 1 ? marcadas[0] : undefined;
|
|
154
|
+
}
|
|
115
155
|
//# sourceMappingURL=modoDeEscritura.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modoDeEscritura.js","sourceRoot":"","sources":["../../src/core/modoDeEscritura.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB,aAAa,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C,sGAAsG;AACtG,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,OAAO,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,UAAU,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,KAAK;SACjB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC1E,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC;IACxE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAGrC;IACC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"modoDeEscritura.js","sourceRoot":"","sources":["../../src/core/modoDeEscritura.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB,aAAa,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAC;AACrE,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAEnD,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,iBAAiB,CAAC,SAAkB;IAClD,OAAO,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,UAAU,CAAC;AACjE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,KAAK;SACjB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC1E,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC;IACxE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAGrC;IACC,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,QAAQ,CAAC,WAAW,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAErD,MAAM,oBAAoB,GAAG,qCAAqC,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
package/dist/core/notify.js
CHANGED
|
@@ -24,6 +24,10 @@ const ICONO = {
|
|
|
24
24
|
glob: "✱",
|
|
25
25
|
grep: "✱",
|
|
26
26
|
regex_search: "✱",
|
|
27
|
+
buscar_icono: "✱",
|
|
28
|
+
comparar_capturas: "✱",
|
|
29
|
+
diferencia_de_capturas: "✱",
|
|
30
|
+
generar_fondo_svg: "✱",
|
|
27
31
|
task: "⊙",
|
|
28
32
|
// Un icono PROPIO, y no el genérico `⚙`: en un turno donde se lanza una app, la línea del
|
|
29
33
|
// comando es la que dice qué está pasando de verdad — y no puede leerse igual que una tool
|
|
@@ -39,6 +43,10 @@ const VERBO = {
|
|
|
39
43
|
glob: "busca",
|
|
40
44
|
grep: "busca",
|
|
41
45
|
regex_search: "regex",
|
|
46
|
+
buscar_icono: "icono",
|
|
47
|
+
comparar_capturas: "compara",
|
|
48
|
+
diferencia_de_capturas: "mide cambio",
|
|
49
|
+
generar_fondo_svg: "fondo",
|
|
42
50
|
task: "delega en",
|
|
43
51
|
execute: "corre",
|
|
44
52
|
};
|
package/dist/core/notify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/core/notify.ts"],"names":[],"mappings":"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"}
|