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,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Política de contexto del harness.
|
|
3
|
+
*
|
|
4
|
+
* DeepAgents usa 170k tokens cuando el proveedor no publica su ventana de contexto. Con
|
|
5
|
+
* Ollama eso retrasa demasiado la compresión y cada llamada reenvía lecturas ya resueltas.
|
|
6
|
+
* Este umbral es independiente del proveedor: limita el coste sin borrar el trabajo reciente.
|
|
7
|
+
*/
|
|
8
|
+
import { type FilesystemBackend } from "deepagents";
|
|
9
|
+
import { createMiddleware } from "langchain";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { HumanMessage } from "@langchain/core/messages";
|
|
12
|
+
export declare const UMBRAL_RESUMEN_TOKENS = 32000;
|
|
13
|
+
export declare const CONTEXTO_RECIENTE_TOKENS = 8000;
|
|
14
|
+
/**
|
|
15
|
+
* El prompt del resumen, en CASTELLANO y pidiendo markdown.
|
|
16
|
+
*
|
|
17
|
+
* El de deepagents está en inglés, y el resumen no es un texto interno: se le enseña a la
|
|
18
|
+
* persona en su propio plegable («Resumen del contexto», ver `ETIQUETA_DEL_RESUMEN`). Medido en
|
|
19
|
+
* MyAllXOne: salía un `## Summary` / `**Task:**` / `Key facts established:` en mitad de una
|
|
20
|
+
* conversación en castellano. `{conversation}` es el hueco que la librería rellena.
|
|
21
|
+
*
|
|
22
|
+
* Lo que NO se le pide aquí es que conserve el encargo: eso lo hace el CÓDIGO
|
|
23
|
+
* (`conservarElEncargo`), porque un resumen que a veces lo pierde ya costó millones de tokens.
|
|
24
|
+
*/
|
|
25
|
+
export declare const PROMPT_DEL_RESUMEN = "Eres el encargado de resumir una conversaci\u00F3n de trabajo sobre una aplicaci\u00F3n XOne para que el agente pueda seguir sin releerla. Escribe EN CASTELLANO y en markdown legible (t\u00EDtulos cortos y listas), y recoge:\n1. Qu\u00E9 se est\u00E1 haciendo y para qu\u00E9.\n2. Los hechos ya comprobados, con fichero y l\u00EDnea cuando los haya.\n3. Las decisiones tomadas y lo que queda pendiente.\n\nS\u00E9 concreto y breve. No inventes nada que no est\u00E9 en la conversaci\u00F3n.\n\nConversaci\u00F3n a resumir:\n{conversation}\n\nResumen:";
|
|
26
|
+
export declare function resumenDeContexto(backend: FilesystemBackend): import("langchain").AgentMiddleware<z.ZodObject<{
|
|
27
|
+
_summarizationSessionId: z.ZodOptional<z.ZodString>;
|
|
28
|
+
_summarizationEvent: z.ZodOptional<z.ZodObject<{
|
|
29
|
+
cutoffIndex: z.ZodNumber;
|
|
30
|
+
summaryMessage: z.ZodCustom<HumanMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>, HumanMessage<import("@langchain/core/messages").MessageStructure<import("@langchain/core/messages").MessageToolSet>>>;
|
|
31
|
+
filePath: z.ZodNullable<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
}, z.core.$strip>, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>;
|
|
34
|
+
/**
|
|
35
|
+
* Devuelve el ENCARGO a la conversación después de que el resumen se lo lleve.
|
|
36
|
+
*
|
|
37
|
+
* ## El fallo que cierra, medido offline el 17-09-2026
|
|
38
|
+
*
|
|
39
|
+
* Un turno real del usuario: el orquestador delegó una pregunta sobre si XOne servía para un
|
|
40
|
+
* CRM, el especialista dio 57 pasos y volvió con la respuesta de la pregunta **anterior** —«la
|
|
41
|
+
* ventana de inicio de mi app»—. El orquestador lo detectó y relanzó dos veces: 1,5M de tokens
|
|
42
|
+
* para una pregunta. El propio modelo dijo que «parece que trae una sesión antigua pegada», y
|
|
43
|
+
* esa hipótesis era falsa: los subagentes van en `handoff`, así que arrancan con el encargo y
|
|
44
|
+
* nada más, y aunque HEREDAN nuestro checkpointer, el namespace de cada `task` lleva el paso y
|
|
45
|
+
* el id del checkpoint dentro, así que no puede reanudar nada.
|
|
46
|
+
*
|
|
47
|
+
* Lo que pasa de verdad está en el middleware de resumen: al cruzar el umbral, los mensajes
|
|
48
|
+
* `[0, corte)` se sustituyen por UN resumen, y el mensaje 0 es justamente el encargo. `keep`
|
|
49
|
+
* solo conserva la COLA —no hay opción para el primero— y el prompt de resumen por omisión
|
|
50
|
+
* pide «temas, decisiones y contexto para continuar», no el encargo. O sea que a partir de los
|
|
51
|
+
* 32k el especialista sigue trabajando **sin la pregunta que le hicieron**, y contesta a lo que
|
|
52
|
+
* el resumen le deje entender. Medido en `resumenDeContexto.test.ts`.
|
|
53
|
+
*
|
|
54
|
+
* ## Por qué por CÓDIGO y no por `summaryPrompt`
|
|
55
|
+
*
|
|
56
|
+
* Se podría pedir en el prompt del resumen que conserve el encargo, y a veces lo haría. Un
|
|
57
|
+
* agente que pierde su encargo no contesta peor: contesta a otra cosa, y el coste de eso ya
|
|
58
|
+
* está medido en millones de tokens. Es la misma regla que hace que los avisos de honestidad
|
|
59
|
+
* sean código y no prompt (`core/bitacora.ts`).
|
|
60
|
+
*
|
|
61
|
+
* El encargo se saca del ESTADO, que el resumen no reescribe (guarda un `_summarizationEvent`
|
|
62
|
+
* y reconstruye la lista efectiva), así que ahí sigue intacto el mensaje 0. Y se reinserta solo
|
|
63
|
+
* si NO está: por debajo del umbral no hay nada que devolver y duplicarlo sería peor.
|
|
64
|
+
*/
|
|
65
|
+
export declare function conservarElEncargo(): import("langchain").AgentMiddleware<undefined, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>;
|
|
66
|
+
/**
|
|
67
|
+
* El resumen y la devolución del encargo, SIEMPRE juntos y en este orden.
|
|
68
|
+
*
|
|
69
|
+
* Van en una sola función porque separarlos es el fallo: el primero de la lista envuelve al
|
|
70
|
+
* siguiente, así que `conservarElEncargo` tiene que ver los mensajes YA resumidos — delante no
|
|
71
|
+
* habría nada que devolver. Montarlos a mano en dos sitios (el orquestador y cada especialista)
|
|
72
|
+
* es el patrón que en este repo ha fallado nueve veces: una composición de producción que vive
|
|
73
|
+
* en un cierre que los tests doblan, y que puede dejar de estar montada con todo en verde.
|
|
74
|
+
*/
|
|
75
|
+
export declare function resumenConEncargo(backend: FilesystemBackend): ReturnType<typeof createMiddleware>[];
|
|
76
|
+
/**
|
|
77
|
+
* La marca que distingue, en el stream, la llamada del RESUMEN de la respuesta del agente.
|
|
78
|
+
*
|
|
79
|
+
* deepagents resume llamando al MISMO modelo del agente (`request.model`, que gana sobre el
|
|
80
|
+
* `model` de sus opciones) dentro del MISMO nodo, así que sus chunks llegaban al puente con el
|
|
81
|
+
* mismo namespace, el mismo nodo y ninguna etiqueta: indistinguibles de la respuesta. El puente
|
|
82
|
+
* los pintaba en el chat y el `.jsonl` los guardaba como un mensaje del asistente — medido en
|
|
83
|
+
* MyAllXOne, un `## Summary` en inglés a mitad de la conversación.
|
|
84
|
+
*
|
|
85
|
+
* Con la etiqueta, el puente los saca de la respuesta y los manda a su propio acto (`resumen`),
|
|
86
|
+
* que el cliente pliega como «Verificaciones» o «Permisos». Una ETIQUETA y no una heurística
|
|
87
|
+
* sobre el texto por la regla de siempre: la clase viaja como dato.
|
|
88
|
+
*/
|
|
89
|
+
export declare const ETIQUETA_DEL_RESUMEN = "xonecode:resumen";
|
|
90
|
+
/**
|
|
91
|
+
* Cuántas llamadas al modelo puede gastar UN especialista en un encargo.
|
|
92
|
+
*
|
|
93
|
+
* Medido el 17-09-2026 con el banco: una pregunta de estructura se resuelve en 3-7 llamadas en
|
|
94
|
+
* TODO el turno, y la de capacidad —la clase cara— la terminó bien un modelo en 10. El que se
|
|
95
|
+
* descarriló llevaba 32 y subiendo cuando el reloj lo mató, y 57 en el turno que lo destapó.
|
|
96
|
+
*
|
|
97
|
+
* **No es un ahorro, es una frontera.** Un especialista hace una tarea específica con un
|
|
98
|
+
* encargo bien descrito; si necesita cuarenta llamadas, lo que falla es la delegación, y seguir
|
|
99
|
+
* dándole cuerda solo hace más cara la misma respuesta mala.
|
|
100
|
+
*
|
|
101
|
+
* ## Por qué ya no es 15: aquella medida era de PREGUNTAS, y no todos contestan preguntas
|
|
102
|
+
*
|
|
103
|
+
* Las cifras de arriba salieron del banco, que pregunta. Y a un especialista que además
|
|
104
|
+
* ESCRIBE no le valen: medido el 21-09-2026 sobre MyAllXOne con un encargo de desarrollo de
|
|
105
|
+
* varios pasos, `analyst-xone` se delegó dos veces, **agotó las 15 las dos veces y no escribió
|
|
106
|
+
* ni un fichero**. No se descarriló ni entendió mal el encargo —en sus llamadas 2 y 3 abrió
|
|
107
|
+
* `xone-spec-builder` y `xone-plan-builder`, o sea que sabía que tenía que dejar un plan—:
|
|
108
|
+
* se le fue el presupuesto ORIENTÁNDOSE, y la fase de escribir, que es el entregable, no
|
|
109
|
+
* llegó a empezar. `developer-xone` se quedó cortado en el mismo turno.
|
|
110
|
+
*
|
|
111
|
+
* Un tope calibrado sobre «leer y contestar» aplicado a «leer y ENTREGAR» corta el trabajo
|
|
112
|
+
* justo antes de que produzca algo, y encima en silencio: el síntoma es un plan que no
|
|
113
|
+
* existe, no un error. El número cubre una pasada entera de reconocimiento (~15, medido) más
|
|
114
|
+
* las lecturas de sus skills y los tres ficheros que deja: es un freno por encima de una
|
|
115
|
+
* entrega y no por debajo (y hoy está en 100, ver abajo).
|
|
116
|
+
*
|
|
117
|
+
* ## Y SUBIRLO NO BASTA — se probó el mismo día y hay que decirlo aquí
|
|
118
|
+
*
|
|
119
|
+
* Con 15 el analista gastaba 15 y no escribía; con 30 gastó **30 y tampoco escribió**, dos
|
|
120
|
+
* pasadas otra vez, y el turno costó un 30 % más (~950k → ~1,24M efectivos) para el mismo
|
|
121
|
+
* resultado: cero `write_file`, cero `/planes/`. **Expande el reconocimiento hasta llenar lo
|
|
122
|
+
* que le des** — con 30 llamadas se fue a `LoginColl`, `ContentTareas`, `ClientesCoord` y
|
|
123
|
+
* `basico.css` para un conversor de divisas.
|
|
124
|
+
*
|
|
125
|
+
* O sea que el presupuesto **no era la restricción que ataba**, y este número no es el
|
|
126
|
+
* arreglo de nada: lo que ata es que escribir está planteado como el ÚLTIMO paso, y eso se
|
|
127
|
+
* arregla donde vive esa instrucción (`agentesEnDisco.ts#PLAN_DE_DESARROLLO`), no aquí. Esto
|
|
128
|
+
* se queda porque una entrega no cabía en 15 y sigue sin caber; no porque cure el síntoma.
|
|
129
|
+
*/
|
|
130
|
+
export declare const TOPE_DE_LLAMADAS_DEL_ESPECIALISTA = 100;
|
|
131
|
+
/**
|
|
132
|
+
* El de quien CONDUCE UN APARATO, que es otro trabajo y por eso otro número.
|
|
133
|
+
*
|
|
134
|
+
* El 15 de arriba se midió sobre especialistas que LEEN y contestan: ahí treinta llamadas
|
|
135
|
+
* significan que la delegación estaba mal escrita. Conducir no es eso — es un bucle de
|
|
136
|
+
* acto→observa donde cada paso (conectar, listar controles, pulsar, esperar, capturar,
|
|
137
|
+
* leer el log) es una llamada al modelo POR CONSTRUCCIÓN, y no hay encargo, por bien
|
|
138
|
+
* escrito que esté, que lo acorte.
|
|
139
|
+
*
|
|
140
|
+
* **Medido en un turno real** (MyAllXOne, «crear una opción nueva en el drawer»): el
|
|
141
|
+
* conductor se delegó SIETE veces en el mismo turno, cada una agotando su tope, ~94
|
|
142
|
+
* comandos en total. El tope no evitó el gasto: lo partió en siete arranques, y como los
|
|
143
|
+
* especialistas no comparten transcript, cada uno volvió a conectar y a orientarse desde
|
|
144
|
+
* cero. Un tope que se rodea re-delegando no acota nada, solo añade amnesia.
|
|
145
|
+
*
|
|
146
|
+
* Sigue habiendo tope, y por lo mismo de siempre: un bucle sin freno se come el turno. Lo
|
|
147
|
+
* que cambia es dónde está el freno — por encima de UNA navegación completa y no por
|
|
148
|
+
* debajo.
|
|
149
|
+
*/
|
|
150
|
+
export declare const TOPE_DE_LLAMADAS_DEL_CONDUCTOR = 150;
|
|
151
|
+
/**
|
|
152
|
+
* El tope, NUESTRO y no el de la librería.
|
|
153
|
+
*
|
|
154
|
+
* `modelCallLimitMiddleware` cuenta bien y corta bien, pero lo que deja como respuesta es un
|
|
155
|
+
* `AIMessage` con su frase en inglés —«Model call limits exceeded: …»—, y el `task` de
|
|
156
|
+
* deepagents devuelve SOLO el último mensaje (`extractLastMessage`). O sea que quien delegó
|
|
157
|
+
* recibe esa frase y **las quince llamadas de trabajo se pierden**: medido el 19-09-2026,
|
|
158
|
+
* 100-160k de entrada por especialista devolviendo menos de 900 tokens. Esa es la razón de que
|
|
159
|
+
* el orquestador encadene al siguiente — no enruta mal, es que no recibe nada con lo que seguir.
|
|
160
|
+
*
|
|
161
|
+
* No se pudo arreglar por fuera: su `jumpTo: "end"` **cortocircuita todos los middlewares
|
|
162
|
+
* posteriores**, incluidos `afterAgent` y su propio reset del contador (medido contra la
|
|
163
|
+
* librería real con `FakeToolCallingModel` y `runLimit: 0`, ver el test). No hay dónde
|
|
164
|
+
* engancharse. Así que el contador, la decisión y el mensaje son de aquí: uno de cada, y el
|
|
165
|
+
* mensaje se compone en `core/` donde se puede probar sin librería.
|
|
166
|
+
*
|
|
167
|
+
* `exitBehavior` sigue siendo «terminar» y no «lanzar», por el argumento de siempre: con un
|
|
168
|
+
* error la delegación entera se cae y el orquestador se queda sin nada, que es como empieza el
|
|
169
|
+
* bucle de reintentos que costó 1,5M de tokens.
|
|
170
|
+
*/
|
|
171
|
+
export declare function topeDeLlamadas(limite?: number, alCortar?: () => void): ReturnType<typeof createMiddleware>;
|
|
172
|
+
/**
|
|
173
|
+
* Cuántas TOOLS puede gastar un especialista en un encargo.
|
|
174
|
+
*
|
|
175
|
+
* El tope de llamadas al modelo acota los VIAJES; este acota **lo que se acumula**, que es lo
|
|
176
|
+
* que multiplica. Medido el 17-09-2026 en una conversación de tres preguntas: en la tercera, el
|
|
177
|
+
* consultor llegó a 43 resultados de tool metidos en su contexto, y como cada llamada al modelo
|
|
178
|
+
* reenvía todo lo anterior, la primera costó 5.264 tokens y la última 39.888 — 406k en total. No
|
|
179
|
+
* era un bucle: era la acumulación al cuadrado.
|
|
180
|
+
*
|
|
181
|
+
* ## Por qué ya no es 20, y qué NO cambia
|
|
182
|
+
*
|
|
183
|
+
* Aquel veinte era generoso contra la regla del CONSULTOR, que ya le pide «máximo tres
|
|
184
|
+
* referencias por pregunta y un `grep` por hipótesis». Pero el consultor contesta, y hay
|
|
185
|
+
* especialistas que ENTREGAN: medido el 21-09-2026, `analyst-xone` gastó su pasada entera
|
|
186
|
+
* inventariando (`glob *.xne`, `mappings.xne` paginado, `regex_search create table`, greps de
|
|
187
|
+
* `SqlManager`) y se quedó sin tools antes de escribir el plan — ver
|
|
188
|
+
* `TOPE_DE_LLAMADAS_DEL_ESPECIALISTA`, donde está la medida entera.
|
|
189
|
+
*
|
|
190
|
+
* Lo que NO cambia es el motivo por el que este tope existe, que es la acumulación y no el
|
|
191
|
+
* bucle: cada llamada reenvía todo lo anterior, así que esto sigue siendo cuadrático y sigue
|
|
192
|
+
* habiendo techo. El número nuevo cubre un reconocimiento completo más la escritura del
|
|
193
|
+
* entregable y se queda por debajo del orquestador; el 43 de aquel incidente sigue fuera.
|
|
194
|
+
*
|
|
195
|
+
* ## Por qué ya no es 35: el tope bloqueaba la ENTREGA (23-09-2026)
|
|
196
|
+
*
|
|
197
|
+
* Medido en MyAllXOne, «una calculadora a partir de una maqueta de Stitch»: el developer gastó
|
|
198
|
+
* 39, 39 y 49 tools en tres encargos y **ninguno escribió**. Con `continue`, al agotarse, el
|
|
199
|
+
* tope bloquea TODA tool que venga después, y eso incluye `write_file` y `edit_file`: el
|
|
200
|
+
* especialista explora hasta el techo y cuando va a crear el `.xne` se lo rechazan. Se pagaba
|
|
201
|
+
* el reconocimiento entero (1,17M de entrada solo el developer) y no salía nada; el
|
|
202
|
+
* orquestador lo leía como «se quedan sin turnos explorando» y re-delegaba, que es el mismo
|
|
203
|
+
* reconocimiento otra vez desde cero.
|
|
204
|
+
*
|
|
205
|
+
* **Así que deja de ser una economía y pasa a ser un GUARDA**, como el del orquestador: por
|
|
206
|
+
* encima de lo observado, para que no muerda en un encargo normal y solo pare uno desbocado.
|
|
207
|
+
* Lo que sigue acotando de verdad es el tope de LLAMADAS, que con tools en paralelo llega
|
|
208
|
+
* antes. **Y por eso ya no está por debajo del del orquestador**: esa relación tenía sentido
|
|
209
|
+
* mientras este número era un presupuesto de trabajo.
|
|
210
|
+
*
|
|
211
|
+
* La alternativa que se descartó, para no rediscutirla: excluir las escrituras del conteo
|
|
212
|
+
* (un middleware propio, porque el de langchain no sabe excluir). Arreglaba el bloqueo de la
|
|
213
|
+
* entrega sin tocar el número; se prefirió el tope alto, que es su criterio de siempre —los
|
|
214
|
+
* topes se ponen altos para que no muerdan—.
|
|
215
|
+
*/
|
|
216
|
+
export declare const TOPE_DE_TOOLS_DEL_ESPECIALISTA = 150;
|
|
217
|
+
/**
|
|
218
|
+
* **`continue`, y NO `end`: son incompatibles con pedir varias tools a la vez.**
|
|
219
|
+
*
|
|
220
|
+
* Medido el 17-09-2026 en el primer turno con el tope puesto: «Cannot end execution with other
|
|
221
|
+
* tool calls pending. Found calls to: read_file, ls, grep». La documentación de langchain lo
|
|
222
|
+
* dice igual —`end` «raises NotImplementedError if there are multiple tool calls»— y nosotros le
|
|
223
|
+
* PEDIMOS al especialista que agrupe las lecturas independientes en un mismo mensaje, así que
|
|
224
|
+
* llegar al tope con varias en vuelo es el caso normal, no el raro.
|
|
225
|
+
*
|
|
226
|
+
* `continue` bloquea las que sobran con un mensaje de error y deja que el modelo termine: se
|
|
227
|
+
* queda sin más tools y contesta con lo que tiene, que es lo mismo que buscaba `end` pero sin
|
|
228
|
+
* romperse. `error` tumbaría la delegación entera, que es como empieza el bucle de reintentos.
|
|
229
|
+
*
|
|
230
|
+
* Dos reglas nuestras que vivían sin hablarse —«agrupa las tools» y «corta al llegar al tope»—
|
|
231
|
+
* y cuyo choque solo se ve corriendo. Por eso el test las ata juntas.
|
|
232
|
+
*/
|
|
233
|
+
export declare const SALIDA_DEL_TOPE_DE_TOOLS: "continue";
|
|
234
|
+
/**
|
|
235
|
+
* Cuántas TOOLS puede gastar el ORQUESTADOR, y **es un guarda, no una economía**.
|
|
236
|
+
*
|
|
237
|
+
* ## Por qué NO lleva tope de LLAMADAS, y esto sí
|
|
238
|
+
*
|
|
239
|
+
* El argumento contra caparle las llamadas sigue en pie y es bueno: **el que contesta al
|
|
240
|
+
* usuario no puede quedarse a medias**. Pero ese argumento es sobre no cortarle la VOZ, y el
|
|
241
|
+
* tope de tools con `exitBehavior: "continue"` no corta nada — se queda sin más tools y
|
|
242
|
+
* contesta con lo que tenga. Le quita la pala, no la palabra.
|
|
243
|
+
*
|
|
244
|
+
* ## Por qué el número es ALTO, y qué NO es
|
|
245
|
+
*
|
|
246
|
+
* **No está puesto para ahorrar.** Medido el 19-09-2026 sobre turnos reales, el orquestador
|
|
247
|
+
* gasta 41 tools en un encargo visual normal —18 lecturas, 15 `grep`, 5 de navegación y 3
|
|
248
|
+
* delegaciones— y sus llamadas al modelo van de 14 a 49 según el turno. Esas lecturas SON el
|
|
249
|
+
* trabajo: recortarlas no abarata el turno, empeora la respuesta. Lo que abarata es quitarle la
|
|
250
|
+
* NECESIDAD de leer, que es lo que hacen `conHechosDelProyecto` y la operación `estilos` — y se
|
|
251
|
+
* está moviendo: la navegación pasó de 1-2 usos por turno a 5.
|
|
252
|
+
*
|
|
253
|
+
* Así que esto se sitúa POR ENCIMA de lo observado a propósito: no muerde en ningún turno
|
|
254
|
+
* medido y solo para uno desbocado. Es el mismo papel que `topeDeRondas` y el tope propio de
|
|
255
|
+
* los artefactos — «aquí no hay humano que frene el bucle»—, y por eso vive aquí y no en una
|
|
256
|
+
* medida de coste. Si algún día muerde en un turno normal, lo que hay que mirar es por qué ese
|
|
257
|
+
* turno necesitó 60 tools, no subir el número.
|
|
258
|
+
*/
|
|
259
|
+
export declare const TOPE_DE_TOOLS_DEL_ORQUESTADOR = 60;
|
|
260
|
+
export declare function topeDeTools(limite?: number): import("langchain").AgentMiddleware<import("zod/v3").ZodObject<{
|
|
261
|
+
threadToolCallCount: import("zod/v3").ZodDefault<import("zod/v3").ZodRecord<import("zod/v3").ZodString, import("zod/v3").ZodNumber>>;
|
|
262
|
+
runToolCallCount: import("zod/v3").ZodDefault<import("zod/v3").ZodRecord<import("zod/v3").ZodString, import("zod/v3").ZodNumber>>;
|
|
263
|
+
}, "strip", import("zod/v3").ZodTypeAny, {
|
|
264
|
+
threadToolCallCount: Record<string, number>;
|
|
265
|
+
runToolCallCount: Record<string, number>;
|
|
266
|
+
}, {
|
|
267
|
+
threadToolCallCount?: Record<string, number> | undefined;
|
|
268
|
+
runToolCallCount?: Record<string, number> | undefined;
|
|
269
|
+
}>, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La LISTA BLANCA de la línea de estado: qué argumento de cada tool puede salir como
|
|
3
|
+
* `detalle` del evento `tool`.
|
|
4
|
+
*
|
|
5
|
+
* La regla dura está documentada en `core/events.ts`: ningún evento lleva argumentos de
|
|
6
|
+
* tool crudos, porque `write_file` lleva el contenido del fichero y una tool MCP lleva
|
|
7
|
+
* el bearer — enseñar el progreso no puede ser la forma de filtrar un secreto. Este
|
|
8
|
+
* módulo es la otra mitad de esa regla: no se FILTRA nada, se ELIGE a mano un campo por
|
|
9
|
+
* tool — una ruta o un patrón, nunca contenido — y lo que no está en la tabla no sale.
|
|
10
|
+
* Los nombres de campo son los de las tools de fichero de deepagents, verificados
|
|
11
|
+
* contra su dist (`file_path` con `path` normalizado, `pattern` en glob/grep).
|
|
12
|
+
*/
|
|
13
|
+
/** Valores escalares que una traza local puede conservar sin volcar contenido. */
|
|
14
|
+
export type ParametrosSeguros = Record<string, string | number | boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Campos permitidos por tool. Es una lista blanca deliberada: ni `content`,
|
|
17
|
+
* ni `old_string`/`new_string`, ni la descripción de `task` llegan a disco.
|
|
18
|
+
*
|
|
19
|
+
* Los parámetros de paginación y acotación son justo los que necesitamos para
|
|
20
|
+
* detectar una lectura masiva o una búsqueda mal afinada.
|
|
21
|
+
*/
|
|
22
|
+
export declare const CAMPOS_SEGUROS: Record<string, readonly string[]>;
|
|
23
|
+
/** Argumentos acotados y seguros para la traza opt-in de diagnóstico. */
|
|
24
|
+
/** Huella corta y estable de un texto. No reversible: solo sirve para comparar dos. */
|
|
25
|
+
export declare function huellaDeTexto(texto: string): string;
|
|
26
|
+
export declare function parametrosDe(nombre: string, args: unknown): ParametrosSeguros | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* El `detalle` de una llamada, o `undefined` si no hay nada permitido que contar.
|
|
29
|
+
*
|
|
30
|
+
* Los argumentos llegan como objeto o como cadena JSON (así viajan en las
|
|
31
|
+
* `tool_calls`); un JSON roto es una tool rota, no una excepción que tumbe el turno.
|
|
32
|
+
*/
|
|
33
|
+
export declare function detalleDe(nombre: string, args: unknown): string | undefined;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createMiddleware } from "langchain";
|
|
2
|
+
import { type Calificacion, type EstadoDeRubrica } from "../../core/rubrica.js";
|
|
3
|
+
/**
|
|
4
|
+
* Quién juzga. **Un PUERTO y no un modelo construido dentro**, que es la diferencia con el
|
|
5
|
+
* original de Python: así el bucle entero se prueba sin red y sin clave, que es el invariante
|
|
6
|
+
* que sostiene el diseño de este repo. Quien lo implemente con un modelo de verdad vive fuera.
|
|
7
|
+
*
|
|
8
|
+
* Recibe el transcript tal cual y la rúbrica. Devolver es obligatorio: si no puede juzgar, que
|
|
9
|
+
* lance — el bucle distingue «no cumple» de «no se pudo juzgar», y son dos cosas distintas.
|
|
10
|
+
*/
|
|
11
|
+
export type Calificador = (mensajes: readonly unknown[], rubrica: string) => Promise<Calificacion>;
|
|
12
|
+
/**
|
|
13
|
+
* El bucle de rúbrica, portado del `RubricMiddleware` de deepagents (que está en su SDK de
|
|
14
|
+
* Python y no en el de JS).
|
|
15
|
+
*
|
|
16
|
+
* En la parada natural del agente —el modelo contesta sin pedir más tools— se juzga lo hecho
|
|
17
|
+
* contra la rúbrica. `necesita-revision` mete el comentario como mensaje y **salta de vuelta al
|
|
18
|
+
* modelo** (`jumpTo: "model"`, que el langchain de JS admite desde `afterAgent`); cualquier otro
|
|
19
|
+
* veredicto cierra.
|
|
20
|
+
*
|
|
21
|
+
* **Sin rúbrica no hace NADA**, igual que el original, y por eso se puede montar siempre: un
|
|
22
|
+
* turno normal no paga ni una llamada. Lo que decide si hay bucle es el dato, no una bandera.
|
|
23
|
+
*
|
|
24
|
+
* **Y a diferencia del original, un final no satisfecho SE DICE**: allí el estado vive en un
|
|
25
|
+
* campo privado y la última respuesta sigue siendo la del modelo —que puede estar afirmando que
|
|
26
|
+
* terminó—. Aquí se apila el aviso, que es la misma regla que hizo falta en el tope de llamadas.
|
|
27
|
+
*
|
|
28
|
+
* `alEvaluar` existe para que el harness pueda enseñarlo donde una persona lo vea: un mensaje
|
|
29
|
+
* apilado llega al transcript, pero no a la pantalla.
|
|
30
|
+
*/
|
|
31
|
+
export declare function middlewareDeRubrica(opciones: {
|
|
32
|
+
calificar: Calificador;
|
|
33
|
+
tope?: number;
|
|
34
|
+
alEvaluar?: (estado: EstadoDeRubrica, vuelta: number) => void;
|
|
35
|
+
}): ReturnType<typeof createMiddleware>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El contrato de una sesión de turno real, que cumplen LOS DOS motores —deepagents
|
|
3
|
+
* (`turnoReal.ts#abrirSesionReal`) y TrueForge (`motores/trueforge/sesionTrueforge.ts`)—.
|
|
4
|
+
*
|
|
5
|
+
* Vive aparte, y no en `turnoReal.ts`, porque los dos lo necesitan y `turnoReal.ts` es quien
|
|
6
|
+
* elige el motor: si el contrato viviera allí, TrueForge tendría que importar a quien lo importa
|
|
7
|
+
* a él, que es el ciclo que había (`src/ciclos.test.ts` lo vigila).
|
|
8
|
+
*/
|
|
9
|
+
import type { Piel } from "../../core/turno.js";
|
|
10
|
+
import type { Bitacora } from "../../core/bitacora.js";
|
|
11
|
+
import type { ConsumoDeSesionPorCuenta, ModelosPort } from "../../core/ports.js";
|
|
12
|
+
import type { ResultadoDeTurno } from "../../core/entrega.js";
|
|
13
|
+
import type { TokenTracker } from "../../vendor/tokenTracking.js";
|
|
14
|
+
import type { Cambio } from "./instantanea.js";
|
|
15
|
+
/**
|
|
16
|
+
* Una sesión de turno real: varios turnos sobre el MISMO agente y el MISMO hilo.
|
|
17
|
+
*
|
|
18
|
+
* Es la extracción de `correrReal` (`cli/run.ts`), reescrita de disparo único a reutilizable:
|
|
19
|
+
* el agente, el checkpointer, el tracker y el `thread_id` viven en el cierre de
|
|
20
|
+
* `abrirSesionReal` y se conservan entre llamadas. Lo que cada `turno()` renueva es la foto
|
|
21
|
+
* del ANTES, porque el diff es del TURNO y no de la sesión: si la foto fuese una por sesión,
|
|
22
|
+
* el turno 3 reportaría también lo que escribió el turno 1.
|
|
23
|
+
*/
|
|
24
|
+
export interface SesionReal {
|
|
25
|
+
/**
|
|
26
|
+
* Un turno. Devuelve la bitácora, los cambios que dejó en el proyecto y **lo que hay que
|
|
27
|
+
* saber para decidir si el trabajo se puede dar por bueno** (`ResultadoDeTurno`).
|
|
28
|
+
*
|
|
29
|
+
* Esas tres últimas cosas —cómo acabó el verificador, cuántas escrituras quedaron sin
|
|
30
|
+
* aplicar y los hallazgos— no estaban, y su ausencia era una deuda MEDIDA: con las
|
|
31
|
+
* tareas de fondo aplicando escrituras solas, un turno se cortó por el tope de rondas
|
|
32
|
+
* con cuatro ficheros escritos, una escritura abandonada, el verificador sin correr ni
|
|
33
|
+
* una vez… y el kanban diciendo «terminada». La bitácora no sirve para esto: `corrio`
|
|
34
|
+
* responde si un nodo pasó, no con qué veredicto.
|
|
35
|
+
*/
|
|
36
|
+
turno(peticion: string, piel: Piel): Promise<ResultadoDeTurno & {
|
|
37
|
+
bitacora: Bitacora;
|
|
38
|
+
cambios: Cambio[];
|
|
39
|
+
/** Se agotó el tope de rondas con aprobaciones sin resolver. */
|
|
40
|
+
cortadoPorTope: boolean;
|
|
41
|
+
}>;
|
|
42
|
+
/** Rehace el agente con modelos nuevos, CONSERVANDO el hilo. Para `/modelo`. */
|
|
43
|
+
cambiarModelos(modelos: ModelosPort): Promise<void>;
|
|
44
|
+
/** Abre un hilo nuevo. Para `/nuevo`. */
|
|
45
|
+
/**
|
|
46
|
+
* Abre un hilo nuevo. **Acepta el id** porque quien lo pide puede ya tener uno.
|
|
47
|
+
*
|
|
48
|
+
* Sin el parámetro había DOS ids para un mismo hilo: la consola generaba el suyo en su
|
|
49
|
+
* `/nuevo` y la sesión otro aquí, así que `/hilo` enseñaba un `thread_id` que no era el
|
|
50
|
+
* que usaba el grafo. Un identificador que no identifica es peor que no darlo.
|
|
51
|
+
*/
|
|
52
|
+
nuevoHilo(id?: string): void;
|
|
53
|
+
/** Aborta de inmediato la llamada al modelo que está en curso, si la hay. */
|
|
54
|
+
cancelar(): void;
|
|
55
|
+
/** Lo que lleva consumido la sesión, en sus DOS cuentas (ver `ConsumoDeSesionPorCuenta`). */
|
|
56
|
+
consumo(): ConsumoDeSesionPorCuenta;
|
|
57
|
+
/** Se avisa en cada cambio de cualquiera de las dos. Devuelve cómo dejar de escuchar. */
|
|
58
|
+
alCambiarConsumo(oyente: () => void): () => void;
|
|
59
|
+
/**
|
|
60
|
+
* Termina la sesión: aborta lo que esté en curso y la deja inservible.
|
|
61
|
+
*
|
|
62
|
+
* Hace falta para CAMBIAR de proyecto (`web/servidor/vestibulo.ts`): la consola web abre
|
|
63
|
+
* una consola de proyecto a la vez, y cerrar la anterior es agotar sus `lineas` para que
|
|
64
|
+
* `correrConsola` retorne. Sin esto, un turno en vuelo mantendría el lazo dentro del
|
|
65
|
+
* `await` durante minutos y la apertura del proyecto siguiente se quedaría esperando.
|
|
66
|
+
*
|
|
67
|
+
* Qué libera y qué no, dicho entero porque una fuga callada es peor que una declarada:
|
|
68
|
+
* el `MemorySaver`, el agente construido y el tracker viven en el CIERRE de
|
|
69
|
+
* `abrirSesionReal` y no exponen ningún `close()` —no hay sockets ni descriptores, el
|
|
70
|
+
* cliente del modelo es por llamada—, así que se recogen con la referencia a la sesión
|
|
71
|
+
* en cuanto quien la abrió la suelta. Lo único que hay que soltar activamente es la
|
|
72
|
+
* llamada en curso, y eso es exactamente `cancelar()`. La bandera de cerrada existe para
|
|
73
|
+
* que un `turno()` tardío falle en vez de revivir un hilo que ya nadie mira.
|
|
74
|
+
*/
|
|
75
|
+
cerrar(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Añade una nota al turno EN MARCHA (IXCODE-4). Opcional: el ejecutor guionizado y
|
|
78
|
+
* `deepagents` no lo tienen.
|
|
79
|
+
*/
|
|
80
|
+
agregarNota?(texto: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* DETENER y replanificar el turno EN MARCHA (IXCODE-4): los especialistas cierran con su
|
|
83
|
+
* resumen y el orquestador replanifica con `texto`. Opcional: solo TrueForge lo tiene.
|
|
84
|
+
*/
|
|
85
|
+
detener?(texto: string): void;
|
|
86
|
+
readonly tracker: TokenTracker;
|
|
87
|
+
/** El `thread_id` ACTUAL: tras `nuevoHilo()` cambia, y hay que leerlo, no cachearlo. */
|
|
88
|
+
readonly hilo: string;
|
|
89
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El contenido de un mensaje, como cadena.
|
|
3
|
+
*
|
|
4
|
+
* `JSON.stringify` es el último recurso y no el primero: para bloques de texto daría
|
|
5
|
+
* `[{"type":"text","text":"…"}]`, y el modelo tendría que desenterrar el contenido de
|
|
6
|
+
* su propio envoltorio en cada llamada.
|
|
7
|
+
*/
|
|
8
|
+
export declare function aTexto(contenido: unknown): string;
|
|
9
|
+
/** ¿Es un `ToolMessage`? Se mira por las dos vías: el tipo de langchain y el campo. */
|
|
10
|
+
export declare function esMensajeDeTool(msg: unknown): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Convierte los `ToolMessage` de la petición, sin tocar el historial.
|
|
13
|
+
*
|
|
14
|
+
* Va en `wrapModelCall` y no en `beforeModel` a propósito: lo que hay que arreglar es lo
|
|
15
|
+
* que SE MANDA, no lo que se guarda. Reescribir el estado perdería el contenido
|
|
16
|
+
* estructurado para todo lo demás —el rastreo, un proveedor que sí lo acepte— por un
|
|
17
|
+
* problema de un solo conversor.
|
|
18
|
+
*/
|
|
19
|
+
export declare function middlewareTextoDeTool(): import("langchain").AgentMiddleware<undefined, undefined, unknown, readonly (import("@langchain/core/tools").ClientTool | import("@langchain/core/tools").ServerTool)[], readonly []>;
|