xonecode 0.38.44 → 0.39.4
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-BeWDctgN.js → EditorDeFichero-4HFwLke_.js} +1 -1
- package/apps/web/dist/assets/index-C57A_ylS.css +1 -0
- package/apps/web/dist/assets/index-CYZEmLsX.js +506 -0
- package/apps/web/dist/assets/{php-D3QdOnb8.js → php-CdQiFsq1.js} +1 -1
- package/apps/web/dist/assets/{ruby-DDAcW-Z2.js → ruby-3JrCXo0h.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- 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/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/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 +148 -0
- package/dist/agent/tareas/tareasEnDisco.js +17 -0
- package/dist/agent/tareas/tareasEnDisco.js.map +1 -1
- 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/arranque.js +39 -0
- package/dist/web/servidor/arranque.js.map +1 -1
- 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/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
- package/apps/web/dist/assets/index-B-6cDRAV.js +0 -506
- package/apps/web/dist/assets/index-BQdHnRbo.css +0 -1
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuándo una tarea está TERMINADA: las condiciones que comprueba el código, más el
|
|
3
|
+
* veredicto de un juez, y por qué ninguna de las dos mitades basta sola.
|
|
4
|
+
*
|
|
5
|
+
* `core/`, o sea datos y reglas puras: ni disco, ni git, ni modelos. Quien MIDE es el
|
|
6
|
+
* corredor (`web/servidor/corredorDeTareas.ts`); aquí solo se decide con lo medido.
|
|
7
|
+
*
|
|
8
|
+
* **Por qué el veredicto del juez no basta solo.** Es la regla que este repo ya tenía
|
|
9
|
+
* escrita, palabra por palabra, para la subida autónoma
|
|
10
|
+
* (`core/cloudstudio.ts#PoliticaDeAprobacion`): «el veredicto del juez no bastará solo:
|
|
11
|
+
* exigirá además condiciones que comprueba el código (verificador en verde, árbol limpio,
|
|
12
|
+
* nada pendiente de aprobar), porque en este repo los avisos son código y no prompt
|
|
13
|
+
* precisamente porque a un modelo se le puede pedir que avise y no avisa». Este fichero es
|
|
14
|
+
* esa frase hecha código. Si el juez pudiera entregar solo, «terminada» valdría lo que
|
|
15
|
+
* valga la buena voluntad de un modelo esa vez.
|
|
16
|
+
*
|
|
17
|
+
* **Y por qué las condiciones tampoco bastan solas**: las tres son propiedades del
|
|
18
|
+
* PROCESO —se escribió, se midió, se puede revisar—, y ninguna dice si lo escrito es lo
|
|
19
|
+
* que se pedía. Eso es lo único que aporta el juez, y es también lo único que se le
|
|
20
|
+
* pregunta.
|
|
21
|
+
*
|
|
22
|
+
* **La tercera condición NO es «árbol de git limpio», y eso está MEDIDO.** El plan la
|
|
23
|
+
* escribía como `arbolSucio: false`, con `arbolLimpio` (`agent/sesiones/gitSync.ts`) detrás. Medido
|
|
24
|
+
* sobre un repo de verdad: una tarea que escribe UN fichero deja `git status --porcelain`
|
|
25
|
+
* con `?? Clientes.xne`, o sea `arbolLimpio === false` — el árbol de una tarea que ha
|
|
26
|
+
* trabajado está sucio POR DEFINICIÓN, así que con esa condición NINGUNA tarea se
|
|
27
|
+
* entregaría nunca. Lo que hay que exigir es otra cosa, y es la que el §0 del diseño
|
|
28
|
+
* nombra: «sin aprobación previa, la revisión posterior es la única forma de mirar». O
|
|
29
|
+
* sea, que lo que la tarea escribió se pueda REVISAR — que exista la marca de git de su
|
|
30
|
+
* sesión y el diff salga (`agent/sesiones/sesionGit.ts#cambiosDeSesion` con `via: "git"`, la misma
|
|
31
|
+
* función que pinta la pestaña Revisión, no una parecida). Un campo llamado `arbolSucio`
|
|
32
|
+
* que midiera eso sería la misma clase de mentira que `aplicados` habría sido para
|
|
33
|
+
* `Tarea.autorizadas`, así que se llama `revisable`.
|
|
34
|
+
*/
|
|
35
|
+
import type { HallazgoDelTurno } from "./events.js";
|
|
36
|
+
/**
|
|
37
|
+
* Cómo acabó el verificador en el turno, con TRES valores y no un booleano.
|
|
38
|
+
*
|
|
39
|
+
* Por la misma razón que los estados de una herramienta en `dispositivos.ts`: «no se
|
|
40
|
+
* sabe» no es «está bien». Un turno que no escribió no corre el simulador, otro no lo
|
|
41
|
+
* encuentra en el PATH y otro se cortó antes de llegar — y ninguno de los tres es verde.
|
|
42
|
+
*/
|
|
43
|
+
export type EstadoDeVerificador = "verde" | "rojo" | "no-corrio";
|
|
44
|
+
/**
|
|
45
|
+
* Lo que el simulador NO comprueba: documentación. Un `.md` no es parte de la app XOne y `xone-simulator validate`
|
|
46
|
+
* mira la app, así que verificar un turno que solo dejó documentación ni dice nada de lo escrito ni puede fallar por
|
|
47
|
+
* ello — y sin el binario en la máquina tumbaba un turno que había escrito bien (IXCODE-27). LISTA BLANCA y corta a
|
|
48
|
+
* propósito: lo que no esté aquí se sigue verificando, que es el lado seguro.
|
|
49
|
+
*/
|
|
50
|
+
export declare const EXTENSIONES_DE_DOCUMENTACION: ReadonlySet<string>;
|
|
51
|
+
/** ¿Son TODAS las rutas documentación? Con alguna ruta: una lista vacía no es «solo documentación», es nada. */
|
|
52
|
+
export declare function soloDocumentacion(rutas: readonly string[]): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Lo que un TURNO puede decir de sí mismo, y que hasta ahora se tiraba.
|
|
55
|
+
*
|
|
56
|
+
* **Este tipo existe por una deuda medida.** `EjecutorDeTurno` devolvía `Promise<void>` y
|
|
57
|
+
* `crearEjecutorReal` (`cli/main.ts`) descartaba el retorno de `sesion.turno`, así que el
|
|
58
|
+
* `cortadoPorTope` que sabe que quedaron escrituras sin aplicar no salía de ahí. Medido
|
|
59
|
+
* con las tareas autónomas: cuatro ficheros escritos, una escritura abandonada al agotarse
|
|
60
|
+
* el tope de rondas, el verificador sin correr ni una vez, y el kanban diciendo
|
|
61
|
+
* «terminada». Sin abrir este canal, la condición `pendientes: 0` no tiene con qué
|
|
62
|
+
* medirse.
|
|
63
|
+
*
|
|
64
|
+
* Nada de aquí lleva contenido de ficheros: el estado del verificador, cuántas escrituras
|
|
65
|
+
* quedaron colgando, y los hallazgos en la misma forma que ya viaja en el evento
|
|
66
|
+
* `verificacion` —código, severidad, mensaje, fichero RELATIVO y línea—.
|
|
67
|
+
*/
|
|
68
|
+
/** Cuánto de la pregunta entra en el motivo: se pinta en el kanban, y la pregunta entera se ve en su chat. */
|
|
69
|
+
export declare const TOPE_DE_PREGUNTA_EN_EL_MOTIVO = 300;
|
|
70
|
+
/** El motivo de una tarea aparcada porque el agente pregunta. Se contesta con el feedback de la tarea. */
|
|
71
|
+
export declare function motivoDePreguntaPendiente(pregunta: string): string;
|
|
72
|
+
export interface ResultadoDeTurno {
|
|
73
|
+
verificador: EstadoDeVerificador;
|
|
74
|
+
/**
|
|
75
|
+
* Escrituras que quedaron esperando aprobación y **no se aplicaron**.
|
|
76
|
+
*
|
|
77
|
+
* Se mide al final del turno y no se deduce de `cortadoPorTope`: por ahí se sale por
|
|
78
|
+
* tres puertas distintas (el tope de rondas, el tope de tandas automáticas y «no hay
|
|
79
|
+
* quién apruebe») y las tres dejan escrituras colgando. El número es lo accionable.
|
|
80
|
+
*/
|
|
81
|
+
pendientes: number;
|
|
82
|
+
/**
|
|
83
|
+
* El tope de rondas de escritura que el turno AGOTÓ, si se cortó por eso. Ausente = no se cortó por el tope (o el
|
|
84
|
+
* motor no lo dice). Con él, el motivo dice la verdad: «agotó el tope de N rondas», no «quedaron escrituras esperando
|
|
85
|
+
* aprobación», que en una tarea —sin nadie a quien preguntar— hacía pensar que faltaba aprobar algo.
|
|
86
|
+
*/
|
|
87
|
+
topeAgotado?: number;
|
|
88
|
+
/**
|
|
89
|
+
* El turno acabó con una pregunta del agente en espera (TrueForge, `ask_user_question`): su enunciado. Un turno así
|
|
90
|
+
* acaba «limpio», pero no ha terminado nada —espera una respuesta—, así que no pasa por la entrega: se aparca con la
|
|
91
|
+
* pregunta (`motivoDePreguntaPendiente`). Medido en Maset: pasaba por el juez, que dictaba «la sesión no escribió
|
|
92
|
+
* ningún fichero», y ese rojo se quedaba en la tarea mientras trabajaba después. Ausente = no quedó ninguna.
|
|
93
|
+
*/
|
|
94
|
+
preguntaPendiente?: string;
|
|
95
|
+
/**
|
|
96
|
+
* Lo BLOQUEANTE medido por el crítico visual en su ÚLTIMA crítica del turno (el estado final de la pantalla): un
|
|
97
|
+
* control tapado, fuera de la pantalla o que falta respecto a la maqueta. Es CRÍTICO para el cierre (`## CRITICAL`);
|
|
98
|
+
* un defecto de detalle no. Ausente = no hubo crítica, o no dio nada bloqueante.
|
|
99
|
+
*/
|
|
100
|
+
bloqueantesVisuales?: string[];
|
|
101
|
+
/**
|
|
102
|
+
* Bloqueantes visuales que el agente EXPLICA en su respuesta final (los nombra: los decidió no hacer, o dice por qué
|
|
103
|
+
* no pudo). No son críticos: van como observaciones (`omisionDeclarada`). Medido en Maset: «Turno de Día», los
|
|
104
|
+
* contadores y la quinta tarjeta salían en `## CRITICAL` estando en su apartado de decisiones.
|
|
105
|
+
*/
|
|
106
|
+
omisionesExplicadas?: string[];
|
|
107
|
+
/**
|
|
108
|
+
* Bloqueantes de una crítica ANTERIOR a los últimos cambios del proyecto: no describen la pantalla final, así que no son
|
|
109
|
+
* críticos —se dicen como observación, sin comprobar—. Medido en Maset: el desarrollador cambió la pantalla tras la
|
|
110
|
+
* última crítica y el cierre puso en `## CRITICAL` lo que esa crítica había visto antes.
|
|
111
|
+
*/
|
|
112
|
+
bloqueantesDesfasados?: string[];
|
|
113
|
+
/**
|
|
114
|
+
* Pantallas de Stitch que el turno pidió por título y no existen (ni casan por palabras). CRÍTICO, decisión suya:
|
|
115
|
+
* medido en Maset, «Menu Listado Entregas» no estaba y la tarea construyó la ventana con otra maqueta.
|
|
116
|
+
*/
|
|
117
|
+
pantallasNoEncontradas?: string[];
|
|
118
|
+
/**
|
|
119
|
+
* Las comprobaciones VISUALES del turno, una línea cada una y medidas por el harness: lo que dio cada
|
|
120
|
+
* `comparar_capturas` y `xone_critica_visual`, y el crítico de pantalla del cierre. Van al juez de QA como HECHO:
|
|
121
|
+
* medido en una tarea real (Maset), el juez dictó rojo porque «no consta la validación visual» que el criterio pedía,
|
|
122
|
+
* con seis comparaciones y seis críticas hechas en ese turno — no recibía nada de eso. Ausente = no hubo ninguna.
|
|
123
|
+
*/
|
|
124
|
+
comprobacionesVisuales?: string[];
|
|
125
|
+
/**
|
|
126
|
+
* Los hallazgos del turno, si el verificador corrió. Es lo que el informe del verificador
|
|
127
|
+
* ya declara que viaja «al ejecutor como brief, al juez como hecho»
|
|
128
|
+
* (`core/ports.ts#InformeVerificacion`).
|
|
129
|
+
*/
|
|
130
|
+
hallazgos?: HallazgoDelTurno[];
|
|
131
|
+
/**
|
|
132
|
+
* Cuántos hallazgos del simulador quedaron FUERA del reparto: los que caen en ficheros
|
|
133
|
+
* que este turno no tocó. El otro lado de `hallazgos`, y hasta ahora solo se pintaba en
|
|
134
|
+
* la consola (evento `verificacion`) y se tiraba.
|
|
135
|
+
*
|
|
136
|
+
* **Viaja porque el juez de QA lo necesita para no acusar al agente de lo que no hizo.**
|
|
137
|
+
* `hallazgos` ya está filtrada por el reparto de `agent/turno/turnoReal.ts#conVerificacion`,
|
|
138
|
+
* pero quien la recibe no puede saber que lo está: en la primera ejecución real del juez
|
|
139
|
+
* eso acabó en un rojo que decía que el turno había modificado los ficheros de los que
|
|
140
|
+
* hablaban los hallazgos. Con este número, la lista se lee por lo que es.
|
|
141
|
+
*
|
|
142
|
+
* **Ausente y CERO no son lo mismo**, como siempre por aquí: `0` es «el verificador
|
|
143
|
+
* corrió y no había ningún otro», y ausente es «no se midió» — el turno que no escribió,
|
|
144
|
+
* el que no tiene simulador, el que se cortó antes. El evento lo omite en cero porque
|
|
145
|
+
* ahí es una línea de consola que no diría nada; esto es un dato, y cero es un dato.
|
|
146
|
+
*/
|
|
147
|
+
preexistentes?: number;
|
|
148
|
+
/**
|
|
149
|
+
* Por qué NO corrió, cuando se sabe: el binario que falta, o que esta ejecución no
|
|
150
|
+
* tiene verificador. Ausente con `no-corrio` significa que el turno no llegó a
|
|
151
|
+
* intentarlo — casi siempre porque no escribió nada, o porque se cortó antes.
|
|
152
|
+
*/
|
|
153
|
+
motivoSinVerificar?: string;
|
|
154
|
+
/**
|
|
155
|
+
* El texto de las notas (IXCODE-4) que nadie llegó a recibir antes de que el turno cerrara,
|
|
156
|
+
* concatenado. Quien orquesta las sesiones (`vestibulo.ts`) decide con esto si dispara el
|
|
157
|
+
* turno siguiente — este tipo solo REPORTA, no dispara nada.
|
|
158
|
+
*/
|
|
159
|
+
notasSobrantes?: string;
|
|
160
|
+
}
|
|
161
|
+
/** Lo del turno más lo que solo se puede medir desde fuera. */
|
|
162
|
+
export interface MedidaDeEntrega extends ResultadoDeTurno {
|
|
163
|
+
/**
|
|
164
|
+
* ¿Se puede REVISAR lo que la tarea escribió? O sea: existe la marca de git de su sesión
|
|
165
|
+
* y el diff sale (`cambiosDeSesion(...).via === "git"`).
|
|
166
|
+
*
|
|
167
|
+
* No es «el árbol está limpio» (ver la cabecera): es que lo escrito sea visible. Sin
|
|
168
|
+
* aprobación previa, ese diff es el ÚNICO momento en que una persona puede mirar lo que
|
|
169
|
+
* hizo una tarea; entregar trabajo que nadie puede ver sería exactamente el sitio vacío
|
|
170
|
+
* que el modal de aprobación dejó.
|
|
171
|
+
*/
|
|
172
|
+
revisable: boolean;
|
|
173
|
+
/**
|
|
174
|
+
* ¿Cambió la sesión algún fichero, **SEGÚN GIT**? `undefined` = no se sabe.
|
|
175
|
+
*
|
|
176
|
+
* De aquí depende que una tarea de SOLO LECTURA se pueda entregar, y la fuente importa:
|
|
177
|
+
* lo dice `cambiosDeSesion` —la misma que `revisable`— y **nunca `autorizadas`**. Aquello
|
|
178
|
+
* es una pista de lo que el agente quiso escribir, y puede llevar rutas que las guardas
|
|
179
|
+
* rechazaron; decidir con ella sería decidir con la intención en vez de con el hecho.
|
|
180
|
+
*
|
|
181
|
+
* Solo se puede afirmar cuando hay marca (`via: "git"`): sin ella no es que no escribiera,
|
|
182
|
+
* es que no hay con qué mirarlo — y entonces esto queda `undefined` y la condición del
|
|
183
|
+
* verificador se exige como siempre. Es la distinción de siempre entre «ninguno» y «no se
|
|
184
|
+
* sabe», y aquí colapsarla sería un camino para entregar sin verificar.
|
|
185
|
+
*/
|
|
186
|
+
escribio?: boolean;
|
|
187
|
+
/**
|
|
188
|
+
* QUÉ cambió, según git: las rutas RELATIVAS del mismo diff del que sale `escribio`
|
|
189
|
+
* (`corredorDeTareas.ts#revisionConGit`, una sola medida para las dos cosas, así que no
|
|
190
|
+
* pueden discrepar). De aquí sale el HECHO que se le cuenta al juez de QA.
|
|
191
|
+
*
|
|
192
|
+
* **Existe porque `autorizadas` no puede hacer este trabajo.** Aquello se apunta al
|
|
193
|
+
* autorizar la escritura y es la intención del agente; esto es un diff contra el «antes»
|
|
194
|
+
* de la sesión. Todo el modo de fallo medido del juez era «no puedo comprobar la
|
|
195
|
+
* existencia ni el contenido de X»: darle el hecho fichero a fichero lo quita de raíz, y
|
|
196
|
+
* de paso le deja juzgar la cobertura del encargo ruta por ruta.
|
|
197
|
+
*
|
|
198
|
+
* **Ausente y VACÍA no son lo mismo**: ausente es «no se pudo preguntar a git» —sin marca
|
|
199
|
+
* no hay con qué comparar— y `[]` es «git dice que no cambió nada». Colapsarlas haría que
|
|
200
|
+
* un proyecto sin marca pareciera un proyecto intacto.
|
|
201
|
+
*/
|
|
202
|
+
cambiados?: readonly string[];
|
|
203
|
+
/**
|
|
204
|
+
* Cuántas escrituras AUTORIZÓ el turno (`Tarea.autorizadas`), si consta.
|
|
205
|
+
*
|
|
206
|
+
* No es del turno ni de git: es de la tarea, y entra por su propio parámetro. Está aquí
|
|
207
|
+
* para una sola condición —autorizó escrituras y git no ve ni un cambio—, y **ausente es
|
|
208
|
+
* «no consta»**: una tarea de antes de que esto existiera, o un ejecutor que no lo informa.
|
|
209
|
+
* Acusar con un dato que no se tiene es exactamente lo que estas condiciones no hacen.
|
|
210
|
+
*/
|
|
211
|
+
autorizadas?: number;
|
|
212
|
+
}
|
|
213
|
+
/** El veredicto de un juez de QA. Texto para leer y hallazgos, nunca contenido de ficheros. */
|
|
214
|
+
export interface VeredictoDeTarea {
|
|
215
|
+
/** `indeterminado` = no se entendió lo que contestó. No es verde. */
|
|
216
|
+
veredicto: "verde" | "rojo" | "indeterminado";
|
|
217
|
+
/** Una o dos frases. Es lo que una persona lee en la tarjeta. */
|
|
218
|
+
resumen: string;
|
|
219
|
+
/** Lo que le falta o le sobra, una frase por hallazgo. */
|
|
220
|
+
hallazgos?: string[];
|
|
221
|
+
/**
|
|
222
|
+
* Con qué condición de MENOS se entregó. **Lo pone el CÓDIGO, no el juez**, y viaja aquí
|
|
223
|
+
* porque el `motivo` de una tarea terminada no existe (`conEstado` lo borra a propósito:
|
|
224
|
+
* «el motivo vive SOLO en el estado que lo explica») y este es el único sitio que
|
|
225
|
+
* sobrevive a una entrega.
|
|
226
|
+
*
|
|
227
|
+
* Hoy son `SALVEDAD_SIN_ESCRITURAS` y `SALVEDAD_SOLO_DOCUMENTACION`. Una entrega con una condición menos no puede
|
|
228
|
+
* parecer una entrega normal — y eso solo es cierto porque este campo VIAJA: el veredicto
|
|
229
|
+
* entero sale por el cable (`web/servidor/transporte.ts#filaDeTarea`) y lo pinta
|
|
230
|
+
* `apps/web/src/componentes/EntregaDeTarea.tsx`. Estuvo un tiempo sin cablearse, y
|
|
231
|
+
* entonces esta frase era falsa en la única pantalla donde importa.
|
|
232
|
+
*/
|
|
233
|
+
salvedad?: string;
|
|
234
|
+
}
|
|
235
|
+
/** ¿Se entrega? Y si no, POR QUÉ — que es lo único accionable de una tarjeta aparcada. */
|
|
236
|
+
export interface Entrega {
|
|
237
|
+
entregable: boolean;
|
|
238
|
+
motivo?: string;
|
|
239
|
+
/**
|
|
240
|
+
* Con qué condición de MENOS se entregó, cuando fue el caso. Texto para leer.
|
|
241
|
+
*
|
|
242
|
+
* Una entrega con una condición menos no puede parecer una entrega normal: hoy la única
|
|
243
|
+
* es la tarea que no escribió nada, donde el verificador no aplica y el veredicto del
|
|
244
|
+
* juez queda como la única condición de contenido. Quien lo lea tiene derecho a saberlo.
|
|
245
|
+
*/
|
|
246
|
+
salvedad?: string;
|
|
247
|
+
/**
|
|
248
|
+
* Lo CRÍTICO, aparte de si se entrega: una tarea cortada (el tope de rondas), que no llegó a escribir lo que autorizó,
|
|
249
|
+
* o con un bloqueante visual medido. Decisión suya: una tarea que se completó con problemas o detalles (un rojo del
|
|
250
|
+
* juez, errores del verificador) NO es crítica. Va bajo `## CRITICAL` en el comentario de cierre. Ausente = nada.
|
|
251
|
+
*/
|
|
252
|
+
criticos?: string[];
|
|
253
|
+
/** Lo que falló y NO es crítico (verificador, juez, marca de git…): observaciones del cierre. Ausente = nada. */
|
|
254
|
+
observaciones?: string[];
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* La medida a partir de lo que el turno informó. **Ausente no es vacío.**
|
|
258
|
+
*
|
|
259
|
+
* Un ejecutor que no informa —el guionizado, o una piel que no reenvíe el retorno— no ha
|
|
260
|
+
* dicho que el verificador esté verde: ha dicho nada. Darlo por verde sería la entrega
|
|
261
|
+
* silenciosa que todo esto existe para impedir, así que se traduce a `no-corrio` DICIENDO
|
|
262
|
+
* que nadie informó, que es otra cosa que «el simulador no está».
|
|
263
|
+
*/
|
|
264
|
+
export declare function medidaDeEntrega(resultado: ResultadoDeTurno | undefined,
|
|
265
|
+
/** Lo que dice git de la sesión. `escribio` y `cambiados` solo se afirman con marca: ver
|
|
266
|
+
* los campos. Ausente no se rellena con nada, en las dos. */
|
|
267
|
+
revision: {
|
|
268
|
+
revisable: boolean;
|
|
269
|
+
escribio?: boolean;
|
|
270
|
+
cambiados?: readonly string[];
|
|
271
|
+
},
|
|
272
|
+
/** Cuántas escrituras autorizó el turno, si consta. Ver `MedidaDeEntrega.autorizadas`. */
|
|
273
|
+
autorizadas?: number): MedidaDeEntrega;
|
|
274
|
+
/**
|
|
275
|
+
* Lo que se dice de una entrega a la que le faltó una condición porque no APLICABA.
|
|
276
|
+
*
|
|
277
|
+
* Se exporta para que quien la lea (y quien la pruebe) no la reescriba a mano.
|
|
278
|
+
*/
|
|
279
|
+
export declare const SALVEDAD_SIN_ESCRITURAS: string;
|
|
280
|
+
export declare const SALVEDAD_SOLO_DOCUMENTACION: string;
|
|
281
|
+
/**
|
|
282
|
+
* Las tres condiciones que comprueba el CÓDIGO. Pura.
|
|
283
|
+
*
|
|
284
|
+
* El motivo nombra TODAS las que fallaron y no la primera: es el caso medido de la deuda
|
|
285
|
+
* que esta pieza hereda —un turno cortado por el tope tiene escrituras pendientes Y un
|
|
286
|
+
* verificador que no corrió—, y decir solo una de las dos manda a adivinar la otra. Es la
|
|
287
|
+
* misma regla del aviso de honestidad que saca los NOMBRES de los ficheros en vez de un
|
|
288
|
+
* contador.
|
|
289
|
+
*/
|
|
290
|
+
export declare function condicionesDeEntrega(medida: MedidaDeEntrega): Entrega;
|
|
291
|
+
/**
|
|
292
|
+
* La decisión final: las condiciones Y el juez.
|
|
293
|
+
*
|
|
294
|
+
* El orden importa y es el de siempre, fail-closed: si una condición falla, el veredicto
|
|
295
|
+
* del juez no se mira siquiera — su motivo sería ruido sobre un hecho. Quien llama puede
|
|
296
|
+
* además preguntar primero por `condicionesDeEntrega` para no gastar una llamada del
|
|
297
|
+
* modelo más caro cuando ya se sabe que no se entrega; esta función vuelve a comprobarlas
|
|
298
|
+
* porque la garantía no puede depender de que quien llama lo haya hecho en ese orden.
|
|
299
|
+
*
|
|
300
|
+
* **Sin veredicto no se entrega.** Es lo que hace que «el juez no se puede usar» sea un
|
|
301
|
+
* fallo del entorno con la tarea esperando feedback, y no una entrega en silencio.
|
|
302
|
+
*/
|
|
303
|
+
export declare function decisionDeEntrega(medida: MedidaDeEntrega, veredicto: VeredictoDeTarea | undefined): Entrega;
|
|
304
|
+
/**
|
|
305
|
+
* El motivo de una tarea que agotó su tope de rondas de escritura: qué pasó, qué no se aplicó y cómo seguir. Medido en una
|
|
306
|
+
* tarea real (Maset), el motivo de antes —«quedaron 3 escritura(s) esperando aprobación»— no decía que el turno se había
|
|
307
|
+
* cortado ni qué hacer con una ventana casi lista.
|
|
308
|
+
*/
|
|
309
|
+
/** El crítico de una tarea que no hizo el trabajo (`decisionDeEntrega`). */
|
|
310
|
+
/** El crítico de una pantalla de Stitch pedida que no existe: la persona tiene que elegir el diseño. */
|
|
311
|
+
export declare const criticoDePantallaNoEncontrada: (titulo: string) => string;
|
|
312
|
+
export declare const CRITICO_SIN_HACER = "no hizo el trabajo: no cambi\u00F3 ning\u00FAn fichero del proyecto y el juez no la da por cumplida";
|
|
313
|
+
/**
|
|
314
|
+
* ¿Explica el agente este bloqueante en su respuesta final? Cuando TODO lo que el bloqueante cita entre «» aparece en
|
|
315
|
+
* ella (sin mirar mayúsculas): lo nombra, así que lo decidió o dice por qué no está. Sin nada citado, no. Puro.
|
|
316
|
+
*/
|
|
317
|
+
export declare function omisionExplicada(bloqueante: string, respuestaFinal: string): boolean;
|
|
318
|
+
/** El tope agotado dicho para el `## CRITICAL` de una tarea que se CIERRA: sin «Continuar», que una cerrada no tiene. */
|
|
319
|
+
export declare const criticoDeTopeAgotado: (tope: number, pendientes: number) => string;
|
|
320
|
+
export declare const motivoDeTopeAgotado: (tope: number, pendientes: number) => string;
|
|
321
|
+
/** Cuántas comprobaciones visuales llegan al juez: las ÚLTIMAS, que son las que describen cómo quedó. */
|
|
322
|
+
export declare const TOPE_DE_COMPROBACIONES_AL_JUEZ = 8;
|
|
323
|
+
/**
|
|
324
|
+
* Una comprobación visual en UNA línea para el juez: la herramienta, sobre qué captura, y lo primero que dijo, recortado.
|
|
325
|
+
* Sin saltos de línea: acaba en un prompt y en una lista que se lee de un vistazo.
|
|
326
|
+
*/
|
|
327
|
+
export declare function lineaDeComprobacion(quien: string, sobre: string | undefined, texto: string, tope?: number): string;
|
|
328
|
+
/**
|
|
329
|
+
* **El CIERRE de una tarea que acaba**: lo crítico y las observaciones, para el comentario del ticket.
|
|
330
|
+
*
|
|
331
|
+
* Decisión suya: una tarea de fondo NO se queda esperando a que la persona decida al acabar —se cierra siempre—, y lo
|
|
332
|
+
* que haya quedado mal se DICE en el comentario. Lo crítico (`Entrega.criticos`: cortada, sin escribir, un bloqueante
|
|
333
|
+
* visual) va bajo `## CRITICAL`; lo demás de la entrega —un rojo del juez, errores del verificador, que no corriera—
|
|
334
|
+
* son OBSERVACIONES: «si la completó con problemas o detalles, eso no es crítico». Del motivo se quitan los fallos que
|
|
335
|
+
* ya son críticos, para no contarlos dos veces. Puro.
|
|
336
|
+
*/
|
|
337
|
+
export interface CierreDeTarea {
|
|
338
|
+
criticos: string[];
|
|
339
|
+
observaciones: string[];
|
|
340
|
+
}
|
|
341
|
+
export declare function cierreDeLaEntrega(entrega: Entrega, veredicto: VeredictoDeTarea | undefined): CierreDeTarea;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eventos que nacen FUERA del flujo del grafo, entrelazados con él.
|
|
3
|
+
*
|
|
4
|
+
* Existe por un silencio medido: un agente EXTERNO (Claude Code) corre en otro proceso, así
|
|
5
|
+
* que ni una de sus tools cruza el stream de langgraph — entre la línea de delegación y su
|
|
6
|
+
* respuesta final hay minutos sin nada que mirar, y una pantalla quieta se lee como que se
|
|
7
|
+
* ha colgado. Lo que hace falta no es una piel nueva: es que su actividad entre por el
|
|
8
|
+
* MISMO sitio que la de todos, para que el colapsador la agrupe igual (`core/notify.ts`),
|
|
9
|
+
* la bitácora la cuente igual y las tres pieles no se enteren de que hay dos orígenes.
|
|
10
|
+
*
|
|
11
|
+
* Es la misma forma que `conVerificacion`: un generador que envuelve a `aEventos`. La
|
|
12
|
+
* diferencia es que aquél añade AL FINAL y este tiene que intercalar MIENTRAS, que es lo
|
|
13
|
+
* único delicado de este fichero.
|
|
14
|
+
*/
|
|
15
|
+
import type { DomainEvent } from "./events.js";
|
|
16
|
+
/**
|
|
17
|
+
* El buzón por el que se empujan esos eventos. Quien lo llena no sabe nada del flujo, y
|
|
18
|
+
* quien lo vacía no sabe nada de quién lo llena — que es lo que permite que el adaptador
|
|
19
|
+
* del agente externo viva en `agent/` sin conocer el turno.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ColaDeEventos {
|
|
22
|
+
private cola;
|
|
23
|
+
private avisar;
|
|
24
|
+
/** Encola y despierta a quien esté esperando. Nunca bloquea a quien lo llama. */
|
|
25
|
+
empujar(evento: DomainEvent): void;
|
|
26
|
+
/** Se lleva lo que haya, de una vez. Vacío es una respuesta válida. */
|
|
27
|
+
vaciar(): DomainEvent[];
|
|
28
|
+
/**
|
|
29
|
+
* Una promesa que se resuelve cuando hay algo. Se guarda UN solo resolutor: si hubiera una
|
|
30
|
+
* cola de esperas, la de una vuelta anterior seguiría viva y despertaría de más.
|
|
31
|
+
*/
|
|
32
|
+
esperar(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* El flujo del grafo más lo que se vaya encolando, en el orden en que ocurre.
|
|
36
|
+
*
|
|
37
|
+
* **La trampa de este fichero, y la razón de que `siguiente` sea una variable:** un
|
|
38
|
+
* `AsyncIterator` no admite dos `next()` vivos a la vez —el segundo se comería un valor o
|
|
39
|
+
* reventaría según la implementación—, así que se pide UNA vez, se guarda la promesa y se
|
|
40
|
+
* vuelve a esperar la MISMA en cada vuelta de la carrera. Solo cuando esa promesa se ha
|
|
41
|
+
* consumido de verdad se pide la siguiente. Volver a llamar a `it.next()` en cada vuelta
|
|
42
|
+
* sería el bug clásico de este patrón: se pierden eventos justo cuando hay actividad en los
|
|
43
|
+
* dos lados, que es cuando esto se usa.
|
|
44
|
+
*
|
|
45
|
+
* Y lo que quede encolado cuando el flujo se agota se dice IGUAL, antes de terminar: un
|
|
46
|
+
* evento que llegó tarde no es un evento que no ocurrió.
|
|
47
|
+
*/
|
|
48
|
+
export declare function entrelazar(fuente: AsyncIterable<DomainEvent>, cola: ColaDeEventos): AsyncIterable<DomainEvent>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuánto tiene que PENSAR un modelo antes de contestar, y qué modelos admiten que se les
|
|
3
|
+
* pida.
|
|
4
|
+
*
|
|
5
|
+
* Es la tercera tabla de esta familia, detrás de `contextos.ts#TOPES` y de
|
|
6
|
+
* `modelos.ts#pideThinkingAdaptativo`, y existe por el mismo motivo que ellas: el
|
|
7
|
+
* parámetro no significa lo mismo en todos, lo que no se reconoce hay que OMITIRLO, y
|
|
8
|
+
* pedirlo a ciegas no da una respuesta peor — da un 400.
|
|
9
|
+
*
|
|
10
|
+
* **La unidad es el MODELO, nunca el proveedor**, y eso está medido: dentro de NVIDIA,
|
|
11
|
+
* `nvidia/nemotron-3-super-120b-a12b` acepta siete niveles y `openai/gpt-oss-20b` acepta
|
|
12
|
+
* tres, contra el mismo host y con la misma clave. Una tabla por proveedor habría sido
|
|
13
|
+
* falsa el primer día.
|
|
14
|
+
*
|
|
15
|
+
* **Y los niveles son una LISTA por modelo, no tres fijos.** Anthropic tiene cinco desde
|
|
16
|
+
* Opus 4.7 y cuatro en la 4.6; Gemini tres; `nvidia/nemotron-3` cinco y `openai/gpt-oss`
|
|
17
|
+
* tres. Pintar siempre los mismos tres daría, según el modelo, o un control recortado o
|
|
18
|
+
* dos opciones que hacen lo mismo sin decirlo — la misma clase de mentira que un contador
|
|
19
|
+
* a cero que nadie ha medido.
|
|
20
|
+
*
|
|
21
|
+
* **Lo desconocido devuelve `undefined`**: ni se ofrece control ni se manda parámetro. Es
|
|
22
|
+
* el mismo lado conservador de `pideThinkingAdaptativo`, y aquí es literal — un nivel
|
|
23
|
+
* mandado a quien no lo admite se contesta con un error duro, comprobado en los tres
|
|
24
|
+
* proveedores que se pudieron medir.
|
|
25
|
+
*/
|
|
26
|
+
import type { Agente } from "./agentes.js";
|
|
27
|
+
import type { Proveedor } from "./modelos.js";
|
|
28
|
+
/**
|
|
29
|
+
* Los niveles que este harness sabe nombrar.
|
|
30
|
+
*
|
|
31
|
+
* `none` NO está, y es deliberado: en DeepSeek significa «no pienses», o sea que es un
|
|
32
|
+
* INTERRUPTOR y no un nivel. Mezclar «cuánto» con «si» en el mismo desplegable haría que
|
|
33
|
+
* un control que se lee como una intensidad apagara una capacidad.
|
|
34
|
+
*/
|
|
35
|
+
export type Esfuerzo = "low" | "medium" | "high" | "xhigh" | "max";
|
|
36
|
+
export declare const ESFUERZOS: readonly Esfuerzo[];
|
|
37
|
+
export declare function esEsfuerzo(valor: string): valor is Esfuerzo;
|
|
38
|
+
/**
|
|
39
|
+
* Lo que el servidor ha dicho de ESTE modelo, cuando se le puede preguntar.
|
|
40
|
+
*
|
|
41
|
+
* Hoy solo Ollama, y por eso el campo es uno solo: su `POST /api/show` devuelve
|
|
42
|
+
* `capabilities`, y ahí está `"thinking"` o no está. Medido: `granite4.2:3b`,
|
|
43
|
+
* `glm-5.3-flash:cloud` y `qwen3.8:27b-mlx` la tienen; `ministral-3:3b` no, y pedirle que
|
|
44
|
+
* piense contesta `"ministral-3:3b" does not support thinking`.
|
|
45
|
+
*
|
|
46
|
+
* Entra por PARÁMETRO en vez de consultarse aquí porque son dos cadencias distintas y este
|
|
47
|
+
* módulo es puro: preguntar es asíncrono, toca la red y vive en `agent/`. Es el mismo
|
|
48
|
+
* reparto que ya declara `contextos.ts` sobre el `max_input_tokens` del catálogo vivo, solo
|
|
49
|
+
* que aquí el dato sí llega — quien lo rellena es `agent/config/catalogoModelos.ts`.
|
|
50
|
+
*/
|
|
51
|
+
export interface CapacidadesVivas {
|
|
52
|
+
/** ¿El servidor dice que este modelo piensa? Ausente = no se ha preguntado. */
|
|
53
|
+
piensa?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Los niveles de esfuerzo que admite un modelo, o `undefined` si no admite ninguno —que es
|
|
57
|
+
* también lo que se devuelve cuando no se sabe, porque no saberlo y no poder son lo mismo
|
|
58
|
+
* para quien tiene que decidir si manda el parámetro.
|
|
59
|
+
*
|
|
60
|
+
* **Ollama va por las capacidades vivas y no por la tabla**, y esa asimetría es el hallazgo
|
|
61
|
+
* que la justifica: sus modelos los elige el usuario y no hay prefijo que los describa, pero
|
|
62
|
+
* el servidor contesta por cada uno. Sin capacidades —porque aún no se preguntó— no se
|
|
63
|
+
* afirma nada, que es distinto de afirmar que no puede.
|
|
64
|
+
*/
|
|
65
|
+
export declare function nivelesDeEsfuerzo(proveedor: Proveedor, modelo: string, vivas?: CapacidadesVivas): readonly Esfuerzo[] | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Lo que el servidor de Ollama valida, y está medido en su propio mensaje de error: un
|
|
68
|
+
* `think: "banana"` contesta `must be "high", "medium", "low", "max", true, or false`.
|
|
69
|
+
*
|
|
70
|
+
* O sea que Ollama SÍ tiene niveles; que el tipo de `@langchain/ollama` los declare como un
|
|
71
|
+
* `boolean` es una limitación del cliente y no del servidor, y el cliente pasa el valor tal
|
|
72
|
+
* cual al request.
|
|
73
|
+
*
|
|
74
|
+
* **Y aquí hay un límite declarado que no se puede cerrar desde esta tabla**: que el
|
|
75
|
+
* servidor acepte el nivel no significa que el modelo lo honre. Medido: en `granite4.2:3b`
|
|
76
|
+
* solo `low` cambia algo y `medium`/`high`/`max` son idénticos entre sí; en
|
|
77
|
+
* `glm-5.3-flash:cloud` —que es el modelo POR OMISIÓN de este repo— `high` se comporta como
|
|
78
|
+
* apagado y solo `medium` piensa. No es monótono y no lo podemos arreglar: lo pone el
|
|
79
|
+
* template de cada modelo. Quien pinte esto tiene que DECIRLO.
|
|
80
|
+
*/
|
|
81
|
+
export declare const NIVELES_DE_OLLAMA: readonly Esfuerzo[];
|
|
82
|
+
/**
|
|
83
|
+
* El nivel que se va a usar de verdad, dado lo que el usuario eligió y lo que el modelo
|
|
84
|
+
* admite.
|
|
85
|
+
*
|
|
86
|
+
* Existe porque elegir y aplicar están separados en el tiempo: el esfuerzo se fija una vez
|
|
87
|
+
* y el modelo se cambia después, así que un `xhigh` elegido con Opus 5 sigue puesto cuando
|
|
88
|
+
* alguien se pasa a Gemini, que no lo tiene. Ahí NO se manda el parámetro y NO se sustituye
|
|
89
|
+
* por el más parecido: bajar `xhigh` a `high` por nuestra cuenta sería decidir en nombre de
|
|
90
|
+
* alguien, y en este harness eso se paga en tokens que no pidió.
|
|
91
|
+
*/
|
|
92
|
+
export declare function esfuerzoAplicable(elegido: Esfuerzo | undefined, proveedor: Proveedor, modelo: string, vivas?: CapacidadesVivas): Esfuerzo | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* A qué CLASE de trabajo pertenece un subagente, sacada de sus DATOS y no de su nombre (mismo
|
|
95
|
+
* criterio que `recibeBuscarIcono`): un subagente propio con `ejecucion: true` es de la misma
|
|
96
|
+
* clase que `device-controller`.
|
|
97
|
+
*
|
|
98
|
+
* Solo hay una clase con nivel por omisión: **`mecanica`**, quien EJECUTA comandos y lee salidas.
|
|
99
|
+
* Consultor y analista son los dos `soloLectura` y no hay dato que los separe, y uno es una
|
|
100
|
+
* búsqueda y el otro escribe el plan; escritores y orquestador son donde se cometen los errores.
|
|
101
|
+
* Ahí no se decide por nadie: se queda lo que haga el proveedor.
|
|
102
|
+
*/
|
|
103
|
+
export type ClaseDeTrabajo = "mecanica";
|
|
104
|
+
export declare function claseDeTrabajo(a: Pick<Agente, "ejecucion">): ClaseDeTrabajo | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* El interruptor de PENSAMIENTO, aparte del esfuerzo: «cuánto» y «si» son preguntas distintas (`none` no está
|
|
107
|
+
* entre los niveles por eso mismo). Un `.md` lo declara (`pensamiento: apagado`); ausente decide la familia.
|
|
108
|
+
*/
|
|
109
|
+
export type Pensamiento = "apagado" | "activo";
|
|
110
|
+
export declare function esPensamiento(valor: string): valor is Pensamiento;
|
|
111
|
+
/**
|
|
112
|
+
* Qué modelos admiten apagar el pensamiento con `thinking: {type: "disabled"}`. Solo DeepSeek, y MEDIDO contra la
|
|
113
|
+
* API: sin nada piensa, con `low` o `high` piensa casi igual (25, 23 y 23 tokens con una pregunta fácil), y con
|
|
114
|
+
* `thinking` desactivado la salida bajó de 27 tokens a 1. Lo demás no se sabe, y un parámetro que un modelo no
|
|
115
|
+
* conoce se paga en un 400: sin fila no hay interruptor.
|
|
116
|
+
*/
|
|
117
|
+
export declare function admiteApagarElPensamiento(proveedor: Proveedor, modelo: string): boolean;
|
|
118
|
+
export declare function pensamientoPorOmision(proveedor: Proveedor, clase: ClaseDeTrabajo | undefined): Pensamiento | undefined;
|
|
119
|
+
/** El pensamiento que se va a aplicar de verdad: lo que dice el agente, o la omisión de su familia, y solo si el modelo lo admite. */
|
|
120
|
+
export declare function pensamientoAplicable(elegido: Pensamiento | undefined, proveedor: Proveedor, modelo: string, clase: ClaseDeTrabajo | undefined): Pensamiento | undefined;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El esqueleto de un proyecto XOne mínimo, como DATOS y sin tocar el disco.
|
|
3
|
+
*
|
|
4
|
+
* Todo el contenido sale del «Hola Mundo» de la documentación XOne
|
|
5
|
+
* (`xone-help-docs`, topico 01 §9 y guia de UI §8.2): **nada inventado**. XOne
|
|
6
|
+
* ignora en silencio lo desconocido, así que un atributo o una función
|
|
7
|
+
* inventada no da error — da un bug mudo, y un esqueleto recién creado que no
|
|
8
|
+
* arranca sería la peor primera impresión posible.
|
|
9
|
+
*
|
|
10
|
+
* La escritura en disco vive en `agent/config/crearProyecto.ts`: aquí solo se DECIDE
|
|
11
|
+
* qué ficheros hay y qué llevan dentro, que es exactamente lo que se puede
|
|
12
|
+
* probar sin conexión, sin simulador y sin clave (el invariante de `npm test`).
|
|
13
|
+
*/
|
|
14
|
+
export interface DatosDelProyecto {
|
|
15
|
+
/** Nombre interno, sin espacios ni caracteres especiales (`Name=` del app.ini). */
|
|
16
|
+
nombre: string;
|
|
17
|
+
/** Título visible de la aplicación. */
|
|
18
|
+
titulo: string;
|
|
19
|
+
orientacion: "portrait" | "landscape";
|
|
20
|
+
/** Con login: `autologon="false"`, `<login-coll>` en app.xml y `Login.xne`. */
|
|
21
|
+
login: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface Ficha {
|
|
24
|
+
/** Ruta relativa a la raíz del proyecto. */
|
|
25
|
+
ruta: string;
|
|
26
|
+
contenido: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Las carpetas del runtime, VACÍAS y a propósito:
|
|
30
|
+
*
|
|
31
|
+
* - `bd/`: el `gestion.db` lo GENERA el simulador; un `.db` escrito a mano no
|
|
32
|
+
* sería una base de datos, sería un fichero que estorba.
|
|
33
|
+
* - `icons/`: los PNG no se pueden generar aquí (salen de Material Icons
|
|
34
|
+
* convertidos con cairosvg). La carpeta existe porque `app.ini` la declara.
|
|
35
|
+
* - `files/`: la carpeta de archivos dinámicos del runtime.
|
|
36
|
+
*/
|
|
37
|
+
export declare function carpetasDelEsqueleto(): string[];
|
|
38
|
+
export declare function generarEsqueleto(datos: DatosDelProyecto): Ficha[];
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El ESTILO de cada control, MEDIDO en los píxeles de su caja: lo que `descripcionDePantalla.ts` le pedía al modelo
|
|
3
|
+
* (forma, fondo, color del texto, tamaño de la letra, borde, texto recortado, alineación), sacado de la imagen con
|
|
4
|
+
* aritmética. Puro: recibe los píxeles ya en RGBA.
|
|
5
|
+
*
|
|
6
|
+
* Existe porque describirlo con el modelo no sirvió, medido sobre la calculadora de MyAllXOne: la MISMA imagen
|
|
7
|
+
* descrita dos veces salía con diecisiete teclas de otra forma y colores a más de cien puntos, y ninguna de dos
|
|
8
|
+
* pasadas vio el «12 + 3» recortado del visor. Con las cajas del árbol de controles (la captura) o del `code.html`
|
|
9
|
+
* renderizado (la maqueta), cada medida es la misma cada vez y cuesta milisegundos.
|
|
10
|
+
*
|
|
11
|
+
* Cómo se mide, dentro de la caja de un control:
|
|
12
|
+
* - **Fuera**: el color del anillo de píxeles que rodea la caja (lo que hay detrás).
|
|
13
|
+
* - **Fondo**: el color más repetido dentro de la caja, si se distingue de lo de fuera; si no, el control no pinta
|
|
14
|
+
* fondo propio (un texto suelto) y no tiene forma que medir.
|
|
15
|
+
* - **Forma**: sobre el rectángulo que ocupa el fondo, cuánto se come cada esquina (radio) frente al lado corto, y
|
|
16
|
+
* la proporción ancho/alto: recta, redondeada, píldora o círculo.
|
|
17
|
+
* - **Tinta**: los píxeles lejos del fondo Y de lo de fuera: el texto o el icono. De ahí el color del texto, la
|
|
18
|
+
* altura de la letra (en fracción del ANCHO de la pantalla: aparato y maqueta tienen distinta proporción de alto) y
|
|
19
|
+
* la alineación.
|
|
20
|
+
* - **Recortado**: hay tinta en la primera o la última fila de la caja: las letras siguen más allá del borde.
|
|
21
|
+
* - **Borde**: los lados de la caja (o del fondo) son una línea de un color distinto del de dentro.
|
|
22
|
+
*/
|
|
23
|
+
import type { ImagenRgba } from "./compararCapturas.js";
|
|
24
|
+
import type { Caja } from "./geometriaDePantalla.js";
|
|
25
|
+
import type { ControlVisto, Forma, Letra, PantallaDescrita } from "./descripcionDePantalla.js";
|
|
26
|
+
/** Un control medido: los campos de estilo de `ControlVisto`, con las cifras de las que salen sus categorías. */
|
|
27
|
+
export type EstiloMedido = Omit<ControlVisto, "texto" | "unidades" | "centro">;
|
|
28
|
+
/** Las categorías de forma a partir de las cifras. Pura y exportada para el test. */
|
|
29
|
+
export declare function formaDe(radio: number, proporcion: number): Forma;
|
|
30
|
+
/** El tamaño de letra a partir de su altura (fracción del ancho de pantalla). */
|
|
31
|
+
export declare function letraDe(altura: number): Letra;
|
|
32
|
+
/** Mide un control. `img` es la imagen entera; `caja`, en sus píxeles. Lo que no se puede medir no se pone. */
|
|
33
|
+
export declare function medirControl(img: ImagenRgba, caja: Caja): EstiloMedido;
|
|
34
|
+
/** Un control que medir: su texto (o `[NOMBRE]` si no tiene) y su caja en los píxeles de la imagen. */
|
|
35
|
+
export interface ControlAMedir {
|
|
36
|
+
texto: string;
|
|
37
|
+
caja: Caja;
|
|
38
|
+
/**
|
|
39
|
+
* Su caja ABRAZA su texto (un `<span>` de la maqueta, no un botón): dónde cae el texto dentro de ella no dice nada,
|
|
40
|
+
* así que su alineación no se mide. Medido en Maset: cada título salía «centrado» y el del aparato «a la izquierda».
|
|
41
|
+
*/
|
|
42
|
+
ajustado?: true;
|
|
43
|
+
/**
|
|
44
|
+
* La caja de su ENVOLTORIO (`geometriaDePantalla.ts#cajaParaElEstilo`: el frame que hace de botón o de píldora). De
|
|
45
|
+
* ella salen la forma, el fondo y el borde; de la propia, lo de la LETRA —recorte, tamaño, color, alineación—, que es
|
|
46
|
+
* de la etiqueta: medido sobre el frame, el «RAD» recortado de la calculadora dejaba de verse.
|
|
47
|
+
*/
|
|
48
|
+
envoltorio?: Caja;
|
|
49
|
+
}
|
|
50
|
+
export declare function pantallaMedida(img: ImagenRgba, filas: readonly (readonly ControlAMedir[])[]): PantallaDescrita;
|
|
51
|
+
/** Los bloques que no están dentro de otro: la cabecera y no su título, el visor y no sus filas. Pura. */
|
|
52
|
+
export declare function bloquesDeFuera(cajas: readonly Caja[]): Caja[];
|
|
53
|
+
/** Un bloque y la imagen en la que vive, con la franja útil de la pantalla (sin barras del sistema), en píxeles. */
|
|
54
|
+
export interface BloquesAMedir {
|
|
55
|
+
img: ImagenRgba;
|
|
56
|
+
bloques: readonly Caja[];
|
|
57
|
+
util: {
|
|
58
|
+
arriba: number;
|
|
59
|
+
abajo: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Compara el COLOR y la FORMA de los bloques anchos, emparejados por su altura relativa dentro de la franja útil de
|
|
64
|
+
* cada pantalla (la maqueta y el aparato no tienen la misma proporción). Pura. Existe por la calculadora: una cabecera
|
|
65
|
+
* amarilla donde la maqueta tiene la del fondo oscuro no la veía nadie, porque solo se comparaban los botones.
|
|
66
|
+
*
|
|
67
|
+
* Solo dice DIFERENCIAS de lo emparejado: un bloque sin pareja no es noticia, porque los dos lados no parten igual
|
|
68
|
+
* (el aparato puede tener un bloque por fila de teclas donde la maqueta tiene un solo panel).
|
|
69
|
+
*/
|
|
70
|
+
export declare function compararBloques(maqueta: BloquesAMedir, aparato: BloquesAMedir): string[];
|