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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué se le deja escribir a un agente, mirando el CONTENIDO antes de escribirlo.
|
|
3
|
+
*
|
|
4
|
+
* XOne ignora en silencio lo desconocido: un atributo inventado, un `<frame>` sin cerrar o un
|
|
5
|
+
* `font-size` en vez de `fontsize` no dan error, dan un bug mudo. Esa es la regla que gobierna
|
|
6
|
+
* este harness entero, y hasta ahora solo la sostenían el prompt y el verificador del final
|
|
7
|
+
* del turno. Esto la mueve al momento de escribir.
|
|
8
|
+
*
|
|
9
|
+
* **LA DECISIÓN QUE HACE QUE ESTO SEA USABLE: solo se rechaza lo que la escritura INTRODUCE.**
|
|
10
|
+
*
|
|
11
|
+
* Medido sobre siete proyectos reales antes de escribir una línea: con las reglas del linter
|
|
12
|
+
* ya corregidas siguen quedando hallazgos en ficheros que están en producción y funcionan. Si
|
|
13
|
+
* la guarda mirase solo el contenido nuevo, el día que entrara no se podría editar un fichero
|
|
14
|
+
* que ya tuviera un defecto —el agente vendría a arreglar otra cosa y se le rechazaría por
|
|
15
|
+
* algo que no escribió—. Esa es la guarda que se desactiva al segundo día.
|
|
16
|
+
*
|
|
17
|
+
* Así que se compara la HUELLA de antes con la de después, que es exactamente lo que
|
|
18
|
+
* `agent/turno/turnoReal.ts#conVerificacion` ya hace con el simulador: la huella son los
|
|
19
|
+
* hallazgos identificados por código+línea, y lo que estaba antes se arrastra sin estorbar.
|
|
20
|
+
*
|
|
21
|
+
* **Y la dirección de los dos fallos posibles NO es la misma**, que es la otra mitad del
|
|
22
|
+
* diseño: si falla el CONTENIDO se rechaza (fail-closed); si falla el VALIDADOR —no está la
|
|
23
|
+
* librería, revienta el parser— se DEJA ESCRIBIR y se cuenta. Un fallo del entorno no puede
|
|
24
|
+
* convertirse en un veredicto sobre el trabajo del agente; es la misma frontera que
|
|
25
|
+
* `ErrorDelSimulador` frente a un informe en rojo.
|
|
26
|
+
*/
|
|
27
|
+
/** Un hallazgo del linter, ya sin nada que no se pueda enseñar. */
|
|
28
|
+
export interface HallazgoDeEscritura {
|
|
29
|
+
codigo: string;
|
|
30
|
+
mensaje: string;
|
|
31
|
+
/** La línea, si el hallazgo la sitúa. */
|
|
32
|
+
linea?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface VeredictoDeEscritura {
|
|
35
|
+
/** Lo que ESTA escritura mete y antes no estaba. Vacío = se deja escribir. */
|
|
36
|
+
introducidos: HallazgoDeEscritura[];
|
|
37
|
+
/** Lo que ya estaba. Ni bloquea ni se cuenta: el agente no lo escribió. */
|
|
38
|
+
preexistentes: HallazgoDeEscritura[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Compara el fichero que hay con el que se quiere escribir.
|
|
42
|
+
*
|
|
43
|
+
* `antes` ausente es un fichero NUEVO: ahí no hay nada preexistente y todo hallazgo es de esta
|
|
44
|
+
* escritura. Es el caso en el que la guarda muerde más, y es el correcto — un fichero que se
|
|
45
|
+
* crea ya roto no tiene ninguna excusa.
|
|
46
|
+
*
|
|
47
|
+
* Un hallazgo repetido cuenta las veces que esté: si antes había un `font-size` y ahora hay
|
|
48
|
+
* dos, el segundo es nuevo. Por eso se descuentan por multiplicidad y no con un `Set`, que
|
|
49
|
+
* dejaría colar todas las repeticiones a partir de la primera.
|
|
50
|
+
*/
|
|
51
|
+
export declare function veredictoDeEscritura(antes: HallazgoDeEscritura[] | undefined, despues: HallazgoDeEscritura[]): VeredictoDeEscritura;
|
|
52
|
+
/**
|
|
53
|
+
* Lo que hay DENTRO de un contenido que es entero una cadena JSON (comilla al principio y al
|
|
54
|
+
* final, y parsea a una cadena), o `undefined` si no lo es. Es la forma en que `studio_get_file`
|
|
55
|
+
* manda los ficheros; la comparten la guarda de escritura y la validación tras la descarga.
|
|
56
|
+
*/
|
|
57
|
+
export declare function cadenaJsonEnvuelta(contenido: string): string | undefined;
|
|
58
|
+
/** El código del hallazgo de un fichero XOne guardado como cadena JSON (ver `hallazgoDeCadenaJson`). */
|
|
59
|
+
export declare const CODIGO_CADENA_JSON = "contenido-como-cadena-json";
|
|
60
|
+
/**
|
|
61
|
+
* Un `.xne`/`.xml` cuyo contenido es una CADENA JSON con el XML escapado dentro.
|
|
62
|
+
*
|
|
63
|
+
* Medido en un proyecto real (IXCODE-16): el primer byte era `"` y el XML iba escapado, en
|
|
64
|
+
* `app.xml` y en los `.xne`. El parser del framework ve esa comilla como texto y aborta la carga
|
|
65
|
+
* de `app.xml`, así que la app no arranca y la pantalla se queda en blanco. Es un fallo del
|
|
66
|
+
* CONTENIDO que no depende de lo que hubiera antes —por eso no pasa por la comparación de
|
|
67
|
+
* huellas: un fichero así no tiene ninguna forma legítima—, y que el linter puede no ver.
|
|
68
|
+
*
|
|
69
|
+
* Solo se reconoce lo inequívoco: comilla al principio y al final, que parsee como JSON a una
|
|
70
|
+
* cadena, y que esa cadena empiece por `<`. Un XML válido nunca empieza por comilla.
|
|
71
|
+
*/
|
|
72
|
+
export declare function hallazgoDeCadenaJson(ruta: string, contenido: string): HallazgoDeEscritura | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Cuántos hallazgos se enseñan en el rechazo.
|
|
75
|
+
*
|
|
76
|
+
* Esto acaba dentro del contexto de un modelo, así que tiene tope por lo mismo que las
|
|
77
|
+
* observaciones del crítico visual: para que quepa. Lo que no cabe se CUENTA, que una lista
|
|
78
|
+
* recortada en silencio se lee como la lista entera.
|
|
79
|
+
*/
|
|
80
|
+
export declare const TOPE_DE_HALLAZGOS = 10;
|
|
81
|
+
/**
|
|
82
|
+
* El texto del rechazo, que es lo único que el modelo va a leer.
|
|
83
|
+
*
|
|
84
|
+
* Tres cosas deliberadas:
|
|
85
|
+
*
|
|
86
|
+
* - **Dice que NO se ha escrito nada.** Sin eso, un modelo que recibe un error se queda sin
|
|
87
|
+
* saber si el fichero quedó a medias y lo siguiente que hace es releerlo para averiguarlo.
|
|
88
|
+
* - **Lleva el código, la línea y el mensaje** —que ya trae el arreglo cuando se sabe, como
|
|
89
|
+
* «"font-size" … el atributo que hace esto en XOne es "fontsize"»—. Es el patrón de
|
|
90
|
+
* `xone_navegacion`: el paso siguiente escrito, no un consejo.
|
|
91
|
+
* - **Y NO nombra lo preexistente.** Eso es ruido para quien viene a arreglar otra cosa, y
|
|
92
|
+
* peor: invita a tocar lo que nadie ha pedido, que es la deriva que este repo ya ha pagado
|
|
93
|
+
* tres veces.
|
|
94
|
+
*/
|
|
95
|
+
export declare function motivoDelRechazo(ruta: string, introducidos: HallazgoDeEscritura[]): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** sha256 en hexadecimal minúsculo: el mismo formato que pide `studio_upload_file`. */
|
|
2
|
+
export declare function sha256Hex(datos: string | Uint8Array): string;
|
|
3
|
+
/** Un número con el punto de miles del castellano, sin depender del ICU de la máquina. */
|
|
4
|
+
export declare function conMiles(n: number): string;
|
|
5
|
+
export interface DiferenciaDeTexto {
|
|
6
|
+
/** Legible y medible: «llegó distinto a Studio: 39.990 B en local, 12.004 B en Studio (…)». */
|
|
7
|
+
motivo: string;
|
|
8
|
+
sha256Local: string;
|
|
9
|
+
sha256Studio: string;
|
|
10
|
+
}
|
|
11
|
+
/** `undefined` = llegó igual. Si no, el motivo con las cifras y los dos hashes. */
|
|
12
|
+
export declare function diferenciaDeTexto(local: string, studio: string): DiferenciaDeTexto | undefined;
|
|
13
|
+
/** El motivo de una relectura que no se pudo hacer: el fichero se escribió pero NO está comprobado. */
|
|
14
|
+
export declare function motivoSinComprobar(error: string): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Con qué código está corriendo esto, dicho al arrancar.
|
|
3
|
+
*
|
|
4
|
+
* **Existe por tres rondas perdidas el 11-09-2026.** Un cambio del servidor no se ve hasta
|
|
5
|
+
* parar y volver a arrancar el proceso, mientras que el cliente se lee del DISCO en cada
|
|
6
|
+
* petición (`web/servidor/servidor.ts`) y por tanto se actualiza con solo recargar la
|
|
7
|
+
* página. Así que una consola puede enseñar a la vez lo nuevo del cliente y lo viejo del
|
|
8
|
+
* servidor — que es exactamente lo que pasó, y ni quien miraba la pantalla ni quien leía el
|
|
9
|
+
* código tenían forma de saber qué había vivo dentro de ese proceso. Un identificador al
|
|
10
|
+
* arrancar lo contesta de un vistazo.
|
|
11
|
+
*
|
|
12
|
+
* Es la misma disciplina que el resto: se dice lo que consta y no se rellena lo que no.
|
|
13
|
+
*/
|
|
14
|
+
export interface VersionEnMarcha {
|
|
15
|
+
/** La del `package.json`. Siempre hay. */
|
|
16
|
+
version: string;
|
|
17
|
+
/** El commit corto, si esto es una copia de git. Ausente en un paquete instalado. */
|
|
18
|
+
commit?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Había cambios sin commitear al arrancar.
|
|
21
|
+
*
|
|
22
|
+
* Importa más que el commit: con el árbol sucio, el commit por sí solo MIENTE sobre lo que
|
|
23
|
+
* está corriendo. Ausente es «no se pudo mirar», que no es lo mismo que «estaba limpio» —
|
|
24
|
+
* la distinción de siempre, y aquí decide si la línea puede afirmar algo o no.
|
|
25
|
+
*/
|
|
26
|
+
sucio?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* La línea que se imprime. Pura, para poder probar los cuatro casos sin git.
|
|
30
|
+
*
|
|
31
|
+
* Sin commit no se inventa ninguno: un paquete instalado no tiene, y decir «desconocido»
|
|
32
|
+
* sería ruido. Con el árbol sucio se DICE, porque entonces el commit no describe lo que
|
|
33
|
+
* corre; y si no se pudo mirar, se dice eso y no «limpio».
|
|
34
|
+
*/
|
|
35
|
+
export declare function lineaDeVersion(v: VersionEnMarcha): string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ¿Está bien formado este XML? Puro, sin librerías y sin llamar a nadie.
|
|
3
|
+
*
|
|
4
|
+
* Existe por un turno real (soporte de APPSalud): la persona pegó el error del parser de Studio
|
|
5
|
+
* («'name' is an unexpected token. The expected token is '='. Line 381, position 4») y el agente,
|
|
6
|
+
* sin forma de comprobarlo, revisó el fichero a ojo durante minutos — tenía razón a los dos
|
|
7
|
+
* minutos («está bien formado») y no se lo creyó. Esto contesta la pregunta con un sí o con la
|
|
8
|
+
* línea y la columna, como un parser.
|
|
9
|
+
*
|
|
10
|
+
* Solo la FORMA del XML: etiquetas que abren y cierran en orden, atributos con su `=` y su valor
|
|
11
|
+
* entre comillas, sin repetir, separados por blancos; comentarios (sin `--` dentro), CDATA,
|
|
12
|
+
* instrucciones `<?…?>`, entidades, una sola raíz. **No** sabe nada de XOne: un atributo que XOne
|
|
13
|
+
* no conoce está bien formado (para eso, `xone_atributos`).
|
|
14
|
+
*/
|
|
15
|
+
export type ResultadoXml = {
|
|
16
|
+
ok: true;
|
|
17
|
+
} | {
|
|
18
|
+
ok: false;
|
|
19
|
+
linea: number;
|
|
20
|
+
columna: number;
|
|
21
|
+
motivo: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function comprobarXml(entrada: string): ResultadoXml;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TOPE_DE_ENTRADAS, TOPE_DESCOMPRIMIDO, type EntradaDeZip } from "./zipDeSkill.js";
|
|
2
|
+
export { TOPE_DE_ENTRADAS as TOPE_DE_ENTRADAS_DE_ADJUNTO, TOPE_DESCOMPRIMIDO as TOPE_DESCOMPRIMIDO_DE_ADJUNTO };
|
|
3
|
+
/** ¿Es un `.zip` por su nombre? Lo que se descomprime lo decide la extensión, como el resto de adjuntos. */
|
|
4
|
+
export declare function esZip(nombre: string): boolean;
|
|
5
|
+
/** La carpeta donde se extrae `x.zip`: `x`, al lado del zip. */
|
|
6
|
+
export declare function carpetaDeExtraccion(nombreDelZip: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Un segmento como nombre de adjunto: lo que no es letra o cifra ASCII, punto, guion o guion bajo pasa
|
|
9
|
+
* a «_» («Captura de pantalla.png» → «Captura_de_pantalla.png»), en vez de tirar el zip entero por un
|
|
10
|
+
* espacio. Es SEGURO porque va DESPUÉS de `rutaDeZipAceptable`: la ruta ya es de segmentos llanos, sin
|
|
11
|
+
* `..` ni barras; y lo que salga se vuelve a mirar con `nombreDeAdjuntoAceptable`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function segmentoDeAdjunto(segmento: string): string;
|
|
14
|
+
export interface PlanDeExtraccion {
|
|
15
|
+
/** Cada entrada aceptada: su ruta EN el zip y la ruta relativa a la carpeta de extracción, con `/`. */
|
|
16
|
+
ficheros: {
|
|
17
|
+
enElZip: string;
|
|
18
|
+
destino: string;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Qué se extrae. `entradas` son los FICHEROS del zip (sin las carpetas) con el tamaño que declaran
|
|
23
|
+
* descomprimidos. Devuelve el motivo si no se extrae nada; nunca lanza. `disponible` es lo que aún
|
|
24
|
+
* cabe en los adjuntos de la sesión.
|
|
25
|
+
*/
|
|
26
|
+
export declare function planDeExtraccion(entradas: readonly EntradaDeZip[], disponible?: number): PlanDeExtraccion | {
|
|
27
|
+
error: string;
|
|
28
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instalar una skill desde un `.zip`: QUÉ se acepta y con qué nombre queda.
|
|
3
|
+
*
|
|
4
|
+
* **Este módulo es PURO.** Quién descomprime es `agent/grafo/skills.ts`; aquí vive la regla,
|
|
5
|
+
* que es la parte que hay que poder probar sin un fichero de verdad delante.
|
|
6
|
+
*
|
|
7
|
+
* Un `.zip` que alguien descarga de internet y suelta en esta ventana es la entrada menos
|
|
8
|
+
* de fiar de todo el harness: sus nombres de entrada los eligió quien lo empaquetó. De ahí
|
|
9
|
+
* que la lista de lo que se admite sea BLANCA y no una lista de lo que se rechaza:
|
|
10
|
+
*
|
|
11
|
+
* - **Ninguna entrada puede salir de la carpeta de destino.** Es el «zip slip» de siempre:
|
|
12
|
+
* una entrada llamada `../../.ssh/authorized_keys` escribe donde le da la gana. Se exige
|
|
13
|
+
* una ruta relativa de segmentos llanos, y cualquier otra cosa —`..`, una absoluta, una
|
|
14
|
+
* con `\` (que en Windows ES separador), una con dos puntos de unidad, un byte nulo— se
|
|
15
|
+
* rechaza. No se «normaliza» nada: normalizar es interpretar, e interpretar es donde
|
|
16
|
+
* aparecen los agujeros.
|
|
17
|
+
* - **Tres topes, y los tres son contra un zip BOMBA**: cuánto ocupa descomprimido, cuántas
|
|
18
|
+
* entradas trae y cuánto ocupa la mayor. Un `.zip` de cien kilobytes puede descomprimirse
|
|
19
|
+
* en gigabytes, y el tope del cuerpo HTTP no lo ve.
|
|
20
|
+
* - **Tiene que traer un `SKILL.md`**, porque sin él no es una skill: sería una carpeta de
|
|
21
|
+
* ficheros sueltos que el modelo no puede descubrir.
|
|
22
|
+
*
|
|
23
|
+
* Y el NOMBRE no se pregunta: se DEDUCE, y si no vale se dice cuál valdría. Un campo más en
|
|
24
|
+
* la ventana para algo que el propio `.zip` ya contesta es una pregunta que no lo es.
|
|
25
|
+
*/
|
|
26
|
+
/** Lo que ocupa el `.zip` que se sube, en bytes. Es el tope del cuerpo HTTP. */
|
|
27
|
+
export declare const TOPE_DEL_ZIP: number;
|
|
28
|
+
/** Lo que puede ocupar DESCOMPRIMIDO. El de arriba no lo ve: un zip bomba cabe en nada. */
|
|
29
|
+
export declare const TOPE_DESCOMPRIMIDO: number;
|
|
30
|
+
/** Cuántos ficheros puede traer. Una skill son unas decenas; mil es otra cosa. */
|
|
31
|
+
export declare const TOPE_DE_ENTRADAS = 500;
|
|
32
|
+
/** Una entrada del `.zip`, ya descomprimida por quien sabe hacerlo. */
|
|
33
|
+
export interface EntradaDeZip {
|
|
34
|
+
/** La ruta tal como viene DENTRO del zip, sin tocar. */
|
|
35
|
+
ruta: string;
|
|
36
|
+
bytes: number;
|
|
37
|
+
}
|
|
38
|
+
/** Lo que hay que escribir, y con qué nombre. */
|
|
39
|
+
export interface PlanDeInstalacion {
|
|
40
|
+
/** El nombre de la carpeta que queda: un slug. */
|
|
41
|
+
nombre: string;
|
|
42
|
+
/** Las rutas ACEPTADAS, relativas a la carpeta de la skill y con `/`. */
|
|
43
|
+
ficheros: string[];
|
|
44
|
+
/** Cuántos segmentos hay que quitarle a cada ruta del zip. 0 o 1. */
|
|
45
|
+
prefijo: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* ¿Esta ruta de dentro del zip se puede escribir bajo una carpeta?
|
|
49
|
+
*
|
|
50
|
+
* Lista BLANCA de forma, no un `startsWith` ni un `includes("..")`: es la misma postura que
|
|
51
|
+
* `esRutaDeArtefacto`. Se admite una sucesión de segmentos llanos separados por `/`, y nada
|
|
52
|
+
* más — así lo que no se entiende queda FUERA por omisión en vez de colarse por el hueco que
|
|
53
|
+
* no se pensó.
|
|
54
|
+
*/
|
|
55
|
+
export declare function rutaDeZipAceptable(ruta: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* El único segmento de primer nivel que comparten TODAS las entradas, si lo hay.
|
|
58
|
+
*
|
|
59
|
+
* Exportada porque `agent/dispositivos/descargaDeHerramientas.ts` necesita la MISMA
|
|
60
|
+
* pregunta —¿este zip trae una sola carpeta envolvente?— para el JDK y las cmdline-tools de
|
|
61
|
+
* Android, que hay que renombrar a una ruta fija tras descomprimir: una segunda copia de esto
|
|
62
|
+
* es donde divergiría en silencio.
|
|
63
|
+
*/
|
|
64
|
+
export declare function carpetaComun(rutas: readonly string[]): string | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Decide qué se instala y cómo se va a llamar. Devuelve el motivo si no se puede, nunca lanza.
|
|
67
|
+
*
|
|
68
|
+
* `nombreDelFichero` es el nombre del `.zip` que subió la persona, y solo se usa cuando el
|
|
69
|
+
* zip trae el `SKILL.md` en su raíz — o sea, cuando no hay carpeta dentro de la que sacar el
|
|
70
|
+
* nombre. Es lo que la persona ve en su disco, así que es lo que menos la sorprende.
|
|
71
|
+
*/
|
|
72
|
+
export declare function planDeInstalacion(entradas: readonly EntradaDeZip[], nombreDelFichero: string): PlanDeInstalacion | {
|
|
73
|
+
error: string;
|
|
74
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type Escribir } from "../cli/stdio.js";
|
|
2
|
+
import type { EjecutorDeTurno } from "../cli/consola.js";
|
|
3
|
+
import { type CierreDeTarea, type Entrega, type ResultadoDeTurno, type VeredictoDeTarea } from "../core/entrega.js";
|
|
4
|
+
import type { FuentesDeEleccion } from "../core/modelos.js";
|
|
5
|
+
import type { MotorDeAgente } from "../core/motor.js";
|
|
6
|
+
import type { JuezDeTareaPort } from "../core/ports.js";
|
|
7
|
+
export interface OpcionesDeTareaAutonoma {
|
|
8
|
+
raiz: string;
|
|
9
|
+
encargo: string;
|
|
10
|
+
/** Los modelos por papel, como objetos: nada se lee de `~/.xonecode/config.json`. */
|
|
11
|
+
fuentes: FuentesDeEleccion;
|
|
12
|
+
motor?: MotorDeAgente;
|
|
13
|
+
/** Omisión: `TOPE_DE_RONDAS_DE_TAREA`, el mismo de una tarea de la web. */
|
|
14
|
+
topeDeRondas?: number;
|
|
15
|
+
/** Omisión: `TOPE_DEL_JUEZ_MS`, el mismo del corredor. */
|
|
16
|
+
topeDelJuezMs?: number;
|
|
17
|
+
/** Por dónde sale el recorrido del turno (texto). Omisión: a ningún sitio. */
|
|
18
|
+
informar?: Escribir;
|
|
19
|
+
/** Costuras de test. Omisión: el ejecutor real y el juez real con el papel `afilado`. */
|
|
20
|
+
ejecutor?: EjecutorDeTurno;
|
|
21
|
+
juez?: JuezDeTareaPort;
|
|
22
|
+
}
|
|
23
|
+
export interface ResultadoDeTareaAutonoma {
|
|
24
|
+
sesion: string;
|
|
25
|
+
resultado?: ResultadoDeTurno;
|
|
26
|
+
entrega: Entrega;
|
|
27
|
+
veredicto?: VeredictoDeTarea;
|
|
28
|
+
cierre: CierreDeTarea;
|
|
29
|
+
/** Markdown con `## CRITICAL` / `## Observaciones`, el mismo que va al ticket en la web. */
|
|
30
|
+
comentario: string;
|
|
31
|
+
/** Lo último que dijo el agente, si dijo algo. */
|
|
32
|
+
resumen?: string;
|
|
33
|
+
/** Rutas autorizadas sin aprobación (relativas, sin repetidos). */
|
|
34
|
+
autorizadas: string[];
|
|
35
|
+
}
|
|
36
|
+
export declare function ejecutarTareaAutonoma(opciones: OpcionesDeTareaAutonoma): Promise<ResultadoDeTareaAutonoma>;
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UNA tarea autónoma de punta a punta, sin cola, sin vestíbulo y sin web.
|
|
3
|
+
*
|
|
4
|
+
* Es lo que el corredor (`web/servidor/corredorDeTareas.ts`) hace con cada tarea, compuesto con
|
|
5
|
+
* las MISMAS piezas: el ejecutor real (`crearEjecutorReal`), la consola de tarea
|
|
6
|
+
* (`crearConsolaDeTarea`: escribe sin preguntar y resuelve sus dudas sola), el commit sellado
|
|
7
|
+
* del turno (`commitDeTurno`), y las funciones PURAS de la entrega (`core/entrega.ts`), que son
|
|
8
|
+
* las que cambian a menudo y aquí no se copian. Lo que sí se repite es el pegamento de
|
|
9
|
+
* `puertaDeEntrega` del corredor —el juez con plazo y el motivo de su fallo—, porque allí es un
|
|
10
|
+
* cierre privado y el corredor no se toca. **Si cambias `puertaDeEntrega`, mira si esto tiene
|
|
11
|
+
* que cambiar igual.**
|
|
12
|
+
*
|
|
13
|
+
* Quien lo usa hoy es xonecode-copilot, a través de `xonecode/lib`. El corredor NO lo usa.
|
|
14
|
+
*/
|
|
15
|
+
import { randomUUID } from "node:crypto";
|
|
16
|
+
import { crearEjecutorReal } from "../cli/main.js";
|
|
17
|
+
import { crearPielStdio } from "../cli/stdio.js";
|
|
18
|
+
import { crearTema } from "../cli/tema.js";
|
|
19
|
+
import { crearConsolaDeTarea, ErrorDeTareaSinHumano } from "../web/servidor/consolaDeTarea.js";
|
|
20
|
+
import { revisionConGit, TOPE_DEL_JUEZ_MS } from "../web/servidor/corredorDeTareas.js";
|
|
21
|
+
import { rutaRelativaDeTarea, TOPE_DE_RONDAS_DE_TAREA } from "../core/tareas.js";
|
|
22
|
+
import { cierreDeLaEntrega, condicionesDeEntrega, decisionDeEntrega, medidaDeEntrega, motivoDePreguntaPendiente, } from "../core/entrega.js";
|
|
23
|
+
import { comentarioDeCierre } from "../core/gestorDeTareas.js";
|
|
24
|
+
import { cambiosDeSesion, commitsDeSesion, marcarSesion } from "../agent/sesiones/sesionGit.js";
|
|
25
|
+
import { commitDeTurno } from "../agent/sesiones/gitSync.js";
|
|
26
|
+
import { crearJuezDeTarea, ErrorDelJuezDeTarea, invocarConModelos } from "../agent/tareas/juezDeTarea.js";
|
|
27
|
+
import { Modelos } from "../agent/config/modelos.js";
|
|
28
|
+
/**
|
|
29
|
+
* La piel del turno que, además de pintar, se queda con lo ÚLTIMO que dijo el agente: la
|
|
30
|
+
* última tanda de `token` seguidos. Es lo que la web saca del último acto `asistente`; aquí no
|
|
31
|
+
* hay actos.
|
|
32
|
+
*
|
|
33
|
+
* Una `linea` (una tool, un aviso) NO borra lo dicho: solo hace que el siguiente `token` empiece
|
|
34
|
+
* una tanda nueva. Si la borrara, las líneas que llegan DESPUÉS de la respuesta final —la del
|
|
35
|
+
* verificador, el juez del turno, una reparación— dejarían el resumen vacío justo cuando el turno
|
|
36
|
+
* acabó bien.
|
|
37
|
+
*
|
|
38
|
+
* El tema va SIN color a propósito: quien llama puede tener un TTY, y el de omisión instalaría el
|
|
39
|
+
* panel que se repinta con escapes ANSI dentro de un texto que es para leer o para guardar.
|
|
40
|
+
*/
|
|
41
|
+
function pielQueRecuerda(escribir) {
|
|
42
|
+
const base = crearPielStdio(escribir, crearTema(false));
|
|
43
|
+
let actual = "";
|
|
44
|
+
let tandaCerrada = true;
|
|
45
|
+
const piel = {
|
|
46
|
+
...base,
|
|
47
|
+
token: (texto) => {
|
|
48
|
+
if (tandaCerrada) {
|
|
49
|
+
actual = "";
|
|
50
|
+
tandaCerrada = false;
|
|
51
|
+
}
|
|
52
|
+
actual += texto;
|
|
53
|
+
base.token(texto);
|
|
54
|
+
},
|
|
55
|
+
linea: (texto, detalle) => {
|
|
56
|
+
tandaCerrada = true;
|
|
57
|
+
base.linea(texto, detalle);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
return { piel, ultimo: () => (actual.trim() === "" ? undefined : actual.trim()) };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* El motivo de un juez que REVENTÓ, con la regla del corredor (`puertaDeEntrega#motivoDelJuez`):
|
|
64
|
+
* un `ErrorDelJuezDeTarea` ya dice qué pasó y se usa tal cual; cualquier otra cosa se nombra
|
|
65
|
+
* desde aquí, con el `code` si es un error de Node (su mensaje lleva rutas de la máquina) o la
|
|
66
|
+
* primera línea del mensaje si es nuestro.
|
|
67
|
+
*/
|
|
68
|
+
function motivoDelJuez(error) {
|
|
69
|
+
return error instanceof ErrorDelJuezDeTarea
|
|
70
|
+
? unaLinea(error)
|
|
71
|
+
: `no se pudo consultar al juez de QA (${sinRutas(error)})`;
|
|
72
|
+
}
|
|
73
|
+
function unaLinea(error) {
|
|
74
|
+
const mensaje = error instanceof Error ? error.message : String(error);
|
|
75
|
+
return mensaje.split(/\r?\n/)[0].slice(0, 160);
|
|
76
|
+
}
|
|
77
|
+
function sinRutas(error) {
|
|
78
|
+
if (typeof error === "object" && error !== null && "code" in error) {
|
|
79
|
+
const code = error.code;
|
|
80
|
+
return typeof code === "string" ? code : error instanceof Error ? error.name : "error";
|
|
81
|
+
}
|
|
82
|
+
return unaLinea(error);
|
|
83
|
+
}
|
|
84
|
+
/** Espera la promesa como mucho `ms`. Limpia el temporizador: si no, el proceso de quien llama
|
|
85
|
+
* no podría salir hasta que venciera el plazo, aunque el juez hubiera contestado ya. */
|
|
86
|
+
async function conPlazo(promesa, ms) {
|
|
87
|
+
let temporizador;
|
|
88
|
+
const plazo = new Promise((resuelto) => {
|
|
89
|
+
temporizador = setTimeout(() => resuelto(false), ms);
|
|
90
|
+
});
|
|
91
|
+
try {
|
|
92
|
+
return await Promise.race([promesa.then(() => true), plazo]);
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
if (temporizador !== undefined)
|
|
96
|
+
clearTimeout(temporizador);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** El asunto del commit, como el del vestíbulo (`xonecode: <título> [tarea …]`): aquí no hay
|
|
100
|
+
* índice de sesiones del que sacar un título, así que sale de la primera línea del encargo. */
|
|
101
|
+
function mensajeDeCommit(encargo) {
|
|
102
|
+
const titulo = (encargo.split("\n")[0] ?? "").trim().slice(0, 72);
|
|
103
|
+
return `xonecode: ${titulo === "" ? "tarea sin título" : titulo} [tarea autónoma]`;
|
|
104
|
+
}
|
|
105
|
+
export async function ejecutarTareaAutonoma(opciones) {
|
|
106
|
+
const { raiz, encargo } = opciones;
|
|
107
|
+
const escribir = opciones.informar ?? (() => { });
|
|
108
|
+
const sesion = randomUUID();
|
|
109
|
+
// La foto del ANTES, ahora: es lo que permite decir después qué cambió esta sesión aunque el
|
|
110
|
+
// commit no se pudiera sellar (`desde-apertura`).
|
|
111
|
+
await marcarSesion(raiz, sesion);
|
|
112
|
+
let aparcada;
|
|
113
|
+
/**
|
|
114
|
+
* Lo autorizado, normalizado por la MISMA regla que el corredor guarda en la tarea
|
|
115
|
+
* (`conAutorizadas` → `rutaRelativaDeTarea`): relativas, sin repetidos y sin huecos. De esta
|
|
116
|
+
* lista sale la cuenta que mide «autorizó y no aterrizó nada» y lo que ve el juez, así que
|
|
117
|
+
* tiene que ser la misma que en la web.
|
|
118
|
+
*/
|
|
119
|
+
const autorizadas = [];
|
|
120
|
+
const anotar = (ficheros) => {
|
|
121
|
+
for (const cruda of ficheros) {
|
|
122
|
+
const ruta = rutaRelativaDeTarea(cruda).trim();
|
|
123
|
+
if (ruta !== "" && !autorizadas.includes(ruta))
|
|
124
|
+
autorizadas.push(ruta);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const { piel, ultimo } = pielQueRecuerda(escribir);
|
|
128
|
+
const consola = {
|
|
129
|
+
...crearConsolaDeTarea({
|
|
130
|
+
aparcar: (motivo) => void (aparcada ??= motivo),
|
|
131
|
+
autorizado: anotar,
|
|
132
|
+
escribir,
|
|
133
|
+
piel: () => piel,
|
|
134
|
+
// Una tarea no elige modelos: estos dos solo los usan los comandos de barra.
|
|
135
|
+
catalogoModelos: { listar: async () => [] },
|
|
136
|
+
guardarModeloGlobal: () => ({ ruta: "", id: "" }),
|
|
137
|
+
}),
|
|
138
|
+
topeDeAprobaciones: opciones.topeDeRondas ?? TOPE_DE_RONDAS_DE_TAREA,
|
|
139
|
+
};
|
|
140
|
+
// La sesión real se guarda para CERRARLA al acabar: quien llama es un proceso que sigue vivo
|
|
141
|
+
// después de la tarea, y una llamada al modelo colgada no tiene por qué sobrevivirle.
|
|
142
|
+
let sesionAbierta;
|
|
143
|
+
const ejecutor = opciones.ejecutor ?? crearEjecutorReal((s) => void (sesionAbierta = s));
|
|
144
|
+
let resultado;
|
|
145
|
+
try {
|
|
146
|
+
resultado =
|
|
147
|
+
(await ejecutor(encargo, { hilo: sesion, raiz, fuentes: opciones.fuentes, ...(opciones.motor === undefined ? {} : { motor: opciones.motor }) }, consola)) ?? undefined;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
// Pedir a una persona es la forma de aparcar de esta consola (ver `ErrorDeTareaSinHumano`):
|
|
151
|
+
// se convierte en motivo. Cualquier otro error SÍ sale, pero después del `finally`.
|
|
152
|
+
if (!(error instanceof ErrorDeTareaSinHumano))
|
|
153
|
+
throw error;
|
|
154
|
+
aparcada ??= error.message;
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
sesionAbierta?.cerrar();
|
|
158
|
+
/**
|
|
159
|
+
* El commit SIEMPRE, como en el `finally` del turno del vestíbulo: también si se aparcó o si
|
|
160
|
+
* el turno reventó. Lo escrito está en el disco, y sin commit el árbol queda sucio y nada se
|
|
161
|
+
* puede atribuir a esta sesión. Se ESPERA: la entrega le pregunta a git justo después.
|
|
162
|
+
*/
|
|
163
|
+
try {
|
|
164
|
+
const hecho = await commitDeTurno(raiz, mensajeDeCommit(encargo), sesion);
|
|
165
|
+
// El motivo de git no se repite: puede llevar rutas de la máquina.
|
|
166
|
+
if (hecho.via === "fallo")
|
|
167
|
+
escribir("\naviso: no se pudo commitear el turno de la tarea\n");
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
escribir("\naviso: no se pudo commitear el turno de la tarea\n");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
let entrega;
|
|
174
|
+
let veredicto;
|
|
175
|
+
if (resultado?.preguntaPendiente !== undefined) {
|
|
176
|
+
// Un turno que acaba esperando una respuesta no ha terminado nada: sin juez (core/entrega.ts).
|
|
177
|
+
entrega = { entregable: false, motivo: motivoDePreguntaPendiente(resultado.preguntaPendiente) };
|
|
178
|
+
}
|
|
179
|
+
else if (aparcada !== undefined || resultado === undefined) {
|
|
180
|
+
entrega = { entregable: false, motivo: aparcada ?? "el turno no devolvió resultado" };
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// A partir de aquí, `puertaDeEntrega` del corredor: medir, comprobar por código, y solo
|
|
184
|
+
// entonces preguntar al juez, con plazo.
|
|
185
|
+
const revision = await revisionConGit(cambiosDeSesion)(raiz, sesion).catch(() => ({ revisable: false }));
|
|
186
|
+
const medida = medidaDeEntrega(resultado, revision, autorizadas.length);
|
|
187
|
+
const condiciones = condicionesDeEntrega(medida);
|
|
188
|
+
if (!condiciones.entregable) {
|
|
189
|
+
entrega = condiciones;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
const juez = opciones.juez ?? crearJuezDeTarea({ invocar: invocarConModelos(new Modelos(opciones.fuentes)) });
|
|
193
|
+
const tope = opciones.topeDelJuezMs ?? TOPE_DEL_JUEZ_MS;
|
|
194
|
+
// La respuesta va a una variable PROPIA y solo pasa a `veredicto` si llegó a tiempo: una
|
|
195
|
+
// respuesta tardía, que sigue viva en segundo plano, no puede contradecir al motivo.
|
|
196
|
+
let respuesta;
|
|
197
|
+
let fallo;
|
|
198
|
+
let reventó = false;
|
|
199
|
+
const consulta = juez
|
|
200
|
+
.juzgar({
|
|
201
|
+
encargo,
|
|
202
|
+
raiz,
|
|
203
|
+
autorizadas,
|
|
204
|
+
verificador: medida.verificador,
|
|
205
|
+
...(medida.hallazgos === undefined ? {} : { hallazgos: medida.hallazgos }),
|
|
206
|
+
...(medida.preexistentes === undefined ? {} : { preexistentes: medida.preexistentes }),
|
|
207
|
+
...(medida.cambiados === undefined ? {} : { cambiados: medida.cambiados }),
|
|
208
|
+
...(medida.comprobacionesVisuales === undefined ? {} : { comprobacionesVisuales: medida.comprobacionesVisuales }),
|
|
209
|
+
})
|
|
210
|
+
.then((v) => void (respuesta = v))
|
|
211
|
+
.catch((error) => {
|
|
212
|
+
reventó = true;
|
|
213
|
+
fallo = error;
|
|
214
|
+
});
|
|
215
|
+
if (!(await conPlazo(consulta, tope))) {
|
|
216
|
+
// La consulta se abandona: no hay con qué abortarla desde aquí.
|
|
217
|
+
entrega = { entregable: false, motivo: `el juez de QA no contestó en ${Math.round(tope / 1000)} s` };
|
|
218
|
+
}
|
|
219
|
+
else if (reventó) {
|
|
220
|
+
entrega = { entregable: false, motivo: motivoDelJuez(fallo) };
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
veredicto = respuesta;
|
|
224
|
+
entrega = decisionDeEntrega(medida, veredicto);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const cierre = cierreDeLaEntrega(entrega, veredicto);
|
|
229
|
+
const [cambios, commits] = await Promise.all([
|
|
230
|
+
cambiosDeSesion(raiz, sesion).catch(() => ({ via: "sin-marca", ficheros: [] })),
|
|
231
|
+
commitsDeSesion(raiz, sesion).catch(() => []),
|
|
232
|
+
]);
|
|
233
|
+
const errores = (resultado?.hallazgos ?? []).filter((h) => h.severidad === "error").length;
|
|
234
|
+
const avisos = (resultado?.hallazgos ?? []).length - errores;
|
|
235
|
+
const resumen = ultimo();
|
|
236
|
+
const comentario = comentarioDeCierre({
|
|
237
|
+
ficheros: cambios.ficheros.map((f) => ({ ruta: f.ruta, clase: f.clase })),
|
|
238
|
+
commits,
|
|
239
|
+
atribucion: cambios.via,
|
|
240
|
+
// «no corrió» no es verde: sin veredicto, `comentarioDeCierre` lo dice así.
|
|
241
|
+
...(resultado === undefined || resultado.verificador === "no-corrio"
|
|
242
|
+
? {}
|
|
243
|
+
: { veredicto: { verde: resultado.verificador === "verde", errores, avisos } }),
|
|
244
|
+
...(resumen === undefined ? {} : { resumen }),
|
|
245
|
+
criticos: cierre.criticos,
|
|
246
|
+
observaciones: cierre.observaciones,
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
sesion,
|
|
250
|
+
...(resultado === undefined ? {} : { resultado }),
|
|
251
|
+
entrega,
|
|
252
|
+
...(veredicto === undefined ? {} : { veredicto }),
|
|
253
|
+
cierre,
|
|
254
|
+
comentario,
|
|
255
|
+
...(resumen === undefined ? {} : { resumen }),
|
|
256
|
+
autorizadas,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=tareaAutonoma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tareaAutonoma.js","sourceRoot":"","sources":["../../src/lib/tareaAutonoma.ts"],"names":[],"mappings":"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"}
|
package/dist/lib.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xonecode/lib`: la API de librería de xonecode, para usarlo DESDE OTRO programa (hoy,
|
|
3
|
+
* xonecode-copilot) sin consola, sin web y sin nadie delante.
|
|
4
|
+
*
|
|
5
|
+
* Solo reexporta. Lo que entra aquí es CONTRATO: cambiar una firma de las de abajo rompe a
|
|
6
|
+
* quien lo use. Lo que no está aquí no es público, aunque se pueda importar desde `dist/`.
|
|
7
|
+
*
|
|
8
|
+
* Importar esto no carga ink ni React (`lib.test.ts`): la TUI y la web entran por `import()`
|
|
9
|
+
* dinámico desde `cli/main.ts`.
|
|
10
|
+
*/
|
|
11
|
+
export { ClientCredentialsProvider } from "@modelcontextprotocol/sdk/client/auth-extensions.js";
|
|
12
|
+
export { conectarStudioDeServidor, type ConexionDeServidor, type OpcionesDeConexionDeServidor, } from "./agent/cloudstudio/conexionDeServidor.js";
|
|
13
|
+
export { crearRama } from "./agent/cloudstudio/crearRama.js";
|
|
14
|
+
export { clienteCloudStudio } from "./agent/cloudstudio/cloudstudioClient.js";
|
|
15
|
+
export { SCOPES_CLOUDSTUDIO_AGENTE, type InvocarMcp, type ProyectoRemoto } from "./agent/cloudstudio/cloudstudioMcp.js";
|
|
16
|
+
export { descargarProyecto, type OpcionesDeDescarga } from "./agent/cloudstudio/descarga.js";
|
|
17
|
+
export { subir, type OpcionesDeSubida, type InformeDeSubida, type FalloDeSubida } from "./agent/cloudstudio/subida.js";
|
|
18
|
+
export { prepararRepo, vaciarCopia, cambiosPendientes } from "./agent/sesiones/gitSync.js";
|
|
19
|
+
export { ejecutarTareaAutonoma, type OpcionesDeTareaAutonoma, type ResultadoDeTareaAutonoma, } from "./lib/tareaAutonoma.js";
|
|
20
|
+
/**
|
|
21
|
+
* Siembra los agentes de serie en una casa (`base`): copilot los deja en el `HOME` temporal de la
|
|
22
|
+
* ejecución ANTES de superponer los suyos, para que el raíz tenga a sus especialistas.
|
|
23
|
+
*/
|
|
24
|
+
export { sembrarAgentes, rutaDeAgentes } from "./agent/subagentes/agentesEnDisco.js";
|
|
25
|
+
export { Modelos } from "./agent/config/modelos.js";
|
|
26
|
+
export { VARIABLES_POR_PROVEEDOR, type FuentesDeEleccion } from "./core/modelos.js";
|
|
27
|
+
export { TOPE_DE_RONDAS_DE_TAREA } from "./core/tareas.js";
|
|
28
|
+
export type { CloudStudioPort } from "./core/ports.js";
|
|
29
|
+
export type { EstadoDeSync, OperacionOmitida } from "./core/cloudstudio.js";
|
|
30
|
+
export type { Entrega, CierreDeTarea, ResultadoDeTurno, VeredictoDeTarea } from "./core/entrega.js";
|
|
31
|
+
export type { MotorDeAgente } from "./core/motor.js";
|
package/dist/lib.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xonecode/lib`: la API de librería de xonecode, para usarlo DESDE OTRO programa (hoy,
|
|
3
|
+
* xonecode-copilot) sin consola, sin web y sin nadie delante.
|
|
4
|
+
*
|
|
5
|
+
* Solo reexporta. Lo que entra aquí es CONTRATO: cambiar una firma de las de abajo rompe a
|
|
6
|
+
* quien lo use. Lo que no está aquí no es público, aunque se pueda importar desde `dist/`.
|
|
7
|
+
*
|
|
8
|
+
* Importar esto no carga ink ni React (`lib.test.ts`): la TUI y la web entran por `import()`
|
|
9
|
+
* dinámico desde `cli/main.ts`.
|
|
10
|
+
*/
|
|
11
|
+
export { ClientCredentialsProvider } from "@modelcontextprotocol/sdk/client/auth-extensions.js";
|
|
12
|
+
export { conectarStudioDeServidor, } from "./agent/cloudstudio/conexionDeServidor.js";
|
|
13
|
+
export { crearRama } from "./agent/cloudstudio/crearRama.js";
|
|
14
|
+
export { clienteCloudStudio } from "./agent/cloudstudio/cloudstudioClient.js";
|
|
15
|
+
export { SCOPES_CLOUDSTUDIO_AGENTE } from "./agent/cloudstudio/cloudstudioMcp.js";
|
|
16
|
+
export { descargarProyecto } from "./agent/cloudstudio/descarga.js";
|
|
17
|
+
export { subir } from "./agent/cloudstudio/subida.js";
|
|
18
|
+
export { prepararRepo, vaciarCopia, cambiosPendientes } from "./agent/sesiones/gitSync.js";
|
|
19
|
+
export { ejecutarTareaAutonoma, } from "./lib/tareaAutonoma.js";
|
|
20
|
+
/**
|
|
21
|
+
* Siembra los agentes de serie en una casa (`base`): copilot los deja en el `HOME` temporal de la
|
|
22
|
+
* ejecución ANTES de superponer los suyos, para que el raíz tenga a sus especialistas.
|
|
23
|
+
*/
|
|
24
|
+
export { sembrarAgentes, rutaDeAgentes } from "./agent/subagentes/agentesEnDisco.js";
|
|
25
|
+
export { Modelos } from "./agent/config/modelos.js";
|
|
26
|
+
export { VARIABLES_POR_PROVEEDOR } from "./core/modelos.js";
|
|
27
|
+
export { TOPE_DE_RONDAS_DE_TAREA } from "./core/tareas.js";
|
|
28
|
+
//# sourceMappingURL=lib.js.map
|