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,60 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type Artefacto } from "../../core/artefactos.js";
|
|
3
|
+
/**
|
|
4
|
+
* Traer al área de trabajo un fichero que la PERSONA ha nombrado por su ruta.
|
|
5
|
+
*
|
|
6
|
+
* ## El caso, medido
|
|
7
|
+
*
|
|
8
|
+
* «Usa el diseño de `/Users/…/Downloads/stitch_calculadora.zip`». Esa ruta no es del proyecto,
|
|
9
|
+
* y las tools de fichero van confinadas a su raíz, así que el agente no podía abrirla: la
|
|
10
|
+
* resolvía DENTRO del proyecto, recibía un ENOENT que decía «no existe» sobre un fichero que
|
|
11
|
+
* sí existe, concluía que estaba enjaulado y se iba a delegar en el único especialista con
|
|
12
|
+
* shell para que lo copiara. Dieciocho pasos y un `unzip` para un fichero que le acababan de
|
|
13
|
+
* nombrar.
|
|
14
|
+
*
|
|
15
|
+
* ## Por qué COPIAR y no montar el disco
|
|
16
|
+
*
|
|
17
|
+
* La primera versión montaba la máquina entera bajo `/disco/`, de solo lectura. **Rompió un
|
|
18
|
+
* turno de producción**: con `/` dentro del `CompositeBackend`, toda operación recursiva sin
|
|
19
|
+
* ruta lo recorre — un `grep` sobre el PROYECTO tardaba 30 segundos y moría con
|
|
20
|
+
* `EPERM … scandir '/Volumes/com.apple.TimeMachine.localsnapshots'`.
|
|
21
|
+
*
|
|
22
|
+
* Y al mirarlo se vio que montar era más de lo que hacía falta. Lo que se necesita no es
|
|
23
|
+
* navegar el disco: es **traerse un fichero concreto**. Copiar tiene tres ventajas que el
|
|
24
|
+
* montaje no puede dar: no hay nada recursivo que se descontrole, lo traído queda en el área
|
|
25
|
+
* de trabajo —donde se ANUNCIA y se puede volver a leer—, y un BINARIO sobrevive: un `.zip` o
|
|
26
|
+
* un `.png` no aguantan un `read_file` + `write_file`, que son de TEXTO. Es el mismo reparto
|
|
27
|
+
* que `copiar_artefacto` y que el PDF: lo hace el harness porque el agente no puede.
|
|
28
|
+
*
|
|
29
|
+
* ## Las guardas
|
|
30
|
+
*
|
|
31
|
+
* 1. **Lo que se acepta es una lista BLANCA de forma** (`core/traerDeLaMaquina.ts`): una ruta
|
|
32
|
+
* absoluta de verdad, y nada del propio harness —`auth.json` guarda las claves en claro y
|
|
33
|
+
* cualquier `.xonecode/` lleva la conversación entera—.
|
|
34
|
+
* 2. **El DESTINO no se recibe**: lo deriva el código dentro de la carpeta de artefactos. Con
|
|
35
|
+
* un destino por parámetro esto sería una forma de escribir donde se quisiera.
|
|
36
|
+
* 3. **Tope de tamaño**, porque el área de trabajo no es un almacén y un fichero enorme se
|
|
37
|
+
* copia igual de callado que uno pequeño.
|
|
38
|
+
* 4. Y la ruta se comprueba **dos veces**, por TEXTO y por `realpath`, como en
|
|
39
|
+
* `arbolDeProyecto.ts`: un enlace puede apuntar a otro sitio.
|
|
40
|
+
*/
|
|
41
|
+
export declare const NOMBRE_TRAER = "traer_de_la_maquina";
|
|
42
|
+
export interface DependenciasDeTraida {
|
|
43
|
+
/** La carpeta de artefactos de la sesión. Sin ella no hay dónde dejarlo. */
|
|
44
|
+
carpeta?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Para ANUNCIARLO, con el mismo evento que una escritura de artefacto.
|
|
47
|
+
*
|
|
48
|
+
* No es cosmético: lo traído cae en una carpeta que se escribe SIN aprobación, y la regla de
|
|
49
|
+
* este repo es que lo que nadie aprueba no puede ser además mudo. Sin esto, el fichero
|
|
50
|
+
* existiría en el disco y no existiría para nadie.
|
|
51
|
+
*/
|
|
52
|
+
alEscribir?: (a: Artefacto) => void;
|
|
53
|
+
}
|
|
54
|
+
export declare function crearTraerDeLaMaquina(deps: DependenciasDeTraida): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
55
|
+
ruta: z.ZodString;
|
|
56
|
+
}, z.core.$strip>, {
|
|
57
|
+
ruta: string;
|
|
58
|
+
}, {
|
|
59
|
+
ruta: string;
|
|
60
|
+
}, string, unknown, "traer_de_la_maquina">;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type QuienDecidePermisos } from "./perfiles.js";
|
|
3
|
+
export declare const NOMBRE_UNIR_SECCIONES = "unir_secciones";
|
|
4
|
+
/** Topes: una carpeta con cientos de secciones o megas de texto no es un documento, es un error. */
|
|
5
|
+
export declare const TOPE_DE_SECCIONES = 300;
|
|
6
|
+
export declare const TOPE_DE_CARACTERES = 5000000;
|
|
7
|
+
/** El documento que sale de una carpeta de secciones: la carpeta sin su barra final, más `.md`. */
|
|
8
|
+
export declare function documentoDeCarpeta(carpeta: string): string;
|
|
9
|
+
/** Los números de orden que llevan DOS o más secciones, con cuáles: `06 (06-a.md, 06-b.md)`. */
|
|
10
|
+
export declare function numerosRepetidos(nombres: readonly string[]): string[];
|
|
11
|
+
export declare function crearUnirSecciones(donde: {
|
|
12
|
+
raiz: string;
|
|
13
|
+
perfil: QuienDecidePermisos;
|
|
14
|
+
}): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
15
|
+
carpeta: z.ZodString;
|
|
16
|
+
}, z.core.$strip>, {
|
|
17
|
+
carpeta: string;
|
|
18
|
+
}, {
|
|
19
|
+
carpeta: string;
|
|
20
|
+
}, string, unknown, "unir_secciones">;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HallazgoDeEscritura } from "../../core/validacionDeEscritura.js";
|
|
2
|
+
/** Lo que esta guarda necesita saber hacer. Entra por parámetro: `npm test` no abre ficheros. */
|
|
3
|
+
export type ValidarContenido = (ruta: string, contenido: string) => Promise<HallazgoDeEscritura[] | undefined>;
|
|
4
|
+
/**
|
|
5
|
+
* El validador de PRODUCCIÓN, sobre `xone-linter`.
|
|
6
|
+
*
|
|
7
|
+
* **Devuelve `undefined` cuando no se pudo mirar**, que no es lo mismo que «no hay hallazgos» y
|
|
8
|
+
* por eso no es una lista vacía. Quien lo lea tiene que poder distinguir «esto está limpio» de
|
|
9
|
+
* «no sé»: lo primero deja escribir porque se comprobó, lo segundo deja escribir porque un fallo
|
|
10
|
+
* del ENTORNO no puede convertirse en un veredicto sobre el trabajo del agente. Es la misma
|
|
11
|
+
* frontera que `ErrorDelSimulador` frente a un informe en rojo.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validarConXoneLinter(): ValidarContenido;
|
|
14
|
+
/**
|
|
15
|
+
* Lo que un `edit` va a dejar en el fichero, o `undefined` si no se puede saber.
|
|
16
|
+
*
|
|
17
|
+
* **Se calcula aquí en vez de dejar escribir y mirar después**, porque mirar después obliga a
|
|
18
|
+
* deshacer, y deshacer es escribir dos veces en el proyecto del usuario — con la ventana en la
|
|
19
|
+
* que el fichero malo existe si el proceso se muere en medio.
|
|
20
|
+
*
|
|
21
|
+
* Y **cuando el reemplazo no es exacto se devuelve `undefined` y NO se juzga**: si `oldString`
|
|
22
|
+
* no aparece, o aparece varias veces sin `replaceAll`, deepagents va a rechazar el edit él
|
|
23
|
+
* mismo. Adivinar ahí sería validar un contenido que nunca va a existir.
|
|
24
|
+
*/
|
|
25
|
+
export declare function contenidoTrasEditar(actual: string, oldString: string, newString: string, replaceAll: boolean): string | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Envuelve el backend para que un `write` o un `edit` que INTRODUZCA un problema no llegue a
|
|
28
|
+
* disco.
|
|
29
|
+
*
|
|
30
|
+
* Cuarta guarda del mismo Proxy que `sinVistasAplanadas`, `sinArtefactosEnElProyecto` y
|
|
31
|
+
* `sinDescargasEnElProyecto`, con su misma forma: **se DEVUELVE `{error}`, nunca se lanza**.
|
|
32
|
+
* deepagents devuelve ese error al modelo como resultado de la tool y puede reintentar; una
|
|
33
|
+
* excepción se lleva el turno por delante y el agente no reintenta.
|
|
34
|
+
*/
|
|
35
|
+
export declare function sinContenidoInvalido<T extends object>(backend: T, validar: ValidarContenido): T;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { FilesystemBackend } from "deepagents";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
/**
|
|
4
|
+
* `validar_fichero_xone`: ¿está bien este `.xne`, `.xml` (el `app.xml`), `.css` o `.js`? Una respuesta
|
|
5
|
+
* exacta en vez de leer el fichero a ojo. Cada extensión con su comprobador puro de `core/`:
|
|
6
|
+
* `comprobarXml` (bien formado), `comprobarCss` (estructura de la hoja, con la gramática de XOne) y
|
|
7
|
+
* `comprobarJs` (lo que lee Rhino, el motor de Android: `acorn` a ES2015 más la rodaja medida que le
|
|
8
|
+
* falta).
|
|
9
|
+
*
|
|
10
|
+
* Existe por un turno real (soporte de APPSalud): la persona pegó un error del parser de Studio
|
|
11
|
+
* («'name' is an unexpected token…, Line 381») y el agente, sin forma de comprobarlo, se pasó
|
|
12
|
+
* minutos releyendo un fichero que estaba BIEN —lo dijo a los dos minutos y no se lo creyó—.
|
|
13
|
+
*
|
|
14
|
+
* - **Sin llamar a nadie**: el comprobador es puro (`core/xmlBienFormado.ts`), ni simulador ni
|
|
15
|
+
* linter ni red.
|
|
16
|
+
* - **Lee por el backend** (`readRaw`), así que hereda la codificación del fichero, las vistas
|
|
17
|
+
* aplanadas y el resto de guardas; y **reaplica `puedeLeerRuta` a mano**, porque una tool de
|
|
18
|
+
* LangChain añadida por xonecode no pasa por el middleware de permisos.
|
|
19
|
+
* - **Solo lectura**: no corrige nada. Y su descripción dice qué significa un «bien formado»
|
|
20
|
+
* frente a un error que alguien ha visto: que ese error viene de OTRA copia del fichero.
|
|
21
|
+
*/
|
|
22
|
+
export declare const NOMBRE_VALIDAR_FICHERO_XONE = "validar_fichero_xone";
|
|
23
|
+
/** Cuántos ficheros como mucho en una pasada sobre una carpeta. */
|
|
24
|
+
export declare const TOPE_DE_FICHEROS_A_VALIDAR = 300;
|
|
25
|
+
type BackendDeValidacion = Pick<FilesystemBackend, "glob" | "readRaw">;
|
|
26
|
+
export declare function crearValidarFicheroXone(backend: BackendDeValidacion): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
27
|
+
path: z.ZodDefault<z.ZodString>;
|
|
28
|
+
}, z.core.$strip>, {
|
|
29
|
+
path: string;
|
|
30
|
+
}, {
|
|
31
|
+
path?: string | undefined;
|
|
32
|
+
}, string, unknown, "validar_fichero_xone">;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { type Agente } from "../../core/agentes.js";
|
|
2
|
+
import type { SubagenteExternoPort } from "../../core/ports.js";
|
|
3
|
+
import type { BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
|
|
4
|
+
import type { Artefacto } from "../../core/artefactos.js";
|
|
5
|
+
import { type QuienDecidePermisos } from "./perfiles.js";
|
|
6
|
+
import { type CargarIndice } from "../navegacion/indiceEnDisco.js";
|
|
7
|
+
import type { CargarEstilos } from "../navegacion/estilosEnDisco.js";
|
|
8
|
+
import type { DiagnosticoDeTools } from "../turno/diagnosticoDeTools.js";
|
|
9
|
+
import { type Calificador } from "../turno/rubrica.js";
|
|
10
|
+
import { type AlContarTokens, type TokenTracker } from "../../vendor/tokenTracking.js";
|
|
11
|
+
import type { IconosPort, SkillsPort, ModelosPort } from "../../core/ports.js";
|
|
12
|
+
export interface OpcionesDelAgente {
|
|
13
|
+
raiz: string;
|
|
14
|
+
/** Todas las rutas del proyecto, para saber cuáles son vistas aplanadas. */
|
|
15
|
+
ficheros: ReadonlySet<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Se avisa en cada llamada al modelo, DESPUÉS de que el tracker se actualice.
|
|
18
|
+
*
|
|
19
|
+
* No lleva el uso dentro a propósito: quien escucha tiene el tracker —es él quien lo
|
|
20
|
+
* pasó— y dos fuentes para el mismo número son dos números que divergen.
|
|
21
|
+
*/
|
|
22
|
+
alContarTokens?: () => void;
|
|
23
|
+
/**
|
|
24
|
+
* Los subagentes, ya leídos de disco (`agent/subagentes/agentesEnDisco.ts`). Entran por parámetro y
|
|
25
|
+
* no se leen aquí por la misma razón que todo lo demás: quien construye el agente no
|
|
26
|
+
* toca el disco, y así un test puede montar los que quiera sin escribir ficheros.
|
|
27
|
+
*
|
|
28
|
+
* Puede venir VACÍO, y entonces el orquestador se queda sin nadie a quien delegar. No se
|
|
29
|
+
* rellena con los de serie a espaldas de nadie: si el usuario borró los cuatro, la
|
|
30
|
+
* consola tiene que decírselo, no fingir que siguen ahí.
|
|
31
|
+
*/
|
|
32
|
+
agentes: readonly Agente[];
|
|
33
|
+
/**
|
|
34
|
+
* Quien lanza los agentes de otro producto (Claude Code). Puerto por lo de siempre:
|
|
35
|
+
* `npm test` no puede necesitar un binario instalado, y ni este fichero ni `turnoReal`
|
|
36
|
+
* pueden saber que Claude Code existe — la misma regla que con las tools de CloudStudio.
|
|
37
|
+
*/
|
|
38
|
+
subagenteExterno: SubagenteExternoPort;
|
|
39
|
+
modelos: ModelosPort;
|
|
40
|
+
skills: SkillsPort;
|
|
41
|
+
/**
|
|
42
|
+
* De dónde sale el índice de navegación XOne. Ausente = el real, leyendo el proyecto con
|
|
43
|
+
* `xone-linter`. Entra por aquí para que un test pueda doblarlo sin proyecto en disco.
|
|
44
|
+
*/
|
|
45
|
+
navegacion?: CargarIndice;
|
|
46
|
+
/** El resolvedor de estilos. Ausente, el de disco sobre `raiz`. Doblable como el índice. */
|
|
47
|
+
estilos?: CargarEstilos;
|
|
48
|
+
/**
|
|
49
|
+
* De dónde salen los iconos (IXCODE-18). Ausente = `buscar_icono` no se monta: una tool que
|
|
50
|
+
* siempre contestara «no hay red» sería un botón muerto en el prompt. Entra por parámetro porque
|
|
51
|
+
* toca la red (`core/ports.ts#IconosPort`).
|
|
52
|
+
*/
|
|
53
|
+
iconos?: IconosPort;
|
|
54
|
+
/**
|
|
55
|
+
* Quién juzga si lo hecho cumple la rúbrica del encargo, si es que hay rúbrica.
|
|
56
|
+
*
|
|
57
|
+
* Ausente = no se monta el bucle, y ese es el caso normal. El middleware además no hace nada
|
|
58
|
+
* sin rúbrica en el estado, así que hay dos puertas y las dos son datos: quien no lo use no
|
|
59
|
+
* paga ni una llamada. Entra por parámetro porque llama a un modelo, y el invariante de
|
|
60
|
+
* `npm test` es que nada de eso haga falta para probar el harness.
|
|
61
|
+
*/
|
|
62
|
+
calificador?: Calificador;
|
|
63
|
+
/** `BaseCheckpointSaver` y no `MemorySaver`: desde que hay uno persistente
|
|
64
|
+
* (`agent/sesiones/checkpointer.ts`) el tipo tiene que ser el de la interfaz, no el del doble. */
|
|
65
|
+
checkpointer?: BaseCheckpointSaver;
|
|
66
|
+
/** Opcional porque no siempre se viene a contar gasto; sin él la barra de estado enseña 0. */
|
|
67
|
+
tracker?: TokenTracker;
|
|
68
|
+
/** Registro local opt-in de llamadas y uso; nunca llega al modelo. */
|
|
69
|
+
diagnostico?: DiagnosticoDeTools;
|
|
70
|
+
/**
|
|
71
|
+
* Dónde caen los artefactos de la sesión (`/artefactos/` para el agente). Es una carpeta
|
|
72
|
+
* de `.xonecode/`, o sea FUERA del proyecto: ver `core/artefactos.ts`. Ausente = no se
|
|
73
|
+
* monta la carpeta, y entonces un `write_file` a `/artefactos/…` es un fichero más del
|
|
74
|
+
* proyecto — que es lo que pasaba antes de que esto existiera.
|
|
75
|
+
*/
|
|
76
|
+
artefactos?: {
|
|
77
|
+
carpeta: string;
|
|
78
|
+
alEscribir: (a: Artefacto) => void;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* La carpeta de los ADJUNTOS de una tarea (`/adjuntos/` para el agente), de solo lectura.
|
|
82
|
+
* Es de `~/.xonecode/tareas/<id>/`, o sea fuera del proyecto: ver `core/adjuntos.ts`.
|
|
83
|
+
*
|
|
84
|
+
* Ausente = no se monta, que es el caso de toda sesión de persona y de toda tarea sin
|
|
85
|
+
* adjuntos. Entonces esa ruta no es nada, y lo que evita que un `write_file` a
|
|
86
|
+
* `/adjuntos/x` acabe siendo un fichero del proyecto es la denegación incondicional de
|
|
87
|
+
* `permisosDe` (medido: sin ella lo era).
|
|
88
|
+
*/
|
|
89
|
+
adjuntos?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* El prompt del orquestador, GENERADO a partir de los subagentes que hay.
|
|
93
|
+
*
|
|
94
|
+
* Era una constante que nombraba a `docs`, `planner`, `dev` y `mockup` a pelo. Desde que los
|
|
95
|
+
* subagentes son ficheros que el usuario escribe y borra, eso se queda mintiendo el primer
|
|
96
|
+
* día: mandarle delegar en `mockup` cuando `mockup` no existe es la misma clase de botón
|
|
97
|
+
* muerto que este repo lleva semanas quitando de la interfaz.
|
|
98
|
+
*
|
|
99
|
+
* Lo que se conserva es lo GENERAL —no tienes tools, delega, encadena con handoff, no
|
|
100
|
+
* afirmes lo que no te han confirmado—, y lo específico sale de la propia lista. La línea
|
|
101
|
+
* del encadenado para diagramas solo se escribe si existen los dos agentes de los que
|
|
102
|
+
* habla: una instrucción sobre un especialista que no está no la puede seguir nadie.
|
|
103
|
+
*/
|
|
104
|
+
/**
|
|
105
|
+
* Quién es el orquestador a efectos de permisos: SOLO LECTURA.
|
|
106
|
+
*
|
|
107
|
+
* Es un `QuienDecidePermisos` y no un `Agente` porque el orquestador no es un especialista
|
|
108
|
+
* —no se puede dar de alta, ni borrar, ni editar desde Ajustes—, pero sus tools de fichero
|
|
109
|
+
* son las mismas y tienen que pasar por la misma función. Ver dónde se usa, en
|
|
110
|
+
* `construirAgente`, para el agujero que esto cierra.
|
|
111
|
+
*/
|
|
112
|
+
export declare const PERFIL_DEL_ORQUESTADOR: QuienDecidePermisos;
|
|
113
|
+
export declare function promptOrquestador(agentes: readonly Agente[]): string;
|
|
114
|
+
/**
|
|
115
|
+
* Indicaciones que el modelo recibe junto a las tools reales de fichero.
|
|
116
|
+
*
|
|
117
|
+
* No crean herramientas ni rebajan permisos: hacen explícito el destino correcto
|
|
118
|
+
* para que una skill no confunda su propia carpeta de instrucciones con la salida.
|
|
119
|
+
*/
|
|
120
|
+
/**
|
|
121
|
+
* **`read_file` NO está aquí, y es deliberado.**
|
|
122
|
+
*
|
|
123
|
+
* Una descripción propia REEMPLAZA la de la librería, no se suma a ella, así que la nuestra
|
|
124
|
+
* —que solo hablaba de coste— borraba tres cosas que deepagents ya dice y que no son nuestras
|
|
125
|
+
* de decir: que la salida lleva una cabecera de formato **que no hay que reinyectar al
|
|
126
|
+
* editar** (eso es CORRECCIÓN, no ahorro), que conviene pedir varias lecturas en una misma
|
|
127
|
+
* respuesta, y que un resultado grande se descarga a `/large_tool_results/` y se pagina desde
|
|
128
|
+
* ahí. Medido al comparar dos parches suyos: entre `1.13.2` y `1.13.5` ese formato CAMBIÓ
|
|
129
|
+
* —de prefijos de número de línea a una cabecera `@@ … @@`— y con él la advertencia. Una copia
|
|
130
|
+
* nuestra habría quedado describiendo un formato que ya no existe, sin un error que leer.
|
|
131
|
+
*
|
|
132
|
+
* La regla: lo que describe la TOOL es de la librería y se actualiza con ella; lo que decimos
|
|
133
|
+
* nosotros es cómo QUEREMOS usarla, y eso vive en el prompt del especialista
|
|
134
|
+
* (`core/agentes.ts#promptDeAgente`), donde no compite con nada.
|
|
135
|
+
*/
|
|
136
|
+
export declare const DESCRIPCIONES_FICHEROS: {
|
|
137
|
+
write_file: string;
|
|
138
|
+
edit_file: string;
|
|
139
|
+
grep: string;
|
|
140
|
+
};
|
|
141
|
+
export { OPCIONES_BUSQUEDA_FICHEROS } from "./opcionesDeFicheros.js";
|
|
142
|
+
export declare function construirAgente(opciones: OpcionesDelAgente): Promise<unknown>;
|
|
143
|
+
/**
|
|
144
|
+
* Rutas virtuales que SkillsMiddleware carga de forma progresiva para un agente.
|
|
145
|
+
*
|
|
146
|
+
* Recibe el AGENTE y no su nombre: antes buscaba el perfil en `PERFILES`, y con subagentes
|
|
147
|
+
* escritos por el usuario ese `Record` no tiene su entrada — `perfil.skills` habría
|
|
148
|
+
* reventado con «cannot read properties of undefined» en cuanto alguien creara el primero.
|
|
149
|
+
*
|
|
150
|
+
* Solo las que EXISTEN. Una ruta a una skill que no está haría que el middleware fallara al
|
|
151
|
+
* montarla; que falte se dice en el prompt (`promptDeAgente`), que es donde se puede leer.
|
|
152
|
+
*/
|
|
153
|
+
export declare function rutasDeSkills(agente: Agente, disponibles: ReadonlySet<string>): string[];
|
|
154
|
+
/**
|
|
155
|
+
* Lo que se hace cada vez que el tracker cuenta: avisar a los DOS que lo esperan.
|
|
156
|
+
*
|
|
157
|
+
* **Extraída y exportada porque uno de los dos se cayó**, y en verde: el callback nació
|
|
158
|
+
* llamando solo al diagnóstico, así que el aviso de consumo tenía un único disparador —el
|
|
159
|
+
* de un agente EXTERNO— y una sesión normal subía sus tokens en silencio. Medido en la
|
|
160
|
+
* pantalla del usuario: el contador de la web no apareció nunca. Con la composición dentro
|
|
161
|
+
* de `construirAgente`, que todos sus tests doblan, no había dónde cazarlo.
|
|
162
|
+
*
|
|
163
|
+
* `alContarTokens` no lleva el uso dentro a propósito: quien escucha tiene el tracker —es
|
|
164
|
+
* él quien lo pasó— y dos fuentes para el mismo número son dos números que divergen.
|
|
165
|
+
*/
|
|
166
|
+
export declare function alContarDelTracker(origen: string, diagnostico?: DiagnosticoDeTools, alContarTokens?: () => void): AlContarTokens;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los motores locales en la máquina: medir si están y con qué sesión, PROBARLOS con un encargo de
|
|
3
|
+
* verdad, e iniciar la sesión de Claude Code desde un botón. Las reglas puras están en
|
|
4
|
+
* `core/motoresLocales.ts`; aquí solo hay procesos.
|
|
5
|
+
*
|
|
6
|
+
* Tres decisiones que no se ven en el código:
|
|
7
|
+
*
|
|
8
|
+
* - **Se mide el binario que el SDK LANZA**, el de su paquete de plataforma, y no el `claude` del
|
|
9
|
+
* PATH: pueden ser versiones distintas (medido: 2.1.263 frente a 2.1.287), y medir el otro
|
|
10
|
+
* diría algo de un programa que los subagentes no corren. Sin respaldo al PATH, a propósito.
|
|
11
|
+
* - **La prueba sale por el MISMO puerto que un encargo real** (`crearSubagenteExterno().correr`),
|
|
12
|
+
* no por un `query()` montado aquí: una prueba con sus propias opciones mediría otra cosa —el
|
|
13
|
+
* patrón de fallo de siempre, una composición que solo existe donde nadie la usa—.
|
|
14
|
+
* - **`auth login` funciona sin TTY** (medido con el binario del SDK y un `CLAUDE_CONFIG_DIR`
|
|
15
|
+
* aislado): abre el navegador él solo, imprime un enlace de respaldo y espera «Paste code here
|
|
16
|
+
* if prompted». Así que el botón lanza el proceso y, si la web enseña un código, se le pasa
|
|
17
|
+
* por `stdin`. **El enlace no cruza el cable** (la regla de los conectores): si el navegador
|
|
18
|
+
* no se abrió, lo vuelve a abrir el SERVIDOR. Límite declarado: por un túnel no sirve.
|
|
19
|
+
*/
|
|
20
|
+
import { type ChildProcess } from "node:child_process";
|
|
21
|
+
import { type CaminoDePrueba, type EstadoDeMotorLocal } from "../../core/motoresLocales.js";
|
|
22
|
+
import type { MotorExterno } from "../../core/ports.js";
|
|
23
|
+
/** `--version` y `auth status`: si tardan más, el binario no está bien. */
|
|
24
|
+
export declare const TOPE_DE_MEDIDA_MS = 15000;
|
|
25
|
+
/** Un primer arranque de Claude Code en frío tarda; dos minutos es «no contesta». */
|
|
26
|
+
export declare const TOPE_DE_PRUEBA_MS = 120000;
|
|
27
|
+
/** Lo que se espera a que la persona termine en el navegador. */
|
|
28
|
+
export declare const TOPE_DE_LOGIN_MS: number;
|
|
29
|
+
type Entorno = Readonly<Record<string, string | undefined>>;
|
|
30
|
+
export interface Salida {
|
|
31
|
+
stdout: string;
|
|
32
|
+
stderr: string;
|
|
33
|
+
}
|
|
34
|
+
/** El proceso del login, con lo justo para doblarlo en un test. */
|
|
35
|
+
export type ProcesoDeLogin = Pick<ChildProcess, "stdout" | "stderr" | "stdin" | "on" | "kill">;
|
|
36
|
+
export interface DependenciasDeMotoresLocales {
|
|
37
|
+
/** Se llama tras cada cambio de la foto: quien lo monta emite el mensaje. */
|
|
38
|
+
alCambiar: () => void;
|
|
39
|
+
plataforma?: string;
|
|
40
|
+
entorno?: Entorno;
|
|
41
|
+
ahora?: () => Date;
|
|
42
|
+
binarioDeClaude?: () => string | undefined;
|
|
43
|
+
/** Un proceso corto. Rechaza con un código distinto de 0, como `execFile`. */
|
|
44
|
+
ejecutar?: (binario: string, args: readonly string[], opciones: {
|
|
45
|
+
timeout: number;
|
|
46
|
+
entorno: Entorno;
|
|
47
|
+
}) => Promise<Salida>;
|
|
48
|
+
lanzar?: (binario: string, args: readonly string[], opciones: {
|
|
49
|
+
entorno: Entorno;
|
|
50
|
+
}) => ProcesoDeLogin;
|
|
51
|
+
/** Un encargo de prueba al motor. Devuelve la respuesta; lanza si no la hay. */
|
|
52
|
+
probar?: (peticion: {
|
|
53
|
+
motor: MotorExterno;
|
|
54
|
+
camino: CaminoDePrueba;
|
|
55
|
+
entornoLimpio: Record<string, string>;
|
|
56
|
+
senal: AbortSignal;
|
|
57
|
+
}) => Promise<string>;
|
|
58
|
+
abrir?: (url: string) => void;
|
|
59
|
+
/** Abre una terminal del sistema con el comando. `false` si en este sistema no se sabe. */
|
|
60
|
+
abrirTerminal?: (binario: string, args: readonly string[], entorno: Entorno) => boolean;
|
|
61
|
+
/** El modelo elegido para un motor de `MOTORES_CON_MODELO`, leído en cada medida. */
|
|
62
|
+
leerModelo?: (motor: MotorExterno) => string | undefined;
|
|
63
|
+
/** Y guardarlo; `undefined` lo quita. Lanza si no se pudo escribir. */
|
|
64
|
+
guardarModelo?: (motor: MotorExterno, modelo: string | undefined) => void;
|
|
65
|
+
}
|
|
66
|
+
export interface ServicioDeMotoresLocales {
|
|
67
|
+
/** La última foto. Ausente hasta la primera medida. */
|
|
68
|
+
foto(): EstadoDeMotorLocal[] | undefined;
|
|
69
|
+
medir(): Promise<void>;
|
|
70
|
+
probar(motor: MotorExterno): Promise<void>;
|
|
71
|
+
/** `false` si no se puede (otro login en curso, o el motor no lo admite). */
|
|
72
|
+
iniciarSesion(motor: MotorExterno, modo: "claudeai" | "console"): boolean;
|
|
73
|
+
enviarCodigo(motor: MotorExterno, codigo: string): boolean;
|
|
74
|
+
cancelarSesion(motor: MotorExterno): boolean;
|
|
75
|
+
abrirNavegador(motor: MotorExterno): boolean;
|
|
76
|
+
abrirConsola(motor: MotorExterno): boolean;
|
|
77
|
+
/** `false` si el motor no admite modelo, el nombre no vale o no se pudo guardar. */
|
|
78
|
+
elegirModelo(motor: MotorExterno, modelo: string | undefined): boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* El `claude` del paquete de plataforma del SDK, con la MISMA regla con que lo busca el SDK
|
|
82
|
+
* (`sdk.mjs`): `@anthropic-ai/claude-agent-sdk-<plataforma>-<arquitectura>/claude[.exe]`, y en
|
|
83
|
+
* Linux las dos variantes de libc. Resuelto por el cargador de módulos, nunca contando `..`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function binarioDeClaudeDelSdk(plataforma?: string, arquitectura?: string, resolver?: (id: string) => string): string | undefined;
|
|
86
|
+
export declare function crearServicioDeMotoresLocales(deps: DependenciasDeMotoresLocales): ServicioDeMotoresLocales;
|
|
87
|
+
export {};
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import type { Agente } from "../../../core/agentes.js";
|
|
2
|
+
import type { DispositivoDeLaSesion } from "../../../core/dispositivoDeSesion.js";
|
|
3
|
+
import { permisosDe } from "../../grafo/perfiles.js";
|
|
4
|
+
import { type BackendDeFicheros, type ToolDeFichero } from "./toolsDeFichero.js";
|
|
5
|
+
import { type ToolDeLangchain } from "./toolsPropias.js";
|
|
6
|
+
import type { ClaseDeTool, ConectoresDeSesion } from "./toolsDeConectores.js";
|
|
7
|
+
import { type EscritorDeDesalojo } from "./recortes.js";
|
|
8
|
+
import { type Nota } from "./notas.js";
|
|
9
|
+
import type { ControlDeDetencion } from "./detencion.js";
|
|
10
|
+
/** Una pieza: la `AgentCapability` que se le da a TrueForge y las tools que añade. */
|
|
11
|
+
export interface Capacidad {
|
|
12
|
+
nombre: string;
|
|
13
|
+
tools: readonly string[];
|
|
14
|
+
capability: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
/** Las tools que NO piden aprobación: las de lectura, las propias y la shell del conductor. */
|
|
17
|
+
export declare const SIN_APROBACION: {
|
|
18
|
+
enableTools: string[];
|
|
19
|
+
disableTools: never[];
|
|
20
|
+
preloadTools: never[];
|
|
21
|
+
requireApprovalForTools: never[];
|
|
22
|
+
};
|
|
23
|
+
/** Las que escriben PARAN el turno hasta que alguien decida, como el HITL de deepagents. */
|
|
24
|
+
export declare const CON_APROBACION: {
|
|
25
|
+
enableTools: string[];
|
|
26
|
+
disableTools: never[];
|
|
27
|
+
preloadTools: never[];
|
|
28
|
+
requireApprovalForTools: ("read_file" | "ls" | "write_file" | "edit_file" | "glob" | "grep")[];
|
|
29
|
+
};
|
|
30
|
+
/** Las tools de FICHERO sobre nuestro backend, acotadas por `reglas`. */
|
|
31
|
+
export declare function capacidadDeFicheros(opciones: {
|
|
32
|
+
backend: BackendDeFicheros;
|
|
33
|
+
reglas: ReturnType<typeof permisosDe>;
|
|
34
|
+
tools: readonly ToolDeFichero[];
|
|
35
|
+
conAprobacion: boolean;
|
|
36
|
+
}): Capacidad;
|
|
37
|
+
/**
|
|
38
|
+
* Las tools propias de xonecode (`xone_navegacion`, `regex_search`…), adaptadas.
|
|
39
|
+
*
|
|
40
|
+
* `conAprobacion`: las de ESTE conjunto que paran el turno como `write_file` —`incorporar_adjunto` y
|
|
41
|
+
* `traer_fuente` (`PROPIAS_QUE_ESCRIBEN`), que escriben el proyecto por su cuenta tras el «sí»—. Omitido
|
|
42
|
+
* es «ninguna», que es lo de siempre para las que solo leen.
|
|
43
|
+
*/
|
|
44
|
+
/** Las tools PROPIAS que escriben el proyecto por su cuenta, y por eso paran el turno a preguntar. */
|
|
45
|
+
export declare const PROPIAS_QUE_ESCRIBEN: readonly string[];
|
|
46
|
+
export declare function capacidadDePropias(tools: readonly ToolDeLangchain[], backend: EscritorDeDesalojo, conAprobacion?: readonly string[]): Capacidad;
|
|
47
|
+
/**
|
|
48
|
+
* Las tools de los conectores MCP del proyecto, de UNA clase (`toolsDeConectores.ts`): las de
|
|
49
|
+
* lectura sin aprobación, y el resto con aprobación TODAS (`@all`), porque lo que el servidor no
|
|
50
|
+
* declara de lectura escribe en la cuenta de la persona. `tools` va vacío: sus nombres salen de la
|
|
51
|
+
* red al primer `listTools`, no al montar.
|
|
52
|
+
*/
|
|
53
|
+
export declare function capacidadDeConectores(conectores: ConectoresDeSesion, clase: ClaseDeTool, backend: EscritorDeDesalojo): Capacidad;
|
|
54
|
+
/** `execute`: la shell del que la declara en su `.md`, y de nadie más. */
|
|
55
|
+
export declare function capacidadDeEjecucion(conShell: {
|
|
56
|
+
execute(c: string): unknown;
|
|
57
|
+
write(ruta: string, contenido: string): unknown;
|
|
58
|
+
}, dispositivo?: () => DispositivoDeLaSesion | undefined): Capacidad;
|
|
59
|
+
/**
|
|
60
|
+
* El presupuesto de un PASO entero (`recortes.ts#recortarPaso`), que el recorte por resultado no
|
|
61
|
+
* ve: varias respuestas en paralelo que caben solas pero no juntas. No añade tools.
|
|
62
|
+
*/
|
|
63
|
+
export declare function capacidadDeRecortes(backend: EscritorDeDesalojo): Capacidad;
|
|
64
|
+
/**
|
|
65
|
+
* Entrega lo que la sesión le deba a ESTE hilo mientras trabaja (IXCODE-4), por
|
|
66
|
+
* `preLLMProcessors` —corre antes de CADA llamada al modelo, en la raíz y en cada hijo por
|
|
67
|
+
* igual (`AgentThread.js:733-740`)—. No añade tools. `Nota`/`pendientesPara`/`marcarEntregada`
|
|
68
|
+
* viven en `notas.ts`, sin importar tipos internos de la librería: ni
|
|
69
|
+
* `PreLLMAgentContextProcessor` ni `AgentContextProcessorAppendContext` se reexportan desde su
|
|
70
|
+
* punto de entrada público.
|
|
71
|
+
*
|
|
72
|
+
* La orden de DETENER (`detencion.ts`) va por el MISMO procesador y no por otro: es la única
|
|
73
|
+
* pieza que corre antes de CADA llamada de cada hilo, y el control necesita contar las del raíz
|
|
74
|
+
* para saber de qué plan nació cada hijo.
|
|
75
|
+
*/
|
|
76
|
+
export declare function capacidadDeNotas(notas: Nota[], opciones?: {
|
|
77
|
+
detencion?: ControlDeDetencion;
|
|
78
|
+
/** El nombre con que el raíz conoce a un hijo, para decirle a QUIÉN se le pasó una nota. */
|
|
79
|
+
nombreDe?: (threadId: string) => string;
|
|
80
|
+
hiloRaiz?: string;
|
|
81
|
+
}): Capacidad;
|
|
82
|
+
/**
|
|
83
|
+
* `get_current_datetime` de la librería: la fecha en UTC, para que «hoy» o «hace tres días» no se
|
|
84
|
+
* lo invente el modelo. No da la zona horaria local, y no se le atribuye.
|
|
85
|
+
*/
|
|
86
|
+
export declare function capacidadDeFecha(): Capacidad;
|
|
87
|
+
/**
|
|
88
|
+
* Lo que OpenUI tiene que saber de ESTE harness, y que su prompt no dice. Va en CÓDIGO —en el
|
|
89
|
+
* prompt de quien tiene la skill `openui-builder`— porque vale para cualquier usuario y el modelo
|
|
90
|
+
* no siempre abre un `SKILL.md` (la lección medida de `artifacts-builder`, ver `agentesEnDisco.ts`):
|
|
91
|
+
* el prompt de la librería le pide que emita el bloque en su RESPUESTA, y la de un especialista
|
|
92
|
+
* la lee el orquestador. Y «elige UNO» porque se midió lo contrario: un turno real escribió el
|
|
93
|
+
* mismo panel en `.html` y en `.openui`, pagando el caro además del barato. Lo demás —cuándo usarlo
|
|
94
|
+
* y cómo no fallar— vive en la skill, que el usuario puede copiar y editar como cualquier otra.
|
|
95
|
+
*/
|
|
96
|
+
export declare const REGLAS_DE_OPENUI: string;
|
|
97
|
+
/** El nombre de la skill que TRAE OpenUI: quien la tiene recibe la tool que la skill necesita. */
|
|
98
|
+
export { SKILL_DE_OPENUI } from "../../../core/agentes.js";
|
|
99
|
+
/**
|
|
100
|
+
* OpenUI para quien tiene la skill `openui-builder`: la tool de la librería que carga sus
|
|
101
|
+
* instrucciones BAJO DEMANDA (unos 5.000 tokens que no viajan en cada llamada) y, al lado, las
|
|
102
|
+
* reglas del harness. **La skill explica y esto monta lo que la skill necesita**, igual que un
|
|
103
|
+
* builder del usuario: lo decide la skill que declara su `.md`, no el nombre de otra skill.
|
|
104
|
+
*/
|
|
105
|
+
export declare function capacidadDeOpenui(): Capacidad;
|
|
106
|
+
/**
|
|
107
|
+
* Las instrucciones de un HIJO en su prompt de SISTEMA. La librería IGNORA el `instruction` de un
|
|
108
|
+
* hijo (`buildInstruction`, `!this.parent`): a su sistema solo llegan los `instructionBuilders`.
|
|
109
|
+
* En el primer mensaje, una compactación —que sustituye el contexto entero— se las llevaría.
|
|
110
|
+
*/
|
|
111
|
+
export declare function capacidadDeInstrucciones(texto: string): Capacidad;
|
|
112
|
+
/** Las tools que suman unas piezas, en orden: de aquí sale la nota del hijo. */
|
|
113
|
+
export declare function toolsDe(capacidades: readonly Capacidad[]): string[];
|
|
114
|
+
/** Las `AgentCapability` que recibe TrueForge. */
|
|
115
|
+
export declare function capabilitiesDe(capacidades: readonly Capacidad[]): Record<string, unknown>[];
|
|
116
|
+
/**
|
|
117
|
+
* Qué CLASE de especialista es, por lo que declara su `.md` — la partición de deepagents
|
|
118
|
+
* (`perfiles.ts#toolsDe` y `montajeDeFicheros`):
|
|
119
|
+
* - quien EJECUTA: lectura + `execute`, y nada de escribir (la shell no pasa por los permisos,
|
|
120
|
+
* así que el camino normal de tocar el proyecto sigue siendo el de la aprobación);
|
|
121
|
+
* - quien solo lee: las seis SIN aprobación, porque `permisosDe` lo confina a lo que no es el
|
|
122
|
+
* proyecto —`/artefactos/` y `/planes/`, que es donde el analista deja su plan—: en deepagents
|
|
123
|
+
* `hitlDe` le devuelve `{}` por lo mismo;
|
|
124
|
+
* - el resto: las seis, con `write_file`/`edit_file` pidiendo aprobación y `permisosDe` acotando
|
|
125
|
+
* (`escribeEn` incluido).
|
|
126
|
+
*/
|
|
127
|
+
export declare function clasesDeTools(agente: Pick<Agente, "soloLectura" | "ejecucion">): "ejecuta" | "lee" | "escribe";
|
|
128
|
+
/**
|
|
129
|
+
* `create_sub_agent` para un HIJO: la misma delegación que tiene el raíz, dada a quien su `.md` declara que puede
|
|
130
|
+
* llamar a otro (`llama`). La librería crea el nieto igual que cualquier hijo y su respuesta vuelve a quien lo
|
|
131
|
+
* llamó. El nombre no se restringe aquí —el esquema de la tool es un texto libre—: lo hace la fábrica de hijos de la
|
|
132
|
+
* sesión, que no concede a quien no está en su lista.
|
|
133
|
+
*/
|
|
134
|
+
export declare function capacidadDeSubagentes(): Capacidad;
|
|
135
|
+
/**
|
|
136
|
+
* Avisa a quien lleva un LAZO (escribir, comprobar, corregir) de cuántas comprobaciones lleva, por
|
|
137
|
+
* `preLLMProcessors`: al llegar a cada umbral se le añade UN mensaje de usuario, y no otro más hasta el siguiente.
|
|
138
|
+
*
|
|
139
|
+
* Existe porque «tres vueltas» estaba solo en el prompt del desarrollador y una pasada real hizo seis llamadas al
|
|
140
|
+
* conductor: un texto no es un contador. Y el aviso no dice «para», dice «cambia de procedimiento»: repetir la
|
|
141
|
+
* misma familia de fallo con otra reescritura completa es lo que se vio (un control que falta, y al arreglarlo,
|
|
142
|
+
* otro), y lo que hay que hacer es aislar la causa, no cortar. No añade tools.
|
|
143
|
+
*/
|
|
144
|
+
export declare function capacidadDeAvisoDeVueltas(opciones: {
|
|
145
|
+
vueltasDe: (hilo: string) => number;
|
|
146
|
+
umbrales: readonly number[];
|
|
147
|
+
texto: (vueltas: number) => string;
|
|
148
|
+
}): Capacidad;
|
|
149
|
+
/** Lo que el backend y las tools de la sesión ponen para montar a un especialista. */
|
|
150
|
+
export interface DependenciasDelEspecialista {
|
|
151
|
+
backend: BackendDeFicheros & EscritorDeDesalojo;
|
|
152
|
+
/** Las tools propias que le tocan a ESTE agente (el reparto vive en la sesión). */
|
|
153
|
+
propias: (agente: Agente) => readonly ToolDeLangchain[];
|
|
154
|
+
/** El backend CON shell, montado solo para quien ejecuta. */
|
|
155
|
+
conShell: () => {
|
|
156
|
+
execute(c: string): unknown;
|
|
157
|
+
write(ruta: string, contenido: string): unknown;
|
|
158
|
+
};
|
|
159
|
+
/** El aparato de la sesión para la guarda del `execute` (IXCODE-32). Ausente = ninguno elegido. */
|
|
160
|
+
dispositivo?: () => DispositivoDeLaSesion | undefined;
|
|
161
|
+
/** La cola de notas de la SESIÓN, ya envuelta: la misma instancia para todos los hijos. */
|
|
162
|
+
notas: Capacidad;
|
|
163
|
+
/** ¿Puede ESTE agente llamar a otros? Lo decide la sesión (su `.md` y el interruptor); ausente es que no. */
|
|
164
|
+
puedeLlamar?: (agente: Agente) => boolean;
|
|
165
|
+
/** El aviso de vueltas de ESTE agente, si lleva un lazo. Ausente es que no lo lleva. */
|
|
166
|
+
vueltas?: (agente: Agente) => Capacidad | undefined;
|
|
167
|
+
/** Lo que escribieron los hijos que ESTE agente llame (`informesDeHijos.ts`): solo para quien puede llamar. */
|
|
168
|
+
informes?: Capacidad;
|
|
169
|
+
/** Las tools de los conectores MCP que le tocan a ESTE agente (el reparto vive en la sesión). */
|
|
170
|
+
conectores?: (agente: Agente) => readonly Capacidad[];
|
|
171
|
+
/**
|
|
172
|
+
* Sin nadie a quien preguntar (una TAREA de fondo): sus escrituras LOCALES no paran el turno a pedir aprobación. Una
|
|
173
|
+
* aprobación solo se atiende cuando la librería devuelve el control, y medido en Maset las del diseñador esperaron
|
|
174
|
+
* todo lo que tardó el analista (un Claude Code de una sola llamada larga) aunque en una tarea se aprueban solas. Las
|
|
175
|
+
* guardas de ruta siguen enteras; las escrituras de los CONECTORES siguen parando (en una tarea se rechazan).
|
|
176
|
+
*/
|
|
177
|
+
escribeSinPreguntar?: boolean;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Las piezas de un especialista —o del hijo genérico, si el nombre no es de ninguno—, sin sus
|
|
181
|
+
* instrucciones: esas se escriben con la lista de tools que salga de aquí.
|
|
182
|
+
*/
|
|
183
|
+
export declare function capacidadesDelEspecialista(agente: Agente | undefined, nombrePedido: string, deps: DependenciasDelEspecialista): Capacidad[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { NOMBRE_CONVERTIR_A_P } from "../../../core/convertirAP.js";
|
|
3
|
+
import type { Agente } from "../../../core/agentes.js";
|
|
4
|
+
export { NOMBRE_CONVERTIR_A_P };
|
|
5
|
+
/**
|
|
6
|
+
* `convertir_a_p`: las medidas de una maqueta (px CSS) a la `p` de XOne (`core/convertirAP.ts` tiene el porqué y la
|
|
7
|
+
* cuenta). **Pura, de LECTURA y sin red**, solo en TrueForge, y a quien escribe el proyecto (la regla de dato de
|
|
8
|
+
* `buscar_icono`: el desarrollador y el diseñador).
|
|
9
|
+
*
|
|
10
|
+
* Los dos datos de la cuenta NO entran por parámetro salvo el ancho de la maqueta cuando su imagen no lo deja claro:
|
|
11
|
+
* el `resolution-width` se lee del `app.xml` de la RAÍZ, fijada al construir —como `xone_navegacion`, nunca una ruta
|
|
12
|
+
* que elija el modelo—, y el ancho de la maqueta, de la misma maqueta que mide el harness (`buscarMaqueta`). Un
|
|
13
|
+
* rechazo se DEVUELVE como texto, nunca se lanza.
|
|
14
|
+
*/
|
|
15
|
+
export declare const recibeConvertirAP: (agente: Agente) => boolean;
|
|
16
|
+
export declare function crearConvertirAP(opciones: {
|
|
17
|
+
raiz: string;
|
|
18
|
+
artefactos?: string;
|
|
19
|
+
adjuntos?: string;
|
|
20
|
+
}): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
21
|
+
medidas: z.ZodArray<z.ZodObject<{
|
|
22
|
+
nombre: z.ZodString;
|
|
23
|
+
px: z.ZodCoercedNumber<unknown>;
|
|
24
|
+
}, z.core.$strip>>;
|
|
25
|
+
ancho_maqueta: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
26
|
+
}, z.core.$strip>, {
|
|
27
|
+
medidas: {
|
|
28
|
+
nombre: string;
|
|
29
|
+
px: number;
|
|
30
|
+
}[];
|
|
31
|
+
ancho_maqueta?: number | undefined;
|
|
32
|
+
}, {
|
|
33
|
+
medidas: {
|
|
34
|
+
nombre: string;
|
|
35
|
+
px: unknown;
|
|
36
|
+
}[];
|
|
37
|
+
ancho_maqueta?: unknown;
|
|
38
|
+
}, string, unknown, "convertir_a_p">;
|