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,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lo que un `TASKS.md` dice de sus tareas, leído como DATO para la pestaña Planes.
|
|
3
|
+
*
|
|
4
|
+
* El formato lo fija la skill `xone-plan-builder` (`references/TASKS-FORMAT.md`): una sección
|
|
5
|
+
* `### NN — Título` por tarea, con `**Bloqueada por:**` y casillas `- [ ]` de criterios, más el
|
|
6
|
+
* `**Estado:**` que el prompt del desarrollador le pide actualizar (`agentesEnDisco.ts`).
|
|
7
|
+
*
|
|
8
|
+
* **Es lo que el plan DICE, no lo que se midió**: el estado y las casillas las marca el modelo.
|
|
9
|
+
* Por eso quien lo pinta lo rotula «según el plan», y por eso este lector es conservador:
|
|
10
|
+
*
|
|
11
|
+
* - Una dependencia solo se reconoce cuando es un NÚMERO de tarea (`02`, `02, 04`) o un RANGO
|
|
12
|
+
* (`01–07`); el resto de la línea se conserva como texto tal cual, que es donde el analista
|
|
13
|
+
* escribe cosas como «requiere ejecución externa». Inventarle una estructura a esa prosa
|
|
14
|
+
* sería afirmar algo que el plan no dice.
|
|
15
|
+
* - El estado se DEVUELVE como está escrito; no se normaliza a un enum. Un «bloqueada», un
|
|
16
|
+
* «en curso» o un «hecha» son palabras del plan, y traducirlas sería decidir por él.
|
|
17
|
+
* - Un fichero sin ninguna sección con forma de tarea no es un plan vacío: `tareas` va vacío y
|
|
18
|
+
* quien lo pinta enseña el texto entero.
|
|
19
|
+
* - La cabecera se reconoce también en la forma que el modelo escribe a veces fuera del formato,
|
|
20
|
+
* `## T1 — Título` (nivel 2, prefijo `T`): visto en un plan real que la pestaña pintaba como
|
|
21
|
+
* «sin tareas» con siete dentro. El número se conserva TAL CUAL (`T1`), porque es lo que
|
|
22
|
+
* citan sus «Bloqueada por». Con ese prefijo solo cuenta como dependencia un número que lo
|
|
23
|
+
* lleve: «T2 (resuelta la PENDIENTE 3)» es T2, no T2 y 3.
|
|
24
|
+
*/
|
|
25
|
+
export interface TareaDelPlan {
|
|
26
|
+
/** El número tal como aparece (`01`), que es lo que citan las dependencias. */
|
|
27
|
+
numero: string;
|
|
28
|
+
titulo: string;
|
|
29
|
+
/** El `**Estado:**` tal cual, o ausente si la tarea no lo lleva. */
|
|
30
|
+
estado?: string;
|
|
31
|
+
/** Las tareas que la bloquean, reconocidas como números (rangos ya expandidos). */
|
|
32
|
+
bloqueadaPor: string[];
|
|
33
|
+
/** La línea «Bloqueada por» entera, para enseñarla cuando lleva algo más que números. */
|
|
34
|
+
bloqueadaPorTexto?: string;
|
|
35
|
+
criterios: {
|
|
36
|
+
hechos: number;
|
|
37
|
+
total: number;
|
|
38
|
+
};
|
|
39
|
+
/** Por dónde va, CALCULADO del estado y las casillas (`progresoDeTarea`). */
|
|
40
|
+
progreso: ProgresoDeTarea;
|
|
41
|
+
/** El markdown de la sección, sin su cabecera: la ficha que se abre al pulsarla. */
|
|
42
|
+
cuerpo: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Las cuatro palabras con que se escribe `**Estado:**` (`xone-plan-builder`, `TASKS-FORMAT.md`):
|
|
46
|
+
* quien desarrolla pone `implementada` al escribir el código y `hecha` cuando lo comprobó.
|
|
47
|
+
*/
|
|
48
|
+
export declare const ESTADOS_DE_TAREA: readonly ["pendiente", "en curso", "implementada", "hecha"];
|
|
49
|
+
export type EstadoDeTarea = (typeof ESTADOS_DE_TAREA)[number];
|
|
50
|
+
/**
|
|
51
|
+
* Por dónde va una tarea, que es lo que la pestaña resume.
|
|
52
|
+
*
|
|
53
|
+
* - `finalizada`: TODAS sus casillas marcadas —cada una es un criterio COMPROBADO—, o `hecha`
|
|
54
|
+
* sin casillas que marcar.
|
|
55
|
+
* - `implementada`: el código está (`implementada` o `hecha`) pero le falta comprobar algo. También
|
|
56
|
+
* con ALGUNA casilla marcada, diga lo que diga su estado: un criterio comprobado es código que
|
|
57
|
+
* existe, y un plan real marca casillas sin escribir `**Estado:**` por tarea —con 2 de 3
|
|
58
|
+
* comprobados, el círculo salía vacío, como si no se hubiera empezado—.
|
|
59
|
+
* - `en-curso` y `pendiente`: lo que dice su estado; un estado que no se reconoce cuenta como
|
|
60
|
+
* pendiente, porque afirmar avance que el plan no dice sería peor que quedarse corto.
|
|
61
|
+
*/
|
|
62
|
+
export type ProgresoDeTarea = "pendiente" | "en-curso" | "implementada" | "finalizada";
|
|
63
|
+
/**
|
|
64
|
+
* El estado del plan como una de las cuatro palabras, mirando solo cómo EMPIEZA: un plan real
|
|
65
|
+
* escribe «implementada — sin verificar en la app» o «pendiente — **NO hecha**», y lo que
|
|
66
|
+
* cuenta es la primera palabra, no la prosa de detrás (que tiene un «hecha» dentro).
|
|
67
|
+
*/
|
|
68
|
+
export declare function estadoReconocido(estado: string | undefined): EstadoDeTarea | undefined;
|
|
69
|
+
export declare function progresoDeTarea(estado: string | undefined, criterios: {
|
|
70
|
+
hechos: number;
|
|
71
|
+
total: number;
|
|
72
|
+
}): ProgresoDeTarea;
|
|
73
|
+
export interface TareasDelPlan {
|
|
74
|
+
/** El `# …` del principio, si lo hay. */
|
|
75
|
+
titulo?: string;
|
|
76
|
+
tareas: TareaDelPlan[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Si una línea abre una tarea, en cualquiera de las formas que se han visto, y lo que sobra en esa
|
|
80
|
+
* MISMA línea (en la forma de viñeta, `Bloqueada por: …` suele ir ahí). El formato de la skill
|
|
81
|
+
* (`### 01 — Título`) manda; las otras son tolerancia, no un segundo formato.
|
|
82
|
+
*/
|
|
83
|
+
export declare function cabeceraDeTarea(l: string): {
|
|
84
|
+
numero: string;
|
|
85
|
+
titulo: string;
|
|
86
|
+
resto?: string;
|
|
87
|
+
} | undefined;
|
|
88
|
+
/** «Ninguna …» o «nada»: la forma de decir que puede empezar ya. */
|
|
89
|
+
export declare const SIN_DEPENDENCIAS: RegExp;
|
|
90
|
+
/**
|
|
91
|
+
* Los números de tarea que nombra una línea «Bloqueada por». Un rango `01–07` (con guion,
|
|
92
|
+
* raya o «a») se expande con el ancho del primero; «Ninguna» no nombra ninguno.
|
|
93
|
+
*/
|
|
94
|
+
export declare function dependenciasDe(linea: string, conPrefijo?: boolean): string[];
|
|
95
|
+
export declare function leerTareasDelPlan(texto: string): TareasDelPlan;
|
|
96
|
+
/** La ruta del `TASKS.md` de un plan: `/planes/<slug>/TASKS.md`. */
|
|
97
|
+
export declare const RUTA_DE_TASKS: RegExp;
|
|
98
|
+
/**
|
|
99
|
+
* Por qué NO vale un `TASKS.md` que se va a escribir entero, o `undefined` si vale: tiene que reconocerse al menos una
|
|
100
|
+
* tarea, y CADA tarea tiene que traer sus criterios como casillas `- [ ]`.
|
|
101
|
+
*
|
|
102
|
+
* Existe por una medida: en cinco pasadas de la misma calculadora el analista escribió las casillas en tres y en dos
|
|
103
|
+
* (calc10, calc13) no, con los criterios como viñetas sueltas. Sin casillas, quien comprueba en el aparato no puede marcar
|
|
104
|
+
* nada (`marcarCriterios` solo cambia `- [ ]`), el plan no dice por dónde va y la pestaña Planes no enseña progreso. El
|
|
105
|
+
* prompt ya pedía el formato; era texto. Se aplica al ESCRIBIR el fichero entero, no al editarlo: un plan viejo sin
|
|
106
|
+
* casillas se puede seguir anotando.
|
|
107
|
+
*/
|
|
108
|
+
export declare function motivoDeTasksInaceptable(texto: string): string | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Marca como COMPROBADOS unos criterios de una tarea: cambia sus `- [ ]` a `- [x]`, contando las
|
|
111
|
+
* casillas de la sección de 1 en adelante, en el orden en que aparecen.
|
|
112
|
+
*
|
|
113
|
+
* Es lo que usa quien COMPRUEBA en el aparato (`marcar_criterios_del_plan`) y no puede escribir
|
|
114
|
+
* ficheros: por eso toca SOLO las casillas de UNA tarea, y nada más del fichero cambia. Un número
|
|
115
|
+
* que no existe se rechaza entero —marcar la mitad dejaría al modelo creyendo que marcó todo—.
|
|
116
|
+
*/
|
|
117
|
+
export declare function marcarCriterios(texto: string, numero: string, criterios: readonly number[]): {
|
|
118
|
+
texto: string;
|
|
119
|
+
marcados: number[];
|
|
120
|
+
yaEstaban: number[];
|
|
121
|
+
} | {
|
|
122
|
+
error: string;
|
|
123
|
+
};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { CategoriaDeTarea, ComentarioDelGestor, EstadoDelGestor, GestorDeTareasPort, MapeoDeEstados, TareaDelGestor, TransicionDelGestor, Vinculo } from "./gestorDeTareas.js";
|
|
2
|
+
import type { EstadoDeTarea, Tarea, TicketDeTarea } from "./tareas.js";
|
|
3
|
+
/**
|
|
4
|
+
* La cabecera FIJA del comentario con el encargo ampliado. Es una constante porque la fase 2 la BUSCARÁ entre los
|
|
5
|
+
* comentarios del ticket para leer el último encargo revisado: cambiarla dejaría de encontrar los de antes.
|
|
6
|
+
*/
|
|
7
|
+
export declare const CABECERA_DEL_ENCARGO = "\uD83E\uDD16 Encargo para el agente (xonecode)";
|
|
8
|
+
/** El comentario que sube el encargo ampliado al ticket recién creado. Markdown: los dos gestores lo entienden. */
|
|
9
|
+
export declare function comentarioDeEncargo(encargo: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Qué hay que escribir en el gestor cuando una tarea cambia de estado. Solo dos momentos en la fase 1:
|
|
12
|
+
* - **empezar** (→ `en-proceso`): pasar el ticket a EN CURSO. Vuelve a pasar tras cada feedback y tras una
|
|
13
|
+
* reanudación, así que quien lo aplica mira antes si el ticket ya está en curso (`hayQueTransicionar`).
|
|
14
|
+
* - **cerrar** (→ `terminada`): el comentario de cierre y la transición a PROBAR.
|
|
15
|
+
* Aparcar (→ `requiere-atencion`) no escribe nada todavía; volver a la cola (→ `nuevo`) tampoco.
|
|
16
|
+
*/
|
|
17
|
+
export declare function escrituraEnElGestor(antes: EstadoDeTarea | undefined, despues: EstadoDeTarea): "empezar" | "cerrar" | undefined;
|
|
18
|
+
/** Un cambio que hay que reflejar: la tarea tal como quedó y qué escribir. */
|
|
19
|
+
export interface ReflejoPendiente {
|
|
20
|
+
tarea: Tarea & {
|
|
21
|
+
ticket: TicketDeTarea;
|
|
22
|
+
};
|
|
23
|
+
/** `descartar` no sale de un cambio de estado sino de BORRAR la tarea (ver `conReflejoAlGuardar`). */
|
|
24
|
+
escritura: "empezar" | "cerrar" | "descartar";
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Los reflejos que salen de pasar la cola de `antes` a `despues`, comparando por id. Solo las tareas CON ticket, y
|
|
28
|
+
* solo cuando su ESTADO cambió: guardar un aviso en `ticket` (que no cambia el estado) no vuelve a disparar nada. Una
|
|
29
|
+
* tarea nueva cuenta como «antes» ausente; una que desaparece (descartada) no escribe nada.
|
|
30
|
+
*/
|
|
31
|
+
export declare function reflejosPendientes(antes: readonly Tarea[], despues: readonly Tarea[]): ReflejoPendiente[];
|
|
32
|
+
/**
|
|
33
|
+
* Si al EMPEZAR hay que mover el ticket: no si ya está en curso (una reanudación, o la persona lo movió a mano). Al
|
|
34
|
+
* cerrar se mueve siempre: comentar y pasar a PROBAR es lo que dice que está hecho.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hayQueTransicionar(escritura: "empezar" | "cerrar", categoriaActual: CategoriaDeTarea): boolean;
|
|
37
|
+
/** El `Vinculo` con el que se escribe en el ticket de una tarea: el COPIADO al crearla, nunca el del proyecto ahora. */
|
|
38
|
+
export declare function vinculoDelTicket(ticket: TicketDeTarea): Vinculo;
|
|
39
|
+
/**
|
|
40
|
+
* CERRAR un ticket: comentar y LUEGO transicionar. Una sola secuencia para el «Cerrar en …» de un chat y para una tarea
|
|
41
|
+
* en background que termina —dos copias acabarían distintas—:
|
|
42
|
+
* - si `comentar` falla, LANZA y no se transiciona (no se dice «hecho» de algo sin explicar);
|
|
43
|
+
* - si la transición falla, el comentario YA está en el gestor: no se lanza —repetir el cierre comentaría DOS veces—,
|
|
44
|
+
* se devuelve el motivo en `falloDeTransicion` (traducido por quien llama, que sabe limpiar el mensaje remoto).
|
|
45
|
+
*/
|
|
46
|
+
export declare function cerrarTicket(g: Pick<GestorDeTareasPort, "comentar" | "transicionar">, v: Vinculo, clave: string, comentario: string, transicion: string | undefined, motivoDe: (error: unknown) => string): Promise<{
|
|
47
|
+
falloDeTransicion?: string;
|
|
48
|
+
}>;
|
|
49
|
+
/** Cada cuánto mira el gestor el proceso que ejecuta las tareas (la puerta 2). Más «Mirar ahora». */
|
|
50
|
+
export declare const INTERVALO_DE_SONDEO_MS: number;
|
|
51
|
+
/**
|
|
52
|
+
* El mapeo que se PROPONE para un flujo, por categoría: preparar = el primero «por hacer», lanzar = el primero «en
|
|
53
|
+
* curso», terminar = PROBAR si existe (el flujo de IXCODE) o el primero «terminada». La persona lo confirma o lo cambia.
|
|
54
|
+
*/
|
|
55
|
+
export declare function mapeoPropuesto(estados: readonly EstadoDelGestor[]): MapeoDeEstados;
|
|
56
|
+
/**
|
|
57
|
+
* La transición que lleva un ticket al estado del MAPEO para ese momento (empezar → lanzar, cerrar → terminar), por el
|
|
58
|
+
* nombre de su destino sin mayúsculas. Sin estado mapeado, la regla de antes (`transicionPropuesta`). Con estado mapeado
|
|
59
|
+
* y sin transición que lleve a él, `undefined`: no se adivina otra.
|
|
60
|
+
*/
|
|
61
|
+
export declare function transicionHacia(ts: readonly TransicionDelGestor[], para: "empezar" | "cerrar", estados: MapeoDeEstados | undefined): TransicionDelGestor | undefined;
|
|
62
|
+
/** Si un estado del gestor es el del mapeo (sin mayúsculas ni espacios de más). */
|
|
63
|
+
export declare function esEstado(estado: string, mapeado: string | undefined): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Lo que el sondeo tiene que hacer con un ticket. `lanzar` con `preparar` es la casilla «revisar el encargo» APAGADA:
|
|
66
|
+
* se amplía y se sube el encargo, y en la misma pasada se crea la tarea con él.
|
|
67
|
+
*/
|
|
68
|
+
export type AccionDelSondeo = {
|
|
69
|
+
tipo: "preparar";
|
|
70
|
+
ticket: TareaDelGestor;
|
|
71
|
+
} | {
|
|
72
|
+
tipo: "lanzar";
|
|
73
|
+
ticket: TareaDelGestor;
|
|
74
|
+
preparar?: true;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Qué hacer en una pasada del sondeo, PURO: con los tickets ASIGNADOS a la cuenta del conector, el mapeo, qué tickets
|
|
78
|
+
* ya tienen encargo subido y cuáles ya tienen tarea (no descartada).
|
|
79
|
+
* - En el estado de PREPARAR y sin encargo → preparar.
|
|
80
|
+
* - En el estado de LANZAR y sin tarea → lanzar (con o sin encargo: sin él se usa el texto del ticket).
|
|
81
|
+
* Un ticket ya preparado no se vuelve a preparar; uno con tarea no lanza otra. Sin estado de lanzar no se lanza nada.
|
|
82
|
+
*/
|
|
83
|
+
export declare function accionesDelSondeo(o: {
|
|
84
|
+
tickets: readonly TareaDelGestor[];
|
|
85
|
+
estados: MapeoDeEstados;
|
|
86
|
+
conEncargo: ReadonlySet<string>;
|
|
87
|
+
conTarea: ReadonlySet<string>;
|
|
88
|
+
/** La casilla «revisar el encargo antes de lanzar». Apagada (lo de omisión): el de preparar se prepara Y se lanza. */
|
|
89
|
+
revisarEncargo?: boolean;
|
|
90
|
+
}): AccionDelSondeo[];
|
|
91
|
+
/** Si un comentario es un encargo subido por xonecode: empieza por la cabecera fija (con o sin negrita). */
|
|
92
|
+
export declare function esComentarioDeEncargo(texto: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* El encargo que se ejecuta al LANZAR, leído de los comentarios del ticket: el ÚLTIMO con la cabecera, tal como esté
|
|
95
|
+
* (si la persona lo editó, su versión), sin la cabecera ni la firma; y lo comentado DEBAJO de él, como indicaciones
|
|
96
|
+
* añadidas. Sin encargo, `undefined` (se usará el texto del ticket).
|
|
97
|
+
*/
|
|
98
|
+
export declare function encargoDeLosComentarios(comentarios: readonly ComentarioDelGestor[]): {
|
|
99
|
+
encargo: string;
|
|
100
|
+
añadidos: string[];
|
|
101
|
+
} | undefined;
|
|
102
|
+
/** El encargo final de una tarea lanzada desde el gestor: el encargo, y debajo lo que se comentó después, dicho como tal. */
|
|
103
|
+
export declare function encargoConAñadidos(encargo: string, añadidos: readonly string[]): string;
|
|
104
|
+
/**
|
|
105
|
+
* A dónde va el ticket de una tarea DESCARTADA: al primer estado de la categoría «terminada» del flujo (en MAS, «Listo»;
|
|
106
|
+
* en KAN, «Finalizada»), decisión suya. Así sale de las pendientes y el sondeo no la vuelve a crear. No es el estado
|
|
107
|
+
* de «terminar» del mapeo: ese puede ser PROBAR, que diría que hay algo que probar.
|
|
108
|
+
*/
|
|
109
|
+
export declare function transicionDeDescarte(ts: readonly TransicionDelGestor[]): TransicionDelGestor | undefined;
|
|
110
|
+
/** El comentario que deja en el ticket una tarea descartada. */
|
|
111
|
+
export declare function comentarioDeDescarte(): string;
|
|
112
|
+
/** La línea que encabeza el encargo de una tarea que vive en el gestor: el ticket, con su enlace si se conoce. */
|
|
113
|
+
export declare function lineaDelTicket(nombreDelGestor: string, clave: string, url: string | undefined): string;
|
|
114
|
+
/** El nombre para enseñar de un gestor, del catálogo de conectores («Jira»); uno que no está, por su id. */
|
|
115
|
+
export declare function nombreDelGestor(conector: string): string;
|
|
116
|
+
/** El encargo con la línea del ticket delante: así el agente y la conversación saben de qué ticket es y dónde está. */
|
|
117
|
+
export declare function encargoConTicket(encargo: string, ticket: Pick<TicketDeTarea, "conector" | "clave" | "url">): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El título que se le pone a una conversación o a una tarea: su primera frase, entera.
|
|
3
|
+
*
|
|
4
|
+
* Vivía en `web/servidor/sesiones.ts` y se movió aquí cuando las TAREAS necesitaron el mismo
|
|
5
|
+
* título: `core/` no puede importar de `web/`, y una segunda copia habría divergido — con el
|
|
6
|
+
* síntoma de que la misma frase diera dos títulos distintos según quién la mirara.
|
|
7
|
+
*/
|
|
8
|
+
export declare function tituloDesde(texto: string): string;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lo que se le dice a quien delegó cuando a un especialista se le acabó el presupuesto.
|
|
3
|
+
*
|
|
4
|
+
* ## El fallo que cierra, medido el 19-09-2026
|
|
5
|
+
*
|
|
6
|
+
* Cada especialista corre con un tope de llamadas al modelo
|
|
7
|
+
* (`TOPE_DE_LLAMADAS_DEL_ESPECIALISTA`, con `exitBehavior: "end"`). Al agotarse, la librería
|
|
8
|
+
* añade un `AIMessage` con SU texto —«Model call limits exceeded: run level call limit reached
|
|
9
|
+
* with 15 model calls»— y salta al final. Y el `task` de deepagents devuelve **solo el último
|
|
10
|
+
* mensaje** (`extractLastMessage`).
|
|
11
|
+
*
|
|
12
|
+
* O sea que lo que el orquestador recibe como respuesta del especialista es esa frase, en
|
|
13
|
+
* inglés y en jerga del harness, **y todo lo que el especialista averiguó en sus quince
|
|
14
|
+
* llamadas se tira**. Medido: 100-160k de entrada por especialista, y menos de 900 tokens de
|
|
15
|
+
* salida devueltos. Por eso el orquestador encadena al siguiente: no es que enrute mal, es que
|
|
16
|
+
* no recibe nada con lo que seguir.
|
|
17
|
+
*
|
|
18
|
+
* **Por eso el tope es NUESTRO** (`topeDeLlamadas`) en vez de parchear el de la librería: sus
|
|
19
|
+
* dos ganchos de salida —el mensaje y el reset del contador— van detrás de un `jumpTo: "end"`
|
|
20
|
+
* que cortocircuita todo lo que haya debajo, así que **no corre NINGÚN middleware posterior**
|
|
21
|
+
* (medido contra la librería real, con `FakeToolCallingModel` y `runLimit: 0`). No había dónde
|
|
22
|
+
* engancharse: ni `afterAgent`, ni otro `beforeModel`. Reconocer su frase en inglés para
|
|
23
|
+
* sustituirla habría atado esto a un texto suyo, y encima sin sitio donde hacerlo.
|
|
24
|
+
*
|
|
25
|
+
* Esto NO sube el tope —que está medido y argumentado— ni lo quita. Hace tres cosas:
|
|
26
|
+
* devuelve el trabajo que se iba a tirar, lo marca como PARCIAL para que nadie lo lea como una
|
|
27
|
+
* conclusión, y dice qué hacer a continuación. Que un presupuesto se agote es normal; que se
|
|
28
|
+
* agote **en silencio** es el fallo.
|
|
29
|
+
*
|
|
30
|
+
* Puro y en `core/`: el texto se puede probar sin librería ni modelo. Quién lo mete en la
|
|
31
|
+
* conversación es de `agent/`.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Cuánto del trabajo parcial se devuelve.
|
|
35
|
+
*
|
|
36
|
+
* Hay tope porque esto viaja como respuesta de una `task` y entra ENTERO en el contexto del
|
|
37
|
+
* orquestador: devolver sin límite convertiría el arreglo de un gasto en otro gasto. Lo que no
|
|
38
|
+
* cabe se dice, como en todas partes aquí.
|
|
39
|
+
*/
|
|
40
|
+
export declare const TOPE_DE_PARCIAL = 4000;
|
|
41
|
+
export interface TopeAgotado {
|
|
42
|
+
/** El tope que se agotó, para que el mensaje no se invente la cifra. */
|
|
43
|
+
limite: number;
|
|
44
|
+
/** Lo último SUSTANCIAL que dijo el especialista, si dijo algo. */
|
|
45
|
+
parcial?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* El mensaje que sustituye al de la librería.
|
|
49
|
+
*
|
|
50
|
+
* **Habla con voz del harness y en primera persona del especialista**, porque quien lo va a
|
|
51
|
+
* leer es el orquestador y lo va a leer como la respuesta de aquél. Y dice las tres cosas que
|
|
52
|
+
* la frase de la librería no dice: que está a medias, qué había, y qué NO hacer — volver a
|
|
53
|
+
* encargarle lo mismo a otro es exactamente lo que se midió que pasa.
|
|
54
|
+
*/
|
|
55
|
+
export declare function mensajeDeTopeAgotado({ limite, parcial }: TopeAgotado): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuánto se deja traer de una vez.
|
|
3
|
+
*
|
|
4
|
+
* El área de trabajo no es un almacén: lo que cae ahí se anuncia, se puede volver a leer y
|
|
5
|
+
* viaja con la sesión. Un tope es lo que impide que un `.mov` de 800 MB se copie tan callado
|
|
6
|
+
* como un `.png`. 64 MB deja pasar de sobra lo que esto resuelve —una maqueta, un zip de
|
|
7
|
+
* diseño, una captura— y corta lo que ya no es eso.
|
|
8
|
+
*/
|
|
9
|
+
export declare const TOPE_DE_TRAIDA: number;
|
|
10
|
+
/**
|
|
11
|
+
* Por qué no se puede traer eso, o `undefined` si sí.
|
|
12
|
+
*
|
|
13
|
+
* **Lista BLANCA de forma**: tiene que ser una ruta absoluta de verdad. Una relativa no se
|
|
14
|
+
* resuelve contra nada fiable —el `cwd` de este proceso no es el proyecto— y aceptar `..`
|
|
15
|
+
* sería dejar que el destino lo eligiera quien escribe la ruta.
|
|
16
|
+
*/
|
|
17
|
+
export declare function motivoDeTraidaInaceptable(ruta: string): string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Con qué nombre queda dentro del área de trabajo.
|
|
20
|
+
*
|
|
21
|
+
* El último segmento y nada más. **Es lo que impide que el destino salga de la carpeta**: sin
|
|
22
|
+
* esto, un `/a/b/../../fuera.txt` escribiría fuera. Y de paso es lo que una persona reconoce
|
|
23
|
+
* en la lista de artefactos, que para eso está.
|
|
24
|
+
*/
|
|
25
|
+
export declare function nombreParaTraer(ruta: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* ¿Es esto una ruta de la MÁQUINA que alguien ha escrito como si fuera del proyecto?
|
|
28
|
+
*
|
|
29
|
+
* Solo se usa para poder CONTESTAR bien, nunca para abrir nada: quien abre es el montaje.
|
|
30
|
+
*/
|
|
31
|
+
export declare function esRutaDeMaquina(ruta: string): boolean;
|
|
32
|
+
/** La misma ruta, ya en la forma que el agente puede abrir. */
|
|
33
|
+
export declare function porQueNoSuelta(ruta: string): string;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El registro de lo que se traga un `catch`.
|
|
3
|
+
*
|
|
4
|
+
* **Por qué hace falta.** Este harness tiene 123 `catch` y casi todos callan a propósito: que
|
|
5
|
+
* no se pueda leer un adjunto, que falle el validador, que `git` no esté — ninguna de esas
|
|
6
|
+
* cosas puede tumbar un turno, y por eso se devuelven en vez de lanzarse. El precio es que
|
|
7
|
+
* cuando algo va mal **no queda rastro de nada**. Medido sobre una sesión que se colgó: el
|
|
8
|
+
* proceso estaba vivo y OCIOSO —`kevent`, sin un socket abierto, sin trabajo—, el `.jsonl`
|
|
9
|
+
* acababa en el mensaje de la persona sin su `fin`, y desde fuera no había forma de saber
|
|
10
|
+
* dónde se quedó. No es que el registro fuera pobre: es que no existía.
|
|
11
|
+
*
|
|
12
|
+
* **Es la misma pieza que `XONECODE_TRACE_TOOLS`** (`agent/turno/diagnosticoDeTools.ts`) y por
|
|
13
|
+
* la misma razón: apagado no cuesta nada, encendido deja un `.jsonl` que se puede leer después.
|
|
14
|
+
* Lo que cambia es qué anota — allí a dónde se fueron los tokens, aquí qué se calló.
|
|
15
|
+
*
|
|
16
|
+
* **Y el sumidero entra por PARÁMETRO**, como el de `core/bitacora.ts`: este módulo vive en
|
|
17
|
+
* `core/` y no toca disco, así que `npm test` no escribe nada y quien lo prueba ve lo que se
|
|
18
|
+
* anotó sin abrir un fichero.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Un HITO: «empecé esto» / «lo acabé». No es un error, y es lo que de verdad encuentra un
|
|
22
|
+
* cuelgue.
|
|
23
|
+
*
|
|
24
|
+
* **Una excepción tragada no explica un proceso que se queda parado**, y eso se midió: el
|
|
25
|
+
* proceso colgado estaba OCIOSO —event loop en `kevent`, sin sockets, sin trabajo—, así que no
|
|
26
|
+
* había ninguna excepción que anotar. Lo que faltaba era saber qué fue lo último que EMPEZÓ y
|
|
27
|
+
* nunca terminó. Con pares `inicio`/`fin` eso se lee de un vistazo: el hito sin pareja es el
|
|
28
|
+
* sitio.
|
|
29
|
+
*/
|
|
30
|
+
export interface PasoAnotado {
|
|
31
|
+
donde: string;
|
|
32
|
+
fase: "inicio" | "fin";
|
|
33
|
+
/** Lo justo para distinguir dos pasos del mismo sitio. Nunca contenido ni rutas absolutas. */
|
|
34
|
+
detalle?: string;
|
|
35
|
+
/** Cuánto duró, solo en el `fin`. */
|
|
36
|
+
ms?: number;
|
|
37
|
+
}
|
|
38
|
+
/** Lo que se guarda de una excepción. Nunca el `stack`: ver `mensajeSeguro`. */
|
|
39
|
+
export interface ErrorAnotado {
|
|
40
|
+
/** Dónde se tragó, en la forma `modulo#funcion`. Lo escribe quien llama, no se adivina. */
|
|
41
|
+
donde: string;
|
|
42
|
+
/** El `name` del error, que es lo que distingue un ENOENT de un fallo de parseo. */
|
|
43
|
+
nombre: string;
|
|
44
|
+
/** El `code` de un error de Node, cuando lo hay: es lo ÚNICO específico que se puede contar. */
|
|
45
|
+
codigo?: string;
|
|
46
|
+
/** El mensaje, ya sin rutas de la máquina. */
|
|
47
|
+
mensaje: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function mensajeSeguro(mensaje: string): string;
|
|
50
|
+
/** De un error, lo que se puede contar. */
|
|
51
|
+
export declare function anotable(donde: string, error: unknown): ErrorAnotado;
|
|
52
|
+
/** A dónde van los anotados. Uno solo por proceso: ver `anotarError`. */
|
|
53
|
+
export type SumideroDeErrores = (anotado: ErrorAnotado | PasoAnotado) => void;
|
|
54
|
+
/**
|
|
55
|
+
* Enchufa el sumidero. Sin esto, anotar no hace NADA — que es lo que debe pasar apagado.
|
|
56
|
+
*
|
|
57
|
+
* Es global a propósito, y es la única forma que funciona aquí: los sitios que se tragan una
|
|
58
|
+
* excepción están repartidos por todo el árbol —`core/`, `agent/`, `web/`— y muchos viven en
|
|
59
|
+
* funciones puras sin sitio donde inyectar nada. Pasarlo por parámetro habría obligado a
|
|
60
|
+
* cambiar la firma de medio harness para añadir una línea de diagnóstico, y eso es justo el
|
|
61
|
+
* cambio que nadie hace.
|
|
62
|
+
*/
|
|
63
|
+
export declare function ponerSumideroDeErrores(nuevo: SumideroDeErrores | undefined): void;
|
|
64
|
+
/**
|
|
65
|
+
* Anota lo que un `catch` acaba de tragarse. **No cambia lo que pasa después.**
|
|
66
|
+
*
|
|
67
|
+
* Quien la llama sigue haciendo exactamente lo mismo que hacía: devolver `undefined`, seguir
|
|
68
|
+
* adelante, tragarse el fallo. Esto es un testigo, no una decisión — si además cambiara el
|
|
69
|
+
* control, cada sitio habría que volver a medirlo.
|
|
70
|
+
*
|
|
71
|
+
* Y NUNCA lanza: un registro de diagnóstico que rompe lo que observa es peor que no tenerlo.
|
|
72
|
+
*/
|
|
73
|
+
export declare function anotarError(donde: string, error: unknown): void;
|
|
74
|
+
/**
|
|
75
|
+
* Anota que algo EMPIEZA, y devuelve la función que anota que acabó.
|
|
76
|
+
*
|
|
77
|
+
* Se usa envolviendo, no con dos llamadas sueltas: `const fin = anotarPaso(...); try { … }
|
|
78
|
+
* finally { fin(); }`. Así el `fin` no se puede olvidar en la rama del error, que es
|
|
79
|
+
* justamente la rama que interesa.
|
|
80
|
+
*
|
|
81
|
+
* Apagado no cuesta nada —ni una fecha— porque se sale antes de mirar el reloj.
|
|
82
|
+
*/
|
|
83
|
+
export declare function anotarPaso(donde: string, detalle?: string): () => void;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El túnel de ngrok para la sesión remota: las reglas SIN efectos. Quien lanza el proceso es
|
|
3
|
+
* `agent/remoto/`; aquí solo se lee su log, se compone la dirección del puente y se dicen
|
|
4
|
+
* los fallos con texto FIJO nuestro.
|
|
5
|
+
*
|
|
6
|
+
* **Nada de lo que ngrok escribe cruza el cable.** Su salida lleva la ruta de la configuración,
|
|
7
|
+
* el correo de la cuenta y, en un error de autenticación, el authtoken tecleado: por eso el
|
|
8
|
+
* motivo de un fallo se decide por su CÓDIGO (`ERR_NGROK_xxx`) y lo que se enseña es una
|
|
9
|
+
* entrada de `MOTIVOS_DEL_TUNEL`, nunca la línea. Las líneas de los tests son salida real de
|
|
10
|
+
* ngrok v3 (`src/core/__oro__/ngrok-v3*.jsonl`), con la ruta, el correo y el token redactados.
|
|
11
|
+
*/
|
|
12
|
+
/** Texto fijo por causa. Es lo ÚNICO que sale de un fallo del túnel hacia el cable. */
|
|
13
|
+
export declare const MOTIVOS_DEL_TUNEL: {
|
|
14
|
+
readonly noInstalado: "El componente de ngrok que trae xonecode no carga en esta máquina: reinstala xonecode.";
|
|
15
|
+
readonly autenticacion: "ngrok no acepta el authtoken (falta o no es válido).";
|
|
16
|
+
readonly dominio: "ngrok no deja usar ese dominio: no es de tu cuenta, o tu plan no admite dominios propios.";
|
|
17
|
+
readonly otraSesion: "Ya hay otro ngrok de tu cuenta abierto (en esta máquina o en otra): ciérralo y vuelve a encender.";
|
|
18
|
+
readonly sinDireccion: "ngrok no dio una dirección pública a tiempo.";
|
|
19
|
+
readonly seCerro: "ngrok se cerró.";
|
|
20
|
+
readonly paqueteViejo: "El paquete de la sesión remota instalado no trae el puente: actualízalo.";
|
|
21
|
+
readonly otro: "ngrok falló y no se pudo abrir el túnel.";
|
|
22
|
+
readonly puente: "No se pudo arrancar el puente local de la sesión remota.";
|
|
23
|
+
readonly authtokenSinForma: "Eso no tiene la forma de un authtoken de ngrok.";
|
|
24
|
+
readonly authtokenNoGuardado: "No se pudo guardar el authtoken.";
|
|
25
|
+
};
|
|
26
|
+
export type ClaveDeMotivoDelTunel = keyof typeof MOTIVOS_DEL_TUNEL;
|
|
27
|
+
/** `https://host` → `wss://host/ws`: el puente de la sesión remota atiende el WebSocket en `/ws`. */
|
|
28
|
+
export declare function servidorDeTunel(https: string): string;
|
|
29
|
+
/** Un nombre de host con al menos un punto: sin esquema, ruta, puerto ni espacios. */
|
|
30
|
+
export declare function motivoDeDominioInaceptable(dominio: unknown): string | undefined;
|
|
31
|
+
/** Por qué se cerró ngrok, mirando solo el CÓDIGO `ERR_NGROK_xxx` de sus líneas, nunca su texto. */
|
|
32
|
+
export declare function motivoDeSalidaDeNgrok(lineas: readonly string[]): "autenticacion" | "dominio" | "otraSesion" | "otro";
|
|
33
|
+
/**
|
|
34
|
+
* Dónde guarda el authtoken el programa `ngrok`, por si ya lo usabas: el SDK no lee esa configuración, y sin mirarla
|
|
35
|
+
* habría que volver a pedirte el token. v3 por plataforma y la v2 de siempre (`~/.ngrok2`). Puro: la casa y el entorno
|
|
36
|
+
* entran por parámetro.
|
|
37
|
+
*/
|
|
38
|
+
export declare function rutasDeConfigDeNgrok(plataforma: string, entorno: Record<string, string | undefined>, casa: string): string[];
|
|
39
|
+
/**
|
|
40
|
+
* El valor de una línea `authtoken:` no vacía, arriba (formato v2) o dentro de `agent:` (v3). `authtoken: ""` o sin
|
|
41
|
+
* valor no es una cuenta.
|
|
42
|
+
*/
|
|
43
|
+
export declare function authtokenDeConfig(texto: string): string | undefined;
|
|
44
|
+
/** Lo que tiene un authtoken de ngrok: alfanumérico con `_`/`-`, sin espacios, empezando por letra o cifra. */
|
|
45
|
+
export declare const FORMA_DE_AUTHTOKEN: RegExp;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Bitacora } from "./bitacora.js";
|
|
2
|
+
import type { Artefacto, DomainEvent, Fase, OrigenDeLaTool, PendienteDeAprobacion } from "./events.js";
|
|
3
|
+
import { type PropuestaDeTareas } from "./repartoDeEncargo.js";
|
|
4
|
+
import type { VeredictoDelTurno } from "./actos.js";
|
|
5
|
+
import type { DetalleDeLinea } from "./actos.js";
|
|
6
|
+
/**
|
|
7
|
+
* La línea de una pregunta contestada sola en modo autónomo, para la piel que no pinta la tarjeta. Es el texto que
|
|
8
|
+
* salía antes como aviso, sin cambiar: stdio y la TUI siguen igual.
|
|
9
|
+
*/
|
|
10
|
+
export declare function textoDeConsultaAutonoma(c: {
|
|
11
|
+
pregunta: string;
|
|
12
|
+
elegida?: string;
|
|
13
|
+
}): string;
|
|
14
|
+
/**
|
|
15
|
+
* Lo que hace falta para pintar un turno. La implementan el renderizador de stdio y la TUI.
|
|
16
|
+
*
|
|
17
|
+
* `cerrarLinea` existe porque los tokens se escriben SIN salto —son la misma frase
|
|
18
|
+
* creciendo— y cualquier otra cosa que se pinte tiene que empezar en su propia línea. El
|
|
19
|
+
* motor lleva la cuenta de si hay una línea abierta; la piel decide qué significa cerrarla
|
|
20
|
+
* (en stdio es un `\n`, en la TUI es cerrar la burbuja del mensaje).
|
|
21
|
+
*/
|
|
22
|
+
export interface Piel {
|
|
23
|
+
token(texto: string): void;
|
|
24
|
+
cerrarLinea(): void;
|
|
25
|
+
/**
|
|
26
|
+
* El razonamiento del modelo, en trozos, como `token`. OPCIONAL: la piel que no lo
|
|
27
|
+
* implemente no lo verá, y la salida de stdio sigue siendo la de siempre —byte-idéntica
|
|
28
|
+
* por una tubería, que es lo que sostiene el e2e—. Hoy solo la web lo pinta.
|
|
29
|
+
*/
|
|
30
|
+
razonamiento?(texto: string, origen?: OrigenDeLaTool): void;
|
|
31
|
+
/** El resumen de contexto, en trozos. OPCIONAL, por lo mismo que `razonamiento`. */
|
|
32
|
+
resumen?(texto: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Cualquier cosa que no sea un token. El segundo parámetro es OPCIONAL y solo lo manda el
|
|
35
|
+
* motor cuando la línea viene de una tool: dice cuál y si falló. Una piel que implemente
|
|
36
|
+
* `linea(texto)` con un solo parámetro lo ignora sin enterarse —así stdio y la TUI no
|
|
37
|
+
* cambian y la salida por una tubería sigue siendo byte-idéntica—, y la que quiera
|
|
38
|
+
* distinguir una lectura de una escritura ya no tiene que re-parsear la prosa de la línea.
|
|
39
|
+
*
|
|
40
|
+
* Sin detalle la línea NO es de una tool: por aquí pasan también el plan, las tareas y la
|
|
41
|
+
* verificación. Marcarlas como herramienta sería etiquetar mal un paso del motor.
|
|
42
|
+
*/
|
|
43
|
+
linea(texto: string, detalle?: DetalleDeLinea): void;
|
|
44
|
+
pausa(pendientes: PendienteDeAprobacion[]): void;
|
|
45
|
+
fin(ms: number): void;
|
|
46
|
+
/**
|
|
47
|
+
* Alguien pidió LEER la memoria del proyecto (`core/memoria.ts`), con su origen si consta.
|
|
48
|
+
* OPCIONAL, como `fase?` y `razonamiento?`: stdio y la TUI no lo implementan —ahí ya se ve
|
|
49
|
+
* la línea de la tool— y la tubería sigue byte-idéntica.
|
|
50
|
+
*
|
|
51
|
+
* Es un método de la PIEL y no una cuenta de este motor porque el hecho es del TURNO y este
|
|
52
|
+
* motor se llama una vez por RONDA (aprobaciones, reparaciones): la piel es lo único que dura
|
|
53
|
+
* el turno entero, y quien lo estampa en su cierre.
|
|
54
|
+
*
|
|
55
|
+
* Dice que se PIDIÓ, no que se leyó: el evento `tool` sale cuando la tool se pide, y en
|
|
56
|
+
* TrueForge nunca trae su error. Una memoria que no existe da una lectura pedida igual.
|
|
57
|
+
*/
|
|
58
|
+
memoriaPedida?(origen: OrigenDeLaTool | undefined): void;
|
|
59
|
+
/**
|
|
60
|
+
* El veredicto del verificador ENTERO, como dato. OPCIONAL, con la asimetría de `fase?`: la
|
|
61
|
+
* piel que lo implementa recibe el veredicto EN VEZ de las líneas —la web lo pinta con un
|
|
62
|
+
* botón por hallazgo, que de una línea de prosa no se puede sacar sin re-parsearla—, y la
|
|
63
|
+
* que no, sigue recibiendo las líneas de siempre, byte a byte.
|
|
64
|
+
*/
|
|
65
|
+
verificacion?(veredicto: VeredictoDelTurno): void;
|
|
66
|
+
/**
|
|
67
|
+
* Si la piel sabe animar fases (el spinner del terminal), el motor le delega la fase
|
|
68
|
+
* y le dicta SOLO el texto — la decoración es cosa de la piel. Sin este método, la
|
|
69
|
+
* fase es una línea estática más.
|
|
70
|
+
*/
|
|
71
|
+
fase?(texto: string, fase?: Fase): void;
|
|
72
|
+
/**
|
|
73
|
+
* Si la piel sabe reciclar avisos de sistema (el panel de notificaciones del
|
|
74
|
+
* terminal), el motor le delega los `aviso` — con la línea de tokens cerrada, como
|
|
75
|
+
* cualquier otra cosa que empieza su propia línea. Sin este método, el aviso es una
|
|
76
|
+
* línea estática más.
|
|
77
|
+
*/
|
|
78
|
+
notificacion?(texto: string): void;
|
|
79
|
+
/**
|
|
80
|
+
* Si la piel sabe enseñar un artefacto —un diagrama, un panel—, el motor le da el dato
|
|
81
|
+
* entero en vez de solo la línea. OPCIONAL, como `razonamiento` y `fase`: la piel que no
|
|
82
|
+
* lo implemente se queda con la línea de siempre, así que stdio y la TUI no cambian y la
|
|
83
|
+
* salida por una tubería sigue siendo byte-idéntica. Hoy solo la web lo implementa.
|
|
84
|
+
*
|
|
85
|
+
* La línea se escribe SIEMPRE, la implemente o no: el artefacto no pasa por aprobación,
|
|
86
|
+
* así que la constancia de que se escribió no puede depender de qué piel esté delante.
|
|
87
|
+
*/
|
|
88
|
+
artefacto?(artefacto: Artefacto): void;
|
|
89
|
+
/**
|
|
90
|
+
* El agente pregunta y el turno se para (`events.ts#consulta`). OPCIONAL, como `fase?`: la
|
|
91
|
+
* pregunta YA salió por `token`, así que quien no lo implemente —stdio, la TUI— la enseña
|
|
92
|
+
* igual, byte-idéntica. Hoy solo la web lo implementa, con un botón por opción.
|
|
93
|
+
*/
|
|
94
|
+
consulta?(consulta: {
|
|
95
|
+
pregunta: string;
|
|
96
|
+
opciones: string[];
|
|
97
|
+
}): void;
|
|
98
|
+
/**
|
|
99
|
+
* Una pregunta que el harness contestó solo en modo autónomo (`events.ts#consulta-autonoma`). OPCIONAL: quien no lo
|
|
100
|
+
* implemente —stdio, la TUI— recibe el aviso de siempre (`textoDeConsultaAutonoma`), así que la salida por una
|
|
101
|
+
* tubería no cambia. Hoy solo la web lo implementa, con la tarjeta de la pregunta a la vista en el hilo.
|
|
102
|
+
*/
|
|
103
|
+
consultaAutonoma?(consulta: {
|
|
104
|
+
pregunta: string;
|
|
105
|
+
opciones: string[];
|
|
106
|
+
elegida?: string;
|
|
107
|
+
}): void;
|
|
108
|
+
/**
|
|
109
|
+
* El agente propone repartir el encargo en tareas de fondo encadenadas (`events.ts#propuesta-de-tareas`). OPCIONAL:
|
|
110
|
+
* quien no lo implemente —stdio, la TUI— recibe una línea con las tareas numeradas; encolarlas solo se puede en la
|
|
111
|
+
* web, que es la que tiene la cola de tareas.
|
|
112
|
+
*/
|
|
113
|
+
propuestaDeTareas?(propuesta: PropuestaDeTareas): void;
|
|
114
|
+
}
|
|
115
|
+
export interface OpcionesDelTurno {
|
|
116
|
+
/**
|
|
117
|
+
* Los avisos deterministas del final, calculados a partir de la bitácora.
|
|
118
|
+
*
|
|
119
|
+
* Es una función y no una lista porque las condiciones se evalúan CUANDO el turno
|
|
120
|
+
* termina, no cuando empieza: «¿ha corrido el verificador de pega en este turno?» solo
|
|
121
|
+
* se puede contestar al final. Y son CÓDIGO y no prompt porque a un modelo al que le
|
|
122
|
+
* pides que avise, a veces no avisa — y es justo el aviso que no puede faltar.
|
|
123
|
+
*/
|
|
124
|
+
avisos?: (bitacora: Bitacora) => string[];
|
|
125
|
+
/**
|
|
126
|
+
* Si ESTA pasada cierra el turno: los avisos deterministas y `piel.fin()`.
|
|
127
|
+
*
|
|
128
|
+
* Existe porque un turno puede tener varias pasadas por `correrTurno` —una por ronda de
|
|
129
|
+
* aprobación, una por intento de reparación— y solo la última es el final. Antes cada
|
|
130
|
+
* pasada cerraba: stdio imprimía el tiempo una vez por ronda y el chat de la web plegaba
|
|
131
|
+
* el tramo una vez por ronda, medido. Es una función y no un booleano porque quien lo
|
|
132
|
+
* sabe es el flujo de eventos, y solo lo sabe al AGOTARSE — antes de eso no hay forma de
|
|
133
|
+
* decir si detrás viene otra pasada. Por omisión cierra, que es lo seguro: una pasada que
|
|
134
|
+
* revienta cierra igual, para que el tiempo y el aviso no se pierdan.
|
|
135
|
+
*/
|
|
136
|
+
cerrar?: () => boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Desde cuándo cuenta el tiempo del `fin`. Por omisión, desde que empezó ESTA pasada — que
|
|
139
|
+
* es lo correcto cuando el turno es una sola. Con varias pasadas y una sola que cierra,
|
|
140
|
+
* sin esto el `fin` diría solo lo que tardó la última: un turno de cuarenta segundos de
|
|
141
|
+
* trabajo, una aprobación y cinco de reanudación saldría como «5.0s». Quien encadena
|
|
142
|
+
* pasadas pasa aquí el `t0` del turno entero.
|
|
143
|
+
*/
|
|
144
|
+
desde?: number;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Un turno completo: consume los eventos, cuenta lo que hay que contar, devuelve la
|
|
148
|
+
* bitácora.
|
|
149
|
+
*
|
|
150
|
+
* Nunca deja la línea de tokens abierta: el `finally` la cierra tanto si el turno termina
|
|
151
|
+
* bien como si el flujo revienta a mitad. Sin eso, el mensaje de error se pegaría al final
|
|
152
|
+
* de una respuesta a medio escribir.
|
|
153
|
+
*/
|
|
154
|
+
export declare function correrTurno(eventos: AsyncIterable<DomainEvent>, piel: Piel, opciones?: OpcionesDelTurno): Promise<Bitacora>;
|