xonecode 0.9.0 → 0.12.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.
- package/THIRD_PARTY_NOTICES.md +56 -0
- package/apps/web/dist/assets/index-BCO9A9PF.js +485 -0
- package/apps/web/dist/assets/index-CBbdNsze.css +1 -0
- package/apps/web/dist/assets/{php-DjRQ1K-w.js → php-DOl4aWua.js} +1 -1
- package/apps/web/dist/assets/{ruby-BcLyZ3qi.js → ruby-DFYuLGa1.js} +1 -1
- package/apps/web/dist/iconos/conectores/deepwiki.png +0 -0
- package/apps/web/dist/iconos/conectores/jira.png +0 -0
- package/apps/web/dist/index.html +2 -2
- package/apps/web/dist/openui/visor.css +1 -0
- package/apps/web/dist/openui/visor.js +9113 -0
- package/dist/agent/conectores/conectoresEnDisco.js +188 -0
- package/dist/agent/conectores/conectoresEnDisco.js.map +1 -0
- package/dist/agent/conectores/proveedorDeConector.js +56 -0
- package/dist/agent/conectores/proveedorDeConector.js.map +1 -0
- package/dist/agent/conectores/servicioDeConectores.js +496 -0
- package/dist/agent/conectores/servicioDeConectores.js.map +1 -0
- package/dist/agent/config/catalogoModelos.js +2 -0
- package/dist/agent/config/catalogoModelos.js.map +1 -1
- package/dist/agent/config/modelos.js +27 -0
- package/dist/agent/config/modelos.js.map +1 -1
- package/dist/agent/exportarPdf.js +5 -1
- package/dist/agent/exportarPdf.js.map +1 -1
- package/dist/agent/grafo/arbolDeProyecto.js +66 -1
- package/dist/agent/grafo/arbolDeProyecto.js.map +1 -1
- package/dist/agent/grafo/memoriaDeProyecto.js +3 -2
- package/dist/agent/grafo/memoriaDeProyecto.js.map +1 -1
- package/dist/agent/grafo/navegacionXone.js +8 -3
- package/dist/agent/grafo/navegacionXone.js.map +1 -1
- package/dist/agent/grafo/proyecto.js +31 -15
- package/dist/agent/grafo/proyecto.js.map +1 -1
- package/dist/agent/grafo/unirSecciones.js +128 -0
- package/dist/agent/grafo/unirSecciones.js.map +1 -0
- package/dist/agent/grafo/xoneAgent.js +7 -0
- package/dist/agent/grafo/xoneAgent.js.map +1 -1
- package/dist/agent/motores/trueforge/capacidades.js +42 -1
- package/dist/agent/motores/trueforge/capacidades.js.map +1 -1
- package/dist/agent/motores/trueforge/eventosTrueforge.js +52 -7
- package/dist/agent/motores/trueforge/eventosTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/modeloLangchain.js +5 -2
- package/dist/agent/motores/trueforge/modeloLangchain.js.map +1 -1
- package/dist/agent/motores/trueforge/sesionTrueforge.js +19 -2
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/toolsDeFichero.js +3 -2
- package/dist/agent/motores/trueforge/toolsDeFichero.js.map +1 -1
- package/dist/agent/motores/trueforge/trueforge.js +1 -1
- package/dist/agent/motores/trueforge/trueforge.js.map +1 -1
- package/dist/agent/navegacion/indiceEnDisco.js +10 -1
- package/dist/agent/navegacion/indiceEnDisco.js.map +1 -1
- package/dist/agent/planesEnDisco.js +64 -0
- package/dist/agent/planesEnDisco.js.map +1 -0
- package/dist/agent/sesiones/modeloDelCambio.js +70 -0
- package/dist/agent/sesiones/modeloDelCambio.js.map +1 -0
- package/dist/agent/sesiones/sesionGit.js +14 -0
- package/dist/agent/sesiones/sesionGit.js.map +1 -1
- package/dist/agent/subagentes/agentesEnDisco.js +95 -5
- package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
- package/dist/agent/subagentes/escrituraExterna.js +8 -2
- package/dist/agent/subagentes/escrituraExterna.js.map +1 -1
- package/dist/agent/subagentes/subagenteCodex.js +1 -1
- package/dist/agent/subagentes/subagenteCodex.js.map +1 -1
- package/dist/agent/subagentes/subagenteExterno.js +1 -1
- package/dist/agent/subagentes/subagenteExterno.js.map +1 -1
- package/dist/agent/subagentes/subagenteOpencode.js +1 -1
- package/dist/agent/subagentes/subagenteOpencode.js.map +1 -1
- package/dist/agent/turno/puente.js +17 -1
- package/dist/agent/turno/puente.js.map +1 -1
- package/dist/agent/turno/resumenDeContexto.js +17 -4
- package/dist/agent/turno/resumenDeContexto.js.map +1 -1
- package/dist/agent/turno/turnoReal.js +16 -2
- package/dist/agent/turno/turnoReal.js.map +1 -1
- package/dist/cli/tui/transcript.js +4 -0
- package/dist/cli/tui/transcript.js.map +1 -1
- package/dist/core/actos.js.map +1 -1
- package/dist/core/agentes.js +17 -0
- package/dist/core/agentes.js.map +1 -1
- package/dist/core/artefactos.js +22 -0
- package/dist/core/artefactos.js.map +1 -1
- package/dist/core/conectores.js +191 -0
- package/dist/core/conectores.js.map +1 -0
- package/dist/core/diffDeColecciones.js +84 -0
- package/dist/core/diffDeColecciones.js.map +1 -0
- package/dist/core/exportacion.js +6 -1
- package/dist/core/exportacion.js.map +1 -1
- package/dist/core/fotoDeColecciones.js +48 -0
- package/dist/core/fotoDeColecciones.js.map +1 -0
- package/dist/core/imagenesDeDocumento.js +88 -0
- package/dist/core/imagenesDeDocumento.js.map +1 -0
- package/dist/core/memoria.js +24 -0
- package/dist/core/memoria.js.map +1 -0
- package/dist/core/modelos.js +23 -1
- package/dist/core/modelos.js.map +1 -1
- package/dist/core/navegacion.js.map +1 -1
- package/dist/core/notify.js +23 -5
- package/dist/core/notify.js.map +1 -1
- package/dist/core/ports.js.map +1 -1
- package/dist/core/serieDeEscrituras.js +13 -0
- package/dist/core/serieDeEscrituras.js.map +1 -1
- package/dist/core/settings.js +62 -1
- package/dist/core/settings.js.map +1 -1
- package/dist/core/tareasDelPlan.js +103 -0
- package/dist/core/tareasDelPlan.js.map +1 -0
- package/dist/core/trazaDeErrores.js +42 -9
- package/dist/core/trazaDeErrores.js.map +1 -1
- package/dist/core/turno.js +34 -4
- package/dist/core/turno.js.map +1 -1
- package/dist/web/servidor/arranque.js +445 -2
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/pielWeb.js +63 -4
- package/dist/web/servidor/pielWeb.js.map +1 -1
- package/dist/web/servidor/servidor.js +16 -1
- package/dist/web/servidor/servidor.js.map +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +45 -7
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/dist/web/servidor/visorOpenui.js +63 -0
- package/dist/web/servidor/visorOpenui.js.map +1 -0
- package/package.json +1 -1
- package/skills/openui-builder/SKILL.md +48 -0
- package/apps/web/dist/assets/index-CtfT1BjI.css +0 -1
- package/apps/web/dist/assets/index-DqcZ7_Rx.js +0 -478
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los conectores MCP de la consola: servidores REMOTOS con los que se conecta esta máquina.
|
|
3
|
+
* Puro a propósito —catálogo, formas del cable y reglas—; el disco y la red viven en
|
|
4
|
+
* `agent/conectores/`.
|
|
5
|
+
*
|
|
6
|
+
* **Hay DOS familias y una sola forma de fila.** El CATÁLOGO son las filas que vienen por
|
|
7
|
+
* código (`CATALOGO_DE_CONECTORES`), y una DEFINICIÓN es una fila que escribió el usuario y
|
|
8
|
+
* vive en su disco. Las dos se resuelven al mismo `ConectorDeCatalogo`, así que de ahí para
|
|
9
|
+
* abajo —estado, prueba, autorización, botones— nada sabe de qué familia viene: es lo que
|
|
10
|
+
* hace que un servidor añadido a mano se comporte como Jira.
|
|
11
|
+
*
|
|
12
|
+
* **Todavía no llegan a ningún agente.** Esta pieza es la conexión y la configuración; qué
|
|
13
|
+
* agente recibe sus tools, y con qué política de aprobación, es la pieza siguiente.
|
|
14
|
+
*/
|
|
15
|
+
import { motivoDeEndpointInaceptable, motivoDeSlugInaceptable, PREFIJO_PERSONALIZADO, slugDesdeNombre } from "./modelos.js";
|
|
16
|
+
/**
|
|
17
|
+
* El literal, comprobado por VALOR: es lo que llega por el cable, donde puede mentir.
|
|
18
|
+
*
|
|
19
|
+
* Se usa dos veces y por eso es una función y no tres `===` repetidos: al validar la
|
|
20
|
+
* definición que entra, y —su copia DECLARADA, porque la frontera del cliente no deja
|
|
21
|
+
* importar de aquí— en la guarda del store, que descarta la fila ENTERA en silencio si no
|
|
22
|
+
* reconoce el literal. Añadir un carril de autenticación y no tocar esa guarda deja la fila
|
|
23
|
+
* invisible con todo en verde.
|
|
24
|
+
*/
|
|
25
|
+
export function esAutenticacionDeConector(valor) {
|
|
26
|
+
return valor === "ninguna" || valor === "oauth" || valor === "api-key";
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Medido contra los tres servidores el 24-09-2026: deepwiki contesta `listTools` sin
|
|
30
|
+
* credenciales; Notion y Atlassian publican `registration_endpoint` y S256, y aceptan un
|
|
31
|
+
* cliente público con `redirect_uri` en loopback. El transporte NO se declara: se prueba
|
|
32
|
+
* `streamable-http` y, si no, `sse`, como hace TrueForge.
|
|
33
|
+
*/
|
|
34
|
+
export const CATALOGO_DE_CONECTORES = [
|
|
35
|
+
{
|
|
36
|
+
id: "deepwiki",
|
|
37
|
+
nombre: "DeepWiki",
|
|
38
|
+
url: "https://mcp.deepwiki.com/mcp",
|
|
39
|
+
descripcion: "Lee la documentación y pregunta sobre cualquier repositorio público de GitHub.",
|
|
40
|
+
autenticacion: "ninguna",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "jira",
|
|
44
|
+
nombre: "Jira",
|
|
45
|
+
url: "https://mcp.atlassian.com/v1/mcp",
|
|
46
|
+
descripcion: "Busca, lee, crea y actualiza incidencias de Jira.",
|
|
47
|
+
autenticacion: "oauth",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "notion",
|
|
51
|
+
nombre: "Notion",
|
|
52
|
+
url: "https://mcp.notion.com/mcp",
|
|
53
|
+
descripcion: "Busca páginas, lee contenido, consulta bases de datos y crea páginas.",
|
|
54
|
+
autenticacion: "oauth",
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
export function conectorDelCatalogo(id) {
|
|
58
|
+
return CATALOGO_DE_CONECTORES.find((c) => c.id === id);
|
|
59
|
+
}
|
|
60
|
+
/** Una fila resuelta, recortada a lo que viaja. Una sola función para las dos familias. */
|
|
61
|
+
export function filaDeCatalogo(c) {
|
|
62
|
+
return { id: c.id, nombre: c.nombre, descripcion: c.descripcion, autenticacion: c.autenticacion };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* El prefijo de un conector propio es el MISMO literal que el de un proveedor personalizado
|
|
66
|
+
* (`modelos.ts#PREFIJO_PERSONALIZADO`), y a propósito: en el producto `custom:` significa una
|
|
67
|
+
* sola cosa —«esto lo añadiste tú»— y un segundo literal sería un segundo sitio donde
|
|
68
|
+
* decidirla. Las dos familias NO se cruzan: un id de conector no se le pasa jamás a una
|
|
69
|
+
* función de proveedor, ni al revés, así que compartir el prefijo no las mezcla.
|
|
70
|
+
*/
|
|
71
|
+
export function esConectorPropio(id) {
|
|
72
|
+
return id.startsWith(PREFIJO_PERSONALIZADO)
|
|
73
|
+
&& motivoDeSlugInaceptable(slugDeConectorPropio(id)) === undefined;
|
|
74
|
+
}
|
|
75
|
+
export function slugDeConectorPropio(id) {
|
|
76
|
+
return id.slice(PREFIJO_PERSONALIZADO.length);
|
|
77
|
+
}
|
|
78
|
+
export function idDeConectorPropio(slug) {
|
|
79
|
+
return `${PREFIJO_PERSONALIZADO}${slug}`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* El id de un conector escrito a mano, derivado de su NOMBRE. Se deriva y no se guarda —un
|
|
83
|
+
* campo derivado es un campo que puede contradecir a su fuente—, y sale de aquí y no de quien
|
|
84
|
+
* llama para que la regla del slug viva en UN sitio: quien valida una definición y quien la
|
|
85
|
+
* guarda tienen que derivar el MISMO id, o el rechazo por id ocupado hablaría de otro.
|
|
86
|
+
*/
|
|
87
|
+
export function idDeConectorDesdeNombre(nombre) {
|
|
88
|
+
return idDeConectorPropio(slugDesdeNombre(nombre));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Una definición como la fila que representa, para que `resolver` devuelva SIEMPRE lo mismo
|
|
92
|
+
* y ninguna capa de más abajo tenga que saber de qué familia viene un conector.
|
|
93
|
+
*/
|
|
94
|
+
export function conectorDeDefinicion(id, def) {
|
|
95
|
+
return { id, nombre: def.nombre, url: def.url, descripcion: def.descripcion, autenticacion: def.autenticacion };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* La definición tal como llega por el cable, o `undefined` si no tiene la forma.
|
|
99
|
+
*
|
|
100
|
+
* La FORMA y la SEMÁNTICA van separadas a propósito: aquí solo se comprueba que los cuatro
|
|
101
|
+
* campos sean cadenas del tipo que dicen ser —el JSON de un cliente puede mentir sobre lo
|
|
102
|
+
* que el tipo promete—, y lo que tiene que valer cada uno lo decide
|
|
103
|
+
* `motivoDeDefinicionInaceptable`, que es la regla y tiene sus tests.
|
|
104
|
+
*/
|
|
105
|
+
export function definicionDelCable(valor) {
|
|
106
|
+
if (typeof valor !== "object" || valor === null)
|
|
107
|
+
return undefined;
|
|
108
|
+
const d = valor;
|
|
109
|
+
if (typeof d["nombre"] !== "string")
|
|
110
|
+
return undefined;
|
|
111
|
+
if (typeof d["descripcion"] !== "string")
|
|
112
|
+
return undefined;
|
|
113
|
+
if (typeof d["url"] !== "string")
|
|
114
|
+
return undefined;
|
|
115
|
+
if (!esAutenticacionDeConector(d["autenticacion"]))
|
|
116
|
+
return undefined;
|
|
117
|
+
return { nombre: d["nombre"], descripcion: d["descripcion"], url: d["url"], autenticacion: d["autenticacion"] };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* ¿Vale eso como conector nuevo? Devuelve el MOTIVO del rechazo, o `undefined` si pasa.
|
|
121
|
+
*
|
|
122
|
+
* `idsOcupados` son los ids ya AÑADIDOS más los que tienen definición, y NO el catálogo. La
|
|
123
|
+
* diferencia importa y es deliberada: lo que choca es crear DOS VECES el mismo nombre —el
|
|
124
|
+
* segundo pisaría la definición del primero, y su URL y su clave se quedarían apuntando a otro
|
|
125
|
+
* servidor—, y una definición huérfana (una que se añadió a mano al fichero, o la que dejó un
|
|
126
|
+
* `quitar` que falló) también ocupa su sitio por eso mismo. Un conector propio llamado «Jira»
|
|
127
|
+
* NO choca con la fila del catálogo, que vive en `jira` y no en `custom:jira`: montar tu propio
|
|
128
|
+
* servidor de Jira es una razón real para darlo de alta a mano, y ahí los dos conviven cada uno
|
|
129
|
+
* con su fila. El id se deriva con la MISMA regla que un proveedor personalizado
|
|
130
|
+
* (`modelos.ts`): un segundo slug sería un segundo sitio donde divergir, y el slug acaba siendo
|
|
131
|
+
* clave de un fichero.
|
|
132
|
+
*/
|
|
133
|
+
export function motivoDeDefinicionInaceptable(def, idsOcupados) {
|
|
134
|
+
if (def.nombre.trim() === "")
|
|
135
|
+
return "ponle un nombre";
|
|
136
|
+
if (def.descripcion.trim() === "")
|
|
137
|
+
return "escribe una descripción: es lo que se lee en la lista";
|
|
138
|
+
const motivoDeUrl = motivoDeEndpointInaceptable(def.url);
|
|
139
|
+
if (motivoDeUrl !== undefined)
|
|
140
|
+
return motivoDeUrl;
|
|
141
|
+
const slug = slugDesdeNombre(def.nombre);
|
|
142
|
+
const motivoDelSlug = motivoDeSlugInaceptable(slug);
|
|
143
|
+
if (motivoDelSlug !== undefined)
|
|
144
|
+
return `de ese nombre no sale un identificador válido: ${motivoDelSlug}`;
|
|
145
|
+
if (idsOcupados.includes(idDeConectorDesdeNombre(def.nombre))) {
|
|
146
|
+
return `ya tienes un conector que se llama así: «${slug}»`;
|
|
147
|
+
}
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* El segundo parámetro se llama `hayCredencial` y no `hayTokens` porque la pregunta que
|
|
152
|
+
* contesta es «¿hay con qué autenticarse?»: un OAuth guarda tokens y un `api-key` guarda su
|
|
153
|
+
* clave, y desde aquí son la misma pregunta. Quien pregunta resuelve la suya —el servicio
|
|
154
|
+
* mira los dos campos de su fichero de secretos— y le pasa un booleano.
|
|
155
|
+
*/
|
|
156
|
+
export function estadoDeConector(conector, hayCredencial) {
|
|
157
|
+
if (conector.autenticacion === "ninguna")
|
|
158
|
+
return "sin-autorizacion";
|
|
159
|
+
return hayCredencial ? "autorizado" : "falta-autorizar";
|
|
160
|
+
}
|
|
161
|
+
/** 10 min, el mismo plazo que TrueForge da a una autorización pendiente. */
|
|
162
|
+
export const TTL_DE_AUTORIZACION_MS = 10 * 60 * 1000;
|
|
163
|
+
/** Conectar + listar tools: más que esto es «no responde». */
|
|
164
|
+
export const TOPE_DE_CONEXION_MS = 30 * 1000;
|
|
165
|
+
/** La ruta del callback. PÚBLICA: la redirección llega sin cookie (`SameSite=Strict`). */
|
|
166
|
+
export const RUTA_CALLBACK_MCP = "/mcp/oauth/callback";
|
|
167
|
+
/**
|
|
168
|
+
* La autenticación de la ruta pública ES el `state`: aleatorio, de un solo uso y con
|
|
169
|
+
* plazo. Se CONSUME en cuanto se reconoce, vaya bien o mal, para que no se pueda repetir.
|
|
170
|
+
*
|
|
171
|
+
* El `motivo` es siempre una frase NUESTRA: la query la escribe quien redirige, y repetirla
|
|
172
|
+
* en una página nuestra sería servir contenido ajeno desde el origen de la consola.
|
|
173
|
+
*/
|
|
174
|
+
export function interpretarCallback(query, pendientes, ahora) {
|
|
175
|
+
const state = query.get("state");
|
|
176
|
+
if (state === null)
|
|
177
|
+
return { ok: false, motivo: "la respuesta no trae el identificador de la autorización" };
|
|
178
|
+
const pendiente = pendientes.get(state);
|
|
179
|
+
if (pendiente === undefined)
|
|
180
|
+
return { ok: false, motivo: "esa autorización no la pidió esta consola, o ya se usó" };
|
|
181
|
+
pendientes.delete(state);
|
|
182
|
+
if (ahora > pendiente.expira)
|
|
183
|
+
return { ok: false, motivo: "la autorización caducó: vuelve a pulsar Conectar" };
|
|
184
|
+
if (query.get("error") !== null)
|
|
185
|
+
return { ok: false, motivo: "el servicio no concedió el acceso" };
|
|
186
|
+
const code = query.get("code");
|
|
187
|
+
if (code === null || code.length === 0)
|
|
188
|
+
return { ok: false, motivo: "la respuesta no trae código de autorización" };
|
|
189
|
+
return { ok: true, id: pendiente.id, code };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=conectores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conectores.js","sourceRoot":"","sources":["../../src/core/conectores.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const clave = (s) => s.toLowerCase();
|
|
2
|
+
function cambiosDeNombres(antes, ahora) {
|
|
3
|
+
const a = new Set(antes.map(clave));
|
|
4
|
+
const d = new Set(ahora.map(clave));
|
|
5
|
+
return [
|
|
6
|
+
...ahora.filter((n) => !a.has(clave(n))).map((nombre) => ({ cambio: "nuevo", nombre })),
|
|
7
|
+
...antes.filter((n) => !d.has(clave(n))).map((nombre) => ({ cambio: "borrado", nombre })),
|
|
8
|
+
];
|
|
9
|
+
}
|
|
10
|
+
function cambiosDeCampos(antes, ahora) {
|
|
11
|
+
const deAntes = new Map(antes.map((f) => [clave(f.nombre), f]));
|
|
12
|
+
const deAhora = new Map(ahora.map((f) => [clave(f.nombre), f]));
|
|
13
|
+
const salida = [];
|
|
14
|
+
for (const f of ahora) {
|
|
15
|
+
const previo = deAntes.get(clave(f.nombre));
|
|
16
|
+
if (previo === undefined) {
|
|
17
|
+
salida.push({ cambio: "nuevo", nombre: f.nombre, ...(f.tipo === undefined ? {} : { ahora: f.tipo }) });
|
|
18
|
+
}
|
|
19
|
+
else if ((previo.tipo ?? "") !== (f.tipo ?? "")) {
|
|
20
|
+
salida.push({
|
|
21
|
+
cambio: "tipo",
|
|
22
|
+
nombre: f.nombre,
|
|
23
|
+
...(previo.tipo === undefined ? {} : { antes: previo.tipo }),
|
|
24
|
+
...(f.tipo === undefined ? {} : { ahora: f.tipo }),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const f of antes) {
|
|
29
|
+
if (!deAhora.has(clave(f.nombre))) {
|
|
30
|
+
salida.push({ cambio: "borrado", nombre: f.nombre, ...(f.tipo === undefined ? {} : { antes: f.tipo }) });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return salida;
|
|
34
|
+
}
|
|
35
|
+
function cambiosDeReferencias(antes, ahora) {
|
|
36
|
+
const id = (r) => `${clave(r.desde)}|${r.por}|${clave(r.hacia)}`;
|
|
37
|
+
const a = new Set(antes.map(id));
|
|
38
|
+
const d = new Set(ahora.map(id));
|
|
39
|
+
return [
|
|
40
|
+
...ahora.filter((r) => !a.has(id(r))).map((r) => ({ cambio: "nuevo", desde: r.desde, por: r.por, hacia: r.hacia })),
|
|
41
|
+
...antes.filter((r) => !d.has(id(r))).map((r) => ({ cambio: "borrado", desde: r.desde, por: r.por, hacia: r.hacia })),
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Las colecciones que cambiaron entre `antes` y `ahora`, que son las declaradas en UN fichero en
|
|
46
|
+
* cada extremo. Una colección sin ningún cambio que el modelo vea no sale: el fichero cambió en
|
|
47
|
+
* algo que el modelo no entiende, y eso lo dice quien pinta («sin cambios en el modelo»), no una
|
|
48
|
+
* fila vacía.
|
|
49
|
+
*/
|
|
50
|
+
export function diffDeColecciones(antes, ahora) {
|
|
51
|
+
const deAntes = new Map(antes.map((c) => [clave(c.nombre), c]));
|
|
52
|
+
const deAhora = new Map(ahora.map((c) => [clave(c.nombre), c]));
|
|
53
|
+
const vacia = {
|
|
54
|
+
campos: [],
|
|
55
|
+
referencias: [],
|
|
56
|
+
eventos: [],
|
|
57
|
+
nodos: [],
|
|
58
|
+
conexiones: [],
|
|
59
|
+
};
|
|
60
|
+
const salida = [];
|
|
61
|
+
const comparar = (nombre, a, d, estado) => {
|
|
62
|
+
const cambios = {
|
|
63
|
+
nombre,
|
|
64
|
+
estado,
|
|
65
|
+
campos: cambiosDeCampos(a.campos, d.campos),
|
|
66
|
+
referencias: cambiosDeReferencias(a.referencias, d.referencias),
|
|
67
|
+
eventos: cambiosDeNombres(a.eventos, d.eventos),
|
|
68
|
+
nodos: cambiosDeNombres(a.nodos, d.nodos),
|
|
69
|
+
conexiones: cambiosDeNombres(a.conexiones, d.conexiones),
|
|
70
|
+
};
|
|
71
|
+
const hay = cambios.campos.length + cambios.referencias.length + cambios.eventos.length + cambios.nodos.length + cambios.conexiones.length > 0;
|
|
72
|
+
if (estado !== "modificada" || hay)
|
|
73
|
+
salida.push(cambios);
|
|
74
|
+
};
|
|
75
|
+
for (const c of ahora) {
|
|
76
|
+
const previa = deAntes.get(clave(c.nombre));
|
|
77
|
+
comparar(c.nombre, previa ?? vacia, c, previa === undefined ? "nueva" : "modificada");
|
|
78
|
+
}
|
|
79
|
+
for (const c of antes)
|
|
80
|
+
if (!deAhora.has(clave(c.nombre)))
|
|
81
|
+
comparar(c.nombre, c, vacia, "borrada");
|
|
82
|
+
return salida;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=diffDeColecciones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffDeColecciones.js","sourceRoot":"","sources":["../../src/core/diffDeColecciones.ts"],"names":[],"mappings":"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"}
|
package/dist/core/exportacion.js
CHANGED
|
@@ -59,6 +59,11 @@ export function rutaDePdf(ruta) {
|
|
|
59
59
|
* tablas y bloques de código —sin eso una tabla se parte por la mitad entre dos hojas— y
|
|
60
60
|
* `break-after: avoid` en los encabezados, para que un título no se quede solo al pie.
|
|
61
61
|
*
|
|
62
|
+
* **Y una imagen se limita también en ALTO**, no solo en ancho. Medido con una captura de móvil
|
|
63
|
+
* (1080×2400): con solo `max-width: 100%` medía unos 40 cm a todo el ancho de un A4, más que la
|
|
64
|
+
* página, y el PDF salía con el título solo en la primera hoja y la captura partida en las dos
|
|
65
|
+
* siguientes. Con `max-height` se reduce entera, sin deformarse, y cabe en una página.
|
|
66
|
+
*
|
|
62
67
|
* El título va ESCAPADO: sale de un nombre de fichero del proyecto, y un `<` ahí dentro
|
|
63
68
|
* rompería la cabecera del documento.
|
|
64
69
|
*/
|
|
@@ -85,7 +90,7 @@ pre { background: #f7f8fa; border: 1px solid #e2e6ec; border-radius: 5px; paddin
|
|
|
85
90
|
overflow-x: auto; break-inside: avoid; }
|
|
86
91
|
pre code { background: none; padding: 0; }
|
|
87
92
|
blockquote { border-left: 3px solid #0b5fff; margin: 1em 0; padding: .2em 1em; background: #f5f8ff; }
|
|
88
|
-
img { max-width: 100%; }
|
|
93
|
+
img { max-width: 100%; max-height: 190mm; width: auto; height: auto; display: block; margin: .6em auto; break-inside: avoid; }
|
|
89
94
|
hr { border: 0; border-top: 1px solid #d7dbe0; margin: 1.6em 0; }
|
|
90
95
|
a { color: #0b5fff; text-decoration: none; }
|
|
91
96
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportacion.js","sourceRoot":"","sources":["../../src/core/exportacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAEzE,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,oBAAoB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC;IAC5F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;AAC3D,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"exportacion.js","sourceRoot":"","sources":["../../src/core/exportacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAEzE,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAAY;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,oBAAoB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC;IAC5F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,MAAc;IAChE,OAAO;;;;EAIP,oBAAoB;SACb,WAAW,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;QAsBpB,MAAM;;CAEb,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,0EAA0E;IAC1E,uFAAuF,CAAC;AAE1F;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,IAAI,GAAG,CAAC,MAAc,EAAsB,EAAE;QAClD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACvI,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,oBAAoB,GAAG,IAAI,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La FOTO del modelo XOne de un proyecto para la pestaña Colecciones: lo mismo que contesta
|
|
3
|
+
* `xone_navegacion`, entero y de una vez, para que una persona lo mire.
|
|
4
|
+
*
|
|
5
|
+
* **Sale del MISMO índice que la tool** (`core/navegacion.ts#construirIndice`) y no de una
|
|
6
|
+
* segunda lectura del modelo: «qué apunta a qué» se decide en un sitio, y el día que la tool y
|
|
7
|
+
* la pestaña contestaran distinto sobre el mismo proyecto no habría forma de saber cuál miente.
|
|
8
|
+
*
|
|
9
|
+
* Todo lo que lleva son rutas VIRTUALES y nombres del proyecto —lo que ya ve el agente—, nunca
|
|
10
|
+
* una ruta de la máquina: viaja por el cable. Y, como el índice, **no dice qué colecciones son
|
|
11
|
+
* huérfanas**: se midió y el 50 % eran falsos positivos (ver `core/navegacion.ts`).
|
|
12
|
+
*/
|
|
13
|
+
import { construirIndice } from "./navegacion.js";
|
|
14
|
+
/**
|
|
15
|
+
* Cuántas colecciones caben en una foto. Un proyecto real anda por las decenas; el tope existe
|
|
16
|
+
* para que uno raro no mande un mensaje sin fondo, y lo que queda fuera se CUENTA (`total`).
|
|
17
|
+
*/
|
|
18
|
+
export const TOPE_DE_COLECCIONES_EN_LA_FOTO = 400;
|
|
19
|
+
export function fotoDeColecciones(modelo, tope = TOPE_DE_COLECCIONES_EN_LA_FOTO) {
|
|
20
|
+
const indice = construirIndice(modelo);
|
|
21
|
+
const colecciones = modelo.colecciones.slice(0, tope).map((c) => {
|
|
22
|
+
// Los scripts que viven DENTRO de su `.xne` —sus eventos, sus `onclick`, sus `method`—,
|
|
23
|
+
// reconocidos por el FICHERO y no por el `desde`: ése puede ser `Coll.PROP`, `Coll:evento`
|
|
24
|
+
// o la ruta de un `.js` suelto, y partirlo por el punto confundiría las tres formas. Los de
|
|
25
|
+
// un `.js` suelto no son de ninguna colección; los que llegan HACIA ella los recoge
|
|
26
|
+
// `referencias` entera.
|
|
27
|
+
const deSusScripts = modelo.referenciasDeScript.filter((r) => r.fichero === c.fichero);
|
|
28
|
+
return {
|
|
29
|
+
nombre: c.nombre,
|
|
30
|
+
fichero: c.fichero,
|
|
31
|
+
campos: c.campos.map((f) => ({ nombre: f.nombre, ...(f.tipo === undefined ? {} : { tipo: f.tipo }) })),
|
|
32
|
+
eventos: [...c.eventos],
|
|
33
|
+
nodos: [...c.nodos],
|
|
34
|
+
conexiones: [...c.conexiones],
|
|
35
|
+
apuntaA: [...c.referencias.map((r) => ({ ...r, fichero: c.fichero })), ...deSusScripts],
|
|
36
|
+
leApuntan: [...indice.referencias(c.nombre)],
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
const app = indice.app();
|
|
40
|
+
return {
|
|
41
|
+
colecciones,
|
|
42
|
+
total: modelo.colecciones.length,
|
|
43
|
+
entrada: [...app.entrada],
|
|
44
|
+
login: [...app.login],
|
|
45
|
+
rotas: [...indice.problemas().rotas],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=fotoDeColecciones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fotoDeColecciones.js","sourceRoot":"","sources":["../../src/core/fotoDeColecciones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,eAAe,EAA4C,MAAM,iBAAiB,CAAC;AA2B5F;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE,IAAI,GAAG,8BAA8B;IACjG,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAqB,EAAE;QACjF,wFAAwF;QACxF,2FAA2F;QAC3F,4FAA4F;QAC5F,oFAAoF;QACpF,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACvF,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACtG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACnB,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YAC7B,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC;YACvF,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO;QACL,WAAW;QACX,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;QAChC,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACzB,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QACrB,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Las IMÁGENES que enlaza un documento (`.md` o `.html`), resueltas dentro del proyecto.
|
|
3
|
+
*
|
|
4
|
+
* Existe porque un enlace relativo —``— solo funciona leído desde la carpeta
|
|
5
|
+
* del documento, y los dos sitios donde se lee no están ahí: `/pdf` imprime un HTML escrito en un
|
|
6
|
+
* temporal (`agent/exportarPdf.ts`), y la pestaña Ficheros lo pinta en la página de la consola. En
|
|
7
|
+
* los dos la imagen salía rota. En el PDF se INCRUSTA —`data:`, que no depende de dónde se lea—; en
|
|
8
|
+
* la web se reescribe el enlace a una ruta que la sirve, porque su visor solo pinta imágenes
|
|
9
|
+
* `http(s)` absolutas.
|
|
10
|
+
*
|
|
11
|
+
* Puro: aquí solo se ENCUENTRAN los enlaces, se resuelven a una ruta del proyecto y se sustituyen.
|
|
12
|
+
* Leer la imagen —con las barreras de la pestaña Ficheros— es de `agent/`.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* La ruta HTTP de la consola web que sirve una imagen del proyecto (`?ruta=<relativa>`). La
|
|
16
|
+
* reescribe `agent/grafo/arbolDeProyecto.ts#vistaDeMarkdown` y la atiende `web/servidor/arranque.ts`;
|
|
17
|
+
* el cliente la lleva copiada (`apps/web/src/imagenesDelDocumento.ts`), como un tipo del cable.
|
|
18
|
+
*/
|
|
19
|
+
export const RUTA_IMAGEN_DEL_PROYECTO = "/imagen-del-proyecto";
|
|
20
|
+
/** Un esquema de URL (`http:`, `data:`, `file:`…): eso no es una ruta del proyecto. */
|
|
21
|
+
const CON_ESQUEMA = /^[a-z][a-z0-9+.-]*:/i;
|
|
22
|
+
/** `` y ``. */
|
|
23
|
+
const EN_MARKDOWN = /!\[[^\]]*\]\(\s*(?:<([^>]+)>|([^)\s]+))(?:\s+"[^"]*")?\s*\)/g;
|
|
24
|
+
/** `<img … src="ruta" …>`, con comillas dobles o simples. */
|
|
25
|
+
const EN_HTML = /<img\b[^>]*?\bsrc\s*=\s*(["'])(.*?)\1/gi;
|
|
26
|
+
/** Los enlaces a imagen de un documento, tal cual están escritos y sin repetir. */
|
|
27
|
+
export function enlacesDeImagen(texto) {
|
|
28
|
+
const vistos = new Set();
|
|
29
|
+
for (const m of texto.matchAll(EN_MARKDOWN))
|
|
30
|
+
vistos.add((m[1] ?? m[2] ?? "").trim());
|
|
31
|
+
for (const m of texto.matchAll(EN_HTML))
|
|
32
|
+
vistos.add((m[2] ?? "").trim());
|
|
33
|
+
vistos.delete("");
|
|
34
|
+
return [...vistos];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* La ruta RELATIVA al proyecto de la imagen que enlaza `enlace` desde el documento `documento`
|
|
38
|
+
* (también relativa al proyecto), o `undefined` si no es una imagen del proyecto: una URL, un enlace
|
|
39
|
+
* que se sale de la raíz con `..`. Una ruta que empieza por `/` es la VIRTUAL, desde la raíz.
|
|
40
|
+
*/
|
|
41
|
+
export function imagenEnProyecto(documento, enlace) {
|
|
42
|
+
if (CON_ESQUEMA.test(enlace) || enlace.startsWith("//"))
|
|
43
|
+
return undefined;
|
|
44
|
+
let limpio = enlace.split(/[?#]/)[0] ?? "";
|
|
45
|
+
try {
|
|
46
|
+
limpio = decodeURIComponent(limpio);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Un `%` suelto no es una codificación: se deja como está.
|
|
50
|
+
}
|
|
51
|
+
if (limpio === "")
|
|
52
|
+
return undefined;
|
|
53
|
+
const base = limpio.startsWith("/") ? [] : documento.split("/").slice(0, -1);
|
|
54
|
+
const partes = [...base];
|
|
55
|
+
for (const trozo of limpio.split("/")) {
|
|
56
|
+
if (trozo === "" || trozo === ".")
|
|
57
|
+
continue;
|
|
58
|
+
if (trozo === "..") {
|
|
59
|
+
// Salirse de la raíz no es una imagen del proyecto: no se adivina a dónde apuntaba.
|
|
60
|
+
if (partes.length === 0)
|
|
61
|
+
return undefined;
|
|
62
|
+
partes.pop();
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
partes.push(trozo);
|
|
66
|
+
}
|
|
67
|
+
return partes.length === 0 ? undefined : partes.join("/");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* El documento con cada enlace de `incrustadas` (enlace tal cual → `data:…`) sustituido, en las dos
|
|
71
|
+
* sintaxis. Lo que no está en el mapa se deja EXACTAMENTE igual: una imagen que no se pudo leer
|
|
72
|
+
* sigue rota, pero no se inventa ni se borra.
|
|
73
|
+
*/
|
|
74
|
+
export function conImagenesIncrustadas(texto, incrustadas) {
|
|
75
|
+
if (incrustadas.size === 0)
|
|
76
|
+
return texto;
|
|
77
|
+
return texto
|
|
78
|
+
.replace(EN_MARKDOWN, (todo, entre, suelto) => {
|
|
79
|
+
const enlace = (entre ?? suelto ?? "").trim();
|
|
80
|
+
const dato = incrustadas.get(enlace);
|
|
81
|
+
return dato === undefined ? todo : todo.replace(entre !== undefined ? `<${entre}>` : (suelto ?? ""), dato);
|
|
82
|
+
})
|
|
83
|
+
.replace(EN_HTML, (todo, comilla, enlace) => {
|
|
84
|
+
const dato = incrustadas.get(enlace.trim());
|
|
85
|
+
return dato === undefined ? todo : todo.replace(`${comilla}${enlace}${comilla}`, `${comilla}${dato}${comilla}`);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=imagenesDeDocumento.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagenesDeDocumento.js","sourceRoot":"","sources":["../../src/core/imagenesDeDocumento.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La ruta VIRTUAL por la que el agente ve la memoria del proyecto, y cómo se reconoce una
|
|
3
|
+
* lectura suya en el flujo de tools.
|
|
4
|
+
*
|
|
5
|
+
* Vive en `core/` porque la usan dos lados: `agent/` la monta en el backend
|
|
6
|
+
* (`agent/grafo/memoriaDeProyecto.ts`, que la reexporta) y `core/turno.ts` la reconoce para
|
|
7
|
+
* decir en la pantalla QUIÉN pidió leerla. Dos copias del literal serían dos sitios donde la
|
|
8
|
+
* ruta puede cambiar y el reconocimiento quedarse mudo.
|
|
9
|
+
*/
|
|
10
|
+
export const RUTA_MEMORIA_VIRTUAL = "/MEMORIA_PROYECTO.md";
|
|
11
|
+
/**
|
|
12
|
+
* ¿Esta llamada pide leer la memoria? Por la tool y por la ruta EXACTA, con barra o sin ella:
|
|
13
|
+
* medido en una sesión real, el modelo pidió `read_file MEMORIA_PROYECTO.md` sin la barra, y
|
|
14
|
+
* el backend de TrueForge la normaliza (`toolsDeFichero.ts#normalizarRuta`), así que esa
|
|
15
|
+
* lectura ocurre igual. No se reconoce por «contiene el nombre»: un `grep` que lo mencione no
|
|
16
|
+
* es una lectura.
|
|
17
|
+
*/
|
|
18
|
+
export function pideLeerLaMemoria(nombre, detalle) {
|
|
19
|
+
if (nombre !== "read_file" || detalle === undefined)
|
|
20
|
+
return false;
|
|
21
|
+
const ruta = detalle.trim().replace(/^\.\//, "");
|
|
22
|
+
return (ruta.startsWith("/") ? ruta : `/${ruta}`) === RUTA_MEMORIA_VIRTUAL;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=memoria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoria.js","sourceRoot":"","sources":["../../src/core/memoria.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAA2B;IAC3E,IAAI,MAAM,KAAK,WAAW,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,oBAAoB,CAAC;AAC7E,CAAC"}
|
package/dist/core/modelos.js
CHANGED
|
@@ -89,7 +89,7 @@ export function motivoDeEndpointInaceptable(valor) {
|
|
|
89
89
|
}
|
|
90
90
|
export const PROVEEDORES = [
|
|
91
91
|
"gemini", "openai", "anthropic", "ollama", "ollama-cloud",
|
|
92
|
-
"nvidia", "groq", "xai", "deepseek",
|
|
92
|
+
"nvidia", "groq", "xai", "deepseek", "opencode-go", "opencode-zen",
|
|
93
93
|
];
|
|
94
94
|
export const COMPATIBLES_OPENAI = {
|
|
95
95
|
nvidia: { baseUrl: "https://integrate.api.nvidia.com/v1", variable: "NVIDIA_API_KEY" },
|
|
@@ -107,6 +107,26 @@ export const COMPATIBLES_OPENAI = {
|
|
|
107
107
|
* documentación, que no dice la ruta completa.
|
|
108
108
|
*/
|
|
109
109
|
deepseek: { baseUrl: "https://api.deepseek.com/v1", variable: "DEEPSEEK_API_KEY" },
|
|
110
|
+
/**
|
|
111
|
+
* OpenCode Go, la suscripción mensual ($10/mes): un catálogo reducido de modelos, con
|
|
112
|
+
* límites por hora/semana/mes propios de la cuenta. MEDIDO y no leído: `GET
|
|
113
|
+
* https://opencode.ai/zen/go/v1/models` contesta 200 con un catálogo real
|
|
114
|
+
* (`{object:"list", data:[{id, object, created, owned_by}, ...]}`) — sin `context_window`
|
|
115
|
+
* ni ningún campo que diga por qué endpoint (`/chat/completions`, `/messages`,
|
|
116
|
+
* `/responses`) va cada modelo, así que `contexto` queda sin medir para todos (igual que
|
|
117
|
+
* NVIDIA/xAI cuando el servidor no lo manda) y el catálogo se ofrece sin filtrar por
|
|
118
|
+
* familia: una elección incompatible falla al invocarla con el error que dé el servidor,
|
|
119
|
+
* en vez de una tabla de familias hecha a mano que se desactualizaría con el catálogo.
|
|
120
|
+
*/
|
|
121
|
+
"opencode-go": { baseUrl: "https://opencode.ai/zen/go/v1", variable: "OPENCODE_GO_API_KEY" },
|
|
122
|
+
/**
|
|
123
|
+
* OpenCode Zen, pago por uso: mismo servicio, catálogo más amplio y sin los límites por
|
|
124
|
+
* franja de Go. Misma URL base compatible con OpenAI, MEDIDA igual que la de Go (`GET
|
|
125
|
+
* https://opencode.ai/zen/v1/models` responde 200 con el mismo shape). Va con su PROPIA
|
|
126
|
+
* variable de entorno (`OPENCODE_ZEN_API_KEY`) aunque la cuenta de OpenCode sea una sola:
|
|
127
|
+
* guardar o borrar la credencial de uno no puede afectar al otro en silencio.
|
|
128
|
+
*/
|
|
129
|
+
"opencode-zen": { baseUrl: "https://opencode.ai/zen/v1", variable: "OPENCODE_ZEN_API_KEY" },
|
|
110
130
|
};
|
|
111
131
|
/**
|
|
112
132
|
* La variable de entorno donde vive la clave de cada proveedor, y el ÚNICO sitio donde
|
|
@@ -151,6 +171,8 @@ const NOMBRES = {
|
|
|
151
171
|
groq: "Groq",
|
|
152
172
|
xai: "xAI",
|
|
153
173
|
deepseek: "DeepSeek",
|
|
174
|
+
"opencode-go": "OpenCode Go",
|
|
175
|
+
"opencode-zen": "OpenCode Zen",
|
|
154
176
|
};
|
|
155
177
|
/**
|
|
156
178
|
* Cómo se escribe un proveedor. Para uno personalizado, el nombre que puso quien lo dio
|
package/dist/core/modelos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../src/core/modelos.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,OAAO,GAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAqBnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAEzC,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,6BAA6B,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,wHAAwH,CAAC;IAClI,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM;SACV,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC;WACzC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiC;IAC/D,OAAO,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,OAAO,GAAG,qBAAqB,GAAG,IAAI,EAA4B,CAAC;AACrE,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6DAA6D,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7E,OAAO,iGAAiG,CAAC;AAC3G,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAgC;IACtD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc;IACzD,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../src/core/modelos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navegacion.js","sourceRoot":"","sources":["../../src/core/navegacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"navegacion.js","sourceRoot":"","sources":["../../src/core/navegacion.ts"],"names":[],"mappings":"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"}
|