xonecode 0.38.41 → 0.39.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/web/dist/assets/{EditorDeFichero-B5qtmfKO.js → EditorDeFichero-BeWDctgN.js} +1 -1
- package/apps/web/dist/assets/{index-C6XoIOQg.js → index-B-6cDRAV.js} +20 -20
- package/apps/web/dist/assets/{php-I6JfbNBQ.js → php-D3QdOnb8.js} +1 -1
- package/apps/web/dist/assets/{ruby-DlqXDLOX.js → ruby-DDAcW-Z2.js} +1 -1
- package/apps/web/dist/index.html +1 -1
- package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
- package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
- package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
- package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
- package/dist/agent/cloudstudio/crearRama.js +16 -0
- package/dist/agent/cloudstudio/crearRama.js.map +1 -0
- package/dist/agent/cloudstudio/descarga.d.ts +44 -0
- package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
- package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
- package/dist/agent/cloudstudio/subida.d.ts +61 -0
- package/dist/agent/cloudstudio/subida.js +7 -1
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
- package/dist/agent/cloudstudio/zip.d.ts +13 -0
- package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
- package/dist/agent/conectores/gestorJira.d.ts +50 -0
- package/dist/agent/conectores/gestorNotion.d.ts +45 -0
- package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
- package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
- package/dist/agent/config/authEnDisco.d.ts +43 -0
- package/dist/agent/config/catalogoModelos.d.ts +79 -0
- package/dist/agent/config/configEnDisco.d.ts +235 -0
- package/dist/agent/config/crearProyecto.d.ts +20 -0
- package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
- package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
- package/dist/agent/config/entorno.d.ts +83 -0
- package/dist/agent/config/fuentesEnRed.d.ts +12 -0
- package/dist/agent/config/gemini.d.ts +5 -0
- package/dist/agent/config/iconosEnRed.d.ts +10 -0
- package/dist/agent/config/identidadEnDisco.d.ts +27 -0
- package/dist/agent/config/modelos.d.ts +77 -0
- package/dist/agent/config/modelosDeMotor.d.ts +52 -0
- package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
- package/dist/agent/config/persona.d.ts +1 -0
- package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
- package/dist/agent/config/settingsEnDisco.d.ts +206 -0
- package/dist/agent/config/versionEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
- package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
- package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
- package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
- package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
- package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/hotswap.d.ts +194 -0
- package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
- package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
- package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
- package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
- package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
- package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
- package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
- package/dist/agent/exportarPdf.d.ts +72 -0
- package/dist/agent/grafo/aprendido.d.ts +28 -0
- package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
- package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
- package/dist/agent/grafo/atributosXone.d.ts +31 -0
- package/dist/agent/grafo/buscarIcono.d.ts +32 -0
- package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
- package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
- package/dist/agent/grafo/compararCapturas.d.ts +22 -0
- package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
- package/dist/agent/grafo/criticaVisual.d.ts +60 -0
- package/dist/agent/grafo/describirImagen.d.ts +79 -0
- package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
- package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
- package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
- package/dist/agent/grafo/excluirTools.d.ts +37 -0
- package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
- package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
- package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
- package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
- package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
- package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
- package/dist/agent/grafo/navegacionXone.d.ts +60 -0
- package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
- package/dist/agent/grafo/perfiles.d.ts +225 -0
- package/dist/agent/grafo/proyecto.d.ts +450 -0
- package/dist/agent/grafo/skills.d.ts +181 -0
- package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
- package/dist/agent/grafo/unirSecciones.d.ts +20 -0
- package/dist/agent/grafo/validacionXone.d.ts +35 -0
- package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
- package/dist/agent/grafo/xoneAgent.d.ts +166 -0
- package/dist/agent/motores/motoresLocales.d.ts +87 -0
- package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
- package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
- package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
- package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
- package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
- package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.js +4 -2
- package/dist/agent/motores/trueforge/medidaAutomatica.js.map +1 -1
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
- package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
- package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
- package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
- package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
- package/dist/agent/motores/trueforge/notas.d.ts +48 -0
- package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
- package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
- package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.js +32 -15
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
- package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
- package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
- package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
- package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
- package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
- package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
- package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
- package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
- package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
- package/dist/agent/planesEnDisco.d.ts +18 -0
- package/dist/agent/publicarPlan.d.ts +20 -0
- package/dist/agent/raizDelPaquete.d.ts +9 -0
- package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
- package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
- package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
- package/dist/agent/renombrarSobre.d.ts +14 -0
- package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
- package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
- package/dist/agent/sesiones/checkpointer.d.ts +146 -0
- package/dist/agent/sesiones/git.d.ts +66 -0
- package/dist/agent/sesiones/gitSync.d.ts +264 -0
- package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
- package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
- package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
- package/dist/agent/sesiones/sesionGit.d.ts +155 -0
- package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
- package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
- package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
- package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
- package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
- package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
- package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
- package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
- package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
- package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
- package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
- package/dist/agent/tareas/aumentador.d.ts +99 -0
- package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
- package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
- package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
- package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
- package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
- package/dist/agent/turno/depuracion.d.ts +1 -0
- package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
- package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
- package/dist/agent/turno/guionizado.d.ts +18 -0
- package/dist/agent/turno/informeDeTraza.d.ts +220 -0
- package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
- package/dist/agent/turno/instantanea.d.ts +16 -0
- package/dist/agent/turno/interrupts.d.ts +54 -0
- package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
- package/dist/agent/turno/mensajes.d.ts +23 -0
- package/dist/agent/turno/normalizar.d.ts +15 -0
- package/dist/agent/turno/puente.d.ts +196 -0
- package/dist/agent/turno/registroDeFallos.d.ts +39 -0
- package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
- package/dist/agent/turno/resumenDeTool.d.ts +33 -0
- package/dist/agent/turno/rubrica.d.ts +35 -0
- package/dist/agent/turno/sesionReal.d.ts +89 -0
- package/dist/agent/turno/textoDeTool.d.ts +19 -0
- package/dist/agent/turno/turnoReal.d.ts +210 -0
- package/dist/agent/turno/verificacion.d.ts +85 -0
- package/dist/agent/turno/verificador.d.ts +66 -0
- package/dist/bin.d.ts +2 -0
- package/dist/cli/acuseDeModelo.d.ts +18 -0
- package/dist/cli/aprobar.d.ts +162 -0
- package/dist/cli/config.d.ts +17 -0
- package/dist/cli/consola.d.ts +473 -0
- package/dist/cli/describe.d.ts +7 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/fuentesDeDisco.d.ts +25 -0
- package/dist/cli/main.d.ts +291 -0
- package/dist/cli/markdown.d.ts +126 -0
- package/dist/cli/panel.d.ts +38 -0
- package/dist/cli/podar.d.ts +38 -0
- package/dist/cli/run.d.ts +30 -0
- package/dist/cli/spinner.d.ts +37 -0
- package/dist/cli/stdio.d.ts +94 -0
- package/dist/cli/tema.d.ts +68 -0
- package/dist/cli/tokens.d.ts +16 -0
- package/dist/cli/traza.d.ts +19 -0
- package/dist/cli/tui/app.d.ts +23 -0
- package/dist/cli/tui/aprobarTui.d.ts +46 -0
- package/dist/cli/tui/barra.d.ts +43 -0
- package/dist/cli/tui/correrTui.d.ts +119 -0
- package/dist/cli/tui/entrada.d.ts +14 -0
- package/dist/cli/tui/filas.d.ts +13 -0
- package/dist/cli/tui/logo.d.ts +20 -0
- package/dist/cli/tui/pielTui.d.ts +15 -0
- package/dist/cli/tui/raton.d.ts +68 -0
- package/dist/cli/tui/sidebar.d.ts +63 -0
- package/dist/cli/tui/store.d.ts +102 -0
- package/dist/cli/tui/tarjeta.d.ts +8 -0
- package/dist/cli/tui/temaInk.d.ts +67 -0
- package/dist/cli/tui/transcript.d.ts +32 -0
- package/dist/cli/verify.d.ts +9 -0
- package/dist/cli/wizardInicial.d.ts +59 -0
- package/dist/core/actos.d.ts +437 -0
- package/dist/core/adjuntos.d.ts +77 -0
- package/dist/core/agentes.d.ts +353 -0
- package/dist/core/analisisDeSesion.d.ts +63 -0
- package/dist/core/aprendido.d.ts +41 -0
- package/dist/core/artefactos.d.ts +74 -0
- package/dist/core/atributosXone.d.ts +53 -0
- package/dist/core/bitacora.d.ts +21 -0
- package/dist/core/cloudstudio.d.ts +168 -0
- package/dist/core/codificacion.d.ts +81 -0
- package/dist/core/comandoExterno.d.ts +49 -0
- package/dist/core/compararCapturas.d.ts +136 -0
- package/dist/core/conectores.d.ts +296 -0
- package/dist/core/config.d.ts +148 -0
- package/dist/core/contextos.d.ts +54 -0
- package/dist/core/convertirAP.d.ts +56 -0
- package/dist/core/copiaDeAvd.d.ts +44 -0
- package/dist/core/cssBienFormado.d.ts +22 -0
- package/dist/core/deps.d.ts +28 -0
- package/dist/core/descargas.d.ts +61 -0
- package/dist/core/descripcionDePantalla.d.ts +121 -0
- package/dist/core/descriptoresDeApp.d.ts +108 -0
- package/dist/core/diagnosticoDeNode.d.ts +51 -0
- package/dist/core/diff.d.ts +26 -0
- package/dist/core/diffDeColecciones.d.ts +54 -0
- package/dist/core/disenoVinculado.d.ts +17 -0
- package/dist/core/dispositivoDeSesion.d.ts +22 -0
- package/dist/core/dispositivoElegido.d.ts +17 -0
- package/dist/core/dispositivos.d.ts +469 -0
- package/dist/core/entrega.d.ts +341 -0
- package/dist/core/entrelazar.d.ts +48 -0
- package/dist/core/esfuerzo.d.ts +120 -0
- package/dist/core/esqueleto.d.ts +38 -0
- package/dist/core/estiloMedido.d.ts +70 -0
- package/dist/core/estilos.d.ts +76 -0
- package/dist/core/events.d.ts +218 -0
- package/dist/core/exportacion.d.ts +88 -0
- package/dist/core/fallos.d.ts +79 -0
- package/dist/core/fondosSvg.d.ts +115 -0
- package/dist/core/fotoDeColecciones.d.ts +45 -0
- package/dist/core/fuentes.d.ts +96 -0
- package/dist/core/geometriaDePantalla.d.ts +171 -0
- package/dist/core/gestorDeTareas.d.ts +295 -0
- package/dist/core/hechosDelProyecto.d.ts +70 -0
- package/dist/core/hotswap.d.ts +30 -0
- package/dist/core/iconos.d.ts +86 -0
- package/dist/core/identidadDeProveedor.d.ts +20 -0
- package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
- package/dist/core/imagenesDeDocumento.d.ts +40 -0
- package/dist/core/jsParaRhino.d.ts +3 -0
- package/dist/core/juezDelTurno.d.ts +95 -0
- package/dist/core/logDeDispositivo.d.ts +67 -0
- package/dist/core/memoria.d.ts +18 -0
- package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
- package/dist/core/modelos.d.ts +198 -0
- package/dist/core/modoDeEscritura.d.ts +155 -0
- package/dist/core/motor.d.ts +43 -0
- package/dist/core/motoresLocales.d.ts +113 -0
- package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
- package/dist/core/navegacion.d.ts +172 -0
- package/dist/core/notify.d.ts +77 -0
- package/dist/core/nucleoXone.d.ts +28 -0
- package/dist/core/panorama.d.ts +68 -0
- package/dist/core/paqueteDeSoporte.d.ts +100 -0
- package/dist/core/planDeSubida.d.ts +56 -0
- package/dist/core/planes.d.ts +53 -0
- package/dist/core/podaDeCheckpoint.d.ts +75 -0
- package/dist/core/ports.d.ts +1034 -0
- package/dist/core/puedeLanzarse.d.ts +181 -0
- package/dist/core/puertosDeAvd.d.ts +59 -0
- package/dist/core/recargaEnCaliente.d.ts +52 -0
- package/dist/core/referenciasDeImagen.d.ts +36 -0
- package/dist/core/remoto.d.ts +76 -0
- package/dist/core/repartoDeEncargo.d.ts +80 -0
- package/dist/core/rubrica.d.ts +78 -0
- package/dist/core/rutaVirtual.d.ts +29 -0
- package/dist/core/selectorDeCarpeta.d.ts +59 -0
- package/dist/core/serieDeEscrituras.d.ts +58 -0
- package/dist/core/settings.d.ts +421 -0
- package/dist/core/shellDeAgente.d.ts +177 -0
- package/dist/core/skills.d.ts +129 -0
- package/dist/core/stitch.d.ts +114 -0
- package/dist/core/tareas.d.ts +412 -0
- package/dist/core/tareasDelPlan.d.ts +123 -0
- package/dist/core/tareasEnElGestor.d.ts +117 -0
- package/dist/core/textos.d.ts +8 -0
- package/dist/core/topeAgotado.d.ts +55 -0
- package/dist/core/traerDeLaMaquina.d.ts +33 -0
- package/dist/core/trazaDeErrores.d.ts +83 -0
- package/dist/core/tunel.d.ts +45 -0
- package/dist/core/turno.d.ts +154 -0
- package/dist/core/validacionDeEscritura.d.ts +95 -0
- package/dist/core/verificacionDeSubida.d.ts +14 -0
- package/dist/core/version.d.ts +35 -0
- package/dist/core/xmlBienFormado.d.ts +23 -0
- package/dist/core/zipDeAdjunto.d.ts +28 -0
- package/dist/core/zipDeSkill.d.ts +74 -0
- package/dist/lib/tareaAutonoma.d.ts +36 -0
- package/dist/lib/tareaAutonoma.js +259 -0
- package/dist/lib/tareaAutonoma.js.map +1 -0
- package/dist/lib.d.ts +31 -0
- package/dist/lib.js +28 -0
- package/dist/lib.js.map +1 -0
- package/dist/vendor/hitl.d.ts +69 -0
- package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
- package/dist/vendor/sqliteSaver.d.ts +22 -0
- package/dist/vendor/tokenTracking.d.ts +22 -0
- package/dist/web/servidor/arranque.d.ts +1372 -0
- package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
- package/dist/web/servidor/consolaWeb.d.ts +142 -0
- package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
- package/dist/web/servidor/datosDeCierre.d.ts +4 -0
- package/dist/web/servidor/interrupcion.d.ts +39 -0
- package/dist/web/servidor/pielWeb.d.ts +32 -0
- package/dist/web/servidor/puenteRemoto.d.ts +80 -0
- package/dist/web/servidor/servidor.d.ts +53 -0
- package/dist/web/servidor/sesiones.d.ts +342 -0
- package/dist/web/servidor/soporte.d.ts +65 -0
- package/dist/web/servidor/soporte.js +2 -0
- package/dist/web/servidor/soporte.js.map +1 -1
- package/dist/web/servidor/transporte.d.ts +2751 -0
- package/dist/web/servidor/vestibulo.d.ts +952 -0
- package/dist/web/servidor/visorOpenui.d.ts +33 -0
- package/package.json +9 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import type { BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
|
|
2
|
+
import { type Decision } from "../../vendor/hitl.js";
|
|
3
|
+
import { type MotorDeAgente } from "../../core/motor.js";
|
|
4
|
+
import type { PendienteDeAprobacion } from "../../core/events.js";
|
|
5
|
+
import type { LineaDeDiff } from "../../core/diff.js";
|
|
6
|
+
import type { ConectoresPort, FuentesPort, IconosPort, ModelosPort, SkillsPort, VerifierPort } from "../../core/ports.js";
|
|
7
|
+
import type { SesionReal } from "./sesionReal.js";
|
|
8
|
+
import type { Entorno } from "../config/entorno.js";
|
|
9
|
+
import { type CargarIndice } from "../navegacion/indiceEnDisco.js";
|
|
10
|
+
import { type HechosDelTurno, type VeredictoDelTurno } from "../../core/juezDelTurno.js";
|
|
11
|
+
/**
|
|
12
|
+
* Cierra las aprobaciones que se quedaron sin contestar cuando murió el proceso anterior.
|
|
13
|
+
*
|
|
14
|
+
* Solo existe desde que el hilo se guarda en disco (`agent/sesiones/checkpointer.ts`), y arregla un
|
|
15
|
+
* fallo MEDIDO —y medido dos veces, porque la primera medida estaba mal—. La forma del
|
|
16
|
+
* grafo importa: un grafo de un solo nodo donde `START` va al nodo interrumpido reejecuta
|
|
17
|
+
* ese nodo con el mensaje nuevo y vuelve a preguntar, que es inofensivo. El grafo del
|
|
18
|
+
* agente NO tiene esa forma: `START` va al MODELO, y el nodo parado es el de tools. Así que
|
|
19
|
+
* al reabrir una sesión que se cerró con una aprobación delante, lo que le llega al modelo
|
|
20
|
+
* es `human → ai(tool_calls) → human`: un `AIMessage` con llamadas a tool y ningún
|
|
21
|
+
* `ToolMessage` detrás. Gemini y OpenAI rechazan exactamente eso, así que el primer mensaje
|
|
22
|
+
* tras reabrir se iba en un 400 — y nada lo explicaba.
|
|
23
|
+
*
|
|
24
|
+
* El remedio es una respuesta SINTÉTICA por cada llamada colgada, diciendo la verdad: no se
|
|
25
|
+
* aplicó, porque la sesión se cerró antes de que nadie decidiera. Con eso el historial es
|
|
26
|
+
* válido y además honesto — el modelo se entera de que aquella escritura no llegó a pasar,
|
|
27
|
+
* en vez de dar por hecho que sí. Y es cierto: el `interrupt` pausa ANTES de escribir, o
|
|
28
|
+
* sea que el disco no se tocó.
|
|
29
|
+
*
|
|
30
|
+
* Se hace al ABRIR y no al empezar el turno porque es un arreglo del pasado, no del turno:
|
|
31
|
+
* dentro de una sesión viva las aprobaciones se resuelven por su camino normal. Un fallo
|
|
32
|
+
* aquí no puede impedir abrir la sesión, así que se traga — lo que se pierde entonces es
|
|
33
|
+
* este arreglo, no la conversación.
|
|
34
|
+
*
|
|
35
|
+
* Se exporta para poder probarla sin montar un grafo de verdad, igual que `decisionDeTool`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function saldarAprobacionesHuerfanas(agente: unknown, hilo: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Abre una sesión real: agente, checkpointer, hilo y tracker se construyen UNA vez aquí, y
|
|
40
|
+
* viven en el cierre. Todo lo que sobreviva al primer turno tiene que salir de este cierre:
|
|
41
|
+
* reconstruir el agente fuera (o un `MemorySaver` nuevo por llamada) tiraría la conversación.
|
|
42
|
+
*/
|
|
43
|
+
export declare function abrirSesionReal(opciones: {
|
|
44
|
+
raiz: string;
|
|
45
|
+
modelos: ModelosPort;
|
|
46
|
+
skills: SkillsPort;
|
|
47
|
+
entorno: Entorno;
|
|
48
|
+
/** Para las aprobaciones. Sin él, una escritura pendiente termina el turno diciéndolo. */
|
|
49
|
+
pedirAprobacion?: (pendientes: PendienteDeAprobacion[], ficheros: Map<string, string>, diffs: Map<string, LineaDeDiff[]>) => Promise<Map<string, Decision>>;
|
|
50
|
+
/**
|
|
51
|
+
* El simulador, para verificar lo que el turno escribió. OPCIONAL, y su ausencia no se
|
|
52
|
+
* disimula: sin él, un turno que escribió termina con el aviso de que no se verificó y el
|
|
53
|
+
* motivo. Es un puerto por lo de siempre —`npm test` no puede necesitar el binario— y
|
|
54
|
+
* porque quien construye el turno no tiene por qué saber cómo se verifica.
|
|
55
|
+
*/
|
|
56
|
+
verifier?: VerifierPort;
|
|
57
|
+
/**
|
|
58
|
+
* El `thread_id` del grafo. Entra por parámetro porque quien lo conoce es quien tiene
|
|
59
|
+
* IDENTIDAD para reanudar: en la web es el id de la sesión, y esa igualdad es lo que
|
|
60
|
+
* hace que reabrirla continúe el hilo en vez de releerlo. Sin él se genera uno, que es
|
|
61
|
+
* lo que hacía siempre.
|
|
62
|
+
*
|
|
63
|
+
* Antes había DOS ids para un mismo hilo —el de `EstadoDeSesion.hilo`, que es el que
|
|
64
|
+
* `/hilo` enseña, y el que se generaba aquí—, y solo coincidían después de un `/nuevo`.
|
|
65
|
+
*/
|
|
66
|
+
hilo?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Dónde se guarda la memoria del agente. Ausente = en memoria (`MemorySaver`), que es lo
|
|
69
|
+
* que hacía siempre y lo que sigue usando la consola de terminal: persistir un hilo que
|
|
70
|
+
* nadie puede volver a abrir solo engorda un fichero.
|
|
71
|
+
*/
|
|
72
|
+
checkpointer?: BaseCheckpointSaver;
|
|
73
|
+
/**
|
|
74
|
+
* La carpeta donde caen los artefactos de esta sesión — lo que el agente ve como
|
|
75
|
+
* `/artefactos/`. Entra por parámetro porque quien sabe si hay sesión con identidad es
|
|
76
|
+
* quien la abrió: en la web es `.xonecode/sesiones/<id>/artefactos`, y sin sesión (la
|
|
77
|
+
* consola de terminal) se cae a `.xonecode/artefactos` del proyecto, que existe igual y
|
|
78
|
+
* no ensucia el índice con carpetas de hilos que nadie puede reabrir.
|
|
79
|
+
*/
|
|
80
|
+
artefactos?: string;
|
|
81
|
+
/**
|
|
82
|
+
* El crítico visual, si esta ejecución tiene con qué preguntar.
|
|
83
|
+
*
|
|
84
|
+
* Entra por parámetro como `verifier`, así que `npm test` no le pregunta a ningún modelo, y
|
|
85
|
+
* su ausencia significa «esta ejecución no tiene crítico» y no «la pantalla está bien».
|
|
86
|
+
*/
|
|
87
|
+
criticaVisual?: (captura: {
|
|
88
|
+
base64: string;
|
|
89
|
+
mime: string;
|
|
90
|
+
}, pantalla: string) => Promise<{
|
|
91
|
+
veredicto: string;
|
|
92
|
+
observaciones: string[];
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* El JUEZ del turno: ¿esto cumple lo que se pidió? Ausente = no se pregunta.
|
|
96
|
+
*
|
|
97
|
+
* Entra por puerto como el verificador y el crítico, y por lo mismo: llama a un modelo,
|
|
98
|
+
* así que `npm test` sigue sin necesitar clave. Lo puro —el prompt, el parser y qué hacer
|
|
99
|
+
* con cada veredicto— vive en `core/juezDelTurno.ts` y sí tiene test.
|
|
100
|
+
*/
|
|
101
|
+
juezDelTurno?: (caso: {
|
|
102
|
+
objetivo: string;
|
|
103
|
+
respuesta: string;
|
|
104
|
+
hechos: HechosDelTurno;
|
|
105
|
+
}) => Promise<VeredictoDelTurno>;
|
|
106
|
+
/**
|
|
107
|
+
* La carpeta de los ADJUNTOS — lo que el agente ve como `/adjuntos/`, de solo lectura
|
|
108
|
+
* (`core/adjuntos.ts`). De una TAREA (`~/.xonecode/tareas/<id>/adjuntos/`) o, desde
|
|
109
|
+
* IXCODE-7, de una SESIÓN (`.xonecode/sesiones/<id>/adjuntos/`, los que una persona
|
|
110
|
+
* anexó en el CHAT): este campo no distingue el origen, es solo la ruta ya resuelta.
|
|
111
|
+
*
|
|
112
|
+
* Entra por parámetro y no se deduce, por lo mismo que `artefactos`: quien sabe qué
|
|
113
|
+
* carpeta corresponde es quien abrió la consola (`cli/main.ts#carpetaDeAdjuntosDelEjecutor`
|
|
114
|
+
* decide entre tarea y sesión), y aquí solo hay una raíz de proyecto. **Ausente en el
|
|
115
|
+
* terminal** (su hilo es un uuid nuevo por arranque, sin sesión que reabrir) **y en toda
|
|
116
|
+
* tarea sin adjuntos** — y entonces **el campo no se pone**, porque una cadena vacía
|
|
117
|
+
* montaría el cwd del proceso como si fueran los adjuntos de alguien.
|
|
118
|
+
*/
|
|
119
|
+
adjuntos?: string;
|
|
120
|
+
/**
|
|
121
|
+
* ¿Las escrituras de ESTA sesión se aplican sin pedir aprobación?
|
|
122
|
+
*
|
|
123
|
+
* Es una FUNCIÓN y no un booleano porque se pregunta en cada ronda: el modo se cambia con
|
|
124
|
+
* `/aprobacion` sin cerrar la sesión, y un booleano capturado al abrir dejaría el cambio
|
|
125
|
+
* sin efecto hasta reabrir — justo en la dirección peligrosa la mitad de las veces.
|
|
126
|
+
*
|
|
127
|
+
* Quien decide es `core/modoDeEscritura.ts#seEscribeSinPreguntar`, y no este fichero: sus
|
|
128
|
+
* dos condiciones —el modo de la sesión y que haya alguien delante— dependen de quién
|
|
129
|
+
* montó la consola, y ninguna se puede comprobar aquí.
|
|
130
|
+
*
|
|
131
|
+
* **El MISMO predicado gobierna a los motores externos**, por el campo `modo` que este
|
|
132
|
+
* fichero le pasa a `opcionesDeSubagenteExterno`: sin eso valdría para la mitad de los
|
|
133
|
+
* agentes, y un modo que solo gobierna una mitad miente sobre lo que hace.
|
|
134
|
+
*/
|
|
135
|
+
sinAprobacion?: () => boolean;
|
|
136
|
+
/** El raíz puede proponer tareas encadenadas (`proponer_tareas`). Solo TrueForge; ver `Consola.proponeTareas`. */
|
|
137
|
+
puedeProponerTareas?: boolean;
|
|
138
|
+
/** Una tarea de fondo: el agente decide sus dudas solo y resume al acabar. Solo TrueForge; ver `Consola.tareaDeFondo`. */
|
|
139
|
+
trabajoSinPersona?: boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Cuántas RONDAS de aprobación admite un turno. Ausente = `MAX_APPROVAL_ROUNDS`, el de
|
|
142
|
+
* siempre.
|
|
143
|
+
*
|
|
144
|
+
* Existe porque el de la persona no vale para una tarea de fondo, y las dos mitades del
|
|
145
|
+
* argumento importan. `MAX_APPROVAL_ROUNDS` se dimensionó para alguien pulsando —«te lo
|
|
146
|
+
* he preguntado cinco veces, para»—; en una tarea autónoma una ronda no es una pregunta,
|
|
147
|
+
* es una TANDA de escrituras que se autorizan solas, y cinco tandas se agotan en un
|
|
148
|
+
* encargo mediano: medido, un turno se cortó con cuatro ficheros escritos y una escritura
|
|
149
|
+
* abandonada. Y quitarlo no vale, por el mismo argumento que el tope propio de los
|
|
150
|
+
* artefactos: cada pasada es una llamada al modelo y aquí no hay humano que frene el
|
|
151
|
+
* bucle.
|
|
152
|
+
*
|
|
153
|
+
* Gobierna los TRES sitios que miraban esa constante —el corte por rondas, el corte por
|
|
154
|
+
* tandas automáticas y la PREDICCIÓN de si la pasada cierra el turno—, y tiene que
|
|
155
|
+
* gobernar los tres: si la predicción divergiera del corte, un turno se quedaría sin
|
|
156
|
+
* `fin` o cerraría dos veces.
|
|
157
|
+
*/
|
|
158
|
+
topeDeRondas?: number;
|
|
159
|
+
/**
|
|
160
|
+
* El cargador del índice de navegación. Ausente, se hace el de disco sobre `raiz`.
|
|
161
|
+
*
|
|
162
|
+
* Entra por parámetro por lo mismo que el verificador: toca disco y entra en la librería del
|
|
163
|
+
* linter, así que un test que no lo pueda doblar tendría que traerse un proyecto de verdad.
|
|
164
|
+
* Lo usan DOS —la tool del agente y la foto de hechos del turno— y es el mismo objeto a
|
|
165
|
+
* propósito: dos cargadores serían dos fuentes para la misma pregunta.
|
|
166
|
+
*/
|
|
167
|
+
navegacion?: CargarIndice;
|
|
168
|
+
/**
|
|
169
|
+
* De dónde salen los iconos (IXCODE-18). Ausente = Iconify por la red, que es la composición de
|
|
170
|
+
* PRODUCCIÓN: un test que no la doble la tendría escrita pero no probada.
|
|
171
|
+
*/
|
|
172
|
+
iconos?: IconosPort;
|
|
173
|
+
/**
|
|
174
|
+
* De dónde salen las fuentes. Ausente = Google Fonts por la red, la composición de PRODUCCIÓN,
|
|
175
|
+
* por lo mismo que `iconos`. Solo la usa TrueForge (deepagents es legacy y no se toca).
|
|
176
|
+
*/
|
|
177
|
+
fuentes?: FuentesPort;
|
|
178
|
+
/**
|
|
179
|
+
* Los conectores MCP del proyecto, el MISMO servicio de Ajustes. Solo lo pasa la web (el único
|
|
180
|
+
* proceso que lo tiene); ausente, ningún agente recibe sus tools. Solo TrueForge los monta:
|
|
181
|
+
* deepagents es legacy.
|
|
182
|
+
*/
|
|
183
|
+
conectores?: ConectoresPort;
|
|
184
|
+
/**
|
|
185
|
+
* El motor de agente (`core/motor.ts`). Ausente = el de la configuración: `XONECODE_MOTOR`, el
|
|
186
|
+
* `config.json` del proyecto o el global, y si no, `MOTOR_POR_OMISION`. La web lo pasa con el motor con
|
|
187
|
+
* el que NACIÓ la sesión; el terminal, `run`, el banco y los evals lo dejan a la configuración.
|
|
188
|
+
*/
|
|
189
|
+
motor?: MotorDeAgente;
|
|
190
|
+
/**
|
|
191
|
+
* ¿Las dos trazas opt-in (tools y errores/hitos) van encendidas aunque nadie ponga una
|
|
192
|
+
* variable de entorno? Resuelto por quien LLAMA a partir de `Settings.depurar`
|
|
193
|
+
* (`core/settings.ts#depuracionActiva`) — este fichero no lee `settings.json`.
|
|
194
|
+
*
|
|
195
|
+
* **Ausente se comporta EXACTAMENTE como hoy** (`entornoConDepuracion(false, …)` devuelve el
|
|
196
|
+
* entorno intacto): así ningún test que no pase esto ve cambiar nada, y `npm test` sigue sin
|
|
197
|
+
* necesitar esto. Solo los arranques reales —CLI y consola web— resuelven la omisión de la
|
|
198
|
+
* fase de pruebas y la pasan aquí ya decidida.
|
|
199
|
+
*/
|
|
200
|
+
depurar?: boolean;
|
|
201
|
+
}): Promise<SesionReal>;
|
|
202
|
+
/**
|
|
203
|
+
* Dónde caen los artefactos de una sesión: la carpeta que traiga quien la abre (la web, por sesión)
|
|
204
|
+
* o, sin ella —la consola de terminal, `run --real`—, `.xonecode/artefactos` del proyecto.
|
|
205
|
+
*
|
|
206
|
+
* **Una función para los DOS motores**, y es el arreglo: la caída vivía escrita dentro del camino
|
|
207
|
+
* de deepagents, y el de TrueForge pasaba la opción tal cual, o sea NADA cuando no venía. Sin
|
|
208
|
+
* carpeta no había montaje, y sin montaje `/artefactos/` era una ruta más del proyecto.
|
|
209
|
+
*/
|
|
210
|
+
export declare function carpetaDeArtefactosDeLaSesion(raiz: string, pedida: string | undefined): string;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { HallazgoDelTurno } from "../../core/events.js";
|
|
2
|
+
import type { InformeVerificacion } from "../../core/ports.js";
|
|
3
|
+
/**
|
|
4
|
+
* Los hallazgos, repartidos entre los ficheros que ESTE turno tocó y los demás.
|
|
5
|
+
*
|
|
6
|
+
* El simulador mira el proyecto entero —es su API—, y un error que ya estaba en un fichero que
|
|
7
|
+
* el agente no abrió no es del agente. Un hallazgo sin fichero no se puede atribuir: se enseña
|
|
8
|
+
* con los del turno, que es el lado conservador. Las rutas salen RELATIVAS: esto viaja al cable.
|
|
9
|
+
*/
|
|
10
|
+
export declare function repartirHallazgos(raiz: string, informe: InformeVerificacion, tocadosRelativos: readonly string[]): {
|
|
11
|
+
hallazgos: HallazgoDelTurno[];
|
|
12
|
+
preexistentes: number;
|
|
13
|
+
errores: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* La huella de un veredicto rojo: sus ERRORES, no todos los hallazgos.
|
|
17
|
+
*
|
|
18
|
+
* Un aviso que va y viene no dice nada de si el error se está arreglando. Y se compara con la
|
|
19
|
+
* del veredicto anterior y no con «¿bajó el número?»: dos errores distintos en vez de dos
|
|
20
|
+
* iguales también es avance, y un modelo que arregla uno y rompe otro no debe quedarse
|
|
21
|
+
* bloqueado como si no hubiera hecho nada.
|
|
22
|
+
*/
|
|
23
|
+
export declare function huellaDeErrores(hallazgos: readonly HallazgoDelTurno[]): string;
|
|
24
|
+
/** Lo que cuenta como fichero del PROYECTO para verificar: ni borrados ni `.xonecode/`. */
|
|
25
|
+
export declare function cambiosQueSeVerifican<T extends {
|
|
26
|
+
ruta: string;
|
|
27
|
+
clase?: string;
|
|
28
|
+
}>(cambios: readonly T[]): T[];
|
|
29
|
+
/**
|
|
30
|
+
* Cuántas veces se le devuelven los hallazgos al agente para que los corrija. Dos: tres
|
|
31
|
+
* verificaciones en total. Un modelo que no arregla algo en dos intentos con el error
|
|
32
|
+
* delante no lo arregla al quinto, y cada intento son escrituras que pasan por aprobación
|
|
33
|
+
* humana — o sea, tiempo de una persona. La guarda de «no progresa» (misma huella dos
|
|
34
|
+
* veces) corta antes de llegar aquí cuando el modelo repite el mismo cambio.
|
|
35
|
+
*/
|
|
36
|
+
export declare const TOPE_REPARACIONES = 2;
|
|
37
|
+
/**
|
|
38
|
+
* ¿Toca criticar la pantalla en esta pasada?
|
|
39
|
+
*
|
|
40
|
+
* PURA y exportada a propósito: la condición vivía dentro de `conVerificacion`, que es un
|
|
41
|
+
* cierre que TODOS los tests de este fichero doblan, y ahí una regla de producción se queda
|
|
42
|
+
* escrita y no probada — el patrón de fallo que este repo ha pagado nueve veces.
|
|
43
|
+
*
|
|
44
|
+
* Cuatro condiciones, y cada una dice algo distinto: sin crítico esta ejecución no puede
|
|
45
|
+
* preguntar (y eso NO es «la pantalla está bien»); sin capturas no hay nada que mirar; una vez
|
|
46
|
+
* por turno porque sus observaciones no son una huella y no hay forma de saber si una segunda
|
|
47
|
+
* vuelta avanza; y nunca por encima del tope de reparaciones, que es de todo el turno.
|
|
48
|
+
*/
|
|
49
|
+
export declare function tocaCriticarPantalla(estado: {
|
|
50
|
+
hayCritico: boolean;
|
|
51
|
+
capturas: number;
|
|
52
|
+
yaDisparo: boolean;
|
|
53
|
+
intento: number;
|
|
54
|
+
}): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* El texto que se le devuelve al agente para que repare, de las DOS fuentes.
|
|
57
|
+
*
|
|
58
|
+
* Fuera del cierre por lo mismo que `tocaCriticarPantalla`. Y no se le dice CÓMO arreglarlo
|
|
59
|
+
* —eso lo sabe él o no lo sabe—, solo lo que se ha medido y lo único que importa aquí: que no
|
|
60
|
+
* invente nada para que el error desaparezca, que es justo lo que XOne no le reprocha.
|
|
61
|
+
*/
|
|
62
|
+
/**
|
|
63
|
+
* Lo que se le pide al agente cuando el verificador o el crítico ven algo.
|
|
64
|
+
*
|
|
65
|
+
* **Lleva el OBJETIVO delante, y ése es el arreglo.** Esta petición entra como
|
|
66
|
+
* `HumanMessage` en el mismo hilo (ver abajo), así que a partir de ese momento pasa a ser
|
|
67
|
+
* «el último humano» — y `conservarElEncargo` protege justo ése. O sea que sin el objetivo
|
|
68
|
+
* dentro, el encargo del usuario deja de estar protegido y lo sustituye la lista de
|
|
69
|
+
* hallazgos: el agente no se despista, le hemos cambiado el encargo por debajo y encima se
|
|
70
|
+
* lo recordamos en cada llamada.
|
|
71
|
+
*
|
|
72
|
+
* MEDIDO en un turno real: se pidió «tengo un error al ejecutar la app, arréglalo», se
|
|
73
|
+
* arregló (faltaba un `;` en `funciones.js`), y entonces el crítico visual vio tres textos
|
|
74
|
+
* recortados en otra pantalla —rotos desde antes, y sin relación con el arreglo—. El turno
|
|
75
|
+
* se fue a rediseñar el menú.
|
|
76
|
+
*
|
|
77
|
+
* **Y el objetivo es lo que decide si un hallazgo es trabajo o es ruido.** El mismo
|
|
78
|
+
* «BASICOS PLUS se corta» es ruido si el objetivo era arrancar la app, y es EL trabajo si
|
|
79
|
+
* el objetivo era arreglar los fallos visuales. Eso no lo dice el fichero que se tocó —el
|
|
80
|
+
* heurístico que se descartó— ni lo puede decidir el harness: lo decide el objetivo, y por
|
|
81
|
+
* eso viaja con la petición en vez de quedarse fuera.
|
|
82
|
+
*/
|
|
83
|
+
export declare function textoDeReparacion(hallazgos: readonly HallazgoDelTurno[], observaciones: readonly string[],
|
|
84
|
+
/** El encargo ORIGINAL de este turno. Ausente = no se pudo saber, y entonces no se afirma. */
|
|
85
|
+
objetivo?: string): string;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { InformeVerificacion, VerifierPort } from "../../core/ports.js";
|
|
2
|
+
/** La forma que emite `xone-simulator validate --json` (xone-linter 1.4.0). */
|
|
3
|
+
/**
|
|
4
|
+
* Cuando el simulador no pudo ni empezar. **Medido**: ante una ruta que no existe devuelve
|
|
5
|
+
* `{"success": false, "error": "No existe el directorio del proyecto: …"}` — sin `issues`,
|
|
6
|
+
* y **saliendo con código 0**, así que no lo caza ningún `catch` del proceso.
|
|
7
|
+
*
|
|
8
|
+
* Es un fallo del ENTORNO, no del proyecto, y por eso es una excepción y no un informe en
|
|
9
|
+
* rojo: un informe rojo dice «tu proyecto tiene errores», que aquí sería mentira.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ErrorDelSimulador extends Error {
|
|
12
|
+
}
|
|
13
|
+
export interface SalidaDelSimulador {
|
|
14
|
+
success: boolean;
|
|
15
|
+
path?: string;
|
|
16
|
+
/** Presente SOLO en la forma de fallo, y entonces `issues` no viene. */
|
|
17
|
+
error?: string;
|
|
18
|
+
summary?: {
|
|
19
|
+
total: number;
|
|
20
|
+
errors: number;
|
|
21
|
+
warnings: number;
|
|
22
|
+
};
|
|
23
|
+
issues?: Array<{
|
|
24
|
+
severity: string;
|
|
25
|
+
code: string;
|
|
26
|
+
message: string;
|
|
27
|
+
file?: string;
|
|
28
|
+
location?: {
|
|
29
|
+
file: string;
|
|
30
|
+
line?: number;
|
|
31
|
+
column?: number;
|
|
32
|
+
};
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* De la salida del simulador al informe del harness. PURA: sin subprocesos.
|
|
37
|
+
*
|
|
38
|
+
* Separada de quien invoca el binario para poder probar la traducción con el fichero de
|
|
39
|
+
* `__oro__/` — es el patrón del puerto aplicado dentro del puerto, igual que el harness
|
|
40
|
+
* Python separa la función que recibe la sesión ya lista del puerto que la construye.
|
|
41
|
+
*/
|
|
42
|
+
export declare function aInforme(salida: SalidaDelSimulador): InformeVerificacion;
|
|
43
|
+
/**
|
|
44
|
+
* El verificador real. NO lleva la marca `ES_DOBLE`: es de verdad, y `describe()` lo dirá.
|
|
45
|
+
*
|
|
46
|
+
* `validate` sale con código != 0 cuando encuentra errores, así que un fallo del proceso
|
|
47
|
+
* NO es un fallo del harness: es el resultado. Se distingue por si hubo JSON parseable —
|
|
48
|
+
* confundir las dos cosas es el patrón «fallo del proyecto != fallo del harness».
|
|
49
|
+
*/
|
|
50
|
+
export declare class SimuladorVerifier implements VerifierPort {
|
|
51
|
+
private readonly binario?;
|
|
52
|
+
/** Con un binario explícito se usa ESE, por el PATH; sin él, el de nuestra dependencia (`comoLanzarElSimulador`). */
|
|
53
|
+
constructor(binario?: string | undefined);
|
|
54
|
+
verificar(rutaProyecto: string): Promise<InformeVerificacion>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Cómo se lanza `xone-simulator`: **el de NUESTRA dependencia** (`xone-linter`, cuyo `bin` es `dist/cli.js`), con el Node
|
|
58
|
+
* que corre xonecode; y solo si no se encuentra, `xone-simulator` por el PATH. Medido en la máquina Windows de un usuario
|
|
59
|
+
* (instalado con `npx`): el verificador lo llamaba por el PATH, donde no estaba, y cada turno cerraba con «no está
|
|
60
|
+
* instalado (ENOENT)» aunque el programa venía DENTRO del paquete. Aquí funcionaba porque estaba instalado global.
|
|
61
|
+
*/
|
|
62
|
+
export declare function comoLanzarElSimulador(resolver?: (id: string) => string): {
|
|
63
|
+
programa: string;
|
|
64
|
+
previos: string[];
|
|
65
|
+
nombre: string;
|
|
66
|
+
};
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El acuse de `/modelo` — la frase tiene UN solo hogar.
|
|
3
|
+
*
|
|
4
|
+
* `consola.ts` la escribe y `tui/correrTui.ts` la re-parsea para actualizar la
|
|
5
|
+
* sidebar (el eco de `escribir` es la única costura que tienen los manejadores de
|
|
6
|
+
* consola para avisar de un cambio en caliente). Antes eran dos copias — el literal
|
|
7
|
+
* y un regex escrito a mano — sin nada que probara que decían lo mismo: si alguien
|
|
8
|
+
* retocaba la frase, la sidebar dejaba de enterarse sin que ningún test fallara.
|
|
9
|
+
* Escribir y leer viven aquí, y el test de ida y vuelta ata el par.
|
|
10
|
+
*/
|
|
11
|
+
import type { Papel } from "../core/ports.js";
|
|
12
|
+
/** El acuse de un cambio de modelo: el papel ausente es «los tres papeles a la vez». */
|
|
13
|
+
export declare function acuseDeModelo(papel: Papel | undefined, modelo: string): string;
|
|
14
|
+
/** El acuse parseado: `{ modelo }` si cambiaron los tres, `{ papel, modelo }` si cambió uno. */
|
|
15
|
+
export declare function modeloDeAcuse(texto: string): {
|
|
16
|
+
papel?: Papel;
|
|
17
|
+
modelo: string;
|
|
18
|
+
} | undefined;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { REJECT_MESSAGE, MAX_APPROVAL_ROUNDS, type Decision } from "../vendor/hitl.js";
|
|
2
|
+
import type { PendienteDeAprobacion } from "../core/events.js";
|
|
3
|
+
import { type LineaDeDiff } from "../core/diff.js";
|
|
4
|
+
import type { Escribir } from "./stdio.js";
|
|
5
|
+
export { MAX_APPROVAL_ROUNDS, REJECT_MESSAGE, type Decision };
|
|
6
|
+
/**
|
|
7
|
+
* Una línea del plan, CON lo que le pasa al fichero.
|
|
8
|
+
*
|
|
9
|
+
* `texto` es la línea entera tal como sale por el scrollback —signo y ruta, con sus dos
|
|
10
|
+
* espacios de sangría—: la tarjeta y el terminal enseñan lo MISMO porque es el mismo texto,
|
|
11
|
+
* y el día que alguien cambie el formato de uno tiene que cambiar el del otro.
|
|
12
|
+
*
|
|
13
|
+
* `cambio` es lo que el signo SIGNIFICA, y viaja aparte por la razón de siempre: `+` es
|
|
14
|
+
* sintaxis. Una piel que quisiera colorear lo que se añade leería el primer carácter de
|
|
15
|
+
* `texto`, y eso se rompe el día que la sangría cambie de ancho o que una ruta empiece por
|
|
16
|
+
* `-` —enseñando en verde un borrado—, sin un solo error. Es el MISMO dato que
|
|
17
|
+
* `CambioLocal.clase` (`core/planDeSubida.ts`), con los mismos tres valores.
|
|
18
|
+
*
|
|
19
|
+
* **Ausente = esta línea no habla de un fichero**: hoy solo pasa con la cabecera («SUBIDA A
|
|
20
|
+
* CLOUDSTUDIO — N operaciones»), que no es ni un añadido ni un borrado. Distinto de
|
|
21
|
+
* `"nuevo"`, que sí lo es.
|
|
22
|
+
*/
|
|
23
|
+
export interface LineaDelPlan {
|
|
24
|
+
texto: string;
|
|
25
|
+
cambio?: "nuevo" | "modificado" | "borrado";
|
|
26
|
+
/**
|
|
27
|
+
* La ruta del fichero de la línea, relativa al proyecto, como DATO: es lo que una piel
|
|
28
|
+
* necesita para pintar el plan como árbol y dejar elegir qué entra. Sacarla del `texto`
|
|
29
|
+
* sería leer sintaxis otra vez. Ausente en la cabecera, que no habla de un fichero.
|
|
30
|
+
*/
|
|
31
|
+
ruta?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Una pregunta cuya respuesta es SÍ o NO, con lo que se decide delante.
|
|
35
|
+
*
|
|
36
|
+
* Existe porque una piel rica no puede saber si el campo de texto sobra adivinándolo del
|
|
37
|
+
* enunciado: el `[s/N]` es SINTAXIS, y el día que alguien reescriba el prompt —o lo
|
|
38
|
+
* traduzca— la tarjeta que ofrece botones se quedaría con un editor, o al revés: dos
|
|
39
|
+
* botones sobre una pregunta de texto libre, que es el caso que no puede pasar y no daría
|
|
40
|
+
* ningún error. Aquí viaja la INTENCIÓN, que es lo mismo que ya hace `LineaDeConsola`
|
|
41
|
+
* diciendo si una línea es prosa.
|
|
42
|
+
*
|
|
43
|
+
* `lineas` es lo que se decide, línea a línea, tal como se enseña en el terminal: quien
|
|
44
|
+
* pregunta ya lo escribe con `escribir`, y una piel con tarjeta lo repite DENTRO de ella
|
|
45
|
+
* porque es el paso donde se DECIDE — la misma razón que hace viajar el diff entero en la
|
|
46
|
+
* aprobación de escrituras. No es contenido nuevo por el cable: son las mismas líneas que
|
|
47
|
+
* ese `escribir` ya manda.
|
|
48
|
+
*
|
|
49
|
+
* **Y el enunciado va SIN la pista de tecleo.** `politicaInteractiva` pregunta «¿Subir a
|
|
50
|
+
* CloudStudio?», no «¿Subir a CloudStudio? [s/N]»: el `[s/N]` es la pista de una piel que
|
|
51
|
+
* se contesta ESCRIBIENDO, y la pone esa piel (`PISTA_DE_DECISION`, ver abajo). Una tarjeta
|
|
52
|
+
* con dos botones no tiene nada que teclear, y llevarlo dentro del texto dejaba al cliente
|
|
53
|
+
* la opción de enseñarlo —donde se lee como «escribe s o n» delante de un botón— o de
|
|
54
|
+
* recortarlo a ciegas, que es leer sintaxis por la puerta de atrás.
|
|
55
|
+
*
|
|
56
|
+
* La respuesta sigue siendo una cadena por la misma puerta de siempre (`interpretAnswer`:
|
|
57
|
+
* `"s"` autoriza, cualquier otra cosa rechaza), y las dos caras de los botones son esas
|
|
58
|
+
* dos, no un vocabulario nuevo.
|
|
59
|
+
*/
|
|
60
|
+
export interface DecisionDeConsola {
|
|
61
|
+
lineas: readonly LineaDelPlan[];
|
|
62
|
+
/**
|
|
63
|
+
* `true` = quien contesta puede quedarse con PARTE de las líneas con `ruta` (la subida a
|
|
64
|
+
* CloudStudio en la consola web). Solo la honra una consola con `decidirConSeleccion`; las
|
|
65
|
+
* demás preguntan sí o no al plan entero, como siempre.
|
|
66
|
+
*/
|
|
67
|
+
seleccionable?: true;
|
|
68
|
+
/**
|
|
69
|
+
* De QUÉ operación de sincronización es esta decisión, como dato: la web mantiene el diálogo
|
|
70
|
+
* abierto tras «Aceptar» hasta que llega el acto de ESA operación, y lo identifica por esto,
|
|
71
|
+
* no por el enunciado. Ausente = una decisión que no lanza ninguna operación.
|
|
72
|
+
*/
|
|
73
|
+
operacion?: "subir" | "bajar";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* La respuesta de una decisión que admite selección: la cadena de siempre
|
|
77
|
+
* (`interpretAnswer`) y, si la piel dejó elegir, las rutas que la persona dejó marcadas.
|
|
78
|
+
* `seleccion` AUSENTE es «no se eligió nada aparte»: el plan entero, como con `preguntar`.
|
|
79
|
+
*/
|
|
80
|
+
export interface RespuestaConSeleccion {
|
|
81
|
+
respuesta: string;
|
|
82
|
+
seleccion?: readonly string[];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* La pista de una pregunta que se contesta TECLEANDO: `[s/N]`, con el defecto en
|
|
86
|
+
* mayúscula.
|
|
87
|
+
*
|
|
88
|
+
* La pone la piel que tiene un teclado delante —stdio y la TUI—, y solo esa: son las dos
|
|
89
|
+
* únicas que resuelven una pregunta con lo que alguien escriba. La consola web no la pone
|
|
90
|
+
* porque su tarjeta no tiene campo.
|
|
91
|
+
*
|
|
92
|
+
* Es SIEMPRE `[s/N]` y nunca `[S/n]` porque el Enter a secas NO aprueba una decisión: la
|
|
93
|
+
* asimetría de `CLAUDE.md` —aprobar ESCRIBE— y `politicaInteractiva` llama a
|
|
94
|
+
* `interpretAnswer` sin `interactive`, así que la cadena vacía rechaza aquí incluso con un
|
|
95
|
+
* TTY de verdad. La pista de la APROBACIÓN de escrituras sí alterna, y por eso la construye
|
|
96
|
+
* `pedirDecisiones` en el sitio donde se sabe si hay humano (`hayHumano()`): una pista no
|
|
97
|
+
* puede viajar con la pregunta cuando su contenido depende de la piel que la va a enseñar.
|
|
98
|
+
*
|
|
99
|
+
* **Límite declarado**: una decisión no puede cambiar su pista por pregunta. Hoy solo hay
|
|
100
|
+
* una que la use —la subida— y su defecto es fijo; el día que una decisión se apruebe con
|
|
101
|
+
* Enter, esto tiene que bajar al que la formula, como ya hace `aprobar.ts`.
|
|
102
|
+
*/
|
|
103
|
+
export declare const PISTA_DE_DECISION = " [s/N] ";
|
|
104
|
+
/**
|
|
105
|
+
* Leer una línea. Entra por parámetro: sin esto, esto no se puede probar.
|
|
106
|
+
*
|
|
107
|
+
* El segundo parámetro es la FORMA de la respuesta, y es opcional a propósito: la mayoría
|
|
108
|
+
* de las preguntas —«número (Enter cancela)», una URL, una clave— son texto libre, y una
|
|
109
|
+
* implementación que no lo declare sigue valiendo (una función con menos parámetros es
|
|
110
|
+
* asignable), así que stdio, la TUI y los dobles de los tests no cambian de una línea.
|
|
111
|
+
*/
|
|
112
|
+
export type Preguntar = (pregunta: string, decision?: DecisionDeConsola) => Promise<string>;
|
|
113
|
+
/**
|
|
114
|
+
* Pregunta por cada pendiente y devuelve las decisiones, en el mapa por id.
|
|
115
|
+
*
|
|
116
|
+
* **Fail-closed, y no es una preferencia: es la asimetría que protege el proyecto del
|
|
117
|
+
* usuario.** Aprobar ESCRIBE; rechazar no toca nada. Así que lo que no se entiende es
|
|
118
|
+
* RECHAZO, siempre. Y el Enter a secas solo aprueba con `interactive: true` —un TTY de
|
|
119
|
+
* verdad detrás—: en un pipe o en CI una línea en blanco no demuestra que haya nadie
|
|
120
|
+
* mirando, y esto aprueba escrituras sobre un proyecto real.
|
|
121
|
+
*
|
|
122
|
+
* `interpretAnswer` ya implementa las dos reglas y está medido: se reusa, no se reescribe.
|
|
123
|
+
*
|
|
124
|
+
* **`eof` existe porque un TTY no basta para saber que hay alguien.** `crearPreguntar`
|
|
125
|
+
* (`cli/stdio.ts`) devuelve cadena vacía por DOS motivos distintos que llegan idénticos:
|
|
126
|
+
* el usuario pulsó Enter, o la entrada se acabó (Ctrl-D, un stdin agotado a mitad de
|
|
127
|
+
* turno). Con `interactive: true` la cadena vacía APRUEBA —el Enter vale por un sí, y es
|
|
128
|
+
* un rasgo querido: quien lo pulsa tiene el diff delante—, así que sin distinguirlas un
|
|
129
|
+
* Ctrl-D aprobaba una escritura que nadie llegó a ver. Con `eof`, un readline cerrado
|
|
130
|
+
* degrada la pregunta a no-interactiva y ahí la cadena vacía ya rechaza. No se cambió
|
|
131
|
+
* `Preguntar` a `string | null`: contados a mano hay 18 sitios que llaman a un `preguntar`
|
|
132
|
+
* fuera de los tests, y en 16 la cadena vacía significa «cancela / usa el valor por
|
|
133
|
+
* omisión» —que es lo correcto también ante un EOF—. Solo las dos PUERTAS necesitan
|
|
134
|
+
* distinguir: esta y la subida a CloudStudio (`consola.ts#politicaInteractiva`, que lo
|
|
135
|
+
* resolvió de otra forma: allí el Enter no vale por un sí y el prompt es `[s/N]` siempre).
|
|
136
|
+
*/
|
|
137
|
+
export declare function pedirDecisiones(pendientes: PendienteDeAprobacion[], preguntar: Preguntar, escribir: Escribir, opciones?: {
|
|
138
|
+
interactive?: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* ¿Se acabó la entrada? `crearDetectorDeEof` (`cli/stdio.ts`) es quien lo sabe para el
|
|
141
|
+
* readline de la consola; `eofDeStdin` (aquí abajo) para el stdin crudo del disparo
|
|
142
|
+
* único. Ausente = no se sabe, y entonces manda `interactive` a secas: los llamadores
|
|
143
|
+
* que no lo pasan se comportan exactamente igual que antes.
|
|
144
|
+
*/
|
|
145
|
+
eof?: () => boolean;
|
|
146
|
+
fichero?: (id: string) => string | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Las líneas de diff del pendiente (ver `agent/turno/interrupts.ts` → `cambioDe`). Este es
|
|
149
|
+
* el ÚNICO sitio donde el contenido de una escritura se enseña, y es a propósito:
|
|
150
|
+
* aquí se DECIDE sobre ese contenido, y aprobar a ciegas es peor que no aprobar.
|
|
151
|
+
*/
|
|
152
|
+
diff?: (id: string) => LineaDeDiff[] | undefined;
|
|
153
|
+
}): Promise<Map<string, Decision>>;
|
|
154
|
+
/**
|
|
155
|
+
* El EOF de stdin CRUDO, hermano de `crearDetectorDeEof` para quien no tiene un readline
|
|
156
|
+
* (el disparo único de `cli/run.ts`). `readableEnded` pasa a `true` al emitirse `end`
|
|
157
|
+
* — medido en este Node 22, junto con lo otro que hace falta saber aquí: un `on("end")`
|
|
158
|
+
* registrado DESPUÉS del EOF ya no dispara nunca.
|
|
159
|
+
*/
|
|
160
|
+
export declare function eofDeStdin(): boolean;
|
|
161
|
+
/** El `preguntar` de producción: una línea de stdin. */
|
|
162
|
+
export declare function preguntarPorStdin(): Preguntar;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xonecode config` — diagnóstico de la configuración SIN llamar a ningún modelo.
|
|
3
|
+
*
|
|
4
|
+
* Un comando de diagnóstico no puede ser la vía por la que una clave acaba en un log o
|
|
5
|
+
* una captura, así que la regla dura de este fichero es: NUNCA se imprime ni un carácter
|
|
6
|
+
* de una credencial — ni truncada, ni los últimos cuatro. Solo «puesta»/«sin credencial»
|
|
7
|
+
* y de dónde sale. Por eso el JSON de salida se construye campo a campo a mano y jamás
|
|
8
|
+
* serializa el objeto `auth` de `cargar`, que SÍ lleva las claves en texto plano.
|
|
9
|
+
*
|
|
10
|
+
* Y al revés: un config MAL escrito no puede impedir que este comando funcione — es
|
|
11
|
+
* justo el que uno corre cuando la configuración está mal. Por eso siempre devuelve 0.
|
|
12
|
+
*/
|
|
13
|
+
import { type FuentesDeEleccion } from "../core/modelos.js";
|
|
14
|
+
import { type Escribir } from "./stdio.js";
|
|
15
|
+
export declare function cmdConfig(fuentes: FuentesDeEleccion, opciones?: {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
}, escribir?: Escribir, raiz?: string): number;
|