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,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convertir un documento del proyecto a PDF, imprimiéndolo con un NAVEGADOR.
|
|
3
|
+
*
|
|
4
|
+
* El porqué de que esto lo haga el harness y no el agente está en `core/exportacion.ts`.
|
|
5
|
+
* Aquí está lo que toca disco, y tres decisiones que no son de forma:
|
|
6
|
+
*
|
|
7
|
+
* - **El navegador se busca en una lista CERRADA de rutas conocidas**, igual que las
|
|
8
|
+
* herramientas de `core/dispositivos.ts`: lo que no está en la lista no se lanza. Y su RUTA
|
|
9
|
+
* se queda en el host — por el cable viaja que hay navegador o que no, nunca dónde.
|
|
10
|
+
* - **Se imprime SIN JavaScript** (`--blink-settings=scriptEnabled=false`). Un `.md` o un
|
|
11
|
+
* `.html` del proyecto puede traer un `<script>` dentro, y un PDF no necesita ejecutar
|
|
12
|
+
* nada: es la misma razón por la que un artefacto se sirve en un iframe con origen opaco.
|
|
13
|
+
* - **El HTML intermedio se escribe FUERA del proyecto.** Dentro entraría en git, en el
|
|
14
|
+
* commit de cada turno y en la siguiente subida a CloudStudio — un fichero de andamiaje en
|
|
15
|
+
* la app del cliente.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Dónde puede estar un navegador que sepa imprimir. Lista CERRADA y en este orden.
|
|
19
|
+
*
|
|
20
|
+
* Son todos Chromium por dentro, que es el que trae `--print-to-pdf`: Safari y Firefox no
|
|
21
|
+
* tienen equivalente en línea de comandos, así que no están y no es un olvido.
|
|
22
|
+
*/
|
|
23
|
+
export declare const NAVEGADORES_CONOCIDOS: readonly ["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "/Applications/Chromium.app/Contents/MacOS/Chromium", "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", "/usr/bin/chromium", "/usr/bin/chromium-browser", "/usr/bin/google-chrome", "/usr/bin/google-chrome-stable"];
|
|
24
|
+
/**
|
|
25
|
+
* Los de WINDOWS, por sus carpetas de programas (de las variables, nunca una letra de unidad a fuego). Edge va primero: lo
|
|
26
|
+
* trae todo Windows. Medido en la máquina Windows de un usuario: con solo las rutas de macOS y Linux, el crítico de pantalla
|
|
27
|
+
* decía «no hay Chrome ni Chromium» y comparaba contra una descripción en vez de medir las cajas de la maqueta.
|
|
28
|
+
*/
|
|
29
|
+
export declare function navegadoresDeWindows(entorno: Readonly<Record<string, string | undefined>>): string[];
|
|
30
|
+
/** El primero que exista, o AUSENTE. Ausente = aquí no se puede imprimir, y se DICE con el
|
|
31
|
+
* remedio: no hay forma de adivinar que lo que falta es un navegador. */
|
|
32
|
+
export declare function navegadorParaImprimir(existe?: (ruta: string) => boolean, plataforma?: string, entorno?: Readonly<Record<string, string | undefined>>): string | undefined;
|
|
33
|
+
/** Qué decir cuando no hay ninguno. Vive aquí y no en quien llama para que las tres pieles
|
|
34
|
+
* digan lo mismo. */
|
|
35
|
+
export declare const SIN_NAVEGADOR: string;
|
|
36
|
+
export type ResultadoDeExportacion = {
|
|
37
|
+
ruta: string;
|
|
38
|
+
} | {
|
|
39
|
+
error: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Exporta `ruta` (relativa al proyecto) a un PDF hermano. Nunca LANZA.
|
|
43
|
+
*
|
|
44
|
+
* Las barreras son las MISMAS que usa la pestaña Ficheros y en el mismo orden: la criba de
|
|
45
|
+
* balde sobre el texto (`motivoDeRutaInaceptable`) y luego el camino REAL, porque un enlace
|
|
46
|
+
* simbólico dentro de la raíz puede apuntar fuera. No hay una segunda copia de esas reglas
|
|
47
|
+
* aquí: un segundo sitio donde decidir sobre una ruta es un segundo sitio donde el
|
|
48
|
+
* fail-closed puede dejar de estarlo.
|
|
49
|
+
*/
|
|
50
|
+
export declare function exportarAPdf(opciones: {
|
|
51
|
+
raiz: string;
|
|
52
|
+
ruta: string;
|
|
53
|
+
/** El binario, ya elegido. Entra por parámetro para poder probar el cableado sin un
|
|
54
|
+
* navegador delante. */
|
|
55
|
+
navegador?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Cómo se BUSCA cuando no se da uno. Por omisión, el primero conocido que exista.
|
|
58
|
+
*
|
|
59
|
+
* Entra por parámetro y no se resuelve dentro porque si no el resultado dependería de si la
|
|
60
|
+
* máquina que corre los tests tiene Chrome instalado — y un test que pasa aquí y falla en
|
|
61
|
+
* CI (o al revés) no fija nada.
|
|
62
|
+
*/
|
|
63
|
+
buscarNavegador?: () => string | undefined;
|
|
64
|
+
/** Cómo se lanza. Por omisión `execFile`; los tests no abren un navegador de verdad. */
|
|
65
|
+
imprimir?: (navegador: string, argumentos: readonly string[]) => Promise<void>;
|
|
66
|
+
/** Markdown → HTML. Por omisión `marked`, que se carga PEREZOSAMENTE: exportar es raro y
|
|
67
|
+
* no tiene por qué pesar en el arranque de cada turno. */
|
|
68
|
+
aHtml?: (markdown: string) => string | Promise<string>;
|
|
69
|
+
}): Promise<ResultadoDeExportacion>;
|
|
70
|
+
/** Un documento largo con tablas tarda segundos, no minutos; un navegador que no vuelve en
|
|
71
|
+
* este plazo está colgado y no imprimiendo. */
|
|
72
|
+
export declare const TOPE_DE_IMPRESION_MS: number;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { NOMBRE_APUNTAR_APRENDIZAJE, type Aprendizaje } from "../../core/aprendido.js";
|
|
3
|
+
export { NOMBRE_APUNTAR_APRENDIZAJE };
|
|
4
|
+
/** `.xonecode/aprendido.json` del proyecto (`core/aprendido.ts` tiene el porqué). */
|
|
5
|
+
export declare function rutaDeAprendido(raiz: string): string;
|
|
6
|
+
/** Lo apuntado, o una lista vacía: sin fichero, o roto, no hay nada que poner delante. */
|
|
7
|
+
export declare function leerAprendido(raiz: string): Aprendizaje[];
|
|
8
|
+
/** Apunta uno, sustituyendo el del mismo tema. Escritura atómica y 0600: puede llevar una contraseña. */
|
|
9
|
+
export declare function apuntarAprendizaje(raiz: string, nuevo: Aprendizaje): Aprendizaje[];
|
|
10
|
+
/**
|
|
11
|
+
* `apuntar_aprendizaje`: escribe lo aprendido para los encargos siguientes. **Sin aprobación**: no es un fichero de la
|
|
12
|
+
* app —vive en `.xonecode/`, que no sube ni entra en los commits— sino memoria del agente, como un plan. El mismo tema se
|
|
13
|
+
* sustituye. Un rechazo se DEVUELVE, nunca se lanza.
|
|
14
|
+
*/
|
|
15
|
+
export declare function crearApuntarAprendizaje(donde: {
|
|
16
|
+
raiz: string;
|
|
17
|
+
quien: string;
|
|
18
|
+
ahora?: () => Date;
|
|
19
|
+
}): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
20
|
+
tema: z.ZodString;
|
|
21
|
+
texto: z.ZodString;
|
|
22
|
+
}, z.core.$strip>, {
|
|
23
|
+
tema: string;
|
|
24
|
+
texto: string;
|
|
25
|
+
}, {
|
|
26
|
+
tema: string;
|
|
27
|
+
texto: string;
|
|
28
|
+
}, string, unknown, "apuntar_aprendizaje">;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El proyecto tal como lo enseña la pestaña Ficheros de la consola web: el árbol, el
|
|
3
|
+
* contenido de un fichero y, desde el editor de la pestaña, GUARDARLO (`escribirFicheroDeProyecto`): la
|
|
4
|
+
* única escritura del cliente en un fichero del proyecto, con las MISMAS guardas que la lectura.
|
|
5
|
+
*
|
|
6
|
+
* Lo que se lista y lo que se lee es lo mismo que ve el agente, con las mismas reglas y
|
|
7
|
+
* por las mismas funciones: `puedeLeerRuta` (la barrera de las tools propias) y
|
|
8
|
+
* `esVistaAplanada` (los `.xml` que genera XOne Studio no se tocan). Reescribirlas aquí
|
|
9
|
+
* sería la segunda copia que diverge el primer día.
|
|
10
|
+
*/
|
|
11
|
+
/** Profundidad del árbol de la web: sin tope práctico (el del Tab es 4). */
|
|
12
|
+
export declare const PROFUNDIDAD_DEL_ARBOL = 32;
|
|
13
|
+
/** Entradas a partir de las cuales el árbol se recorta y lo dice. */
|
|
14
|
+
export declare const TOPE_DE_ENTRADAS = 5000;
|
|
15
|
+
/** Bytes de contenido que viajan como mucho: el mismo tope que el parche de Revisión. */
|
|
16
|
+
export declare const TOPE_DE_FICHERO = 400000;
|
|
17
|
+
/** Ventana en la que un NUL delata un binario. */
|
|
18
|
+
export declare const VENTANA_DE_BINARIO = 8192;
|
|
19
|
+
/**
|
|
20
|
+
* Bytes de IMAGEN que viajan como mucho. Tope propio y más alto que el del texto por dos
|
|
21
|
+
* razones: una imagen recortada no es una imagen a medias, es nada —el navegador pinta el
|
|
22
|
+
* icono roto—, así que aquí no hay término medio entre traerla entera y no traerla; y la
|
|
23
|
+
* codificación base64 infla un tercio, de modo que este tope son ~2,7 MB por el cable.
|
|
24
|
+
* Un mockup o un icono de un proyecto XOne caben de sobra; un PSD de veinte megas no, y
|
|
25
|
+
* eso se DICE en vez de colgar la pestaña.
|
|
26
|
+
*/
|
|
27
|
+
export declare const TOPE_DE_IMAGEN = 2000000;
|
|
28
|
+
/** El MIME de una ruta si es una imagen que sabemos pintar, o `undefined`. */
|
|
29
|
+
export declare function mimeDeImagen(ruta: string): string | undefined;
|
|
30
|
+
export interface ArbolDeProyecto {
|
|
31
|
+
/** Relativas a la raíz, sin barra inicial, ordenadas: carpetas antes que ficheros. */
|
|
32
|
+
rutas: string[];
|
|
33
|
+
recortado: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface FicheroLeido {
|
|
36
|
+
/** La ruta tal como se pidió, nunca la resuelta en disco. */
|
|
37
|
+
ruta: string;
|
|
38
|
+
/** Falta si es binario o si la ruta se rechazó. */
|
|
39
|
+
texto?: string;
|
|
40
|
+
recortado: boolean;
|
|
41
|
+
binario: boolean;
|
|
42
|
+
/** Tamaño real en disco, aunque el texto vaya recortado. */
|
|
43
|
+
bytes: number;
|
|
44
|
+
codificacion?: "utf-8" | "latin1";
|
|
45
|
+
/**
|
|
46
|
+
* El tipo MIME, solo si la ruta es una imagen que el visor sabe pintar. Va aunque los
|
|
47
|
+
* bytes NO viajen: es lo que deja distinguir «una imagen demasiado grande» de «un
|
|
48
|
+
* binario cualquiera», que son dos cosas distintas que decir.
|
|
49
|
+
*/
|
|
50
|
+
mime?: string;
|
|
51
|
+
/** El contenido de la imagen, si cupo en `TOPE_DE_IMAGEN`. Sin recortar nunca. */
|
|
52
|
+
base64?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Solo en un MARKDOWN que enlaza imágenes del proyecto: el mismo texto con cada uno de esos
|
|
55
|
+
* enlaces apuntando a `RUTA_IMAGEN_DEL_PROYECTO`, que las sirve (`vistaDeMarkdown`). `texto`
|
|
56
|
+
* sigue siendo la fuente tal cual: «Fuente» enseña lo que hay en el fichero, no lo que se pinta.
|
|
57
|
+
*/
|
|
58
|
+
vista?: string;
|
|
59
|
+
/**
|
|
60
|
+
* El sha256 de los BYTES en disco (`huellaDeContenido`), solo con el texto ENTERO —UTF-8 o
|
|
61
|
+
* latin1, que se guarda en su tabla de 8 bits—: es lo que el editor devuelve al guardar para que se
|
|
62
|
+
* sepa si el disco cambió mientras tanto. Un recortado o un binario no la llevan, y sin ella no
|
|
63
|
+
* se edita.
|
|
64
|
+
*/
|
|
65
|
+
huella?: string;
|
|
66
|
+
/** El motivo del paso que falló. Sin él, la lectura fue bien. */
|
|
67
|
+
error?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Carpetas antes que ficheros en cada nivel, y dentro alfabético sin distinguir mayúsculas.
|
|
71
|
+
* Se compara segmento a segmento: en el primero que difiere, si uno es hoja (último
|
|
72
|
+
* segmento de su ruta) y el otro carpeta, la carpeta va antes.
|
|
73
|
+
*/
|
|
74
|
+
export declare function ordenarRutas(rutas: readonly string[]): string[];
|
|
75
|
+
export declare function arbolDeProyecto(raiz: string): ArbolDeProyecto;
|
|
76
|
+
/**
|
|
77
|
+
* Por qué una ruta del cable no se acepta, o `undefined` si vale. Es la criba de balde,
|
|
78
|
+
* antes de tocar el disco: relativa, sin `.`/`..`/segmentos vacíos, y admitida por la
|
|
79
|
+
* barrera de lectura. La segunda criba —que el camino REAL siga dentro de la raíz— es de
|
|
80
|
+
* `leerFicheroDeProyecto`, porque necesita `realpath`.
|
|
81
|
+
*/
|
|
82
|
+
export declare function motivoDeRutaInaceptable(ruta: string): string | undefined;
|
|
83
|
+
/** Una ruta del cable ya resuelta contra el disco y que ha pasado las DOS cribas. */
|
|
84
|
+
export interface RutaResuelta {
|
|
85
|
+
/** El camino REAL (`realpath`): el único sobre el que se abre o se escribe. */
|
|
86
|
+
real: string;
|
|
87
|
+
/** Ese camino real relativo a la raíz real, con «/». Es el que se le da a git. */
|
|
88
|
+
relativa: string;
|
|
89
|
+
/** La ruta pedida con «/» en vez de «\». */
|
|
90
|
+
normal: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* ¿Se puede ENSEÑAR esta ruta? La MISMA regla que `leerFicheroDeProyecto`, para quien enseña
|
|
94
|
+
* algo de un fichero que no es su contenido tal cual —el diff de lo pendiente de subir—:
|
|
95
|
+
* criba de texto, vista aplanada, y la segunda pasada sobre el camino REAL cuando el fichero
|
|
96
|
+
* existe (mayúsculas en un disco que no las distingue, enlaces a un fichero denegado). Un
|
|
97
|
+
* fichero que ya no existe —un borrado— solo pasa la criba de texto: no hay camino que resolver,
|
|
98
|
+
* y su contenido sale de git, no del disco.
|
|
99
|
+
*/
|
|
100
|
+
export declare function motivoParaNoEnsenar(raiz: string, ruta: string): Promise<string | undefined>;
|
|
101
|
+
/**
|
|
102
|
+
* La ruta RELATIVA del icono de la app de un proyecto bajado, o `undefined` si no tiene uno que se
|
|
103
|
+
* pueda enseñar.
|
|
104
|
+
*
|
|
105
|
+
* El nombre sale de `app.ini` (`core/descriptoresDeApp.ts#candidatosDeIcono`) y cada candidato pasa
|
|
106
|
+
* la MISMA barrera que la pestaña Ficheros (`motivoParaNoEnsenar`: texto y `realpath`), además de
|
|
107
|
+
* ser una imagen que sabemos pintar, un fichero de verdad y caber en `TOPE_DE_IMAGEN`. Un
|
|
108
|
+
* `icon=../.env` o un `icon.png` enlazado a un fichero denegado se quedan en «sin icono», que en la
|
|
109
|
+
* barra es la carpeta de siempre. Nunca lanza: un icono es decoración y no puede tumbar un anuncio.
|
|
110
|
+
*/
|
|
111
|
+
export declare function iconoDelProyecto(raiz: string): Promise<string | undefined>;
|
|
112
|
+
/**
|
|
113
|
+
* La cadena ENTERA de guardas de una ruta del cable, en UN sitio: la usan leer, guardar y la base
|
|
114
|
+
* de las marcas del editor (`agent/sesiones/baseDeFichero.ts`). Se extrajo de la lectura cuando
|
|
115
|
+
* apareció la escritura: copiarla habría sido la segunda copia que diverge el primer día, y en el
|
|
116
|
+
* lado que escribe un agujero ya no enseña un secreto, lo pisa.
|
|
117
|
+
*/
|
|
118
|
+
export declare function resolverEnProyecto(raiz: string, ruta: string): Promise<RutaResuelta | {
|
|
119
|
+
error: string;
|
|
120
|
+
}>;
|
|
121
|
+
export declare function leerFicheroDeProyecto(raiz: string, ruta: string): Promise<FicheroLeido>;
|
|
122
|
+
/**
|
|
123
|
+
* El markdown con cada enlace a una IMAGEN del proyecto apuntando a `RUTA_IMAGEN_DEL_PROYECTO`, o
|
|
124
|
+
* `undefined` si no enlaza ninguna.
|
|
125
|
+
*
|
|
126
|
+
* **No se incrusta, y es a propósito**: el visor (`MarkdownText`) solo pinta imágenes con URL
|
|
127
|
+
* absoluta `http(s)` —una `data:` se queda en su texto alternativo—, así que tienen que llegar por
|
|
128
|
+
* HTTP. Y así abrir un documento no lee ni un byte de sus imágenes: la barrera la pone la ruta que
|
|
129
|
+
* las sirve, al pedirlas. Aquí solo se reescribe lo que ya pasa la criba de balde sobre el TEXTO
|
|
130
|
+
* (`motivoDeRutaInaceptable`) y es una imagen por su extensión: un enlace a `.env`, o que se sale
|
|
131
|
+
* del proyecto, se queda como estaba.
|
|
132
|
+
*/
|
|
133
|
+
export declare function vistaDeMarkdown(documento: string, texto: string): string | undefined;
|
|
134
|
+
/** Cuántas imágenes y cuántos bytes se incrustan como mucho en un documento. */
|
|
135
|
+
export declare const TOPE_DE_IMAGENES_INCRUSTADAS = 40;
|
|
136
|
+
export declare const TOPE_DE_BYTES_INCRUSTADOS = 10000000;
|
|
137
|
+
/**
|
|
138
|
+
* El documento `documento` (ruta relativa al proyecto) con sus imágenes del proyecto INCRUSTADAS.
|
|
139
|
+
*
|
|
140
|
+
* Cada imagen se lee con `leerFicheroDeProyecto` —las MISMAS barreras de la pestaña Ficheros, sobre
|
|
141
|
+
* el texto y sobre el camino real, y su tope por imagen—, así que un enlace a `.env` o a algo de
|
|
142
|
+
* fuera del proyecto no se incrusta: no pasa la barrera y se queda como estaba. No hay una segunda
|
|
143
|
+
* copia de esas reglas aquí. Lo que no se puede leer, o pasa de los topes, se deja tal cual y se
|
|
144
|
+
* CUENTA en `sinResolver`: una imagen rota se ve, una inventada no.
|
|
145
|
+
*/
|
|
146
|
+
export declare function conImagenesDelProyecto(raiz: string, documento: string, texto: string, leer?: (raiz: string, ruta: string) => Promise<FicheroLeido>): Promise<{
|
|
147
|
+
texto: string;
|
|
148
|
+
incrustadas: number;
|
|
149
|
+
sinResolver: number;
|
|
150
|
+
}>;
|
|
151
|
+
/**
|
|
152
|
+
* El CONTENIDO de un fichero cuyo camino REAL ya pasó su barrera: texto o imagen, con su
|
|
153
|
+
* tope, su codificación y las dos caras del SVG.
|
|
154
|
+
*
|
|
155
|
+
* Se extrajo de `leerFicheroDeProyecto` cuando los ARTEFACTOS de una sesión necesitaron lo
|
|
156
|
+
* mismo (`agent/grafo/artefactosEnDisco.ts`). Lo que NO se extrajo es la barrera: la de un
|
|
157
|
+
* fichero del proyecto y la de un artefacto son reglas distintas —una pregunta
|
|
158
|
+
* `puedeLeerRuta` y las vistas aplanadas, la otra que el nombre sea un segmento llano
|
|
159
|
+
* dentro de la carpeta de la sesión—, y fundirlas en un parámetro sería la clase de
|
|
160
|
+
* generalización que acaba dejando un agujero en el lado que no se estaba mirando.
|
|
161
|
+
*
|
|
162
|
+
* `real` es el camino ya resuelto con `realpath`; `ruta` es la que se enseña y viaja de
|
|
163
|
+
* vuelta, nunca la del disco. El `mime` lo decide quien llama porque cada lado lo saca de
|
|
164
|
+
* un nombre distinto, y de él dependen los dos caminos de aquí: la imagen que solo viaja
|
|
165
|
+
* entera y el SVG, que va con fuente y dibujo.
|
|
166
|
+
*/
|
|
167
|
+
export declare function leerContenidoDeFichero(real: string, ruta: string, mime: string | undefined): Promise<FicheroLeido>;
|
|
168
|
+
/**
|
|
169
|
+
* La HUELLA de un contenido: sha256 de sus bytes. Es la concurrencia optimista del editor: viaja
|
|
170
|
+
* al leer y vuelve al guardar, y si el disco ya no coincide no se escribe nada. Un hash y no una
|
|
171
|
+
* fecha de modificación porque una fecha no distingue «lo reescribió con lo mismo» de «lo cambió»,
|
|
172
|
+
* y en una copia mudada o bajada de nuevo las fechas no dicen nada.
|
|
173
|
+
*/
|
|
174
|
+
export declare function huellaDeContenido(bytes: Uint8Array): string;
|
|
175
|
+
/** El resultado de guardar: con `huella` se escribió; con `error`, no se tocó nada. */
|
|
176
|
+
export interface FicheroGuardado {
|
|
177
|
+
ruta: string;
|
|
178
|
+
huella?: string;
|
|
179
|
+
error?: string;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Guarda lo que la persona editó en la pestaña Ficheros. En orden, y cualquier paso que falle
|
|
183
|
+
* DEVUELVE su motivo sin haber tocado el disco:
|
|
184
|
+
*
|
|
185
|
+
* 1. Las MISMAS guardas que leer (`resolverEnProyecto`), y además que sea un fichero normal —una
|
|
186
|
+
* carpeta no— y que no sea una imagen, que no se edita desde aquí.
|
|
187
|
+
* 2. La huella: si lo que hay en disco no es lo que el cliente cargó, alguien (el agente, otra
|
|
188
|
+
* pestaña, un editor de fuera) lo cambió, y escribir encima lo perdería sin avisar.
|
|
189
|
+
* 3. La codificación, la que YA tenía el fichero (sus bytes actuales) o, si es ASCII puro, la que
|
|
190
|
+
* declara su prólogo (`codificacionParaEscribir`); un carácter que no cabe en la tabla de 8 bits
|
|
191
|
+
* se niega con cuál y en qué línea.
|
|
192
|
+
* 4. El tope, en BYTES ya codificados: el mismo que la lectura, porque lo que no se puede leer
|
|
193
|
+
* entero no se edita.
|
|
194
|
+
* 5. Escritura ATÓMICA sobre el camino REAL (temporal en la misma carpeta + `rename`): un corte a
|
|
195
|
+
* mitad deja el fichero viejo, no uno truncado; y sobre el real porque renombrar encima de un
|
|
196
|
+
* enlace lo sustituiría por un fichero normal.
|
|
197
|
+
*
|
|
198
|
+
* Lo que NO hace es comprobar que nadie trabaja en el proyecto: eso es del manejador del cable
|
|
199
|
+
* (`arranque.ts#atenderGuardarFichero`), que es quien ve las consolas vivas.
|
|
200
|
+
*
|
|
201
|
+
* El BOM: el lector decodifica con `TextDecoder`, que lo QUITA, así que el editor nunca lo ve; si
|
|
202
|
+
* el fichero lo llevaba y el texto no, se le devuelve —si no, guardar un fichero sin tocar una
|
|
203
|
+
* coma cambiaría sus bytes—.
|
|
204
|
+
*/
|
|
205
|
+
export declare function escribirFicheroDeProyecto(raiz: string, ruta: string, texto: string, huella: string): Promise<FicheroGuardado>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type FicheroLeido } from "./arbolDeProyecto.js";
|
|
2
|
+
/**
|
|
3
|
+
* Bytes que la ruta HTTP sirve como mucho.
|
|
4
|
+
*
|
|
5
|
+
* No es el tope del cable (`TOPE_DE_FICHERO`, 400 KB) y no puede serlo: por aquí pasa el
|
|
6
|
+
* documento que el iframe pinta, y medio HTML no es medio panel — es una página rota. Un
|
|
7
|
+
* panel de `artifacts-builder` con sus datos horneados dentro ronda el megabyte, así que el
|
|
8
|
+
* tope está donde deja de ser un artefacto y empieza a ser un descuido; existe para que un
|
|
9
|
+
* fichero de 800 MB no se lea entero a memoria en la máquina del usuario, no para acotar lo
|
|
10
|
+
* que el agente puede dibujar.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TOPE_DE_ARTEFACTO = 20000000;
|
|
13
|
+
/** El resultado de la lectura cruda. Discriminado, y con el motivo separado, porque la ruta
|
|
14
|
+
* HTTP tiene que contestar un código distinto a cada cosa: 403 lo rechazado, 404 lo que no
|
|
15
|
+
* está, 413 lo que no cabe. Fundirlos daría un 404 para todo, que es la respuesta que hace
|
|
16
|
+
* imposible saber si el fichero existe o si el nombre estaba mal. */
|
|
17
|
+
export type LecturaCruda = {
|
|
18
|
+
ok: true;
|
|
19
|
+
nombre: string;
|
|
20
|
+
datos: Buffer;
|
|
21
|
+
mime?: string;
|
|
22
|
+
} | {
|
|
23
|
+
ok: false;
|
|
24
|
+
motivo: "rechazado" | "no-existe" | "demasiado-grande";
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Para el CABLE: la misma forma con la que viaja un fichero del proyecto.
|
|
28
|
+
*
|
|
29
|
+
* La `ruta` que vuelve es la VIRTUAL (`/artefactos/<nombre>`), nunca la del disco: el cable
|
|
30
|
+
* puede ir por un túnel, y es la misma regla por la que la ruta de una herramienta se queda
|
|
31
|
+
* en el host. El error tampoco la lleva.
|
|
32
|
+
*/
|
|
33
|
+
export declare function leerArtefactoDeSesion(raiz: string, sesion: string, nombre: string): Promise<FicheroLeido>;
|
|
34
|
+
/** Para la RUTA HTTP: los bytes, sin recortar y sin base64. Ver `TOPE_DE_ARTEFACTO`. */
|
|
35
|
+
export declare function leerArtefactoCrudo(raiz: string, sesion: string, nombre: string): Promise<LecturaCruda>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const NOMBRE_ATRIBUTOS_XONE = "xone_atributos";
|
|
3
|
+
/**
|
|
4
|
+
* Las tablas de las que sale el índice, dentro de la skill `xone-development` del PAQUETE: las de referencia de cada nodo y
|
|
5
|
+
* las de su capítulo propio, porque la skill no siempre dice lo mismo en los dos y el índice enseña los dos. `nodo` es el
|
|
6
|
+
* del fichero entero cuando su título no lo parte en secciones `## N. Nodo …`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const REFERENCIAS_DE_ATRIBUTOS: readonly {
|
|
9
|
+
fichero: string;
|
|
10
|
+
nodo?: string;
|
|
11
|
+
}[];
|
|
12
|
+
/** Dónde se busca lo que el índice no trae: la skill entera, con la tool de fichero que todos tienen. */
|
|
13
|
+
export declare const RUTA_DE_LA_SKILL = "/skills/xone-development/references/";
|
|
14
|
+
export declare const busquedaEnLaSkill: (atributo: string) => string;
|
|
15
|
+
/**
|
|
16
|
+
* `xone_atributos`: ¿existe este atributo en este nodo?, en una línea (`core/atributosXone.ts` tiene el porqué medido).
|
|
17
|
+
*
|
|
18
|
+
* Se lee de la skill del PAQUETE en cada construcción, nunca de una copia: si la referencia cambia, el índice cambia con
|
|
19
|
+
* ella. Una referencia que falta no tumba nada: la tool dice que no tiene índice y remite a la skill. Solo LEE, y lo que
|
|
20
|
+
* lee es de la skill, no del proyecto, así que no pasa por `puedeLeerRuta`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function crearAtributosXone(raizDeSkills?: string): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
23
|
+
atributo: z.ZodOptional<z.ZodString>;
|
|
24
|
+
nodo: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, z.core.$strip>, {
|
|
26
|
+
atributo?: string | undefined;
|
|
27
|
+
nodo?: string | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
atributo?: string | undefined;
|
|
30
|
+
nodo?: string | undefined;
|
|
31
|
+
}, string, unknown, "xone_atributos">;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { NOMBRE_BUSCAR_ICONO, recibeBuscarIcono } from "../../core/iconos.js";
|
|
3
|
+
import type { IconosPort } from "../../core/ports.js";
|
|
4
|
+
export { NOMBRE_BUSCAR_ICONO, recibeBuscarIcono };
|
|
5
|
+
export declare function crearBuscarIcono(iconos: IconosPort): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
6
|
+
operacion: z.ZodEnum<{
|
|
7
|
+
buscar: "buscar";
|
|
8
|
+
obtener: "obtener";
|
|
9
|
+
}>;
|
|
10
|
+
consulta: z.ZodOptional<z.ZodString>;
|
|
11
|
+
prefijo: z.ZodOptional<z.ZodString>;
|
|
12
|
+
limite: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
13
|
+
id: z.ZodOptional<z.ZodString>;
|
|
14
|
+
color: z.ZodOptional<z.ZodString>;
|
|
15
|
+
tamano: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
16
|
+
}, z.core.$strip>, {
|
|
17
|
+
operacion: "buscar" | "obtener";
|
|
18
|
+
consulta?: string | undefined;
|
|
19
|
+
prefijo?: string | undefined;
|
|
20
|
+
limite?: number | undefined;
|
|
21
|
+
id?: string | undefined;
|
|
22
|
+
color?: string | undefined;
|
|
23
|
+
tamano?: number | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
operacion: "buscar" | "obtener";
|
|
26
|
+
consulta?: string | undefined;
|
|
27
|
+
prefijo?: string | undefined;
|
|
28
|
+
limite?: unknown;
|
|
29
|
+
id?: string | undefined;
|
|
30
|
+
color?: string | undefined;
|
|
31
|
+
tamano?: unknown;
|
|
32
|
+
}, string, unknown, "buscar_icono">;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { FilesystemBackend } from "deepagents";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
/**
|
|
4
|
+
* El nombre de esta tool, en UN sitio.
|
|
5
|
+
*
|
|
6
|
+
* Existe porque `xone_navegacion` manda aquí cuando no sabe contestar, y una sugerencia que
|
|
7
|
+
* nombre una tool que ya no se llama así manda al modelo a llamar a algo que no existe —
|
|
8
|
+
* gasta un viaje y devuelve un error. Es la lección del token `HANDOFF DE ANÁLISIS`: lo que se
|
|
9
|
+
* nombra desde otro sitio no se escribe dos veces.
|
|
10
|
+
*/
|
|
11
|
+
export declare const NOMBRE_BUSQUEDA_REGEX = "regex_search";
|
|
12
|
+
/**
|
|
13
|
+
* La llamada EXACTA a `regex_search` que busca un término como texto, lista para copiar.
|
|
14
|
+
*
|
|
15
|
+
* Se devuelve la llamada entera y no un consejo en prosa («busca con regex_search») por lo
|
|
16
|
+
* mismo que `porQueNo` dice la ruta buena en vez de solo negarse: un modelo al que se le dice
|
|
17
|
+
* qué hacer sin decirle cómo se inventa los argumentos, y aquí inventarlos cuesta un viaje y
|
|
18
|
+
* un error de esquema. Se comprueba contra el esquema REAL de la tool en su test.
|
|
19
|
+
*/
|
|
20
|
+
export declare function llamadaDeBusqueda(termino: string, glob?: string): string;
|
|
21
|
+
/** Límites defensivos: la regex es una ayuda de localización, no un lector masivo. */
|
|
22
|
+
export declare const LIMITES_REGEX: {
|
|
23
|
+
readonly archivos: 50;
|
|
24
|
+
readonly bytesPorArchivo: number;
|
|
25
|
+
readonly coincidencias: 100;
|
|
26
|
+
readonly caracteresPorLinea: 1000;
|
|
27
|
+
};
|
|
28
|
+
type BackendDeBusqueda = Pick<FilesystemBackend, "glob" | "readRaw">;
|
|
29
|
+
/**
|
|
30
|
+
* Búsqueda regex confinada al backend virtual del proyecto.
|
|
31
|
+
*
|
|
32
|
+
* DeepAgents ofrece `grep` literal, que es preferible para la mayoría de
|
|
33
|
+
* búsquedas y usa ripgrep. Esta tool cubre patrones estructurales de XOne/ES5
|
|
34
|
+
* (funciones, atributos y eventos) sin conceder `execute` ni usar una shell.
|
|
35
|
+
* La coincidencia es por línea, como grep: no sirve para regex multilínea.
|
|
36
|
+
*/
|
|
37
|
+
export declare function crearBusquedaRegex(backend: BackendDeBusqueda): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
38
|
+
pattern: z.ZodString;
|
|
39
|
+
path: z.ZodDefault<z.ZodString>;
|
|
40
|
+
glob: z.ZodDefault<z.ZodString>;
|
|
41
|
+
flags: z.ZodDefault<z.ZodString>;
|
|
42
|
+
max_count: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
43
|
+
}, z.core.$strip>, {
|
|
44
|
+
pattern: string;
|
|
45
|
+
path: string;
|
|
46
|
+
glob: string;
|
|
47
|
+
flags: string;
|
|
48
|
+
max_count: number;
|
|
49
|
+
}, {
|
|
50
|
+
pattern: string;
|
|
51
|
+
path?: string | undefined;
|
|
52
|
+
glob?: string | undefined;
|
|
53
|
+
flags?: string | undefined;
|
|
54
|
+
max_count?: unknown;
|
|
55
|
+
}, string, unknown, "regex_search">;
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Tabla8Bits } from "../../core/codificacion.js";
|
|
2
|
+
export declare function conCodificacionDelFichero<T extends object>(backend: T): T;
|
|
3
|
+
/**
|
|
4
|
+
* Lo que el agente lee cuando su texto no cabe. Le dice qué hacer en lugar de solo «no»: en un XML
|
|
5
|
+
* la entidad numérica es el mismo carácter para XOne; en JavaScript, el escape `\u`; en CSS, `\XX `.
|
|
6
|
+
*/
|
|
7
|
+
export declare function motivoDeNoRepresentable(ruta: string, caracter: string, linea: number, tabla?: Tabla8Bits): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ImagenReferida } from "../../core/referenciasDeImagen.js";
|
|
3
|
+
export declare const NOMBRE_COMPARAR_CAPTURAS = "comparar_capturas";
|
|
4
|
+
export interface DependenciasDeComparacion {
|
|
5
|
+
/** Los bytes de un artefacto, por su ruta RELATIVA. Quien la monta sabe dónde está la carpeta. */
|
|
6
|
+
leerArtefacto: (nombre: string) => Promise<Buffer>;
|
|
7
|
+
/**
|
|
8
|
+
* Lee una MAQUETA de donde esté (`core/referenciasDeImagen.ts`). Ausente, la referencia solo puede
|
|
9
|
+
* venir de `/artefactos/`, que es lo que hacía antes y lo que sigue haciendo el motor legacy.
|
|
10
|
+
*/
|
|
11
|
+
leerReferencia?: (imagen: ImagenReferida) => Promise<Buffer>;
|
|
12
|
+
}
|
|
13
|
+
export declare function crearCompararCapturas(deps: DependenciasDeComparacion): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
14
|
+
referencia: z.ZodString;
|
|
15
|
+
captura: z.ZodString;
|
|
16
|
+
}, z.core.$strip>, {
|
|
17
|
+
referencia: string;
|
|
18
|
+
captura: string;
|
|
19
|
+
}, {
|
|
20
|
+
referencia: string;
|
|
21
|
+
captura: string;
|
|
22
|
+
}, string, unknown, "comparar_capturas">;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type QuienDecidePermisos } from "./perfiles.js";
|
|
3
|
+
/**
|
|
4
|
+
* Traer un artefacto AL proyecto, que es la única forma sancionada de cruzar ese muro.
|
|
5
|
+
*
|
|
6
|
+
* ## Por qué es una tool y no algo que el agente pueda hacer solo
|
|
7
|
+
*
|
|
8
|
+
* Las tools de fichero son de TEXTO —`write_file` recibe una cadena, y el propio backend
|
|
9
|
+
* declara `write(filePath, content: string)`—, así que un PNG no sobrevive a un
|
|
10
|
+
* `read_file` + `write_file`: se copiaría corrupto y nadie se enteraría hasta abrir el
|
|
11
|
+
* manual. La otra vía sería una shell, y dársela al que documenta es justo lo contrario de
|
|
12
|
+
* lo que lo hace inofensivo. Es el mismo reparto que el PDF: lo hace el harness porque el
|
|
13
|
+
* agente no puede, y concederle la capacidad habría sido peor que el problema.
|
|
14
|
+
*
|
|
15
|
+
* ## Por qué esto NO es un agujero en la guarda de artefactos
|
|
16
|
+
*
|
|
17
|
+
* `artefactoFueraDeSitio` existe para que un artefacto no acabe dentro del proyecto, y esa
|
|
18
|
+
* regla se hizo cuando colarse dentro era SIEMPRE un descuido. Documentar es el primer caso
|
|
19
|
+
* donde meterlo dentro es lo correcto: un manual en `doc/` con sus capturas al lado viaja
|
|
20
|
+
* con el proyecto, entra en git y sube a CloudStudio, que es lo que lo hace un manual y no
|
|
21
|
+
* una salida de usar y tirar.
|
|
22
|
+
*
|
|
23
|
+
* La diferencia entre un agujero y una puerta es que la puerta tiene guarda, y aquí son
|
|
24
|
+
* tres, todas reaplicadas A MANO: **una tool propia no pasa por el middleware de permisos**
|
|
25
|
+
* —ya lo hacen `regex_search` y `xone_navegacion` con `puedeLeerRuta`, y una que ESCRIBE
|
|
26
|
+
* tiene el mismo deber con más consecuencias—. Sin `puedeEscribirRuta`, esto sería
|
|
27
|
+
* exactamente la puerta trasera por la que un agente de solo lectura mete ficheros en el
|
|
28
|
+
* proyecto.
|
|
29
|
+
*
|
|
30
|
+
* ## Las guardas, y por qué cada una
|
|
31
|
+
*
|
|
32
|
+
* 1. **El ORIGEN es un artefacto de verdad** (`esRutaDeArtefacto`, lista BLANCA de forma y
|
|
33
|
+
* no un `startsWith`): sin esto el «origen» podría ser `/artefactos/../.env`.
|
|
34
|
+
* 2. **El DESTINO lo puede escribir ESTE agente** (`puedeEscribirRuta`), que es lo que hace
|
|
35
|
+
* que la tool no conceda nada que el perfil no tuviera ya.
|
|
36
|
+
* 3. **El destino no es un sitio equivocado de artefacto** (`artefactoFueraDeSitio`): copiar
|
|
37
|
+
* a `/artifacts/x.png` sería recrear dentro del proyecto justo lo que esa guarda impide.
|
|
38
|
+
*
|
|
39
|
+
* Y las dos rutas se comprueban **dos veces**, por TEXTO y por `realpath`, como en
|
|
40
|
+
* `arbolDeProyecto.ts` y en las escrituras de los motores externos: en APFS `.ENV` abre
|
|
41
|
+
* `.env`, y un enlace dentro de la raíz puede apuntar fuera. Lo que no se pueda comprobar
|
|
42
|
+
* se deniega.
|
|
43
|
+
*/
|
|
44
|
+
export declare const NOMBRE_COPIAR_ARTEFACTO = "copiar_artefacto";
|
|
45
|
+
export interface DondeCopiar {
|
|
46
|
+
/** La raíz REAL del proyecto en disco. */
|
|
47
|
+
raiz: string;
|
|
48
|
+
/** La carpeta REAL de artefactos de esta sesión. */
|
|
49
|
+
carpetaDeArtefactos: string;
|
|
50
|
+
/** De quién son los permisos que hay que reaplicar. */
|
|
51
|
+
perfil: QuienDecidePermisos;
|
|
52
|
+
}
|
|
53
|
+
export declare function crearCopiarArtefacto(donde: DondeCopiar): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
54
|
+
artefacto: z.ZodString;
|
|
55
|
+
destino: z.ZodString;
|
|
56
|
+
}, z.core.$strip>, {
|
|
57
|
+
artefacto: string;
|
|
58
|
+
destino: string;
|
|
59
|
+
}, {
|
|
60
|
+
artefacto: string;
|
|
61
|
+
destino: string;
|
|
62
|
+
}, string, unknown, "copiar_artefacto">;
|
|
63
|
+
/** Para los tests: la ruta real que le tocaría a un destino virtual. */
|
|
64
|
+
export declare function rutaRealDeDestino(raiz: string, destinoVirtual: string): string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ImagenReferida } from "../../core/referenciasDeImagen.js";
|
|
3
|
+
import { type MaquetaMedida } from "../../core/geometriaDePantalla.js";
|
|
4
|
+
import { type PantallaDescrita } from "../../core/descripcionDePantalla.js";
|
|
5
|
+
import type { ImagenRgba } from "../../core/compararCapturas.js";
|
|
6
|
+
import { type CapturaDePantalla, type InvocarVisual } from "../dispositivos/juezVisual.js";
|
|
7
|
+
export interface DependenciasDeCritica {
|
|
8
|
+
/** Los bytes de un artefacto, por su NOMBRE. Quien la monta sabe dónde está la carpeta. */
|
|
9
|
+
leerArtefacto: (nombre: string) => Promise<Buffer>;
|
|
10
|
+
invocar: InvocarVisual;
|
|
11
|
+
/**
|
|
12
|
+
* Lee la MAQUETA de donde esté: `/artefactos/`, `/adjuntos/` o el proyecto
|
|
13
|
+
* (`core/referenciasDeImagen.ts`). Ausente, la referencia solo puede venir de `/artefactos/`, como
|
|
14
|
+
* antes. La maqueta de un encargo casi nunca está ahí: la trae la persona en el chat o vive en
|
|
15
|
+
* `/diseno/`, y sin esto el crítico corría a ciegas y su verde significaba solo «nada roto».
|
|
16
|
+
*/
|
|
17
|
+
leerReferencia?: (imagen: ImagenReferida) => Promise<Buffer>;
|
|
18
|
+
/**
|
|
19
|
+
* La GEOMETRÍA guardada con la captura (`<captura>.geometria.json`, que deja `xone-captura-android`
|
|
20
|
+
* o `xone-hotswap shot` en `/hotswap/` en el MISMO momento): el árbol de controles y las barras del
|
|
21
|
+
* sistema. `undefined` = no hay. Ausente la dependencia, el crítico trabaja como antes.
|
|
22
|
+
*/
|
|
23
|
+
leerGeometria?: (nombreDeCaptura: string) => Promise<unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* Las cajas de la maqueta, si trae `code.html` al lado (la de Stitch): `undefined` = no hay HTML (una
|
|
26
|
+
* maqueta que es solo un PNG); `{motivo}` = lo hay y no se pudo medir.
|
|
27
|
+
*/
|
|
28
|
+
cajasDeMaqueta?: (imagen: ImagenReferida, bytes: Buffer) => Promise<MaquetaMedida | {
|
|
29
|
+
motivo: string;
|
|
30
|
+
} | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Una pantalla DESCRITA por el modelo mirándola SOLA, primero su geometría y después el estilo de cada control,
|
|
33
|
+
* con el MISMO esquema para la maqueta y para la captura (`core/descripcionDePantalla.ts`,
|
|
34
|
+
* `juezVisual.ts#describirPantalla`). A la captura se le pasan los controles que existen, del árbol.
|
|
35
|
+
* `undefined` = no se entendió. Ausente la dependencia, el crítico trabaja como antes.
|
|
36
|
+
*/
|
|
37
|
+
describirPantalla?: (imagen: CapturaDePantalla, controlesQueExisten?: readonly string[]) => Promise<PantallaDescrita | undefined>;
|
|
38
|
+
/**
|
|
39
|
+
* Saca los píxeles de un PNG o un JPEG (`decodificarImagen`). Con ella, el estilo de cada control se MIDE en su
|
|
40
|
+
* caja (`core/estiloMedido.ts`) en vez de pedírselo a un modelo. Ausente, no hay comparación control a control.
|
|
41
|
+
*/
|
|
42
|
+
decodificar?: (bytes: Buffer) => ImagenRgba;
|
|
43
|
+
/** Guarda el informe junto a la captura (`<captura>.critica.txt` en `/hotswap/`), para poder auditar qué se dijo. */
|
|
44
|
+
guardarInforme?: (nombreDeCaptura: string, informe: string) => Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
/** La tabla de traducción de Tailwind a XOne de la skill, por su ruta virtual. */
|
|
47
|
+
export declare const TABLA_DE_TRADUCCION = "`read_file /skills/xone-development/references/css/de-una-maqueta-a-xone.md`";
|
|
48
|
+
export declare function crearCriticaVisual(deps: DependenciasDeCritica): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
49
|
+
captura: z.ZodString;
|
|
50
|
+
pantalla: z.ZodString;
|
|
51
|
+
referencia: z.ZodOptional<z.ZodString>;
|
|
52
|
+
}, z.core.$strip>, {
|
|
53
|
+
captura: string;
|
|
54
|
+
pantalla: string;
|
|
55
|
+
referencia?: string | undefined;
|
|
56
|
+
}, {
|
|
57
|
+
captura: string;
|
|
58
|
+
pantalla: string;
|
|
59
|
+
referencia?: string | undefined;
|
|
60
|
+
}, string, unknown, "xone_critica_visual">;
|