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,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Un ÍNDICE DE CONSULTA RÁPIDA de los atributos XML de XOne por nodo, sacado de las tablas de la referencia de la skill.
|
|
3
|
+
* No la sustituye: dice si un atributo está en las tablas y DÓNDE leer el detalle.
|
|
4
|
+
*
|
|
5
|
+
* Existe por una medida: en cuatro pasadas de la misma calculadora los agentes leyeron las referencias de la skill 45-61
|
|
6
|
+
* veces, 15-25 ficheros distintos, los mismos releídos una y otra vez (`atributos-prop.md` son 34 KB), casi siempre para
|
|
7
|
+
* contestar «¿existe este atributo en este nodo?». Esa pregunta es la cara del bug mudo de XOne: un atributo inventado o
|
|
8
|
+
* puesto en el nodo equivocado no da error, se ignora.
|
|
9
|
+
*
|
|
10
|
+
* Tres reglas, para que el índice no contradiga a la skill:
|
|
11
|
+
* - **Se lee de las tablas, no se escribe a mano**: una copia se desfasa y entonces miente.
|
|
12
|
+
* - **Si dos ficheros de la skill no coinciden, se enseñan LOS DOS** con el aviso, en vez de quedarse con uno. La skill
|
|
13
|
+
* se contradice a sí misma (medido: `imgbk` en `<group>` está en `nodos-group-y-frame.md` y no en
|
|
14
|
+
* `atributos-coll-group-frame.md`; `border` en `<frame>` es una máscara en uno y un booleano en el otro).
|
|
15
|
+
* - **Nunca afirma «no existe»**: que no esté en estas tablas no lo prueba —la skill documenta atributos también en texto,
|
|
16
|
+
* en el CSS y por tipo de control—, así que dice «no está en las tablas» y da la búsqueda en la skill.
|
|
17
|
+
*
|
|
18
|
+
* La forma que se reconoce: una sección `## N. Nodo \`<x>\`` (o `## N. Nodo x - …`), o el nodo del fichero entero cuando
|
|
19
|
+
* su título no lo parte en secciones; filas `| \`atributo\` | …` en tablas cuya primera columna es «Atributo»; la
|
|
20
|
+
* descripción es la columna «Descripción» (o la última); «Tipo» y «Default» si la cabecera las trae. Una fila puede nombrar
|
|
21
|
+
* varios (`\`a\` / \`b\``). Puro: `core/` no lee disco.
|
|
22
|
+
*/
|
|
23
|
+
export interface AtributoDeNodo {
|
|
24
|
+
atributo: string;
|
|
25
|
+
nodo: string;
|
|
26
|
+
tipo?: string;
|
|
27
|
+
defecto?: string;
|
|
28
|
+
descripcion: string;
|
|
29
|
+
/** De dónde sale, para ir al detalle: el fichero de la skill y la subsección («§3.4 Apariencia»). */
|
|
30
|
+
fichero: string;
|
|
31
|
+
seccion?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Las filas de atributos de UN fichero de referencia. `nodoDelFichero`: el nodo cuando el fichero no lo parte por secciones. */
|
|
34
|
+
export declare function interpretarReferenciaDeAtributos(texto: string, fichero: string, nodoDelFichero?: string): AtributoDeNodo[];
|
|
35
|
+
export interface IndiceDeAtributos {
|
|
36
|
+
/** atributo (en minúsculas) → nodo → lo que dice cada fichero que lo documenta. */
|
|
37
|
+
porAtributo: ReadonlyMap<string, ReadonlyMap<string, readonly AtributoDeNodo[]>>;
|
|
38
|
+
porNodo: ReadonlyMap<string, readonly AtributoDeNodo[]>;
|
|
39
|
+
ficheros: readonly string[];
|
|
40
|
+
}
|
|
41
|
+
export declare function indiceDeAtributos(entradas: readonly AtributoDeNodo[]): IndiceDeAtributos;
|
|
42
|
+
/** ¿Los ficheros que documentan este atributo en este nodo dicen TIPOS distintos? */
|
|
43
|
+
export declare function tiposQueNoCoinciden(fuentes: readonly AtributoDeNodo[]): boolean;
|
|
44
|
+
export declare const PIE_DEL_INDICE = "(\u00CDndice de consulta r\u00E1pida de las tablas de la skill: el detalle, los ejemplos y lo que cambia por tipo de control est\u00E1n en el fichero citado, y si discrepan manda la skill.)";
|
|
45
|
+
/**
|
|
46
|
+
* La respuesta, en texto para el modelo. Con `atributo` (y opcionalmente `nodo`): en qué nodos está, con tipo, omisión,
|
|
47
|
+
* descripción corta y fichero; si otro fichero dice otra cosa, también. Con solo `nodo`: sus atributos por nombre,
|
|
48
|
+
* agrupados por subsección. `busqueda` compone la búsqueda en la skill para cuando no está (la da quien monta la tool).
|
|
49
|
+
*/
|
|
50
|
+
export declare function consultarAtributos(indice: IndiceDeAtributos, pregunta: {
|
|
51
|
+
atributo?: string;
|
|
52
|
+
nodo?: string;
|
|
53
|
+
}, busqueda?: (atributo: string) => string): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La bitácora de UN turno. Se construye al empezarlo y muere con él.
|
|
3
|
+
*
|
|
4
|
+
* El alcance es la mitad del valor: una bitácora de proceso haría que los avisos de
|
|
5
|
+
* honestidad («el verificador es de pega») salieran en todos los turnos posteriores al
|
|
6
|
+
* primero, incluido un «cuéntame un chiste» que no verificó nada. Un aviso que salta
|
|
7
|
+
* cuando no ha pasado nada enseña al usuario a ignorarlo, que es lo contrario de lo que
|
|
8
|
+
* se compra con él.
|
|
9
|
+
*
|
|
10
|
+
* Por eso `corrio()` pregunta por lo que ha pasado AHORA, y nunca se le pregunta al objeto
|
|
11
|
+
* de dependencias, que vive en el proceso entero.
|
|
12
|
+
*/
|
|
13
|
+
export declare class Bitacora {
|
|
14
|
+
private readonly lineas;
|
|
15
|
+
/** `nodo` es la clave que luego consulta `corrio()`; `detalle` es para el humano. */
|
|
16
|
+
anota(nodo: string, detalle?: string): void;
|
|
17
|
+
/** ¿Ha corrido este nodo en ESTE turno? */
|
|
18
|
+
corrio(nodo: string): boolean;
|
|
19
|
+
get todo(): readonly string[];
|
|
20
|
+
get vacia(): boolean;
|
|
21
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los tipos que cruzan la frontera CloudStudio ↔ xonecode.
|
|
3
|
+
*
|
|
4
|
+
* Viven en `core/` a propósito: son datos, no transporte. El SDK MCP se queda en `agent/`.
|
|
5
|
+
*/
|
|
6
|
+
/** Una entrada del inventario remoto, tal cual la da `get_project_structure`. */
|
|
7
|
+
export interface EntradaRemota {
|
|
8
|
+
/** Ruta POSIX relativa a la raíz del proyecto. */
|
|
9
|
+
ruta: string;
|
|
10
|
+
bytes: number;
|
|
11
|
+
}
|
|
12
|
+
export type ManifiestoRemoto = EntradaRemota[];
|
|
13
|
+
/**
|
|
14
|
+
* Lo que devuelve `estructura()`: las entradas vistas Y si el servidor las recortó.
|
|
15
|
+
*
|
|
16
|
+
* `studio_get_project_structure` trunca (medido: con `maxFiles:60` ya venía
|
|
17
|
+
* `truncated:true`; el tope duro es 2000). Tirar ese dato y devolver solo el array deja
|
|
18
|
+
* al llamador sin forma de saber que quedó algo fuera — y el manifiesto es lo que
|
|
19
|
+
* sostiene el candado de borrado en CloudStudio.
|
|
20
|
+
*/
|
|
21
|
+
export interface EstructuraRemota {
|
|
22
|
+
entradas: ManifiestoRemoto;
|
|
23
|
+
truncado: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Qué proyecto y qué rama tiene abiertos el servidor AHORA. */
|
|
26
|
+
export interface ContextoRemoto {
|
|
27
|
+
proyecto: string;
|
|
28
|
+
rama: string;
|
|
29
|
+
}
|
|
30
|
+
/** Lo que queda escrito en `.xonecode/cloudstudio/sync.json`: diagnóstico, no estado. */
|
|
31
|
+
export interface EstadoDeSync {
|
|
32
|
+
proyecto: {
|
|
33
|
+
id: string;
|
|
34
|
+
nombre: string;
|
|
35
|
+
};
|
|
36
|
+
rama: string;
|
|
37
|
+
fecha: string;
|
|
38
|
+
/** Cómo se bajó. `parcial` obliga al candado de borrado. */
|
|
39
|
+
via: "zip" | "parcial";
|
|
40
|
+
/** El inventario del remoto en el momento de bajar. */
|
|
41
|
+
manifiesto: ManifiestoRemoto;
|
|
42
|
+
/** Las rutas que REALMENTE se pudieron traer. */
|
|
43
|
+
descargados: string[];
|
|
44
|
+
/** Por qué falló el ZIP, cuando `via` es `parcial`. Es la pista para arreglarlo. */
|
|
45
|
+
motivo?: string;
|
|
46
|
+
/**
|
|
47
|
+
* El listado de la raíz llegó truncado al enumerar el remoto (`enumerarRemoto`).
|
|
48
|
+
*
|
|
49
|
+
* El manifiesto es lo que sostiene el candado de borrado: si vino incompleto, puede
|
|
50
|
+
* faltarle una ruta que sí existe en Studio, y esa ausencia no se puede demostrar
|
|
51
|
+
* después. Se declara aquí, en el propio `sync.json`, en vez de vivir solo en un aviso
|
|
52
|
+
* de consola que nadie vuelve a leer una vez pasa el turno.
|
|
53
|
+
*/
|
|
54
|
+
raizTruncada?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Los ficheros bajados que no se pueden leer como lo que son (`validarTrasDescarga`): una
|
|
57
|
+
* cadena JSON en vez del fichero, o un `app.xml`/`.xne` mal formado. Ausente = todo se lee.
|
|
58
|
+
* Se escribe aquí por lo mismo que `raizTruncada`: el aviso de consola no sobrevive al turno,
|
|
59
|
+
* y una copia así no arranca en el aparato (IXCODE-16).
|
|
60
|
+
*/
|
|
61
|
+
ilegibles?: Array<{
|
|
62
|
+
ruta: string;
|
|
63
|
+
motivo: string;
|
|
64
|
+
}>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Una operación de subida ya decidida. La ejecuta `agent/cloudstudio/subida.ts`.
|
|
68
|
+
*
|
|
69
|
+
* El binario solo tiene modo `base64`. El modo `chunked` del servidor NO está
|
|
70
|
+
* implementado: `CloudStudioPort.subirBinario` ni siquiera lleva el modo, y el adaptador
|
|
71
|
+
* manda siempre base64. Mientras siga así, un binario que no cabe en base64 no es una
|
|
72
|
+
* operación pendiente sino una operación IMPOSIBLE (`OperacionOmitida`) — dejarla en el
|
|
73
|
+
* plan atascaba la subida entera para siempre, porque la ref solo avanza sin fallos.
|
|
74
|
+
*
|
|
75
|
+
* **`clase` viaja porque es lo que se MIRA al decidir, y `tipo` no lo dice.** Un texto que
|
|
76
|
+
* ya estaba en Studio y se edita y un texto que es nuevo se suben igual —con la misma
|
|
77
|
+
* tool—, así que mirando `tipo` son la misma operación: quien decide cuál de los dos es ve
|
|
78
|
+
* «no se modifica» / «se añade», y eso es justo lo que se comprueba antes de publicar algo
|
|
79
|
+
* en un servidor remoto. Es el dato de `CambioLocal.clase` (`core/planDeSubida.ts`), que
|
|
80
|
+
* hasta ahora se calculaba y se tiraba en la puerta. El borrado NO la lleva: su `tipo` ya
|
|
81
|
+
* la dice, y un campo que solo puede valer una cosa es una invitación a contradecirse.
|
|
82
|
+
*/
|
|
83
|
+
export type OperacionDeSubida = {
|
|
84
|
+
tipo: "texto";
|
|
85
|
+
ruta: string;
|
|
86
|
+
clase: "nuevo" | "modificado";
|
|
87
|
+
} | {
|
|
88
|
+
tipo: "binario";
|
|
89
|
+
ruta: string;
|
|
90
|
+
bytes: number;
|
|
91
|
+
modo: "base64";
|
|
92
|
+
clase: "nuevo" | "modificado";
|
|
93
|
+
} | {
|
|
94
|
+
tipo: "borrado";
|
|
95
|
+
ruta: string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Algo que había que sincronizar y NO se puede, con el porqué.
|
|
99
|
+
*
|
|
100
|
+
* Es el camino de escape: sale del plan, se declara (por consola y en `sync.log`) y deja
|
|
101
|
+
* que la ref avance con el resto. Sin él, una sola operación imposible —la primera imagen
|
|
102
|
+
* borrada, el primer `.db` de más de 5 MB— dejaba `/sync subir` inútil de forma
|
|
103
|
+
* PERMANENTE: fallaba, la ref no se movía, el siguiente `/sync` recalculaba el mismo plan
|
|
104
|
+
* y volvía a fallar, para siempre.
|
|
105
|
+
*/
|
|
106
|
+
export interface OperacionOmitida {
|
|
107
|
+
ruta: string;
|
|
108
|
+
/** En castellano y accionable: qué hacer con esto, no solo que no se hizo. */
|
|
109
|
+
motivo: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* El hueco de política que autoriza una subida — NO «preguntar al humano»: quién lo
|
|
113
|
+
* rellena es una decisión de la piel, no del motor. `agent/cloudstudio/subida.ts` solo exige que
|
|
114
|
+
* ALGUIEN lo rellene (fail-closed por TIPO: no hay forma de llamar a `subir()` sin decir
|
|
115
|
+
* cómo se autoriza) y no presupone que detrás haya una persona.
|
|
116
|
+
*
|
|
117
|
+
* Dos políticas previstas:
|
|
118
|
+
* - **Interactiva** (la única implementada hoy, en `cli/`): un humano ve el plan y
|
|
119
|
+
* responde sí/no. Sin TTY, sin un sí explícito, no se sube.
|
|
120
|
+
* - **Autónoma** (futura, NO implementada): la rellenará el papel `afilado` — el juez —
|
|
121
|
+
* cuando el usuario trabaje sin mirar. Pero un veredicto de juez a secas no basta: hace
|
|
122
|
+
* falta ADEMÁS que el código compruebe condiciones deterministas antes de invocarlo
|
|
123
|
+
* siquiera —verificador en verde, árbol limpio, plan sin pendientes—, porque a un
|
|
124
|
+
* modelo se le puede pedir que avise de algo y no avisar; en este repo los avisos son
|
|
125
|
+
* código, no prompt. Hoy no existe el lazo plan→ejecuta→verifica→juzga que la
|
|
126
|
+
* sustentaría, así que esta política no se implementa todavía: el hueco queda limpio
|
|
127
|
+
* para enchufarla el día que exista.
|
|
128
|
+
*/
|
|
129
|
+
export type PoliticaDeAprobacion = (plan: readonly OperacionDeSubida[]) => Promise<AutorizacionDeSubida>;
|
|
130
|
+
/**
|
|
131
|
+
* Lo que contesta la política: nada (`false`), el plan ENTERO (`true`), o solo las rutas que
|
|
132
|
+
* la persona dejó marcadas (`{rutas}`) — la consola web deja elegir qué ficheros suben.
|
|
133
|
+
*
|
|
134
|
+
* **Nunca se decide por su veracidad**: `{rutas: []}` es un objeto y por tanto «verdadero», y
|
|
135
|
+
* leerlo así convertiría «no marqué nada» en «súbelo». Lo que se ejecuta lo dice SIEMPRE
|
|
136
|
+
* `planAutorizado`, y un plan autorizado vacío es un rechazo.
|
|
137
|
+
*/
|
|
138
|
+
export type AutorizacionDeSubida = boolean | {
|
|
139
|
+
rutas: readonly string[];
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Las operaciones que se ejecutan de verdad: el plan cruzado con lo autorizado.
|
|
143
|
+
*
|
|
144
|
+
* Es una INTERSECCIÓN y no una lista que llega de fuera: una ruta que no está en el plan —un
|
|
145
|
+
* cliente roto, una selección de otra pregunta— no añade nada, solo puede quitar. Conserva el
|
|
146
|
+
* orden del plan, que es el que decidió `planDeSubida`.
|
|
147
|
+
*/
|
|
148
|
+
export declare function planAutorizado(plan: readonly OperacionDeSubida[], autorizacion: AutorizacionDeSubida): OperacionDeSubida[];
|
|
149
|
+
/**
|
|
150
|
+
* Quién autoriza que «Actualizar repo local» VACÍE la copia y la baje entera.
|
|
151
|
+
*
|
|
152
|
+
* Es el mismo hueco fail-closed por TIPO que `PoliticaDeAprobacion`: sin confirmación no se
|
|
153
|
+
* vacía nada, y la bajada vuelve a la regla de antes —se niega con cambios sin commitear—. Lo
|
|
154
|
+
* que se decide va DELANTE: `sinCommitear` es lo que se va a perder, y se pierde además la
|
|
155
|
+
* historia de git de la copia, que se rehace desde cero con la bajada como primer commit.
|
|
156
|
+
*/
|
|
157
|
+
export type ConfirmacionDeBajada = (loQueSePierde: {
|
|
158
|
+
sinCommitear: readonly string[];
|
|
159
|
+
}) => Promise<boolean>;
|
|
160
|
+
/**
|
|
161
|
+
* Las TRES acciones de `/sync`, con nombre propio.
|
|
162
|
+
*
|
|
163
|
+
* Existían escritas tres veces —en el puerto `Consola.sincronizar`, en el manejador del comando
|
|
164
|
+
* y en la ayuda— y una cuarta estaba a punto al aparecer el acto `sincronizacion`, que también
|
|
165
|
+
* tiene que decir cuál fue. Nombradas aquí, que es donde vive la sincronización, y no en `cli/`:
|
|
166
|
+
* el acto que las guarda es de `core/`.
|
|
167
|
+
*/
|
|
168
|
+
export type AccionDeSincronizacion = "estado" | "bajar" | "subir";
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La codificación de un fichero de texto del proyecto, en las dos direcciones, con UNA tabla por
|
|
3
|
+
* juego de caracteres.
|
|
4
|
+
*
|
|
5
|
+
* Los proyectos XOne traen sus `.xne` en UTF-8 o en ISO-8859 (`<?xml … encoding="iso-8859-15"?>`,
|
|
6
|
+
* lo que emiten las plantillas de la skill). XOne los lee según ese `encoding=`, así que guardarlos
|
|
7
|
+
* en otra codificación rompería cada tilde sin un error que leer: un bug mudo, y el mismo que la
|
|
8
|
+
* skill nombra como «encoding incoherente». Lo que hace falta es escribir en la codificación que el
|
|
9
|
+
* fichero YA tenía, o la que DECLARA si todavía no la delatan sus bytes.
|
|
10
|
+
*
|
|
11
|
+
* Dos tablas de 8 bits, y se elige UNA por fichero en las dos direcciones —leer con una y escribir
|
|
12
|
+
* con otra movería caracteres—:
|
|
13
|
+
* - `iso-8859-15` si el prólogo lo declara: el € en 0xA4.
|
|
14
|
+
* - `windows-1252` en todo lo demás (lo que `TextDecoder("latin1")` es en WHATWG): el € en 0x80, y
|
|
15
|
+
* los cinco bytes que windows-1252 no define salen como el control C1 del mismo número.
|
|
16
|
+
* Cada codificador se CONSTRUYE invirtiendo su decodificador byte a byte, no se copia de una tabla:
|
|
17
|
+
* así la ida y vuelta es exacta por construcción, C1 incluidos.
|
|
18
|
+
*
|
|
19
|
+
* Puro: `Uint8Array` y `TextDecoder`, sin `Buffer` ni disco.
|
|
20
|
+
*/
|
|
21
|
+
export type Tabla8Bits = "windows-1252" | "iso-8859-15";
|
|
22
|
+
export type CodificacionDeEscritura = "utf-8" | Tabla8Bits;
|
|
23
|
+
/** Bytes de 8 bits → texto, con la tabla del fichero. */
|
|
24
|
+
export declare function decodificar8Bits(bytes: Uint8Array, tabla: Tabla8Bits): string;
|
|
25
|
+
/** El carácter que no cabe y su línea (desde 1), para poder decirlo. */
|
|
26
|
+
export interface CaracterNoRepresentable {
|
|
27
|
+
caracter: string;
|
|
28
|
+
linea: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Texto → bytes de 8 bits, o el PRIMER carácter que no cabe. Nunca se sustituye por `?`: un `?` en
|
|
32
|
+
* lugar de una letra es otra forma del bug mudo. Se recorre por CODE POINT, así que un emoji (dos
|
|
33
|
+
* unidades UTF-16) se nombra entero.
|
|
34
|
+
*/
|
|
35
|
+
export declare function codificar8Bits(texto: string, tabla: Tabla8Bits): {
|
|
36
|
+
bytes: Uint8Array;
|
|
37
|
+
} | CaracterNoRepresentable;
|
|
38
|
+
/** Cómo se NOMBRA la tabla en un mensaje para una persona o para el agente. */
|
|
39
|
+
export declare function nombreDeTabla(tabla: Tabla8Bits): string;
|
|
40
|
+
/**
|
|
41
|
+
* La codificación que DECLARA el prólogo XML, mirada como la mira `xone-linter`
|
|
42
|
+
* (`XmlParser.js#detectEncoding`): la cabeza del texto, `<?xml … encoding="…"`, y «8859-15» antes
|
|
43
|
+
* que «8859-1» (que lo contiene). Lo que no es un prólogo al principio —sin contar el BOM y los
|
|
44
|
+
* blancos— no declara nada, y una codificación que no sabemos escribir tampoco.
|
|
45
|
+
*/
|
|
46
|
+
export declare function codificacionDeclarada(cabeza: string): CodificacionDeEscritura | undefined;
|
|
47
|
+
/** La tabla de 8 bits de unos bytes que NO son UTF-8: la que declare su prólogo, o windows-1252. */
|
|
48
|
+
export declare function tablaDeLosBytes(bytes: Uint8Array): Tabla8Bits;
|
|
49
|
+
/** UTF-8 ESTRICTO, el mismo criterio que la lectura para decidir que un fichero no lo es. */
|
|
50
|
+
export declare function esUtf8Valido(bytes: Uint8Array): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* En qué bytes se guarda `texto` sobre lo que hay (`actual`, ausente si el fichero es NUEVO). En
|
|
53
|
+
* orden:
|
|
54
|
+
* 1. Lo que ya no es UTF-8 sigue en 8 bits: con la tabla que declare lo que se escribe, si declara
|
|
55
|
+
* una de 8 bits (la que usará la próxima lectura), o si no con la de sus bytes (`tablaDeLosBytes`).
|
|
56
|
+
* 2. Un UTF-8 con algo que no es ASCII se queda en UTF-8: nunca se transcodifica lo que nadie tocó.
|
|
57
|
+
* 3. Un ASCII puro —que es UTF-8 válido y no delata nada— o un fichero nuevo siguen lo que DECLARE el
|
|
58
|
+
* texto que se escribe; sin declaración, UTF-8. Es el caso de toda colección nueva con la
|
|
59
|
+
* plantilla de la skill (`encoding="iso-8859-15"`): sin esto, su primera tilde iba en UTF-8 bajo
|
|
60
|
+
* una declaración de 8 bits.
|
|
61
|
+
*/
|
|
62
|
+
export declare function codificacionParaEscribir(actual: Uint8Array | undefined, texto: string): CodificacionDeEscritura;
|
|
63
|
+
/**
|
|
64
|
+
* Bytes de un texto del proyecto → el texto que ve el AGENTE: UTF-8 si lo es (con el BOM dentro,
|
|
65
|
+
* como `readFile(…, "utf8")`, que es lo que hace la librería), y si no, su tabla de 8 bits. Es lo
|
|
66
|
+
* que tiene que leer cualquiera que compare contra lo que el agente leyó —el ANTES de la tarjeta de
|
|
67
|
+
* aprobación—: con UTF-8 a secas, un ancla con tilde no calzaba y cada línea con tilde salía cambiada.
|
|
68
|
+
*/
|
|
69
|
+
export declare function decodificarComoTexto(bytes: Uint8Array): string;
|
|
70
|
+
/**
|
|
71
|
+
* Un diff de git, en BYTES, → el texto que se enseña. LÍNEA A LÍNEA con la regla de siempre: la que
|
|
72
|
+
* es UTF-8 válido se lee como UTF-8, y la que no, con la tabla de 8 bits del fichero (`tabla`, que
|
|
73
|
+
* decide quien llama mirando el fichero: la de su prólogo, o windows-1252).
|
|
74
|
+
*
|
|
75
|
+
* Existe por una captura suya: el diff de los cambios de la sesión leía la salida de git como
|
|
76
|
+
* UTF-8, y en un `.xne` Latin-1 cada tilde salía «Aplicaci�n» — el fichero estaba bien, el diff lo
|
|
77
|
+
* enseñaba roto. Línea a línea y no el diff entero porque las cabeceras de git van en ASCII y un
|
|
78
|
+
* fichero que CAMBIÓ de codificación trae una mitad en cada una: decidir una sola para todo
|
|
79
|
+
* rompería la otra mitad.
|
|
80
|
+
*/
|
|
81
|
+
export declare function decodificarParche(bytes: Uint8Array, tabla: Tabla8Bits): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué `Bash` se le deja correr a un agente EXTERNO (Claude Code) que declara `ejecucion: true`.
|
|
3
|
+
*
|
|
4
|
+
* En los motores externos la shell está cerrada: lo que el hijo ejecuta va directo a la máquina,
|
|
5
|
+
* sin nuestras guardas. La excepción es ESTRECHA a propósito: una sola llamada a uno de los
|
|
6
|
+
* scripts de las skills que el agente declara (`xone-hotswap`, `xone-log-android`…), por su
|
|
7
|
+
* NOMBRE, con argumentos que la shell no puede reinterpretar. Todo lo demás se deniega.
|
|
8
|
+
*
|
|
9
|
+
* La gramática sale de cómo se llaman de verdad (`skills/xone-hotswap/SKILL.md`): palabras
|
|
10
|
+
* sueltas (`--app MiApp`, `name=MAP_BT_ACEPTAR`, `--`, nombres de fichero) y, para un texto con
|
|
11
|
+
* espacios, comillas SIMPLES —dentro de ellas la shell no expande nada—. Se rechaza lo demás:
|
|
12
|
+
* comillas dobles, `$`, backticks, `\`, comodines, `~`, `{}`, `#`, redirecciones, tuberías,
|
|
13
|
+
* encadenados, saltos de línea y una asignación `VAR=` delante.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* El motivo por el que ese comando NO se deja correr, o `undefined` si se deja. `scripts` son los
|
|
17
|
+
* nombres (sin ruta) de los ejecutables de las skills del agente. El motivo dice la forma que sí
|
|
18
|
+
* vale: sin eso el modelo reintenta con `./scripts/…` o con la ruta de la variable.
|
|
19
|
+
*/
|
|
20
|
+
export declare function motivoDeComandoExternoInaceptable(comando: string, scripts: readonly string[]): string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* El MISMO comando, lanzado con `node` y la ruta del script: lo que hace falta en Windows, donde un script sin extensión
|
|
23
|
+
* no se ejecuta por su nombre. Se llama SOLO con un comando que `motivoDeComandoExternoInaceptable` ya admitió, así que
|
|
24
|
+
* la forma es «nombre args» y los argumentos no llevan nada que la shell interprete; la ruta la pone el código, con `/`
|
|
25
|
+
* (el Bash de Claude Code en Windows es Git Bash) y entre comillas simples. `undefined` si el script no tiene ruta o si
|
|
26
|
+
* la ruta trae una comilla simple: antes que componer un escape, no se ejecuta.
|
|
27
|
+
*/
|
|
28
|
+
export declare function comandoConNode(comando: string, rutas: Readonly<Record<string, string>>,
|
|
29
|
+
/**
|
|
30
|
+
* El Node con que se lanza: la ruta ABSOLUTA del que corre xonecode (`process.execPath`), no `node` a secas. Medido en
|
|
31
|
+
* Windows: en el Git Bash del hijo `node` no estaba en el PATH («node: command not found»). Ausente = `node`.
|
|
32
|
+
*/
|
|
33
|
+
node?: string): string | undefined;
|
|
34
|
+
/** El script de `xone-development` que pasa un `.xne` de 8 bits a UTF-8 (`skills/xone-development/lib/aUtf8.mjs`). */
|
|
35
|
+
export declare const SCRIPT_A_UTF8 = "xone-a-utf8";
|
|
36
|
+
/**
|
|
37
|
+
* Qué hacer con un `.xne` en ISO-8859-15 o windows-1252, que las tools de Claude Code no saben escribir. Medido:
|
|
38
|
+
* 2.1.301 lo rechaza ANTES del hook y de `canUseTool` (xonecode no puede escribirlo por él), y 2.1.263/2.1.280
|
|
39
|
+
* escribían UTF-8 dentro de un fichero que declara ISO-8859-15, rompiendo cada tilde sin aviso. Y todos lo LEEN con
|
|
40
|
+
* «�». Decisión suya: que lo convierta él a UTF-8, y se le dice aquí. Solo si el script está entre los suyos.
|
|
41
|
+
*/
|
|
42
|
+
export declare const TEXTO_DE_A_UTF8: string;
|
|
43
|
+
/**
|
|
44
|
+
* Lo que se le DICE al hijo de su shell, sacado de lo que de verdad se le concede. Sin esto lo descubría a base de
|
|
45
|
+
* denegaciones: medido en una tarea de Maset, el desarrollador en Claude Code (con «Ejecuta comandos» marcado y skills
|
|
46
|
+
* sin ningún script) probó `Bash` y concluyó que «solo admite un script que el sandbox también rechaza». Sin ejecución
|
|
47
|
+
* concedida no se dice nada: el SDK ya le enseña `Bash`, y el hook la deniega con su motivo.
|
|
48
|
+
*/
|
|
49
|
+
export declare function textoDeLaShellExterna(scripts: readonly string[] | undefined): string | undefined;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comparar la ESTRUCTURA de dos pantallas con aritmética de píxeles (IXCODE-18).
|
|
3
|
+
*
|
|
4
|
+
* ## Por qué existe, medido
|
|
5
|
+
*
|
|
6
|
+
* Pidiendo a un agente «haz este diseño» (una calculadora de Stitch), el turno cerró diciendo «sin
|
|
7
|
+
* solape ni recorte: los controles caben» mientras el teclado ocupaba un tercio de la pantalla y
|
|
8
|
+
* las teclas salían cortadas. El crítico visual había dicho rojo y el propio agente lo descartó
|
|
9
|
+
* como «no fiable»: dos opiniones de modelos, ninguna cifra. Con cifras el desacuerdo no cabe: la
|
|
10
|
+
* maqueta ocupaba el 96 % del alto y la captura el 33 %.
|
|
11
|
+
*
|
|
12
|
+
* ## Qué mide, y por qué solo eso
|
|
13
|
+
*
|
|
14
|
+
* Es DETERMINISTA: las mismas dos imágenes dan siempre los mismos números, y no depende de que el
|
|
15
|
+
* modelo tenga visión. Mide **dónde hay contenido**, no cómo es:
|
|
16
|
+
*
|
|
17
|
+
* 1. El FONDO es el color más frecuente (una pantalla de app es un fondo liso con cosas encima).
|
|
18
|
+
* 2. «Contenido» es todo píxel que se aparta del fondo más que `UMBRAL_DE_CONTENIDO`.
|
|
19
|
+
* 3. La ocupación por FRANJAS horizontales (`FRANJAS_DE_FILAS`) y verticales
|
|
20
|
+
* (`FRANJAS_DE_COLUMNAS`), y hasta dónde llega el contenido.
|
|
21
|
+
*
|
|
22
|
+
* Todo en PORCENTAJES del área útil, así que una maqueta de 390 px y una captura de 1080 px se
|
|
23
|
+
* comparan sin escalar. Se recorta un margen arriba y abajo (barra de estado y de navegación).
|
|
24
|
+
*
|
|
25
|
+
* **Lo que NO hace, y se dice en cada respuesta**: no ve texto cortado, ni estilo (píldoras contra
|
|
26
|
+
* lápidas), ni colores. Y **no cuenta teclas**: se probó y no es fiable (las teclas oscuras sobre
|
|
27
|
+
* fondo oscuro se funden: 12 manchas en una maqueta de unas 20). Da el ESQUELETO; el parecido y las
|
|
28
|
+
* roturas siguen siendo cosa del crítico con visión.
|
|
29
|
+
*
|
|
30
|
+
* `core/` no decodifica imágenes: recibe los píxeles ya en RGBA (`agent/dispositivos/
|
|
31
|
+
* decodificarImagen.ts` los saca de un PNG o un JPEG).
|
|
32
|
+
*/
|
|
33
|
+
export interface ImagenRgba {
|
|
34
|
+
ancho: number;
|
|
35
|
+
alto: number;
|
|
36
|
+
/** RGBA, 4 bytes por píxel, fila a fila. */
|
|
37
|
+
datos: Uint8Array | Uint8ClampedArray;
|
|
38
|
+
}
|
|
39
|
+
/** Fracción del alto que se recorta arriba y abajo: barra de estado y barra de navegación. */
|
|
40
|
+
export declare const RECORTE_DE_BARRAS = 0.05;
|
|
41
|
+
export declare const FRANJAS_DE_FILAS = 10;
|
|
42
|
+
export declare const FRANJAS_DE_COLUMNAS = 8;
|
|
43
|
+
/** Suma de diferencias por canal a partir de la cual un píxel ya no es el fondo. */
|
|
44
|
+
export declare const UMBRAL_DE_CONTENIDO = 24;
|
|
45
|
+
/**
|
|
46
|
+
* El ENCAJE: cuánto puede separarse cada borde del contenido (arriba, abajo, izquierda, derecha) del de la maqueta, en
|
|
47
|
+
* fracción de la pantalla. Existe porque las distancias por franjas PROMEDIAN: calc12 cumplía el 10 % en horizontal
|
|
48
|
+
* (8 %) con el teclado acabando al 85 % del ancho donde la maqueta llega al 96 %, y 12 puntos vacíos abajo. Calibrado
|
|
49
|
+
* contra las capturas de las pasadas: la mejor (calc9) queda en 0-1,6 puntos por lado.
|
|
50
|
+
*/
|
|
51
|
+
export declare const TOLERANCIA_DE_ENCAJE = 0.03;
|
|
52
|
+
/** Diferencia de ocupación (en puntos de 0 a 1) a partir de la cual una franja se señala. */
|
|
53
|
+
export declare const DIFERENCIA_QUE_SE_SEÑALA = 0.3;
|
|
54
|
+
/** Diferencia media de perfil bajo la que dos pantallas se dan por parecidas en estructura. */
|
|
55
|
+
export declare const DISTANCIA_PARECIDA = 0.12;
|
|
56
|
+
export interface MedidaDePantalla {
|
|
57
|
+
/** El color de fondo detectado, RGB. */
|
|
58
|
+
fondo: [number, number, number];
|
|
59
|
+
/** De 0 a 1: hasta dónde llega el contenido (primera a última fila con contenido, sobre el alto útil). */
|
|
60
|
+
inicioDelContenido: number;
|
|
61
|
+
finDelContenido: number;
|
|
62
|
+
/** De 0 a 1: dónde empieza y acaba el contenido a lo ANCHO, la mediana de las franjas del alto que tienen contenido. */
|
|
63
|
+
izquierdaDelContenido: number;
|
|
64
|
+
derechaDelContenido: number;
|
|
65
|
+
/** Ocupación (0 a 1) de cada franja horizontal, de arriba abajo. */
|
|
66
|
+
filas: number[];
|
|
67
|
+
/** Ocupación (0 a 1) de cada franja vertical, de izquierda a derecha. */
|
|
68
|
+
columnas: number[];
|
|
69
|
+
}
|
|
70
|
+
export type Veredicto = "parecida" | "distinta";
|
|
71
|
+
export interface Comparacion {
|
|
72
|
+
referencia: MedidaDePantalla;
|
|
73
|
+
captura: MedidaDePantalla;
|
|
74
|
+
/** Diferencia media de ocupación por franjas, de 0 (igual) a 1. */
|
|
75
|
+
distanciaVertical: number;
|
|
76
|
+
distanciaHorizontal: number;
|
|
77
|
+
/** Cuánto se separa cada borde del contenido del de la maqueta (captura − referencia, fracción de la pantalla). */
|
|
78
|
+
encaje: {
|
|
79
|
+
arriba: number;
|
|
80
|
+
abajo: number;
|
|
81
|
+
izquierda: number;
|
|
82
|
+
derecha: number;
|
|
83
|
+
};
|
|
84
|
+
hallazgos: string[];
|
|
85
|
+
veredicto: Veredicto;
|
|
86
|
+
}
|
|
87
|
+
/** Lo más que puede ocupar un MARCO a cada lado, en fracción del ancho. */
|
|
88
|
+
export declare const ANCHO_MAXIMO_DEL_MARCO = 0.03;
|
|
89
|
+
/** La imagen sin su marco lateral, si lo tiene (`columnasDeMarco`). Sin marco, la MISMA imagen. */
|
|
90
|
+
export declare function sinMarcoLateral(img: ImagenRgba, recorte?: number): ImagenRgba;
|
|
91
|
+
/**
|
|
92
|
+
* La ocupación de una imagen. **Lanza si no se puede medir** (vacía o diminuta): quien llama lo
|
|
93
|
+
* convierte en texto. Lo primero, sin el marco lateral que trae una maqueta (`sinMarcoLateral`).
|
|
94
|
+
*/
|
|
95
|
+
export declare function medirPantalla(entrada: ImagenRgba, recorte?: number): MedidaDePantalla;
|
|
96
|
+
/** El peor borde, en valor absoluto: lo que decide si encaja. */
|
|
97
|
+
export declare function desajusteDeEncaje(e: Comparacion["encaje"]): number;
|
|
98
|
+
/** Compara dos pantallas ya medidas. Puro: los números salen de `medirPantalla`. */
|
|
99
|
+
export declare function compararMedidas(referencia: MedidaDePantalla, captura: MedidaDePantalla): Comparacion;
|
|
100
|
+
/** Medir las dos y compararlas. */
|
|
101
|
+
export declare function compararPantallas(referencia: ImagenRgba, captura: ImagenRgba): Comparacion;
|
|
102
|
+
export declare function informeDeComparacion(c: Comparacion): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Una zona de la imagen, en FRACCIONES de la imagen entera (0 a 1): `x`, `y` y su tamaño. Así sirve
|
|
105
|
+
* igual a 1080×2400 que a cualquier otra resolución.
|
|
106
|
+
*/
|
|
107
|
+
export interface Region {
|
|
108
|
+
x: number;
|
|
109
|
+
y: number;
|
|
110
|
+
ancho: number;
|
|
111
|
+
alto: number;
|
|
112
|
+
}
|
|
113
|
+
/** Fracción de píxeles de la zona que tienen que diferir para dar la zona por CAMBIADA. */
|
|
114
|
+
export declare const UMBRAL_DE_CAMBIO = 0.003;
|
|
115
|
+
export interface Cambio {
|
|
116
|
+
region: Region;
|
|
117
|
+
/** Fracción (0 a 1) de los píxeles de la zona que cambiaron. */
|
|
118
|
+
cambiados: number;
|
|
119
|
+
/** El rectángulo mínimo que contiene todo lo que cambió, en fracciones de la imagen; ausente si nada cambió. */
|
|
120
|
+
cajaDelCambio?: Region;
|
|
121
|
+
veredicto: "cambio" | "igual";
|
|
122
|
+
}
|
|
123
|
+
/** Por qué una zona no vale, o `undefined`. */
|
|
124
|
+
export declare function motivoDeRegionInaceptable(r: Region): string | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Cuánto cambió una zona entre dos capturas. **Lanza** si no son comparables: las dos tienen que ser
|
|
127
|
+
* del MISMO tamaño (dos capturas del mismo aparato); comparar tamaños distintos es la pregunta de
|
|
128
|
+
* `compararPantallas`, no ésta.
|
|
129
|
+
*
|
|
130
|
+
* Es lo que un agente escribía a mano cada pasada (46 scripts de Python con PIL y 31 `md5`): un
|
|
131
|
+
* `md5` igual solo dice que TODA la imagen es igual, no si cambió lo que importaba, y uno distinto
|
|
132
|
+
* puede ser solo un cursor parpadeando.
|
|
133
|
+
*/
|
|
134
|
+
export declare function medirCambio(antes: ImagenRgba, despues: ImagenRgba, region?: Region): Cambio;
|
|
135
|
+
/** El informe en texto. En «igual» dice las DOS explicaciones posibles, para que no se elija una sin mirar. */
|
|
136
|
+
export declare function informeDeCambio(c: Cambio): string[];
|