xonecode 0.38.41 → 0.39.2
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/{EditorDeFichero-B5qtmfKO.js → EditorDeFichero-BeWDctgN.js} +1 -1
- package/apps/web/dist/assets/{index-C6XoIOQg.js → index-B-6cDRAV.js} +20 -20
- package/apps/web/dist/assets/{php-I6JfbNBQ.js → php-D3QdOnb8.js} +1 -1
- package/apps/web/dist/assets/{ruby-DlqXDLOX.js → ruby-DDAcW-Z2.js} +1 -1
- package/apps/web/dist/index.html +1 -1
- package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
- package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
- package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
- package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
- package/dist/agent/cloudstudio/crearRama.js +16 -0
- package/dist/agent/cloudstudio/crearRama.js.map +1 -0
- package/dist/agent/cloudstudio/descarga.d.ts +44 -0
- package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
- package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
- package/dist/agent/cloudstudio/subida.d.ts +61 -0
- package/dist/agent/cloudstudio/subida.js +7 -1
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
- package/dist/agent/cloudstudio/zip.d.ts +13 -0
- package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
- package/dist/agent/conectores/gestorJira.d.ts +50 -0
- package/dist/agent/conectores/gestorNotion.d.ts +45 -0
- package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
- package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
- package/dist/agent/config/authEnDisco.d.ts +43 -0
- package/dist/agent/config/catalogoModelos.d.ts +79 -0
- package/dist/agent/config/configEnDisco.d.ts +235 -0
- package/dist/agent/config/crearProyecto.d.ts +20 -0
- package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
- package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
- package/dist/agent/config/entorno.d.ts +83 -0
- package/dist/agent/config/fuentesEnRed.d.ts +12 -0
- package/dist/agent/config/gemini.d.ts +5 -0
- package/dist/agent/config/iconosEnRed.d.ts +10 -0
- package/dist/agent/config/identidadEnDisco.d.ts +27 -0
- package/dist/agent/config/modelos.d.ts +77 -0
- package/dist/agent/config/modelosDeMotor.d.ts +52 -0
- package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
- package/dist/agent/config/persona.d.ts +1 -0
- package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
- package/dist/agent/config/settingsEnDisco.d.ts +206 -0
- package/dist/agent/config/versionEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
- package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
- package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
- package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
- package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
- package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/hotswap.d.ts +194 -0
- package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
- package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
- package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
- package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
- package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
- package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
- package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
- package/dist/agent/exportarPdf.d.ts +72 -0
- package/dist/agent/grafo/aprendido.d.ts +28 -0
- package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
- package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
- package/dist/agent/grafo/atributosXone.d.ts +31 -0
- package/dist/agent/grafo/buscarIcono.d.ts +32 -0
- package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
- package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
- package/dist/agent/grafo/compararCapturas.d.ts +22 -0
- package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
- package/dist/agent/grafo/criticaVisual.d.ts +60 -0
- package/dist/agent/grafo/describirImagen.d.ts +79 -0
- package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
- package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
- package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
- package/dist/agent/grafo/excluirTools.d.ts +37 -0
- package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
- package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
- package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
- package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
- package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
- package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
- package/dist/agent/grafo/navegacionXone.d.ts +60 -0
- package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
- package/dist/agent/grafo/perfiles.d.ts +225 -0
- package/dist/agent/grafo/proyecto.d.ts +450 -0
- package/dist/agent/grafo/skills.d.ts +181 -0
- package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
- package/dist/agent/grafo/unirSecciones.d.ts +20 -0
- package/dist/agent/grafo/validacionXone.d.ts +35 -0
- package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
- package/dist/agent/grafo/xoneAgent.d.ts +166 -0
- package/dist/agent/motores/motoresLocales.d.ts +87 -0
- package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
- package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
- package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
- package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
- package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
- package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.js +4 -2
- package/dist/agent/motores/trueforge/medidaAutomatica.js.map +1 -1
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
- package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
- package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
- package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
- package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
- package/dist/agent/motores/trueforge/notas.d.ts +48 -0
- package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
- package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
- package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.js +32 -15
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
- package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
- package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
- package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
- package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
- package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
- package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
- package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
- package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
- package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
- package/dist/agent/planesEnDisco.d.ts +18 -0
- package/dist/agent/publicarPlan.d.ts +20 -0
- package/dist/agent/raizDelPaquete.d.ts +9 -0
- package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
- package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
- package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
- package/dist/agent/renombrarSobre.d.ts +14 -0
- package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
- package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
- package/dist/agent/sesiones/checkpointer.d.ts +146 -0
- package/dist/agent/sesiones/git.d.ts +66 -0
- package/dist/agent/sesiones/gitSync.d.ts +264 -0
- package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
- package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
- package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
- package/dist/agent/sesiones/sesionGit.d.ts +155 -0
- package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
- package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
- package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
- package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
- package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
- package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
- package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
- package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
- package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
- package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
- package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
- package/dist/agent/tareas/aumentador.d.ts +99 -0
- package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
- package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
- package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
- package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
- package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
- package/dist/agent/turno/depuracion.d.ts +1 -0
- package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
- package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
- package/dist/agent/turno/guionizado.d.ts +18 -0
- package/dist/agent/turno/informeDeTraza.d.ts +220 -0
- package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
- package/dist/agent/turno/instantanea.d.ts +16 -0
- package/dist/agent/turno/interrupts.d.ts +54 -0
- package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
- package/dist/agent/turno/mensajes.d.ts +23 -0
- package/dist/agent/turno/normalizar.d.ts +15 -0
- package/dist/agent/turno/puente.d.ts +196 -0
- package/dist/agent/turno/registroDeFallos.d.ts +39 -0
- package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
- package/dist/agent/turno/resumenDeTool.d.ts +33 -0
- package/dist/agent/turno/rubrica.d.ts +35 -0
- package/dist/agent/turno/sesionReal.d.ts +89 -0
- package/dist/agent/turno/textoDeTool.d.ts +19 -0
- package/dist/agent/turno/turnoReal.d.ts +210 -0
- package/dist/agent/turno/verificacion.d.ts +85 -0
- package/dist/agent/turno/verificador.d.ts +66 -0
- package/dist/bin.d.ts +2 -0
- package/dist/cli/acuseDeModelo.d.ts +18 -0
- package/dist/cli/aprobar.d.ts +162 -0
- package/dist/cli/config.d.ts +17 -0
- package/dist/cli/consola.d.ts +473 -0
- package/dist/cli/describe.d.ts +7 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/fuentesDeDisco.d.ts +25 -0
- package/dist/cli/main.d.ts +291 -0
- package/dist/cli/markdown.d.ts +126 -0
- package/dist/cli/panel.d.ts +38 -0
- package/dist/cli/podar.d.ts +38 -0
- package/dist/cli/run.d.ts +30 -0
- package/dist/cli/spinner.d.ts +37 -0
- package/dist/cli/stdio.d.ts +94 -0
- package/dist/cli/tema.d.ts +68 -0
- package/dist/cli/tokens.d.ts +16 -0
- package/dist/cli/traza.d.ts +19 -0
- package/dist/cli/tui/app.d.ts +23 -0
- package/dist/cli/tui/aprobarTui.d.ts +46 -0
- package/dist/cli/tui/barra.d.ts +43 -0
- package/dist/cli/tui/correrTui.d.ts +119 -0
- package/dist/cli/tui/entrada.d.ts +14 -0
- package/dist/cli/tui/filas.d.ts +13 -0
- package/dist/cli/tui/logo.d.ts +20 -0
- package/dist/cli/tui/pielTui.d.ts +15 -0
- package/dist/cli/tui/raton.d.ts +68 -0
- package/dist/cli/tui/sidebar.d.ts +63 -0
- package/dist/cli/tui/store.d.ts +102 -0
- package/dist/cli/tui/tarjeta.d.ts +8 -0
- package/dist/cli/tui/temaInk.d.ts +67 -0
- package/dist/cli/tui/transcript.d.ts +32 -0
- package/dist/cli/verify.d.ts +9 -0
- package/dist/cli/wizardInicial.d.ts +59 -0
- package/dist/core/actos.d.ts +437 -0
- package/dist/core/adjuntos.d.ts +77 -0
- package/dist/core/agentes.d.ts +353 -0
- package/dist/core/analisisDeSesion.d.ts +63 -0
- package/dist/core/aprendido.d.ts +41 -0
- package/dist/core/artefactos.d.ts +74 -0
- package/dist/core/atributosXone.d.ts +53 -0
- package/dist/core/bitacora.d.ts +21 -0
- package/dist/core/cloudstudio.d.ts +168 -0
- package/dist/core/codificacion.d.ts +81 -0
- package/dist/core/comandoExterno.d.ts +49 -0
- package/dist/core/compararCapturas.d.ts +136 -0
- package/dist/core/conectores.d.ts +296 -0
- package/dist/core/config.d.ts +148 -0
- package/dist/core/contextos.d.ts +54 -0
- package/dist/core/convertirAP.d.ts +56 -0
- package/dist/core/copiaDeAvd.d.ts +44 -0
- package/dist/core/cssBienFormado.d.ts +22 -0
- package/dist/core/deps.d.ts +28 -0
- package/dist/core/descargas.d.ts +61 -0
- package/dist/core/descripcionDePantalla.d.ts +121 -0
- package/dist/core/descriptoresDeApp.d.ts +108 -0
- package/dist/core/diagnosticoDeNode.d.ts +51 -0
- package/dist/core/diff.d.ts +26 -0
- package/dist/core/diffDeColecciones.d.ts +54 -0
- package/dist/core/disenoVinculado.d.ts +17 -0
- package/dist/core/dispositivoDeSesion.d.ts +22 -0
- package/dist/core/dispositivoElegido.d.ts +17 -0
- package/dist/core/dispositivos.d.ts +469 -0
- package/dist/core/entrega.d.ts +341 -0
- package/dist/core/entrelazar.d.ts +48 -0
- package/dist/core/esfuerzo.d.ts +120 -0
- package/dist/core/esqueleto.d.ts +38 -0
- package/dist/core/estiloMedido.d.ts +70 -0
- package/dist/core/estilos.d.ts +76 -0
- package/dist/core/events.d.ts +218 -0
- package/dist/core/exportacion.d.ts +88 -0
- package/dist/core/fallos.d.ts +79 -0
- package/dist/core/fondosSvg.d.ts +115 -0
- package/dist/core/fotoDeColecciones.d.ts +45 -0
- package/dist/core/fuentes.d.ts +96 -0
- package/dist/core/geometriaDePantalla.d.ts +171 -0
- package/dist/core/gestorDeTareas.d.ts +295 -0
- package/dist/core/hechosDelProyecto.d.ts +70 -0
- package/dist/core/hotswap.d.ts +30 -0
- package/dist/core/iconos.d.ts +86 -0
- package/dist/core/identidadDeProveedor.d.ts +20 -0
- package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
- package/dist/core/imagenesDeDocumento.d.ts +40 -0
- package/dist/core/jsParaRhino.d.ts +3 -0
- package/dist/core/juezDelTurno.d.ts +95 -0
- package/dist/core/logDeDispositivo.d.ts +67 -0
- package/dist/core/memoria.d.ts +18 -0
- package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
- package/dist/core/modelos.d.ts +198 -0
- package/dist/core/modoDeEscritura.d.ts +155 -0
- package/dist/core/motor.d.ts +43 -0
- package/dist/core/motoresLocales.d.ts +113 -0
- package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
- package/dist/core/navegacion.d.ts +172 -0
- package/dist/core/notify.d.ts +77 -0
- package/dist/core/nucleoXone.d.ts +28 -0
- package/dist/core/panorama.d.ts +68 -0
- package/dist/core/paqueteDeSoporte.d.ts +100 -0
- package/dist/core/planDeSubida.d.ts +56 -0
- package/dist/core/planes.d.ts +53 -0
- package/dist/core/podaDeCheckpoint.d.ts +75 -0
- package/dist/core/ports.d.ts +1034 -0
- package/dist/core/puedeLanzarse.d.ts +181 -0
- package/dist/core/puertosDeAvd.d.ts +59 -0
- package/dist/core/recargaEnCaliente.d.ts +52 -0
- package/dist/core/referenciasDeImagen.d.ts +36 -0
- package/dist/core/remoto.d.ts +76 -0
- package/dist/core/repartoDeEncargo.d.ts +80 -0
- package/dist/core/rubrica.d.ts +78 -0
- package/dist/core/rutaVirtual.d.ts +29 -0
- package/dist/core/selectorDeCarpeta.d.ts +59 -0
- package/dist/core/serieDeEscrituras.d.ts +58 -0
- package/dist/core/settings.d.ts +421 -0
- package/dist/core/shellDeAgente.d.ts +177 -0
- package/dist/core/skills.d.ts +129 -0
- package/dist/core/stitch.d.ts +114 -0
- package/dist/core/tareas.d.ts +412 -0
- package/dist/core/tareasDelPlan.d.ts +123 -0
- package/dist/core/tareasEnElGestor.d.ts +117 -0
- package/dist/core/textos.d.ts +8 -0
- package/dist/core/topeAgotado.d.ts +55 -0
- package/dist/core/traerDeLaMaquina.d.ts +33 -0
- package/dist/core/trazaDeErrores.d.ts +83 -0
- package/dist/core/tunel.d.ts +45 -0
- package/dist/core/turno.d.ts +154 -0
- package/dist/core/validacionDeEscritura.d.ts +95 -0
- package/dist/core/verificacionDeSubida.d.ts +14 -0
- package/dist/core/version.d.ts +35 -0
- package/dist/core/xmlBienFormado.d.ts +23 -0
- package/dist/core/zipDeAdjunto.d.ts +28 -0
- package/dist/core/zipDeSkill.d.ts +74 -0
- package/dist/lib/tareaAutonoma.d.ts +36 -0
- package/dist/lib/tareaAutonoma.js +259 -0
- package/dist/lib/tareaAutonoma.js.map +1 -0
- package/dist/lib.d.ts +31 -0
- package/dist/lib.js +28 -0
- package/dist/lib.js.map +1 -0
- package/dist/vendor/hitl.d.ts +69 -0
- package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
- package/dist/vendor/sqliteSaver.d.ts +22 -0
- package/dist/vendor/tokenTracking.d.ts +22 -0
- package/dist/web/servidor/arranque.d.ts +1372 -0
- package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
- package/dist/web/servidor/consolaWeb.d.ts +142 -0
- package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
- package/dist/web/servidor/datosDeCierre.d.ts +4 -0
- package/dist/web/servidor/interrupcion.d.ts +39 -0
- package/dist/web/servidor/pielWeb.d.ts +32 -0
- package/dist/web/servidor/puenteRemoto.d.ts +80 -0
- package/dist/web/servidor/servidor.d.ts +53 -0
- package/dist/web/servidor/sesiones.d.ts +342 -0
- package/dist/web/servidor/soporte.d.ts +65 -0
- package/dist/web/servidor/soporte.js +2 -0
- package/dist/web/servidor/soporte.js.map +1 -1
- package/dist/web/servidor/transporte.d.ts +2751 -0
- package/dist/web/servidor/vestibulo.d.ts +952 -0
- package/dist/web/servidor/visorOpenui.d.ts +33 -0
- package/package.json +9 -1
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
import type { Agente } from "./agentes.js";
|
|
25
|
+
export declare const NOMBRE_BUSCAR_ICONO = "buscar_icono";
|
|
26
|
+
/**
|
|
27
|
+
* Quién la recibe: quien escribe el proyecto entero, que es quien puede dejar el icono en
|
|
28
|
+
* `icons/`. Regla de DATO —la misma que `recibeIncorporarAdjunto`—, no una lista de nombres: de
|
|
29
|
+
* los de serie, `designer-xone` y `developer-xone`. Vive en `core/` porque la usan DOS: la tool
|
|
30
|
+
* (`agent/grafo/buscarIcono.ts`) y la ficha con la que el orquestador conoce a su equipo
|
|
31
|
+
* (`fichaDeAgente`), y dos copias de la regla serían dos sitios donde puede divergir.
|
|
32
|
+
*
|
|
33
|
+
* Solo llega a `motor: "modelo"`: un especialista de motor externo corre en otro proceso y no
|
|
34
|
+
* recibe tools propias (la ficha lo comprueba aparte).
|
|
35
|
+
*/
|
|
36
|
+
export declare function recibeBuscarIcono(a: Pick<Agente, "soloLectura" | "ejecucion" | "escribeEn">): boolean;
|
|
37
|
+
/** La carpeta de una app XOne donde viven los iconos (`fundamentos/plataforma-y-anatomia…`). */
|
|
38
|
+
export declare const CARPETA_DE_ICONOS = "icons";
|
|
39
|
+
/** Tope de la llamada de red: una búsqueda o un SVG son unos cientos de bytes. */
|
|
40
|
+
export declare const TOPE_DE_ICONOS_MS = 10000;
|
|
41
|
+
/** Lo que se acepta de vuelta. Un icono de Iconify son unos cientos de bytes; esto es holgura. */
|
|
42
|
+
export declare const TOPE_DE_SVG_BYTES: number;
|
|
43
|
+
export declare const LIMITES_DE_BUSQUEDA: {
|
|
44
|
+
readonly porOmision: 12;
|
|
45
|
+
readonly maximo: 32;
|
|
46
|
+
};
|
|
47
|
+
export declare const LIMITES_DE_TAMANO: {
|
|
48
|
+
readonly porOmision: 24;
|
|
49
|
+
readonly minimo: 8;
|
|
50
|
+
readonly maximo: 512;
|
|
51
|
+
};
|
|
52
|
+
/** La base es UNA constante: un host distinto es una decisión, no un parámetro. */
|
|
53
|
+
export declare const BASE_DE_ICONIFY = "https://api.iconify.design";
|
|
54
|
+
/** Por qué un id no vale, o `undefined`. Forma `prefijo:nombre`, en minúsculas y con guiones. */
|
|
55
|
+
export declare function motivoDeIdInaceptable(id: string): string | undefined;
|
|
56
|
+
export declare function motivoDePrefijoInaceptable(prefijo: string): string | undefined;
|
|
57
|
+
/** Solo hexadecimal: `currentColor` o un nombre CSS dejarían el tinte a merced del render. */
|
|
58
|
+
export declare function motivoDeColorInaceptable(color: string): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* El color como lo pide Iconify: `#RRGGBB`. Un `#FFRRGGBB` de XOne (opaco) pierde su alfa `FF`, que
|
|
61
|
+
* no dice nada; uno con alfa menor ya lo rechazó `motivoDeColorInaceptable`. Se llama DESPUÉS de validar.
|
|
62
|
+
*/
|
|
63
|
+
export declare function colorParaIconify(color: string): string;
|
|
64
|
+
export declare function urlDeBusqueda(consulta: string, limite: number, prefijo?: string): string;
|
|
65
|
+
/** El id ya viene validado: sin barras ni `..` no hay forma de salirse de `/prefijo/nombre.svg`. */
|
|
66
|
+
export declare function urlDeSvg(id: string, color: string, tamano: number): string;
|
|
67
|
+
/** De la respuesta de `/search`, solo los ids con forma de id: lo demás no es del contrato. */
|
|
68
|
+
export declare function idsDeBusqueda(cuerpo: unknown): string[];
|
|
69
|
+
/**
|
|
70
|
+
* Por qué lo que volvió de la red no se acepta como icono, o `undefined`.
|
|
71
|
+
*
|
|
72
|
+
* Lista de rechazo corta y a propósito: el SVG de Iconify no lleva nada de esto, así que
|
|
73
|
+
* cualquier aparición es señal de que lo devuelto no es lo pedido.
|
|
74
|
+
*/
|
|
75
|
+
export declare function motivoDeSvgInaceptable(svg: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* El nombre del fichero, por la convención de XOne (`ic_<descripcion>`, guiones bajos):
|
|
78
|
+
* `lucide:arrow-right` → `ic_arrow_right.svg`. Es también lo que se pone en `img`/`path`: los
|
|
79
|
+
* ejemplos de la plataforma referencian el nombre A SECAS (`img="add.png"`) y XOne lo busca en
|
|
80
|
+
* `icons/`; con `icons/` delante buscaría `icons/icons/…` y el icono no saldría, sin un aviso.
|
|
81
|
+
* El prefijo de la colección no entra: la regla es UNA colección por app, y así el nombre no
|
|
82
|
+
* cambia si se cambia de colección.
|
|
83
|
+
*/
|
|
84
|
+
export declare function nombreDeFicheroDeIcono(id: string): string;
|
|
85
|
+
/** Dónde escribirlo (ruta virtual del backend): `/icons/ic_home.svg`. */
|
|
86
|
+
export declare function rutaDeIcono(id: string): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** La forma que DeepSeek acepta, copiada de su documentación. */
|
|
2
|
+
export declare const FORMA_DE_USER_ID: RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* El `sub` de un JWT, o `undefined` si no es un JWT legible o no trae un `sub` de texto.
|
|
5
|
+
*
|
|
6
|
+
* Nunca lanza: un token opaco (no JWT) es un caso NORMAL —un IDS puede emitir el access
|
|
7
|
+
* token así—, y aquí «no lo sé» se contesta no mandando el campo.
|
|
8
|
+
*/
|
|
9
|
+
export declare function subDeJwt(token: string): string | undefined;
|
|
10
|
+
/** El `user_id` para DeepSeek de ese `sub` en ese entorno. Determinista. */
|
|
11
|
+
export declare function userIdDeDeepSeek(entorno: string, sub: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* La identidad de un juego de tokens: el `id_token` primero —es el que existe para decir
|
|
14
|
+
* quién es alguien— y el `access_token` después, que IdentityServer emite como JWT con el
|
|
15
|
+
* mismo `sub`. Si ninguno lo trae, `undefined`: ausente, nunca un valor inventado.
|
|
16
|
+
*/
|
|
17
|
+
export declare function subDeTokens(tokens: {
|
|
18
|
+
id_token?: string;
|
|
19
|
+
access_token?: string;
|
|
20
|
+
} | undefined): string | undefined;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Una respuesta que se fue al CHINO**, medida con reglas de código y no con otro modelo.
|
|
3
|
+
*
|
|
4
|
+
* Medido en Maset: tras un turno largo, `deepseek-flash` escribió la respuesta FINAL entera en chino, con su propio
|
|
5
|
+
* razonamiento diciendo justo antes «write the final answer in Spanish». La regla del idioma (`IDIOMA_DE_LA_RESPUESTA`)
|
|
6
|
+
* le había llegado y la había entendido: es una deriva del modelo, no un prompt que falte, así que el arreglo es código.
|
|
7
|
+
* Solo se reconoce el chino (lo único visto); una deriva a otro idioma no la ve esta regla.
|
|
8
|
+
*/
|
|
9
|
+
/** Por debajo de esto no se juzga: un nombre de producto en chino no es una respuesta en chino. */
|
|
10
|
+
export declare const MINIMO_DE_IDEOGRAMAS = 20;
|
|
11
|
+
/** Qué parte de las letras de la respuesta tienen que ser ideogramas para darla por escrita en chino. */
|
|
12
|
+
export declare const PROPORCION_EN_CHINO = 0.3;
|
|
13
|
+
/** ¿La respuesta está escrita en chino y quien pide NO escribe en chino? Una petición con ideogramas no se corrige. */
|
|
14
|
+
export declare function respuestaEnChinoSinPedirlo(respuesta: string, peticion: string): boolean;
|
|
15
|
+
/** Hasta dónde se cita el mensaje del usuario en la orden de reescribir: lo justo para que se vea su idioma. */
|
|
16
|
+
export declare const TOPE_DE_CITA_DEL_USUARIO = 200;
|
|
17
|
+
/** El mensaje que le devuelve al modelo su respuesta para que la reescriba, sin herramientas y sin cambiar el contenido. */
|
|
18
|
+
export declare function textoDeReescritura(peticion: string): string;
|
|
19
|
+
/** Cuántas palabras vacías de un idioma hacen falta para decir nada: un mensaje de una línea no se juzga. */
|
|
20
|
+
export declare const MINIMO_DE_VACIAS = 6;
|
|
21
|
+
/** ¿Está este texto en inglés y quien pide NO escribe en inglés? Las dos medidas, con margen: dudoso es «no». */
|
|
22
|
+
export declare function textoEnInglesSinPedirlo(texto: string, peticion: string): boolean;
|
|
23
|
+
/** Cuántas veces por turno se le recuerda: si no hace caso, insistir no lo arregla y gasta. */
|
|
24
|
+
export declare const TOPE_DE_RECORDATORIOS_DE_IDIOMA = 2;
|
|
25
|
+
/** El recordatorio, como mensaje de usuario antes de su siguiente llamada. */
|
|
26
|
+
export declare function textoDeRecordatorioDeIdioma(peticion: string): string;
|
|
@@ -0,0 +1,40 @@
|
|
|
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 declare const RUTA_IMAGEN_DEL_PROYECTO = "/imagen-del-proyecto";
|
|
20
|
+
/**
|
|
21
|
+
* La ruta HTTP que sirve el ICONO de la app de un proyecto bajado (`?id=<id del proyecto>`), para la
|
|
22
|
+
* barra y la cabecera de su panel. Lleva el ID y no una ruta: qué fichero es lo decide el servidor
|
|
23
|
+
* leyendo `app.ini` (`agent/grafo/arbolDeProyecto.ts#iconoDelProyecto`). Copiada en el cliente
|
|
24
|
+
* (`apps/web/src/imagenesDelDocumento.ts`).
|
|
25
|
+
*/
|
|
26
|
+
export declare const RUTA_ICONO_DEL_PROYECTO = "/icono-del-proyecto";
|
|
27
|
+
/** Los enlaces a imagen de un documento, tal cual están escritos y sin repetir. */
|
|
28
|
+
export declare function enlacesDeImagen(texto: string): string[];
|
|
29
|
+
/**
|
|
30
|
+
* La ruta RELATIVA al proyecto de la imagen que enlaza `enlace` desde el documento `documento`
|
|
31
|
+
* (también relativa al proyecto), o `undefined` si no es una imagen del proyecto: una URL, un enlace
|
|
32
|
+
* que se sale de la raíz con `..`. Una ruta que empieza por `/` es la VIRTUAL, desde la raíz.
|
|
33
|
+
*/
|
|
34
|
+
export declare function imagenEnProyecto(documento: string, enlace: string): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* El documento con cada enlace de `incrustadas` (enlace tal cual → `data:…`) sustituido, en las dos
|
|
37
|
+
* sintaxis. Lo que no está en el mapa se deja EXACTAMENTE igual: una imagen que no se pudo leer
|
|
38
|
+
* sigue rota, pero no se inventa ni se borra.
|
|
39
|
+
*/
|
|
40
|
+
export declare function conImagenesIncrustadas(texto: string, incrustadas: ReadonlyMap<string, string>): string;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ¿El turno CUMPLIÓ lo que se le pidió? Un juez para la pregunta que ningún `if` contesta.
|
|
3
|
+
*
|
|
4
|
+
* ## Por qué hace falta
|
|
5
|
+
*
|
|
6
|
+
* El harness sabe medir muchas cosas del turno —si el verificador quedó verde, qué ficheros
|
|
7
|
+
* cambiaron, si quedaron escrituras sin aprobar— y **ninguna de ellas contesta la pregunta
|
|
8
|
+
* de quien lo encargó**. Un turno puede cerrar con el simulador en verde, tres ficheros
|
|
9
|
+
* tocados y un resumen impecable, y no haber hecho lo que se pedía.
|
|
10
|
+
*
|
|
11
|
+
* Y eso pasa. MEDIDO en turnos reales del usuario, tres veces en la misma sesión:
|
|
12
|
+
* «el especialista se ha vuelto a cortar antes de darme el informe», «las dos tareas que
|
|
13
|
+
* lancé no llegaron a ejecutarse», «la devolución del verificador ha llegado cortada». En
|
|
14
|
+
* los tres el turno cerró y el resumen sonaba a trabajo terminado.
|
|
15
|
+
*
|
|
16
|
+
* ## El reparto: código para lo comprobable, juez para lo difuso
|
|
17
|
+
*
|
|
18
|
+
* Es el mismo de las tareas de fondo (`core/entrega.ts`), y por el mismo motivo: un juez
|
|
19
|
+
* que se equivoque en verde cierra un trabajo a medias sin que nadie lo vea. Así que los
|
|
20
|
+
* HECHOS los mide el código y se le dan hechos —no se le pide que los averigüe—, y lo único
|
|
21
|
+
* que se le pregunta es lo que de verdad es un juicio: si con esos hechos delante el
|
|
22
|
+
* encargo está cumplido.
|
|
23
|
+
*
|
|
24
|
+
* ## Fail-closed, y en la dirección que importa
|
|
25
|
+
*
|
|
26
|
+
* La respuesta peligrosa es «cumplido» cuando no lo está: cierra el turno en falso y quien
|
|
27
|
+
* lo pidió se entera al usar la app. Por eso lo que no se entiende es **`dudoso`** y nunca
|
|
28
|
+
* `cumplido` — igual que `indeterminado` no es verde en el juez de tareas.
|
|
29
|
+
*/
|
|
30
|
+
/** Qué contesta el juez. `dudoso` es también lo que sale de una respuesta que no se entiende. */
|
|
31
|
+
export type Cumplimiento = "cumplido" | "no-cumplido" | "dudoso";
|
|
32
|
+
export interface VeredictoDelTurno {
|
|
33
|
+
cumplimiento: Cumplimiento;
|
|
34
|
+
/** Una frase. Es lo que lee la persona, así que dice QUÉ falta, no «no se cumplió». */
|
|
35
|
+
motivo: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Los hechos MEDIDOS que se le ponen delante. Todos opcionales y todos con el mismo
|
|
39
|
+
* contrato: **ausente es «no consta», nunca cero ni falso**. Un turno del que no se pudo
|
|
40
|
+
* medir si escribió no es un turno que no escribió, y el juez tiene que poder distinguirlo
|
|
41
|
+
* — si no, contestaría «no cumplido» sobre una medición que nadie hizo.
|
|
42
|
+
*/
|
|
43
|
+
export interface HechosDelTurno {
|
|
44
|
+
/** El veredicto del simulador, si corrió. Ausente = no corrió. */
|
|
45
|
+
verificador?: "verde" | "rojo";
|
|
46
|
+
/** Ficheros del proyecto que el turno cambió, en relativo. */
|
|
47
|
+
ficheros?: readonly string[];
|
|
48
|
+
/** Quedaron escrituras que nadie aprobó, o se agotó un tope. */
|
|
49
|
+
escriturasSinResolver?: boolean;
|
|
50
|
+
/** Algún especialista se quedó sin llamadas o sin tools antes de contestar. */
|
|
51
|
+
algunEspecialistaCortado?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare const PREGUNTA_POR_OMISION = "No tengo claro si esto es lo que quer\u00EDas. \u00BFLo doy por bueno?";
|
|
54
|
+
/** Lo que el juez tiene que contestar, en el mismo formato que el de tareas: JSON y nada más. */
|
|
55
|
+
export declare function promptDelJuezDelTurno(caso: {
|
|
56
|
+
objetivo: string;
|
|
57
|
+
respuesta: string;
|
|
58
|
+
hechos: HechosDelTurno;
|
|
59
|
+
}): string;
|
|
60
|
+
/**
|
|
61
|
+
* El JSON del juez → veredicto. Lo que no se entiende es `dudoso`.
|
|
62
|
+
*
|
|
63
|
+
* Se busca el objeto dentro del texto en vez de exigir un JSON limpio: un modelo que
|
|
64
|
+
* envuelve su respuesta en ``` o le pone una frase delante ha contestado igual, y tirar ese
|
|
65
|
+
* veredicto por la envoltura sería perder la respuesta por su presentación.
|
|
66
|
+
*/
|
|
67
|
+
export declare function veredictoDelTurnoDeTexto(texto: string): VeredictoDelTurno;
|
|
68
|
+
/** Qué hace el harness con el veredicto. Puro: decidirlo aquí es lo que lo hace probable. */
|
|
69
|
+
export type AccionDelJuez = {
|
|
70
|
+
tipo: "nada";
|
|
71
|
+
} | {
|
|
72
|
+
tipo: "aviso";
|
|
73
|
+
texto: string;
|
|
74
|
+
} | {
|
|
75
|
+
tipo: "preguntar";
|
|
76
|
+
texto: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Del veredicto a lo que se hace, y las tres salidas no son intercambiables.
|
|
80
|
+
*
|
|
81
|
+
* - **Cumplido → NADA.** Ni una línea. Un juez que felicita en cada turno es ruido, y el
|
|
82
|
+
* ruido es cómo un aviso deja de leerse — la misma razón por la que los avisos de
|
|
83
|
+
* honestidad tienen alcance de turno y no salen cuando no ha pasado nada.
|
|
84
|
+
* - **No cumplido → AVISO.** No se pregunta: no hay nada que decidir, hay algo que decir.
|
|
85
|
+
* Quien lo lea ya está delante del turno y sabe qué hacer.
|
|
86
|
+
* - **Dudoso → PREGUNTAR**, si hay alguien a quien preguntar. Es la mitad que pidió el
|
|
87
|
+
* usuario y la que un `if` no puede dar: el juez no sabe, y el que sabe está ahí.
|
|
88
|
+
*
|
|
89
|
+
* **Sin humano, la duda se degrada a AVISO y no a silencio.** En una tarea de fondo no hay
|
|
90
|
+
* a quién preguntar —`consolaDeTarea` aparca en vez de contestar por nadie—, y tragarse la
|
|
91
|
+
* duda ahí sería cerrar en falso justo donde nadie está mirando.
|
|
92
|
+
*/
|
|
93
|
+
export declare function accionDelJuez(veredicto: VeredictoDelTurno, opciones: {
|
|
94
|
+
hayHumano: boolean;
|
|
95
|
+
}): AccionDelJuez;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Del log crudo de un aparato a hallazgos que el bucle de reparación pueda comparar.
|
|
3
|
+
*
|
|
4
|
+
* **POR QUÉ EXISTE, medido sobre AppDemo en un `pixel8` real**: el log del host recién
|
|
5
|
+
* arrancado son 29 líneas de las que UNA es de la app; tras hacer login, 27 líneas de las que
|
|
6
|
+
* 23 son suyas y, al deduplicar, **cinco hallazgos distintos** (`Invalid resource ID` ×10, ×7,
|
|
7
|
+
* ×2, ×2, ×2). Pasarle eso crudo a un modelo es darle veintitantas líneas de las que la mayoría
|
|
8
|
+
* son la misma, más Android quejándose de sí mismo.
|
|
9
|
+
*
|
|
10
|
+
* TRES TRANSFORMACIONES, Y LAS TRES SON DE FORMA — ninguna dice qué hacer:
|
|
11
|
+
*
|
|
12
|
+
* 1. **Quitar fecha, pid y tid.** No es higiene: es lo que hace que haya HUELLA. El pid cambia
|
|
13
|
+
* en cada arranque de la app, así que sin quitarlo dos vueltas del mismo error son dos
|
|
14
|
+
* huellas distintas y la guarda de «no progreso» de `turnoReal.ts#conVerificacion` —lo
|
|
15
|
+
* único que impide que el bucle dé vueltas para siempre— no puede comparar nada.
|
|
16
|
+
* 2. **Deduplicar, contando.** Diez veces el mismo error no son diez hechos. El `veces` se
|
|
17
|
+
* conserva porque sí dice algo (un error que sale diez veces al pintar una pantalla es otra
|
|
18
|
+
* cosa que uno que sale una vez), pero no multiplica el texto.
|
|
19
|
+
* 3. **ORDENAR lo de la plataforma detrás, y CONTARLO. Nunca descartarlo.** Esto es una
|
|
20
|
+
* decisión explícita y no un descuido: una lista negra de etiquetas escrita a fuego
|
|
21
|
+
* esconde, el día que el fallo de verdad salga por `HWUI`, la única línea que lo explica —
|
|
22
|
+
* y no hay forma de enterarse. Es el patrón de las «colecciones huérfanas» que este repo ya
|
|
23
|
+
* midió y tiró: una señal equivocada no se arregla con un aviso al pie. Así que aquí no se
|
|
24
|
+
* filtra, se PRIORIZA, y lo que queda detrás se cuenta, que es la regla de la casa: «lo que
|
|
25
|
+
* falta se ROTULA; lo que queda fuera se CUENTA».
|
|
26
|
+
*
|
|
27
|
+
* Y se acaba aquí. Lo que el modelo haga con los hallazgos es suyo: este módulo decide qué VE
|
|
28
|
+
* y cuándo se puede decir que no avanza, no qué piensa ni por dónde empieza.
|
|
29
|
+
*/
|
|
30
|
+
import type { HallazgoDelTurno } from "./events.js";
|
|
31
|
+
/**
|
|
32
|
+
* El `code` con el que estos hallazgos entran en el bucle.
|
|
33
|
+
*
|
|
34
|
+
* Uno solo y no uno por mensaje: el `code` de un hallazgo del simulador es un identificador
|
|
35
|
+
* ESTABLE de familia (`REF_JS_COLL_MISSING`) y el texto va en `mensaje`. Aquí la familia es
|
|
36
|
+
* «lo que el aparato dijo al arrancar la app», y el mensaje es el que distingue.
|
|
37
|
+
*/
|
|
38
|
+
export declare const ETIQUETA_DE_ARRANQUE = "DISPOSITIVO_ARRANQUE";
|
|
39
|
+
export interface HallazgoDeDispositivo {
|
|
40
|
+
/** La línea ya sin fecha, sin pid y sin tid: esto es lo que se compara. */
|
|
41
|
+
mensaje: string;
|
|
42
|
+
/** Cuántas veces salió la MISMA línea. */
|
|
43
|
+
veces: number;
|
|
44
|
+
/** Falso para lo que es del sistema y no del proyecto. Ordena, no filtra. */
|
|
45
|
+
deLaApp: boolean;
|
|
46
|
+
/** La que dijo el propio log, degradada si la línea es de la plataforma. */
|
|
47
|
+
severidad: "error" | "warning" | "info";
|
|
48
|
+
}
|
|
49
|
+
export interface LecturaDeLog {
|
|
50
|
+
/** Todos, los de la app primero. Nada se ha tirado. */
|
|
51
|
+
hallazgos: HallazgoDeDispositivo[];
|
|
52
|
+
/** Cuántos de los de arriba son de la plataforma, para poder DECIRLO. */
|
|
53
|
+
plataforma: number;
|
|
54
|
+
/** La traducción a lo que `conVerificacion` ya consume. */
|
|
55
|
+
aHallazgosDelTurno(): HallazgoDelTurno[];
|
|
56
|
+
}
|
|
57
|
+
export declare function hallazgosDeLog(texto: string): LecturaDeLog;
|
|
58
|
+
/**
|
|
59
|
+
* La huella de una lectura, con el MISMO formato que la de `conVerificacion`
|
|
60
|
+
* (`code|fichero|linea`), para que las dos sean intercambiables en la misma guarda.
|
|
61
|
+
*
|
|
62
|
+
* Solo los de la app: un aviso de la plataforma que va y viene no dice nada de si el error se
|
|
63
|
+
* está arreglando — la misma razón por la que allí la huella son los ERRORES y no todos los
|
|
64
|
+
* hallazgos. El `mensaje` entra en la huella porque aquí el `code` es uno solo: sin él, dos
|
|
65
|
+
* excepciones distintas darían la misma huella y el bucle se creería atascado.
|
|
66
|
+
*/
|
|
67
|
+
export declare function huellaDeHallazgos(hallazgos: readonly HallazgoDeDispositivo[]): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 declare 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 declare function pideLeerLaMemoria(nombre: string, detalle: string | undefined): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **El MÉTODO para comparar una captura con su maqueta**, el mismo para el crítico visual (`juezVisual.ts`) y para un
|
|
3
|
+
* desarrollador en Claude Code que compara él mismo (`agentes.ts#textoDeTrabajoSinLlamar`): dos que comparan distinto
|
|
4
|
+
* dan dos veredictos que no se pueden contrastar.
|
|
5
|
+
*
|
|
6
|
+
* Existe por una medida en Maset (MAS-3): con un prompt que pedía comparar «forma, tamaños, color, colocación» en
|
|
7
|
+
* general, DeepSeek flash vio la mitad de lo evidente; con este recorrido —inventario de la maqueta elemento a elemento,
|
|
8
|
+
* y cada uno comparado en un orden fijo— vio además las flechas desalineadas y las tarjetas más altas. Lo que le falta a
|
|
9
|
+
* un modelo no es la vista: es un recorrido que no le deje resumir.
|
|
10
|
+
*/
|
|
11
|
+
export declare const METODO_DE_COMPARACION_VISUAL: string;
|
|
12
|
+
/** Cuántas pasadas del modelo por crítica con maqueta: una sola variaba mucho (medido: de 4 a 8 diferencias). */
|
|
13
|
+
export declare const PASADAS_DE_COMPARACION = 2;
|
|
14
|
+
/** Lo que dos observaciones tienen que compartir para ser la MISMA dicha con otras palabras. */
|
|
15
|
+
export declare const PARECIDO_PARA_REPETIDA = 0.5;
|
|
16
|
+
/**
|
|
17
|
+
* Las observaciones de varias pasadas, sin las repetidas (`repetidas`): dos pasadas del mismo modelo cuentan lo mismo
|
|
18
|
+
* con otras palabras. Puro y en orden: primero las de la primera pasada.
|
|
19
|
+
*/
|
|
20
|
+
export declare function unirObservaciones(...listas: readonly (readonly string[])[]): string[];
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import type { Papel } from "./ports.js";
|
|
2
|
+
import type { ConfigDeFichero } from "./config.js";
|
|
3
|
+
export declare const PAPELES: readonly Papel[];
|
|
4
|
+
export type ProveedorDeSerie = "gemini" | "openai" | "anthropic" | "ollama" | "ollama-cloud" | "nvidia" | "groq" | "xai" | "deepseek" | "opencode-go" | "opencode-zen";
|
|
5
|
+
/**
|
|
6
|
+
* Un endpoint compatible con OpenAI dado de alta por el USUARIO, con la forma
|
|
7
|
+
* `custom:<slug>`.
|
|
8
|
+
*
|
|
9
|
+
* Es un tipo de plantilla y no una entrada más de la lista cerrada porque estos no se
|
|
10
|
+
* conocen al compilar: los declara quien usa el programa. Lo que sí se puede afirmar sin
|
|
11
|
+
* registro es la FORMA, y con eso `parsear` sigue siendo una función pura —no hay que
|
|
12
|
+
* pasarle la lista de altas para partir «custom:mi-llm/qwen3»—; que ese slug esté dado de
|
|
13
|
+
* alta se comprueba donde importa, al construir el cliente y al pedir el catálogo, con un
|
|
14
|
+
* mensaje que dice dónde darlo de alta.
|
|
15
|
+
*/
|
|
16
|
+
export type ProveedorPersonalizado = `custom:${string}`;
|
|
17
|
+
export type Proveedor = ProveedorDeSerie | ProveedorPersonalizado;
|
|
18
|
+
export declare const PREFIJO_PERSONALIZADO = "custom:";
|
|
19
|
+
export declare function motivoDeSlugInaceptable(slug: string): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* El identificador que le toca a un proveedor por su NOMBRE.
|
|
22
|
+
*
|
|
23
|
+
* Se deriva en vez de pedirse: un tercer campo en el formulario —«nombre», «id», «URL»—
|
|
24
|
+
* solo puede escribirse mal, y quien da de alta «Mi LM Studio» no tiene por qué saber que
|
|
25
|
+
* eso va a acabar siendo un segmento de un id y un trozo del nombre de una variable de
|
|
26
|
+
* entorno. Se quitan los acentos (`NFD` + la marca combinante), lo que no sea letra o
|
|
27
|
+
* cifra pasa a guion, y se recorta a lo que admite `SLUG`.
|
|
28
|
+
*
|
|
29
|
+
* Puede salir vacío —un nombre de solo signos— y entonces devuelve cadena vacía, que
|
|
30
|
+
* `motivoDeSlugInaceptable` rechaza con su motivo: adivinar un id ahí sería inventarlo.
|
|
31
|
+
*/
|
|
32
|
+
export declare function slugDesdeNombre(nombre: string): string;
|
|
33
|
+
export declare function esProveedorPersonalizado(valor: string): valor is ProveedorPersonalizado;
|
|
34
|
+
export declare function slugDeProveedor(proveedor: ProveedorPersonalizado): string;
|
|
35
|
+
export declare function idDeProveedorPersonalizado(slug: string): ProveedorPersonalizado;
|
|
36
|
+
/** Un proveedor personalizado tal como se declara y se guarda. */
|
|
37
|
+
export interface ProveedorDeclarado {
|
|
38
|
+
/** Sin el prefijo. El id completo, el que se teclea, es `custom:<slug>`. */
|
|
39
|
+
slug: string;
|
|
40
|
+
/** Lo que escribe el usuario para reconocerlo. No es un identificador. */
|
|
41
|
+
nombre: string;
|
|
42
|
+
/** La URL base compatible con OpenAI. El catálogo pide `<baseUrl>/models`. */
|
|
43
|
+
baseUrl: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* ¿Vale eso como endpoint? Devuelve el MOTIVO del rechazo, o `undefined` si pasa.
|
|
47
|
+
*
|
|
48
|
+
* La misma regla que la URL de un MCP, y por la misma razón: HTTPS fuera de la máquina,
|
|
49
|
+
* `http://` solo en loopback, y nunca credenciales dentro de la URL —una URL con usuario
|
|
50
|
+
* y contraseña acaba escrita en `config.json` y en cada traza que la enseñe—.
|
|
51
|
+
*
|
|
52
|
+
* Que loopback pase NO es una concesión: es el caso principal. Un LM Studio, un
|
|
53
|
+
* `llama.cpp --server` o un vLLM escuchan en `http://localhost:1234/v1`, y ahí el texto
|
|
54
|
+
* plano no cruza ninguna red — el mismo trato que ya reciben el `redirect_uri` del
|
|
55
|
+
* callback de OAuth y esta propia consola.
|
|
56
|
+
*/
|
|
57
|
+
export declare function motivoDeEndpointInaceptable(valor: string): string | undefined;
|
|
58
|
+
export declare const PROVEEDORES: readonly ProveedorDeSerie[];
|
|
59
|
+
/**
|
|
60
|
+
* Los que se hablan con el cliente de OpenAI cambiándole la URL base.
|
|
61
|
+
*
|
|
62
|
+
* Los tres —NVIDIA (`build.nvidia.com`), Groq y xAI (los modelos `grok-*`)— publican una
|
|
63
|
+
* API compatible con OpenAI: mismo `/chat/completions` y mismo `GET /v1/models`. Así que
|
|
64
|
+
* no son tres ramas nuevas en `construirModelo` ni tres listados nuevos en el catálogo,
|
|
65
|
+
* son tres FILAS de esta tabla, y quien las consume tiene una sola rama genérica. La
|
|
66
|
+
* cuarta que se añada será otra fila.
|
|
67
|
+
*
|
|
68
|
+
* **`openai` NO está aquí a propósito**, aunque encaje en la forma: su listado filtra por
|
|
69
|
+
* las familias de ids de OpenAI (`gpt-`, `o3-`, `codex-`), que en estos tres no significan
|
|
70
|
+
* nada — meterlo en la rama genérica cambiaría lo que hoy ofrece.
|
|
71
|
+
*
|
|
72
|
+
* Y la lista de proveedores sigue siendo CERRADA (no hay «proveedor personalizado», ver
|
|
73
|
+
* `componentes/Ajustes.tsx`): lo que cambia con esto es que añadir uno compatible cuesta
|
|
74
|
+
* una fila de datos en vez de una rama por sitio, no que se pueda declarar desde fuera.
|
|
75
|
+
*/
|
|
76
|
+
export type ProveedorCompatibleOpenAi = "nvidia" | "groq" | "xai" | "deepseek" | "opencode-go" | "opencode-zen";
|
|
77
|
+
export declare const COMPATIBLES_OPENAI: Record<ProveedorCompatibleOpenAi, {
|
|
78
|
+
baseUrl: string;
|
|
79
|
+
variable: string;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* La variable de entorno donde vive la clave de cada proveedor, y el ÚNICO sitio donde
|
|
83
|
+
* se escribe.
|
|
84
|
+
*
|
|
85
|
+
* Hubo cuatro copias de esta tabla —`agent/config/configEnDisco.ts`, `agent/config/catalogoModelos.ts`,
|
|
86
|
+
* `cli/config.ts` y `cli/consola.ts`—, duplicadas para que `cli/` no tirase de `agent/`
|
|
87
|
+
* por un mapa de cuatro líneas. Ya habían divergido: la de `cli/config.ts` no tenía
|
|
88
|
+
* `OLLAMA_API_KEY`, así que `/config` decía «sin credencial» de Ollama Cloud aunque
|
|
89
|
+
* estuviera puesta. Puesta en `core/` —que es datos puros y de donde SÍ pueden tirar los
|
|
90
|
+
* dos lados— el problema desaparece por construcción.
|
|
91
|
+
*
|
|
92
|
+
* `ollama` no está: es local y no necesita clave. Esa ausencia es la misma que declara
|
|
93
|
+
* `SIN_CREDENCIAL`, y hay un test que exige que las dos cuenten lo mismo.
|
|
94
|
+
*/
|
|
95
|
+
export declare const VARIABLES_POR_PROVEEDOR: Partial<Record<ProveedorDeSerie, string>>;
|
|
96
|
+
/**
|
|
97
|
+
* Cómo se escribe un proveedor. Para uno personalizado, el nombre que puso quien lo dio
|
|
98
|
+
* de alta; sin registro —o con un slug que ya no está— se cae a su slug, que es lo único
|
|
99
|
+
* que se puede afirmar: inventarle un nombre sería peor que enseñar el identificador.
|
|
100
|
+
*/
|
|
101
|
+
export declare function nombreDeProveedor(proveedor: Proveedor, declarados?: readonly ProveedorDeclarado[]): string;
|
|
102
|
+
/**
|
|
103
|
+
* La variable de entorno donde vive la clave de un proveedor.
|
|
104
|
+
*
|
|
105
|
+
* Para los de serie, la tabla. Para uno personalizado se DERIVA del slug
|
|
106
|
+
* (`XONECODE_CLAVE_MI_LLM`) en vez de guardarse: una variable elegida por el usuario sería
|
|
107
|
+
* un cuarto campo del formulario que solo puede escribirse mal, y derivarla hace que todo
|
|
108
|
+
* lo que ya existe —`aplicarAuth`, `guardarCredencial`, el constructor del cliente y el
|
|
109
|
+
* catálogo— siga funcionando sin saber que estos proveedores existen.
|
|
110
|
+
*/
|
|
111
|
+
export declare function variableDeProveedor(proveedor: Proveedor): string | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* La fila de un proveedor compatible con OpenAI, o nada si no lo es.
|
|
114
|
+
*
|
|
115
|
+
* Un personalizado LO ES por definición —es lo único que se puede dar de alta—, pero solo
|
|
116
|
+
* si consta en el registro: sin su URL base no hay a dónde llamar, y devolver algo aquí
|
|
117
|
+
* sería fabricar un endpoint.
|
|
118
|
+
*/
|
|
119
|
+
export declare function compatibleConOpenAi(proveedor: Proveedor, declarados?: readonly ProveedorDeclarado[]): {
|
|
120
|
+
baseUrl: string;
|
|
121
|
+
variable: string;
|
|
122
|
+
} | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Los que NO llevan clave. Hoy solo Ollama local, que es la omisión del repo.
|
|
125
|
+
*
|
|
126
|
+
* Vive aquí, en datos puros, porque lo consultan dos sitios que no se conocen: el asistente
|
|
127
|
+
* de cuenta (`cli/wizardInicial.ts`, para no pedir una clave que no hace falta) y el estado
|
|
128
|
+
* de modelos de la consola web (`web/servidor/arranque.ts`, que necesita distinguir «no
|
|
129
|
+
* necesita credencial» de «la tiene» — pintarle a Ollama un punto verde sería concederle un
|
|
130
|
+
* permiso que nadie le dio, y uno rojo, inventarle un problema). Dos listas de esto ya
|
|
131
|
+
* habrían divergido: `hayCredencial` (`cli/consola.ts`) devuelve `true` para un proveedor
|
|
132
|
+
* sin variable de entorno, que para su pregunta —«¿puedo usarlo?»— es correcto y para ésta
|
|
133
|
+
* —«¿tiene credencial?»— sería falso.
|
|
134
|
+
*/
|
|
135
|
+
export declare const SIN_CREDENCIAL: ReadonlySet<Proveedor>;
|
|
136
|
+
export interface Eleccion {
|
|
137
|
+
proveedor: Proveedor;
|
|
138
|
+
modelo: string;
|
|
139
|
+
/** De dónde salió, para que `describe` lo pueda decir. */
|
|
140
|
+
origen: "bandera" | "entorno" | "proyecto" | "global" | "omision";
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Los modelos por omisión de cada papel.
|
|
144
|
+
*
|
|
145
|
+
* `rapido` es el que corre en TODOS los turnos, así que es el que más veces se paga en la
|
|
146
|
+
* vida del agente: arranca abajo y solo se sube con una medición delante. `afilado` es
|
|
147
|
+
* para el juez, que es quien decide si algo está bien — ahí un modelo flojo cuesta más de
|
|
148
|
+
* lo que ahorra.
|
|
149
|
+
*
|
|
150
|
+
* Ollama por omisión, y a propósito: el usuario tiene modelos locales con tool-calling y
|
|
151
|
+
* los frontier de pago no son la vía por defecto de este laboratorio.
|
|
152
|
+
*/
|
|
153
|
+
export declare const POR_OMISION: Record<Papel, {
|
|
154
|
+
proveedor: Proveedor;
|
|
155
|
+
modelo: string;
|
|
156
|
+
}>;
|
|
157
|
+
export declare class ModeloMalEscrito extends Error {
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* `proveedor/modelo` → sus dos partes.
|
|
161
|
+
*
|
|
162
|
+
* El separador es la PRIMERA barra, no la última: un id de Ollama puede llevar barras
|
|
163
|
+
* (`library/qwen3:8b`) y partir por la última dejaría el proveedor con basura. Se valida
|
|
164
|
+
* el proveedor contra la lista en vez de aceptar cualquier cosa, porque un proveedor mal
|
|
165
|
+
* escrito no falla al parsear: falla mucho después, al construir el cliente, con un error
|
|
166
|
+
* que no menciona la bandera.
|
|
167
|
+
*/
|
|
168
|
+
export declare function parsear(texto: string): {
|
|
169
|
+
proveedor: Proveedor;
|
|
170
|
+
modelo: string;
|
|
171
|
+
};
|
|
172
|
+
export interface FuentesDeEleccion {
|
|
173
|
+
/** `--modelo proveedor/modelo`: fija los TRES papeles. */
|
|
174
|
+
bandera?: string;
|
|
175
|
+
/** `--modelo-rapido`, etc.: fija UNO, y gana sobre `--modelo`. */
|
|
176
|
+
porPapel?: Partial<Record<Papel, string>>;
|
|
177
|
+
/** Variables de entorno, por si se prefiere no repetir la bandera. */
|
|
178
|
+
entorno?: {
|
|
179
|
+
XONECODE_MODELO?: string;
|
|
180
|
+
};
|
|
181
|
+
/** `config.json` del proyecto, ya validado. */
|
|
182
|
+
proyecto?: ConfigDeFichero;
|
|
183
|
+
/** `config.json` global (~/.xonecode/config.json), ya validado. */
|
|
184
|
+
global?: ConfigDeFichero;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Qué modelo le toca a cada papel, y de dónde salió.
|
|
188
|
+
*
|
|
189
|
+
* Precedencia, de más fuerte a más débil, evaluada papel a papel: porPapel > bandera
|
|
190
|
+
* > entorno > proyecto > global > omisión. Los dos primeros escalones son de CLÍ y
|
|
191
|
+
* preceden a cualquier fichero. Entre ficheros manda el RANGO (proyecto gana a global),
|
|
192
|
+
* y solo DENTRO de un mismo fichero manda la especificidad (modelos.<papel> gana a
|
|
193
|
+
* modelo): el campo general de un fichero de rango superior nunca pierde contra el
|
|
194
|
+
* campo específico de uno inferior.
|
|
195
|
+
*/
|
|
196
|
+
export declare function resolver(fuentes?: FuentesDeEleccion): Record<Papel, Eleccion>;
|
|
197
|
+
export declare function pideThinkingAdaptativo(proveedor: Proveedor, modelo: string): boolean;
|
|
198
|
+
export declare function aceptaThinkingAdaptativo(proveedor: Proveedor, modelo: string): boolean;
|