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,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DETENER y replanificar (IXCODE-4): la persona pulsa el botón mientras el agente trabaja, los
|
|
3
|
+
* especialistas que estaban en marcha cierran con un resumen de lo hecho y lo que les quedaba, y
|
|
4
|
+
* el orquestador recibe esos resúmenes con el mensaje de la persona y replanifica.
|
|
5
|
+
*
|
|
6
|
+
* **No es una `Nota`, y a propósito**: una nota se entrega a CADA hilo como encargo (`notas.ts`),
|
|
7
|
+
* y una orden de parar repartida así haría que el hijo parase y el raíz… volviera a encargar lo
|
|
8
|
+
* mismo. Aquí cada destinatario recibe SU texto: el hijo, «para y resume»; el raíz, «replanifica
|
|
9
|
+
* sin repetir lo hecho».
|
|
10
|
+
*
|
|
11
|
+
* **A quién se detiene**: a los hijos nacidos de una llamada del raíz que empezó ANTES de pulsar.
|
|
12
|
+
* No basta «los vivos al pulsar»: si se pulsa mientras el raíz está decidiendo delegar, el hijo
|
|
13
|
+
* que sale de esa decisión nace después, pero de un plan que la persona ya no quiere. Y los que
|
|
14
|
+
* el raíz delegue DESPUÉS de leer la orden corren normal —son el plan nuevo—.
|
|
15
|
+
*
|
|
16
|
+
* **Cómo para un hijo, sin tocar la librería**: la orden entra por `preLLMProcessors` antes de su
|
|
17
|
+
* siguiente llamada, y SU modelo (`modeloParaTrueforge`, construido por hilo en `crearHijo`) tira
|
|
18
|
+
* las tool calls de esa respuesta: una respuesta sin tool calls cierra el hilo con normalidad
|
|
19
|
+
* (`AGENT_DONE`) y su texto le llega al padre como resultado de `create_sub_agent`. Se FILTRA lo
|
|
20
|
+
* que devuelve el modelo, no se le quitan las tools: con el historial lleno de llamadas, algún
|
|
21
|
+
* proveedor rechaza una petición sin la definición de tools.
|
|
22
|
+
*
|
|
23
|
+
* **Y una llamada EN CURSO se corta** (`corte`): medido con el botón, el analista estaba dentro de
|
|
24
|
+
* una llamada de 60 s generando un informe entero cuando se pulsó, y sin corte esa llamada acababa
|
|
25
|
+
* escribiéndolo. Cada hijo lleva su `AbortController`, que aborta SOLO su stream; el modelo del
|
|
26
|
+
* hijo lo captura y pide el resumen en el acto (`modeloLangchain.ts#corte`). Lo que NO se corta:
|
|
27
|
+
* un comando de shell en curso, que termina primero —la orden llega en la llamada siguiente—.
|
|
28
|
+
*/
|
|
29
|
+
/** Lo que llega al padre si el hijo, tras filtrar, no dejó texto. */
|
|
30
|
+
export declare const RESUMEN_DE_RELLENO = "[Detenido a petici\u00F3n de la persona antes de poder resumir lo hecho.]";
|
|
31
|
+
export declare function textoDeDetencionParaHijo(texto: string): string;
|
|
32
|
+
export declare function textoDeDetencionParaRaiz(texto: string): string;
|
|
33
|
+
/** El estado de la detención de UN turno. Lo crea la sesión y lo vacía al cerrar el turno. */
|
|
34
|
+
export interface Detencion {
|
|
35
|
+
/** Lo que la persona escribió al pulsar; puede ir vacío. */
|
|
36
|
+
texto: string;
|
|
37
|
+
/** Se detienen los hijos nacidos de una llamada del raíz con índice ≤ éste. */
|
|
38
|
+
hastaLlamadaDelRaiz: number;
|
|
39
|
+
/** Hilos hijo que ya recibieron la orden (y cuyo modelo, desde entonces, no llama tools). */
|
|
40
|
+
avisados: Set<string>;
|
|
41
|
+
raizAvisado: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** Lleva la cuenta que decide a quién se detiene: cuántas llamadas lleva el raíz, y de cuál nació
|
|
44
|
+
* cada hijo. Uno por sesión; `reiniciar` al empezar cada turno. */
|
|
45
|
+
export declare function crearControlDeDetencion(hiloRaiz: string): {
|
|
46
|
+
reiniciar(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Cuántos hijos trabajan a la vez AHORA: los nacidos de la última llamada del raíz. Mientras un
|
|
49
|
+
* hijo vive, el raíz espera su resultado y no vuelve a llamar al modelo, así que lo nacido de
|
|
50
|
+
* llamadas anteriores ya terminó. Lo usa el reparto de notas (`notas.ts`).
|
|
51
|
+
*/
|
|
52
|
+
hijosVivos(): number;
|
|
53
|
+
/** Al crear un hijo: nace de la llamada del raíz en curso. */
|
|
54
|
+
nacio(threadId: string): void;
|
|
55
|
+
detener(texto: string): void;
|
|
56
|
+
/** Para el modelo de un hijo, al empezar cada llamada: su señal de corte y la orden que se le da
|
|
57
|
+
* si se corta. Darla lo cuenta como avisado —no la recibe otra vez por el procesador—. */
|
|
58
|
+
corte(threadId: string): {
|
|
59
|
+
senal: AbortSignal;
|
|
60
|
+
orden: () => string;
|
|
61
|
+
} | undefined;
|
|
62
|
+
/** Para el modelo de un hijo: si ya recibió la orden, su respuesta no puede llamar tools. */
|
|
63
|
+
soloTexto(threadId: string): boolean;
|
|
64
|
+
/** Lo que se le mete a ESE hilo antes de su llamada, si algo. Cuenta las llamadas del raíz. */
|
|
65
|
+
antesDeLlamar(threadId: string): string | undefined;
|
|
66
|
+
/** La orden que NADIE llegó a leer —ni el raíz— sale como el turno siguiente, igual que una
|
|
67
|
+
* nota sobrante. Con texto vacío no queda nada que mandar. */
|
|
68
|
+
sobrante(): string | undefined;
|
|
69
|
+
};
|
|
70
|
+
export type ControlDeDetencion = ReturnType<typeof crearControlDeDetencion>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quién no arranca hasta que otro termine, entre HIJOS que el orquestador lanzó a la vez.
|
|
3
|
+
*
|
|
4
|
+
* El orquestador delega en paralelo cuando le parece independiente, y no siempre lo es: en una pasada real lanzó a
|
|
5
|
+
* `developer-xone` y a `designer-xone` a la vez, el desarrollador escribió el `.xne` antes de que el diseñador
|
|
6
|
+
* terminara y **9 de los 26 recursos del diseñador se quedaron sin usar**. La cola por FICHERO solo evita que dos
|
|
7
|
+
* escriban el mismo; no sabe de dependencias.
|
|
8
|
+
*
|
|
9
|
+
* ## Por qué NO se espera bloqueando (y la primera versión lo hacía)
|
|
10
|
+
*
|
|
11
|
+
* Es un dato del `.md` (`espera: [designer-xone]`). La primera versión paraba al desarrollador ANTES de cada
|
|
12
|
+
* llamada al modelo mientras el diseñador estuviera vivo, y **atascó la pasada**: la librería ejecuta todos los hilos
|
|
13
|
+
* activos juntos y solo devuelve el control cuando TODOS terminan su paso, y una aprobación de escritura del
|
|
14
|
+
* diseñador solo se atiende al devolver el control. El desarrollador, parado dentro de su espera, impedía que
|
|
15
|
+
* volviera, y el diseñador no podía acabar sin aprobación: un bloqueo mutuo, con la CPU a cero y sin ningún error. Los
|
|
16
|
+
* tests con dobles no lo vieron porque el diseñador doble no pedía aprobación.
|
|
17
|
+
*
|
|
18
|
+
* Así que ahora **no bloquea nunca**: si al crear el hijo hay uno vivo —o anunciado por el mismo mensaje del
|
|
19
|
+
* orquestador— de los que declara, el hijo **no arranca** y su llamada se devuelve al instante diciéndolo. El
|
|
20
|
+
* orquestador, que ya tiene el informe del otro cuando lo recibe, vuelve a llamarlo con él en el encargo.
|
|
21
|
+
*/
|
|
22
|
+
export interface Esperas {
|
|
23
|
+
/** El orquestador acaba de pedir un hilo de `nombre`; todavía no ha nacido. */
|
|
24
|
+
anunciar(nombre: string): void;
|
|
25
|
+
/** Nació un hilo de `nombre` (deja de estar solo anunciado). */
|
|
26
|
+
nacio(nombre: string, hilo: string): void;
|
|
27
|
+
/** El hilo terminó (bien o mal): deja de estar vivo y consta que `nombre` terminó. */
|
|
28
|
+
murio(hilo: string): void;
|
|
29
|
+
/** De esos nombres, cuáles hay vivos o anunciados ahora, sin contar `propio`. */
|
|
30
|
+
vivos(nombres: readonly string[], propio?: string): string[];
|
|
31
|
+
/** De esos nombres, cuáles han terminado en esta conversación. */
|
|
32
|
+
terminados(nombres: readonly string[]): string[];
|
|
33
|
+
/** Los hilos vivos y los anunciados se dieron por muertos (turno cortado, orquestador rehecho). Lo terminado consta. */
|
|
34
|
+
darPorMuertos(): void;
|
|
35
|
+
/** Otra conversación: se olvida todo. */
|
|
36
|
+
olvidar(): void;
|
|
37
|
+
}
|
|
38
|
+
export declare function crearEsperas(): Esperas;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los eventos de TrueForge, en los eventos de dominio de XOneCode (`core/events.ts`).
|
|
3
|
+
*
|
|
4
|
+
* Es lo que hace la interfaz transparente al motor: las pieles —web, terminal, tareas— pintan
|
|
5
|
+
* eventos de dominio y no saben qué los produjo. Aquí se decide qué se cuenta de un turno de
|
|
6
|
+
* TrueForge, con las MISMAS reglas que `puente.ts` aplica a los chunks de deepagents:
|
|
7
|
+
*
|
|
8
|
+
* - **Ningún evento lleva argumentos de tool**: la línea de una tool lleva solo el `detalle` de la
|
|
9
|
+
* lista blanca (`resumenDeTool.ts#detalleDe`), y el resultado de una tool no se pinta —
|
|
10
|
+
* `write_file` llevaría el fichero entero—.
|
|
11
|
+
* - **Solo el hilo RAÍZ habla**: lo que dice un subagente no es la respuesta, igual que el
|
|
12
|
+
* `esDelPadre` del puente. Sus tools sí se ven, que es lo que dice que está trabajando, y
|
|
13
|
+
* su RAZONAMIENTO también, pero entero y no a trozos (`PensamientoPorHilo`).
|
|
14
|
+
*
|
|
15
|
+
* Puro sobre los eventos: guarda lo justo entre uno y otro (el uso de la última llamada) y no
|
|
16
|
+
* toca nada más.
|
|
17
|
+
*/
|
|
18
|
+
import type { DomainEvent } from "../../../core/events.js";
|
|
19
|
+
/** El uso de UNA llamada al modelo, tal como lo adjunta TrueForge al mensaje completo. */
|
|
20
|
+
export interface UsoDeLlamada {
|
|
21
|
+
input: number;
|
|
22
|
+
output: number;
|
|
23
|
+
cache: number;
|
|
24
|
+
/** Cuántos de los `output` fueron razonamiento. Ausente = el proveedor no lo dice (no es cero). */
|
|
25
|
+
razonamiento?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* El tope que agotó un hilo, si ESTE evento es ese corte; `undefined` si no. Vale para el raíz y
|
|
29
|
+
* para cualquier hijo, y existe para la traza: sin él, un especialista cortado por el tope era
|
|
30
|
+
* indistinguible de uno que terminó —medido: la traza decía «cortes: 0» con un documentador que
|
|
31
|
+
* se quedó en exactamente 30 llamadas a mitad de un manual—.
|
|
32
|
+
*/
|
|
33
|
+
export declare function topeAgotadoDe(evento: unknown): number | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* El especialista de un hilo hijo, si se sabe: lo contesta la sesión (`quienEs`), que es quien
|
|
36
|
+
* sabe qué hilo abrió cada delegación.
|
|
37
|
+
*/
|
|
38
|
+
export type EspecialistaDeHilo = (hilo: string) => string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* El razonamiento de los HIJOS mientras llega, por hilo. El del raíz se pinta a trozos, en vivo;
|
|
41
|
+
* el de un especialista se guarda aquí y sale ENTERO cuando su mensaje se completa
|
|
42
|
+
* (`internal.agent.context.append`), delante de las tools que decidió. A trozos no se puede:
|
|
43
|
+
* dos especialistas en paralelo intercalan sus trozos, y la piel —que junta los trozos seguidos
|
|
44
|
+
* en un acto— los mezclaría en un párrafo que no pensó nadie.
|
|
45
|
+
*
|
|
46
|
+
* Uno por TURNO: lo que se quede a medias en un turno cortado no es del siguiente.
|
|
47
|
+
*/
|
|
48
|
+
export type PensamientoPorHilo = Map<string, string>;
|
|
49
|
+
/**
|
|
50
|
+
* Un evento de TrueForge → cero o más eventos de dominio, y el uso si trae una llamada al modelo
|
|
51
|
+
* terminada (para que quien corre el turno lo sume al contador).
|
|
52
|
+
*/
|
|
53
|
+
export declare function traducirEvento(evento: unknown, especialistaDe?: EspecialistaDeHilo, pensamientos?: PensamientoPorHilo): {
|
|
54
|
+
eventos: DomainEvent[];
|
|
55
|
+
uso?: UsoDeLlamada;
|
|
56
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lo que ESCRIBIÓ un hijo, contado por el harness y entregado a quien lo llamó.
|
|
3
|
+
*
|
|
4
|
+
* Existe por una pasada real (calc10): el orquestador releyó `MenuPrincipal.xne` seis veces y la maqueta cinco tras
|
|
5
|
+
* las vueltas de sus especialistas, porque lo único que le volvía era el texto del hijo y no se fiaba de él. Ninguno
|
|
6
|
+
* de los harnesses revisados (opencode, qwen-code, aider, deepseek-harness, TrueForge) le pasa al padre qué cambió el
|
|
7
|
+
* hijo; aquí el harness ya lo sabe —cada `write_file`/`edit_file` que salió bien pasa por la sesión—, así que se le
|
|
8
|
+
* DICE: qué ficheros, cuántas ediciones y cuántas líneas entran y salen. Nunca el contenido.
|
|
9
|
+
*
|
|
10
|
+
* Llega como UN mensaje de usuario antes de la siguiente llamada del padre (`capacidadDeInformesDeHijos`), el mismo
|
|
11
|
+
* camino que los avisos de vueltas: la respuesta del hijo ya la entregó la librería y no se reescribe.
|
|
12
|
+
*/
|
|
13
|
+
import type { Capacidad } from "./capacidades.js";
|
|
14
|
+
/**
|
|
15
|
+
* Las tools PROPIAS que escriben un BINARIO en el proyecto, con el principio de su texto de éxito. Sin contarlas, el
|
|
16
|
+
* informe decía «SIN escribir ningún fichero» de un diseñador que había traído siete fuentes, y el orquestador fue a
|
|
17
|
+
* comprobarlo al disco y mandó al de pruebas a mirar si estaban sanas (pasada real con la maqueta de la calculadora).
|
|
18
|
+
*/
|
|
19
|
+
export declare const ESCRITURAS_BINARIAS: Readonly<Record<string, string>>;
|
|
20
|
+
export interface CambioDeFichero {
|
|
21
|
+
ediciones: number;
|
|
22
|
+
/** Lo creó `write_file` en este encargo. */
|
|
23
|
+
nuevo: boolean;
|
|
24
|
+
mas: number;
|
|
25
|
+
menos: number;
|
|
26
|
+
/** Lo escribió una tool de BINARIOS (`ESCRITURAS_BINARIAS`): no hay líneas que contar. */
|
|
27
|
+
binario?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** ¿Es `nombre` una tool de binarios? Por clave PROPIA: `in` daría por buena `constructor`. */
|
|
30
|
+
export declare function esEscrituraBinaria(nombre: string): boolean;
|
|
31
|
+
/** Lo que suma UNA escritura que salió bien, por sus argumentos (los de la tool, que nunca salen de aquí). */
|
|
32
|
+
export declare function anotarEscritura(cambios: Map<string, CambioDeFichero>, nombre: string, args: Record<string, unknown>): void;
|
|
33
|
+
/**
|
|
34
|
+
* ¿Salió bien? El texto de éxito es el de `toolsDeFichero.ts#ejecutar`, o el de la tool de binarios
|
|
35
|
+
* (`ESCRITURAS_BINARIAS`); un rechazo o un error no cuenta.
|
|
36
|
+
*/
|
|
37
|
+
export declare function escrituraConExito(contenido: unknown, nombre?: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* El informe para el padre. `escribe` dice si el hijo podía escribir el proyecto: a uno que no podía no se le
|
|
40
|
+
* atribuye nada, y a uno que podía y no escribió se le dice —un «ya está hecho» sin ninguna escritura es justo lo
|
|
41
|
+
* que el padre tiene que saber—.
|
|
42
|
+
*/
|
|
43
|
+
export declare function textoDelInforme(quien: string, cambios: ReadonlyMap<string, CambioDeFichero>, escribe: boolean, medida?: string): string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Entrega, antes de la siguiente llamada del hilo, los informes que le esperan (`pendientes` los CONSUME: cada uno
|
|
46
|
+
* sale una vez). Va en el raíz y en quien puede llamar a otros. No añade tools.
|
|
47
|
+
*/
|
|
48
|
+
export declare function capacidadDeInformesDeHijos(pendientes: (hilo: string) => string[]): Capacidad;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Comparacion } from "../../../core/compararCapturas.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rondas VISUALES por encargo: una por captura medida. calc9, calc12 y calc13 sacaron 20-25 capturas cada una, retocando
|
|
4
|
+
* una o dos cosas por despliegue. Con el aviso, la última se DICE: después se devuelve con lo que falta. Eran tres, y medido
|
|
5
|
+
* en Maset con DeepSeek flash el desarrollador devolvía a la tercera con una fila de la maqueta sin pintar: se subieron
|
|
6
|
+
* a cinco. El prompt del desarrollador dice este MISMO número (`textoDelBucle`).
|
|
7
|
+
*/
|
|
8
|
+
export declare const RONDAS_VISUALES = 5;
|
|
9
|
+
/** El criterio de aceptación por omisión del bucle (`textoDelBucle`): por debajo, en vertical Y en horizontal. */
|
|
10
|
+
export declare const CRITERIO_DE_DISTANCIA = 0.1;
|
|
11
|
+
/**
|
|
12
|
+
* La maqueta de la sesión. PRIMERO la traída de Stitch (`/artefactos/diseno/screen.*`, `traerDeStitch.ts`):
|
|
13
|
+
* traerla es un acto de ESTA sesión, así que manda sobre una carpeta del proyecto que puede ser de otro
|
|
14
|
+
* encargo. Después `/diseno/screen.png`, la primera imagen de `/diseno/` y la de los adjuntos.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buscarMaqueta(raiz: string, adjuntos?: string, artefactos?: string): {
|
|
17
|
+
virtual: string;
|
|
18
|
+
disco: string;
|
|
19
|
+
} | undefined;
|
|
20
|
+
/** La captura MÁS RECIENTE de la carpeta de artefactos escrita desde `desdeMs`, con su nombre relativo (dos niveles). */
|
|
21
|
+
export declare function ultimaCaptura(carpeta: string, desdeMs: number): string | undefined;
|
|
22
|
+
/** Mide una captura contra la maqueta. Lanza si alguna no se puede abrir o decodificar: quien llama lo traga. */
|
|
23
|
+
export declare function medirContraMaqueta(captura: string, maqueta: string): Comparacion;
|
|
24
|
+
/** ¿Cumple el criterio? En las DOS direcciones Y encajando en la pantalla: cada borde del contenido cerca del de la maqueta. */
|
|
25
|
+
export declare function cumpleElCriterio(c: Pick<Comparacion, "distanciaVertical" | "distanciaHorizontal" | "encaje">): boolean;
|
|
26
|
+
/** La cifra corta, para el informe al orquestador. */
|
|
27
|
+
export declare function resumenDeMedida(c: Pick<Comparacion, "distanciaVertical" | "distanciaHorizontal" | "encaje">, captura: string): string;
|
|
28
|
+
/** El mensaje para quien llamó a quien ejecuta. `pedirCritica`: no ha pasado el crítico desde su última escritura. */
|
|
29
|
+
export declare function textoDeMedidaAutomatica(opciones: {
|
|
30
|
+
quien: string;
|
|
31
|
+
captura: string;
|
|
32
|
+
maqueta: string;
|
|
33
|
+
comparacion: Comparacion;
|
|
34
|
+
pedirCritica: boolean;
|
|
35
|
+
/** Qué ronda visual es esta para quien la recibe (1, 2…). Ausente: no se cuenta. */
|
|
36
|
+
ronda?: number;
|
|
37
|
+
}): string;
|
|
@@ -19,9 +19,11 @@ import { compararPantallas, desajusteDeEncaje, informeDeComparacion, TOLERANCIA_
|
|
|
19
19
|
import { decodificarImagen } from "../../dispositivos/decodificarImagen.js";
|
|
20
20
|
/**
|
|
21
21
|
* Rondas VISUALES por encargo: una por captura medida. calc9, calc12 y calc13 sacaron 20-25 capturas cada una, retocando
|
|
22
|
-
* una o dos cosas por despliegue. Con el aviso, la
|
|
22
|
+
* una o dos cosas por despliegue. Con el aviso, la última se DICE: después se devuelve con lo que falta. Eran tres, y medido
|
|
23
|
+
* en Maset con DeepSeek flash el desarrollador devolvía a la tercera con una fila de la maqueta sin pintar: se subieron
|
|
24
|
+
* a cinco. El prompt del desarrollador dice este MISMO número (`textoDelBucle`).
|
|
23
25
|
*/
|
|
24
|
-
export const RONDAS_VISUALES =
|
|
26
|
+
export const RONDAS_VISUALES = 5;
|
|
25
27
|
/** El criterio de aceptación por omisión del bucle (`textoDelBucle`): por debajo, en vertical Y en horizontal. */
|
|
26
28
|
export const CRITERIO_DE_DISTANCIA = 0.1;
|
|
27
29
|
const ES_IMAGEN = /\.(png|jpe?g)$/i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"medidaAutomatica.js","sourceRoot":"","sources":["../../../../src/agent/motores/trueforge/medidaAutomatica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAoB,MAAM,mCAAmC,CAAC;AACvJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E
|
|
1
|
+
{"version":3,"file":"medidaAutomatica.js","sourceRoot":"","sources":["../../../../src/agent/motores/trueforge/medidaAutomatica.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** Hasta aquí se guarda el historial ENTERO. Provisional: el orden de un conductor o un consultor. */
|
|
2
|
+
export declare const TOPE_COMPLETA_TOKENS = 48000;
|
|
3
|
+
/** Hasta aquí se guarda REDUCIDO; por encima se olvida. Provisional. */
|
|
4
|
+
export declare const TOPE_REDUCIDA_TOKENS = 40000;
|
|
5
|
+
/** Lo que se conserva de lo que devolvió cada tool en la versión reducida. */
|
|
6
|
+
export declare const MAX_CARACTERES_DE_RESULTADO = 500;
|
|
7
|
+
/** A partir de cuántos caracteres un argumento de una llamada a tool (el contenido de un `write_file`, el texto de un `edit_file`) hace que esa llamada se CUENTE en vez de guardarse (`reducirHistorial`). */
|
|
8
|
+
export declare const MAX_CARACTERES_DE_ARGUMENTO = 300;
|
|
9
|
+
/**
|
|
10
|
+
* Los ENCARGOS que un especialista hizo a otro (`create_sub_agent`) se conservan enteros hasta aquí. Son cortos y son
|
|
11
|
+
* lo que necesita recordar; y recortados le enseñaban a cortar los nuevos (ver `reducirHistorial`).
|
|
12
|
+
*/
|
|
13
|
+
export declare const MAX_CARACTERES_DE_ENCARGO = 8000;
|
|
14
|
+
/**
|
|
15
|
+
* El historial sin lo voluminoso: lo que devolvió cada tool se recorta (con la marca de que se recortó, para
|
|
16
|
+
* que el modelo sepa que puede releerlo), los argumentos largos de sus llamadas también, y el razonamiento de
|
|
17
|
+
* las vueltas viejas se quita. Lo que el especialista DIJO y a qué fichero o búsqueda apuntó cada llamada se
|
|
18
|
+
* conservan. Puro.
|
|
19
|
+
*/
|
|
20
|
+
export declare function reducirHistorial(mensajes: readonly unknown[], maxResultado?: number, maxArgumento?: number): unknown[];
|
|
21
|
+
/**
|
|
22
|
+
* La VENTANA: lo más reciente que cabe. Cada delegación empieza con un mensaje de usuario (el encargo o el «NUEVO
|
|
23
|
+
* ENCARGO»), así que se descartan delegaciones ENTERAS, las más antiguas primero: una llamada a tool y su respuesta
|
|
24
|
+
* viven dentro de la misma delegación y nunca quedan partidas. Si ni la última cabe sola, se queda con su encargo y
|
|
25
|
+
* lo último que dijo el especialista, que es lo que contó que había hecho.
|
|
26
|
+
*
|
|
27
|
+
* Existe porque en la primera prueba larga «olvidada-por-tope» llegó a borrar la memoria de los cuatro
|
|
28
|
+
* especialistas que más trabajaban, incluido lo reciente: perder lo viejo es aceptable, perder lo que acaba de
|
|
29
|
+
* pasar no. Puro.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ventanaDeHistorial(mensajes: readonly unknown[], topeTokens: number): unknown[];
|
|
32
|
+
export interface EncarnacionPrevia {
|
|
33
|
+
/** Los mensajes con los que arranca el hijo nuevo, ya saneados. */
|
|
34
|
+
mensajes: unknown[];
|
|
35
|
+
tokens: number;
|
|
36
|
+
}
|
|
37
|
+
/** Por qué una encarnación arranca sin memoria, para la traza. */
|
|
38
|
+
export type SinMemoria = "primera" | "hilo-vivo" | "olvidada-por-tope" | "olvidada-por-fallo";
|
|
39
|
+
export interface MemoriaDeEspecialistas {
|
|
40
|
+
/** Abre una encarnación de `nombre`: su memoria si la hay y se puede usar, o el motivo de no. */
|
|
41
|
+
abrir(nombre: string, hilo: string): {
|
|
42
|
+
previa: EncarnacionPrevia;
|
|
43
|
+
} | {
|
|
44
|
+
sin: SinMemoria;
|
|
45
|
+
};
|
|
46
|
+
/** La encarnación `hilo` terminó: guarda su historial completo (o lo olvida si falló o pasó el tope). */
|
|
47
|
+
cerrar(hilo: string, resultado: {
|
|
48
|
+
bien: boolean;
|
|
49
|
+
mensajes: readonly unknown[];
|
|
50
|
+
tokens: number;
|
|
51
|
+
}): SinMemoria | "guardada" | "guardada-reducida" | "guardada-ventana";
|
|
52
|
+
/** Los hilos vivos se dieron por muertos (turno cortado, orquestador rehecho). La memoria se queda. */
|
|
53
|
+
darPorMuertos(): void;
|
|
54
|
+
/** Otra conversación: se olvida todo. */
|
|
55
|
+
olvidar(): void;
|
|
56
|
+
}
|
|
57
|
+
export declare function crearMemoriaDeEspecialistas(topes?: {
|
|
58
|
+
completa?: number;
|
|
59
|
+
reducida?: number;
|
|
60
|
+
}): MemoriaDeEspecialistas;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** Lo que se guarda de un hilo: lo que su constructor sabe recibir de vuelta. */
|
|
2
|
+
export interface FotoDeHilo {
|
|
3
|
+
context: unknown[];
|
|
4
|
+
current_context_usage?: unknown;
|
|
5
|
+
capability_state?: Record<string, unknown> | null;
|
|
6
|
+
/**
|
|
7
|
+
* La pregunta del orquestador (`ask_user_question`) que espera respuesta. Va CON la foto porque
|
|
8
|
+
* sin ella, al reabrir, la respuesta de la persona entraría como un mensaje nuevo y la pregunta
|
|
9
|
+
* se quedaría saldada como incompleta. Mientras esté, su tool call NO se salda.
|
|
10
|
+
*/
|
|
11
|
+
pregunta_pendiente?: PreguntaPendiente;
|
|
12
|
+
}
|
|
13
|
+
/** La pregunta en espera: en qué hilo, qué tool call contesta y con qué opciones. */
|
|
14
|
+
export interface PreguntaPendiente {
|
|
15
|
+
hilo: string;
|
|
16
|
+
id: string;
|
|
17
|
+
args: Record<string, unknown>;
|
|
18
|
+
/** El encargo que provocó la pregunta: sin él, tras reabrir, el juez y la reparación del
|
|
19
|
+
* turno de la respuesta no tendrían contra qué medir. Opcional: una v1 anterior no lo trae. */
|
|
20
|
+
encargo?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Dónde vive la memoria de la sesión `hilo`, o `undefined` si el id no es un segmento llano. */
|
|
23
|
+
export declare function rutaDeMemoria(raiz: string, hilo: string): string | undefined;
|
|
24
|
+
/** El texto con que se salda una tool call que el turno no llegó a contestar. */
|
|
25
|
+
export declare const RESPUESTA_A_UNA_COLGADA: string;
|
|
26
|
+
/**
|
|
27
|
+
* El texto con que se salda una tool call que una INTERRUPCIÓN dejó sin respuesta: el proceso se
|
|
28
|
+
* paró a mitad de turno (un corte duro, sin cierre ordenado) y la foto que se reabre es la que se
|
|
29
|
+
* guardó A MITAD. No puede ser `RESPUESTA_A_UNA_COLGADA`: su «vuelve a pedirlo» invita a repetir
|
|
30
|
+
* un encargo cuyo especialista ya pudo dejar ediciones en el disco, y repetirlo las duplicaría.
|
|
31
|
+
* Lo escrito es «al menos»: se cuenta por hilo y un nieto que ya devolvió no siempre consta.
|
|
32
|
+
*/
|
|
33
|
+
export declare function textoDeInterrupcion(llamada: {
|
|
34
|
+
especialista?: string;
|
|
35
|
+
escritos: readonly string[];
|
|
36
|
+
}): string;
|
|
37
|
+
/**
|
|
38
|
+
* El contexto con las tool calls del ÚLTIMO mensaje del asistente que no tienen respuesta,
|
|
39
|
+
* saldadas. Solo el último: una anterior sin respuesta ya habría roto la conversación antes.
|
|
40
|
+
* Puro: no toca el contexto que recibe. `textoDe` da el texto de cada una (por omisión,
|
|
41
|
+
* `RESPUESTA_A_UNA_COLGADA`): la foto a mitad de turno salda con el de una interrupción.
|
|
42
|
+
*/
|
|
43
|
+
export declare function saldarColgadas(context: readonly unknown[], excepto?: string, textoDe?: (id: string, nombre: string | undefined) => string): unknown[];
|
|
44
|
+
/** La foto lista para guardar o para rehacer el hilo: con las colgadas saldadas. */
|
|
45
|
+
export declare function fotoSaneada(foto: FotoDeHilo): FotoDeHilo;
|
|
46
|
+
/**
|
|
47
|
+
* La versión del formato de la foto en disco. Sube cuando cambia lo que se escribe, y cada subida
|
|
48
|
+
* trae su entrada en `MIGRACIONES`: una foto de antes se MIGRA al leerla, nunca se descarta por
|
|
49
|
+
* vieja. Es NUESTRA, no la de la librería: la de la librería va aparte, en `trueforge`.
|
|
50
|
+
*
|
|
51
|
+
* El formato v1, entero —y nada más, que es lo que hace estricta la lectura—:
|
|
52
|
+
*
|
|
53
|
+
* ```json
|
|
54
|
+
* { "version": 1, "trueforge": "0.2.1", "context": [...],
|
|
55
|
+
* "current_context_usage": {...}, "capability_state": {...} | null,
|
|
56
|
+
* "pregunta_pendiente": { "hilo": "...", "id": "...", "args": {...}, "encargo"?: "..." } }
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Solo `version` y `context` son obligatorios. `trueforge` es la versión de la librería que
|
|
60
|
+
* escribió el `toSnapshot()`: se APUNTA, no se exige —rechazar por ella tiraría todas las
|
|
61
|
+
* conversaciones en cada subida de la librería—, y está para que una migración futura sepa de
|
|
62
|
+
* dónde parte. Falta en una foto MIGRADA desde v0, porque no se inventa lo que no consta; el
|
|
63
|
+
* guardado siguiente la sella.
|
|
64
|
+
*/
|
|
65
|
+
export declare const VERSION_DE_MEMORIA = 1;
|
|
66
|
+
/** Lo que se lee de disco antes de entenderlo: un objeto JSON cualquiera. */
|
|
67
|
+
type FotoCruda = Record<string, unknown>;
|
|
68
|
+
/**
|
|
69
|
+
* De cada versión a la SIGUIENTE: devuelve la foto migrada o el MOTIVO por el que no se puede.
|
|
70
|
+
* Puras, y se encadenan (`interpretarFoto`), así que una foto de hace tres versiones pasa por
|
|
71
|
+
* las tres. Una migración no valida el resultado final: eso lo hace UNA vez `validarV1`.
|
|
72
|
+
*/
|
|
73
|
+
export declare const MIGRACIONES: Readonly<Record<number, (foto: FotoCruda) => FotoCruda | string>>;
|
|
74
|
+
/** Lo que devuelve leer la memoria: no hay, se entiende, o hay y no se entiende (con el porqué). */
|
|
75
|
+
export type LecturaDeMemoria = {
|
|
76
|
+
estado: "sin-memoria";
|
|
77
|
+
} | {
|
|
78
|
+
estado: "ok";
|
|
79
|
+
foto: FotoDeHilo;
|
|
80
|
+
} | {
|
|
81
|
+
estado: "incompatible";
|
|
82
|
+
motivo: string;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* El TEXTO de una foto, entendido: migrado hasta la versión actual y validado, o el motivo por el
|
|
86
|
+
* que no. Pura, y es toda la regla de la lectura. El motivo nunca repite el contenido —un error de
|
|
87
|
+
* `JSON.parse` cita un trozo del fichero, que lleva mensajes enteros— ni ninguna ruta.
|
|
88
|
+
*/
|
|
89
|
+
export declare function interpretarFoto(texto: string): Exclude<LecturaDeMemoria, {
|
|
90
|
+
estado: "sin-memoria";
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Escribe la foto, en el formato ACTUAL: la versión y la de la librería las SELLA aquí quien
|
|
94
|
+
* escribe, no quien llama, y los campos van por lista cerrada —lo que `toSnapshot()` traiga de más
|
|
95
|
+
* no llega a disco, y así la lectura estricta no rechaza lo que este mismo código escribió—.
|
|
96
|
+
* El fichero se CREA con 0600 antes de tener contenido y se reemplaza con `renameSync`, para que
|
|
97
|
+
* un corte a mitad no deje media conversación ni un JSON roto.
|
|
98
|
+
*/
|
|
99
|
+
export declare function guardarMemoria(raiz: string, hilo: string, foto: FotoDeHilo): void;
|
|
100
|
+
/**
|
|
101
|
+
* La memoria de la sesión, con su estado. No tener fichero es `sin-memoria`, no un fallo; uno que
|
|
102
|
+
* existe y no se puede leer es `incompatible` con el `code` de Node y nada más (su mensaje lleva
|
|
103
|
+
* la ruta absoluta). NO aparta ni borra nada: esto lo llama también quien solo PREGUNTA
|
|
104
|
+
* (`hayMemoria`, la web al reabrir), y preguntar no puede mover ficheros.
|
|
105
|
+
*/
|
|
106
|
+
export declare function cargarMemoria(raiz: string, hilo: string): LecturaDeMemoria;
|
|
107
|
+
/** La foto guardada y entendida, o `undefined` si no hay o no se entiende (ver `cargarMemoria`). */
|
|
108
|
+
export declare function leerMemoria(raiz: string, hilo: string): FotoDeHilo | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* ¿Hay una conversación de TrueForge que continuar en esta sesión? Solo si la foto se ENTIENDE:
|
|
111
|
+
* una incompatible no se va a cargar, y decir que sí haría que la web presentara como continuada
|
|
112
|
+
* una sesión que empieza de cero.
|
|
113
|
+
*/
|
|
114
|
+
export declare function hayMemoria(raiz: string, hilo: string): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Aparta la foto que no se entiende, con otro nombre y en la MISMA carpeta, y devuelve ese nombre
|
|
117
|
+
* (solo el nombre: viaja a la pantalla). Apartar y no borrar, porque no la entendemos y puede que
|
|
118
|
+
* un XOneCode más nuevo sí; y apartar y no dejarla, porque el guardado del primer turno la pisaría.
|
|
119
|
+
* Un nombre que ya existe nunca se pisa. Si no se puede, devuelve `undefined` y quien llama lo
|
|
120
|
+
* DICE: la foto se queda donde estaba y el siguiente guardado la sustituirá.
|
|
121
|
+
*/
|
|
122
|
+
export declare function apartarMemoria(raiz: string, hilo: string, ahora?: number): string | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* El aviso de una memoria que no se cargó, con el motivo y con lo que se hizo con la foto. Se
|
|
125
|
+
* emite UNA vez, en el primer turno: es cuando importa, porque es el turno en que el modelo no
|
|
126
|
+
* recuerda lo que la pantalla enseña. Solo con una foto que EXISTÍA: sin foto no ha pasado nada.
|
|
127
|
+
*/
|
|
128
|
+
export declare function textoDeMemoriaDescartada(motivo: string, apartada: string | undefined): string;
|
|
129
|
+
/** Borra la memoria de la sesión, las fotos apartadas incluidas: lo llama el borrado de una sesión. */
|
|
130
|
+
export declare function olvidarMemoria(raiz: string, hilo: string): void;
|
|
131
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Las métricas PROPIAS de TrueForge (`AgentThreadOrchestrator.getMetrics()`), puestas al lado de
|
|
3
|
+
* las nuestras como CONTRASTE, no como sustituto.
|
|
4
|
+
*
|
|
5
|
+
* Las nuestras salen de traducir cada evento (`eventosTrueforge.ts#traducirEvento`) y son las que
|
|
6
|
+
* se enseñan y se guardan, porque son las mismas cuentas que las de deepagents. Las de la librería
|
|
7
|
+
* las lleva ella por dentro. Si las dos divergen, una de las dos cuenta mal, y hasta ahora no había
|
|
8
|
+
* forma de enterarse: esto lo apunta en la traza (`XONECODE_TRACE_TOOLS=1`) y `xonecode traza` lo
|
|
9
|
+
* dice. Puro, para poder probar la regla sin montar un turno.
|
|
10
|
+
*
|
|
11
|
+
* Se lee al final de CADA turno y es de ESE turno: el raíz se rehace desde su foto al acabar
|
|
12
|
+
* (`sesionTrueforge.ts`), así que el árbol que se mide es el de un solo turno.
|
|
13
|
+
*/
|
|
14
|
+
/** Lo que dice NUESTRA cuenta de un turno: el delta del tracker. */
|
|
15
|
+
export interface CifrasDelTurno {
|
|
16
|
+
entrada: number;
|
|
17
|
+
salida: number;
|
|
18
|
+
cache: number;
|
|
19
|
+
llamadas: number;
|
|
20
|
+
}
|
|
21
|
+
/** Lo que dice la de TrueForge, con los nombres nuestros. Ausente = la librería no lo trae. */
|
|
22
|
+
export interface MetricasDeTrueforge {
|
|
23
|
+
entrada: number;
|
|
24
|
+
salida: number;
|
|
25
|
+
cache?: number;
|
|
26
|
+
iteraciones: number;
|
|
27
|
+
tools: number;
|
|
28
|
+
subagentes: number;
|
|
29
|
+
resumenes: number;
|
|
30
|
+
costeUsd?: number;
|
|
31
|
+
}
|
|
32
|
+
/** De la forma de la librería (`AgentThreadMetrics`) a la nuestra; lo que no es número no consta. */
|
|
33
|
+
export declare function metricasDeTrueforge(m: Record<string, unknown>): MetricasDeTrueforge;
|
|
34
|
+
/**
|
|
35
|
+
* En qué difieren, dicho con las dos cifras. Vacío = coinciden.
|
|
36
|
+
*
|
|
37
|
+
* Los TOKENS se comparan tal cual: los dos lados suman el mismo `usage` de cada llamada, así que
|
|
38
|
+
* cualquier diferencia es una cuenta que se pierde en uno de ellos. Las LLAMADAS no se cuentan
|
|
39
|
+
* igual, y las dos diferencias están MEDIDAS contra la librería real: un hijo EXTERNO es una
|
|
40
|
+
* iteración para ella y cero llamadas para nosotros —su gasto es del producto, en la cuenta
|
|
41
|
+
* `externo`—; y una COMPACTACIÓN es una llamada para nosotros —se paga— y para ella no es una
|
|
42
|
+
* iteración, la lleva aparte en `resumenes`. Las dos se ajustan antes de comparar. Y la caché solo
|
|
43
|
+
* si la librería la trae: ausente no es cero.
|
|
44
|
+
*/
|
|
45
|
+
export declare function diferenciasDelContraste(nuestras: CifrasDelTurno, suyas: MetricasDeTrueforge, hijosExternos: number): string[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PeticionExterna, SubagenteExternoPort } from "../../../core/ports.js";
|
|
2
|
+
import type { ILLM } from "./trueforge.js";
|
|
3
|
+
export declare function modeloExternoParaTrueforge(opciones: {
|
|
4
|
+
puerto: SubagenteExternoPort;
|
|
5
|
+
/** La petición entera menos la señal, compuesta al DELEGAR (instrucciones e inventario frescos). */
|
|
6
|
+
peticion: () => Omit<PeticionExterna, "senal">;
|
|
7
|
+
/** La cancelación del turno: se le pasa al producto para que no quede un proceso vivo. */
|
|
8
|
+
senal?: () => AbortSignal | undefined;
|
|
9
|
+
}): ILLM;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El modelo de TrueForge (`ILLM`) hecho con NUESTRO modelo de LangChain.
|
|
3
|
+
*
|
|
4
|
+
* TrueForge trae su propio cliente (`VercelAILLM`), que construye el modelo desde una
|
|
5
|
+
* configuración de proveedor. No se usa, y es la decisión que hace el motor intercambiable sin
|
|
6
|
+
* que se note: nuestros modelos salen de `Modelos.paraPapel()` ya con todo lo que se les ha ido
|
|
7
|
+
* poniendo —el `user_id` de DeepSeek, el eco de su razonamiento, el tope de salida y el
|
|
8
|
+
* pensamiento adaptativo de Claude, el esfuerzo por modelo—, y reconstruirlos con la
|
|
9
|
+
* configuración de TrueForge lo perdería todo en silencio.
|
|
10
|
+
*
|
|
11
|
+
* El contrato de TrueForge habla en la forma de las chat completions de OpenAI, así que esto es
|
|
12
|
+
* una traducción en los dos sentidos: los mensajes que manda a mensajes de LangChain, y el stream
|
|
13
|
+
* de LangChain a los fragmentos que espera.
|
|
14
|
+
*
|
|
15
|
+
* **La cancelación entra por aquí**: `ILLM.create` no recibe señal, así que la de la llamada en
|
|
16
|
+
* curso se pide a `senal()` en cada `create`, y quien corre el turno la pone.
|
|
17
|
+
*/
|
|
18
|
+
import { type BaseMessage } from "@langchain/core/messages";
|
|
19
|
+
import type { ILLM } from "./trueforge.js";
|
|
20
|
+
type MensajeOpenAi = {
|
|
21
|
+
role: string;
|
|
22
|
+
content?: unknown;
|
|
23
|
+
tool_calls?: {
|
|
24
|
+
id: string;
|
|
25
|
+
function: {
|
|
26
|
+
name: string;
|
|
27
|
+
arguments: string;
|
|
28
|
+
};
|
|
29
|
+
}[];
|
|
30
|
+
tool_call_id?: string;
|
|
31
|
+
reasoning_content?: string;
|
|
32
|
+
};
|
|
33
|
+
/** Los mensajes que manda TrueForge, en mensajes de LangChain. */
|
|
34
|
+
export declare function aMensajesDeLangchain(mensajes: readonly MensajeOpenAi[]): BaseMessage[];
|
|
35
|
+
/**
|
|
36
|
+
* Un `ILLM` sobre un modelo de LangChain. `modelo` y `senal` son funciones y no valores: el modelo
|
|
37
|
+
* cambia con `/modelo` sin rehacer el hilo, y la señal es la de la llamada EN CURSO.
|
|
38
|
+
*/
|
|
39
|
+
export declare function modeloParaTrueforge(opciones: {
|
|
40
|
+
modelo: () => unknown;
|
|
41
|
+
senal?: () => AbortSignal | undefined;
|
|
42
|
+
nombre?: string;
|
|
43
|
+
/**
|
|
44
|
+
* DETENER (`detencion.ts`): mientras devuelva un texto, la respuesta NO lleva tool calls —se
|
|
45
|
+
* tiran del stream y del mensaje final— y, si no queda texto, lleva ése. Una respuesta sin tool
|
|
46
|
+
* calls cierra el hilo. Se pregunta en cada llamada.
|
|
47
|
+
*/
|
|
48
|
+
soloTexto?: () => string | undefined;
|
|
49
|
+
/** Cuántas tool calls se tiraron por `soloTexto`: la medida de si el filtro hace falta. */
|
|
50
|
+
alTirarLlamadas?: (cuantas: number) => void;
|
|
51
|
+
/**
|
|
52
|
+
* DETENER a MITAD de una llamada: la señal que corta SOLO el stream de este hijo —no el turno—
|
|
53
|
+
* y la orden con la que se le pide el resumen. Si se aborta mientras genera, la llamada no
|
|
54
|
+
* falla: se relanza en el acto con lo que ya había dicho y la orden al final, sin tool calls, y
|
|
55
|
+
* a la librería le llega UNA respuesta normal de texto —que cierra el hilo—. Se pregunta al
|
|
56
|
+
* empezar cada llamada; con `soloTexto` ya activo no hace falta (la orden llegó antes).
|
|
57
|
+
*/
|
|
58
|
+
corte?: () => {
|
|
59
|
+
senal: AbortSignal;
|
|
60
|
+
orden: () => string;
|
|
61
|
+
} | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Cuántos de los tokens de salida de una llamada fueron RAZONAMIENTO. La librería reconstruye el
|
|
64
|
+
* uso de sus eventos sin ese campo, así que se avisa aquí, a la salida del adaptador, con los
|
|
65
|
+
* tokens de salida para emparejarlo con el evento.
|
|
66
|
+
*/
|
|
67
|
+
alRazonar?: (salida: number, razonamiento: number) => void;
|
|
68
|
+
}): ILLM;
|
|
69
|
+
export {};
|