xonecode 0.38.44 → 0.39.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +141 -0
- package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
- package/dist/agent/turno/depuracion.d.ts +1 -0
- package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
- package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
- package/dist/agent/turno/guionizado.d.ts +18 -0
- package/dist/agent/turno/informeDeTraza.d.ts +220 -0
- package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
- package/dist/agent/turno/instantanea.d.ts +16 -0
- package/dist/agent/turno/interrupts.d.ts +54 -0
- package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
- package/dist/agent/turno/mensajes.d.ts +23 -0
- package/dist/agent/turno/normalizar.d.ts +15 -0
- package/dist/agent/turno/puente.d.ts +196 -0
- package/dist/agent/turno/registroDeFallos.d.ts +39 -0
- package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
- package/dist/agent/turno/resumenDeTool.d.ts +33 -0
- package/dist/agent/turno/rubrica.d.ts +35 -0
- package/dist/agent/turno/sesionReal.d.ts +89 -0
- package/dist/agent/turno/textoDeTool.d.ts +19 -0
- package/dist/agent/turno/turnoReal.d.ts +210 -0
- package/dist/agent/turno/verificacion.d.ts +85 -0
- package/dist/agent/turno/verificador.d.ts +66 -0
- package/dist/bin.d.ts +2 -0
- package/dist/cli/acuseDeModelo.d.ts +18 -0
- package/dist/cli/aprobar.d.ts +162 -0
- package/dist/cli/config.d.ts +17 -0
- package/dist/cli/consola.d.ts +473 -0
- package/dist/cli/describe.d.ts +7 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/fuentesDeDisco.d.ts +25 -0
- package/dist/cli/main.d.ts +291 -0
- package/dist/cli/markdown.d.ts +126 -0
- package/dist/cli/panel.d.ts +38 -0
- package/dist/cli/podar.d.ts +38 -0
- package/dist/cli/run.d.ts +30 -0
- package/dist/cli/spinner.d.ts +37 -0
- package/dist/cli/stdio.d.ts +94 -0
- package/dist/cli/tema.d.ts +68 -0
- package/dist/cli/tokens.d.ts +16 -0
- package/dist/cli/traza.d.ts +19 -0
- package/dist/cli/tui/app.d.ts +23 -0
- package/dist/cli/tui/aprobarTui.d.ts +46 -0
- package/dist/cli/tui/barra.d.ts +43 -0
- package/dist/cli/tui/correrTui.d.ts +119 -0
- package/dist/cli/tui/entrada.d.ts +14 -0
- package/dist/cli/tui/filas.d.ts +13 -0
- package/dist/cli/tui/logo.d.ts +20 -0
- package/dist/cli/tui/pielTui.d.ts +15 -0
- package/dist/cli/tui/raton.d.ts +68 -0
- package/dist/cli/tui/sidebar.d.ts +63 -0
- package/dist/cli/tui/store.d.ts +102 -0
- package/dist/cli/tui/tarjeta.d.ts +8 -0
- package/dist/cli/tui/temaInk.d.ts +67 -0
- package/dist/cli/tui/transcript.d.ts +32 -0
- package/dist/cli/verify.d.ts +9 -0
- package/dist/cli/wizardInicial.d.ts +59 -0
- package/dist/core/actos.d.ts +437 -0
- package/dist/core/adjuntos.d.ts +77 -0
- package/dist/core/agentes.d.ts +353 -0
- package/dist/core/analisisDeSesion.d.ts +63 -0
- package/dist/core/aprendido.d.ts +41 -0
- package/dist/core/artefactos.d.ts +74 -0
- package/dist/core/atributosXone.d.ts +53 -0
- package/dist/core/bitacora.d.ts +21 -0
- package/dist/core/cloudstudio.d.ts +168 -0
- package/dist/core/codificacion.d.ts +81 -0
- package/dist/core/comandoExterno.d.ts +49 -0
- package/dist/core/compararCapturas.d.ts +136 -0
- package/dist/core/conectores.d.ts +296 -0
- package/dist/core/config.d.ts +148 -0
- package/dist/core/contextos.d.ts +54 -0
- package/dist/core/convertirAP.d.ts +56 -0
- package/dist/core/copiaDeAvd.d.ts +44 -0
- package/dist/core/cssBienFormado.d.ts +22 -0
- package/dist/core/deps.d.ts +28 -0
- package/dist/core/descargas.d.ts +61 -0
- package/dist/core/descripcionDePantalla.d.ts +121 -0
- package/dist/core/descriptoresDeApp.d.ts +108 -0
- package/dist/core/diagnosticoDeNode.d.ts +51 -0
- package/dist/core/diff.d.ts +26 -0
- package/dist/core/diffDeColecciones.d.ts +54 -0
- package/dist/core/disenoVinculado.d.ts +17 -0
- package/dist/core/dispositivoDeSesion.d.ts +22 -0
- package/dist/core/dispositivoElegido.d.ts +17 -0
- package/dist/core/dispositivos.d.ts +469 -0
- package/dist/core/entrega.d.ts +341 -0
- package/dist/core/entrelazar.d.ts +48 -0
- package/dist/core/esfuerzo.d.ts +120 -0
- package/dist/core/esqueleto.d.ts +38 -0
- package/dist/core/estiloMedido.d.ts +70 -0
- package/dist/core/estilos.d.ts +76 -0
- package/dist/core/events.d.ts +218 -0
- package/dist/core/exportacion.d.ts +88 -0
- package/dist/core/fallos.d.ts +79 -0
- package/dist/core/fondosSvg.d.ts +115 -0
- package/dist/core/fotoDeColecciones.d.ts +45 -0
- package/dist/core/fuentes.d.ts +96 -0
- package/dist/core/geometriaDePantalla.d.ts +171 -0
- package/dist/core/gestorDeTareas.d.ts +295 -0
- package/dist/core/hechosDelProyecto.d.ts +70 -0
- package/dist/core/hotswap.d.ts +30 -0
- package/dist/core/iconos.d.ts +86 -0
- package/dist/core/identidadDeProveedor.d.ts +20 -0
- package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
- package/dist/core/imagenesDeDocumento.d.ts +40 -0
- package/dist/core/jsParaRhino.d.ts +3 -0
- package/dist/core/juezDelTurno.d.ts +95 -0
- package/dist/core/logDeDispositivo.d.ts +67 -0
- package/dist/core/memoria.d.ts +18 -0
- package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
- package/dist/core/modelos.d.ts +198 -0
- package/dist/core/modoDeEscritura.d.ts +155 -0
- package/dist/core/motor.d.ts +43 -0
- package/dist/core/motoresLocales.d.ts +113 -0
- package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
- package/dist/core/navegacion.d.ts +172 -0
- package/dist/core/notify.d.ts +77 -0
- package/dist/core/nucleoXone.d.ts +28 -0
- package/dist/core/panorama.d.ts +68 -0
- package/dist/core/paqueteDeSoporte.d.ts +100 -0
- package/dist/core/planDeSubida.d.ts +56 -0
- package/dist/core/planes.d.ts +53 -0
- package/dist/core/podaDeCheckpoint.d.ts +75 -0
- package/dist/core/ports.d.ts +1034 -0
- package/dist/core/puedeLanzarse.d.ts +181 -0
- package/dist/core/puertosDeAvd.d.ts +59 -0
- package/dist/core/recargaEnCaliente.d.ts +52 -0
- package/dist/core/referenciasDeImagen.d.ts +36 -0
- package/dist/core/remoto.d.ts +76 -0
- package/dist/core/repartoDeEncargo.d.ts +80 -0
- package/dist/core/rubrica.d.ts +78 -0
- package/dist/core/rutaVirtual.d.ts +29 -0
- package/dist/core/selectorDeCarpeta.d.ts +59 -0
- package/dist/core/serieDeEscrituras.d.ts +58 -0
- package/dist/core/settings.d.ts +421 -0
- package/dist/core/shellDeAgente.d.ts +177 -0
- package/dist/core/skills.d.ts +129 -0
- package/dist/core/stitch.d.ts +114 -0
- package/dist/core/tareas.d.ts +412 -0
- package/dist/core/tareasDelPlan.d.ts +123 -0
- package/dist/core/tareasEnElGestor.d.ts +117 -0
- package/dist/core/textos.d.ts +8 -0
- package/dist/core/topeAgotado.d.ts +55 -0
- package/dist/core/traerDeLaMaquina.d.ts +33 -0
- package/dist/core/trazaDeErrores.d.ts +83 -0
- package/dist/core/tunel.d.ts +45 -0
- package/dist/core/turno.d.ts +154 -0
- package/dist/core/validacionDeEscritura.d.ts +95 -0
- package/dist/core/verificacionDeSubida.d.ts +14 -0
- package/dist/core/version.d.ts +35 -0
- package/dist/core/xmlBienFormado.d.ts +23 -0
- package/dist/core/zipDeAdjunto.d.ts +28 -0
- package/dist/core/zipDeSkill.d.ts +74 -0
- package/dist/lib/tareaAutonoma.d.ts +36 -0
- package/dist/lib/tareaAutonoma.js +259 -0
- package/dist/lib/tareaAutonoma.js.map +1 -0
- package/dist/lib.d.ts +31 -0
- package/dist/lib.js +28 -0
- package/dist/lib.js.map +1 -0
- package/dist/vendor/hitl.d.ts +69 -0
- package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
- package/dist/vendor/sqliteSaver.d.ts +22 -0
- package/dist/vendor/tokenTracking.d.ts +22 -0
- package/dist/web/servidor/arranque.d.ts +1372 -0
- package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
- package/dist/web/servidor/consolaWeb.d.ts +142 -0
- package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
- package/dist/web/servidor/datosDeCierre.d.ts +4 -0
- package/dist/web/servidor/interrupcion.d.ts +39 -0
- package/dist/web/servidor/pielWeb.d.ts +32 -0
- package/dist/web/servidor/puenteRemoto.d.ts +80 -0
- package/dist/web/servidor/servidor.d.ts +53 -0
- package/dist/web/servidor/sesiones.d.ts +342 -0
- package/dist/web/servidor/soporte.d.ts +65 -0
- package/dist/web/servidor/transporte.d.ts +2751 -0
- package/dist/web/servidor/vestibulo.d.ts +952 -0
- package/dist/web/servidor/visorOpenui.d.ts +33 -0
- package/package.json +9 -1
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El lazo de la consola interactiva y los comandos de barra.
|
|
3
|
+
*
|
|
4
|
+
* La regla que gobierna este fichero: una consola no llama a `input()` ni imprime por su
|
|
5
|
+
* cuenta. `correrConsola` recibe de dónde leer (`consola.lineas`) y a dónde escribir
|
|
6
|
+
* (`consola.escribir`) — en producción stdin y el `escribir` con flush; en los tests, una
|
|
7
|
+
* lista de líneas y un acumulador. Sin esa costura la consola no se puede probar.
|
|
8
|
+
*/
|
|
9
|
+
import type { MotorDeAgente } from "../core/motor.js";
|
|
10
|
+
import { type Piel } from "../core/turno.js";
|
|
11
|
+
import { type FuentesDeEleccion, type Proveedor } from "../core/modelos.js";
|
|
12
|
+
import type { Papel } from "../core/ports.js";
|
|
13
|
+
import type { PendienteDeAprobacion } from "../core/events.js";
|
|
14
|
+
import type { ResultadoDeTurno } from "../core/entrega.js";
|
|
15
|
+
import type { LineaDeDiff } from "../core/diff.js";
|
|
16
|
+
import { type Decision } from "../vendor/hitl.js";
|
|
17
|
+
import type { AccionDeSincronizacion, ConfirmacionDeBajada, PoliticaDeAprobacion } from "../core/cloudstudio.js";
|
|
18
|
+
import type { NarracionDeSincronizacion, ResultadoDeSubida } from "../core/actos.js";
|
|
19
|
+
import { type Escribir } from "./stdio.js";
|
|
20
|
+
import { type IdTema } from "./tema.js";
|
|
21
|
+
import type { DecisionDeConsola, Preguntar, RespuestaConSeleccion } from "./aprobar.js";
|
|
22
|
+
import { type ModoDeEscritura } from "../core/modoDeEscritura.js";
|
|
23
|
+
import { URL_CLOUDSTUDIO_POR_OMISION } from "../agent/cloudstudio/cloudstudioMcp.js";
|
|
24
|
+
import type { CatalogoModelosPort, ModeloDisponible } from "../core/ports.js";
|
|
25
|
+
import { type Esfuerzo } from "../core/esfuerzo.js";
|
|
26
|
+
/**
|
|
27
|
+
* Una línea del lazo, con su procedencia DICHA cuando hace falta decirla.
|
|
28
|
+
*
|
|
29
|
+
* El lazo mira si la línea empieza por «/» para decidir si es un comando. En las pieles de
|
|
30
|
+
* TERMINAL eso es exactamente lo que se quiere: el teclado es la única puerta que hay y «/»
|
|
31
|
+
* es la sintaxis que la abre. En la web no — allí **cada acción tiene su botón** (el modelo
|
|
32
|
+
* en la pastilla, el tema en Apariencia, la sincronización en su pestaña), así que «/» no
|
|
33
|
+
* abre nada. Y mientras estuvo abriendo comandos, teclear «/» para hablar de una ruta del
|
|
34
|
+
* proyecto EJECUTABA una orden en vez de mandarla al modelo.
|
|
35
|
+
*
|
|
36
|
+
* La distinción no se puede adivinar mirando la cadena, porque por la MISMA cola circulan
|
|
37
|
+
* las dos cosas: lo que teclea una persona y lo que pide un control de la interfaz
|
|
38
|
+
* (`consolaWeb.encolar`, que es como el servidor aplica `/modelo …` sin que nadie lo
|
|
39
|
+
* teclee). Por eso la línea lo dice:
|
|
40
|
+
* - `comoComando: false` — la tecleó una persona en una piel sin comandos. Es PROSA, y va
|
|
41
|
+
* al modelo tal cual, con su «/» delante.
|
|
42
|
+
* - `comoComando: true` — la pidió un control de la interfaz, o es una piel donde el
|
|
43
|
+
* teclado manda. La FUNCIÓN se comparte aunque la sintaxis no se exporte.
|
|
44
|
+
*
|
|
45
|
+
* Una `string` a secas se lee como siempre —comando si empieza por «/»—, que es lo que
|
|
46
|
+
* siguen haciendo stdio, la TUI, la consola de una tarea y los dobles de los tests: el
|
|
47
|
+
* contrato viejo no se mueve y ninguna de esas pieles cambia de comportamiento.
|
|
48
|
+
*/
|
|
49
|
+
export type LineaDeConsola = string | {
|
|
50
|
+
texto: string;
|
|
51
|
+
comoComando: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* La CLAVE de sustitución: si al encolar esta línea ya hay otra PENDIENTE con la misma
|
|
54
|
+
* clave, aquélla se retira. Es para los controles que reflejan un ESTADO —el modo de
|
|
55
|
+
* escritura, el modelo, el esfuerzo—, que se pulsan una vez por cambio de opinión y
|
|
56
|
+
* solo el último vale.
|
|
57
|
+
*
|
|
58
|
+
* Viaja como DATO, nunca se deduce del `texto`: comparar dos cadenas para ver si «son
|
|
59
|
+
* el mismo comando» sería parsear la sintaxis que el servidor acaba de componer, la
|
|
60
|
+
* misma trampa que `DecisionDeConsola` y `Acto.clase` ya evitan.
|
|
61
|
+
*
|
|
62
|
+
* **Ausente es lo de siempre**, y eso es la mitad de la decisión: dos `/sync subir` son
|
|
63
|
+
* dos operaciones, y lo que teclea una persona no se coalesce nunca.
|
|
64
|
+
*/
|
|
65
|
+
sustituye?: string;
|
|
66
|
+
};
|
|
67
|
+
export interface Consola {
|
|
68
|
+
/** De dónde vienen las líneas del usuario. Agotarlo termina la sesión: es EOF, no cuelgue. */
|
|
69
|
+
lineas: AsyncIterable<LineaDeConsola>;
|
|
70
|
+
escribir: Escribir;
|
|
71
|
+
/** Para las aprobaciones dentro de un turno. */
|
|
72
|
+
preguntar: Preguntar;
|
|
73
|
+
interactivo: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* ¿Se acabó la entrada? Acompaña a `preguntar`, y existe porque su cadena vacía
|
|
76
|
+
* significa DOS cosas —el usuario pulsó Enter, o el readline se cerró— y con
|
|
77
|
+
* `interactivo: true` la primera APRUEBA: sin distinguirlas, un Ctrl-D aprobaba una
|
|
78
|
+
* escritura de fichero (`cli/aprobar.ts` lo cuenta entero). Ausente = no se sabe; la
|
|
79
|
+
* TUI y la web no lo necesitan porque sus aprobaciones van por `aprobacionesTui`.
|
|
80
|
+
*/
|
|
81
|
+
eof?: () => boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Lee una clave SIN eco (para `provider`). El eco-off no se puede probar desde
|
|
84
|
+
* aquí: es la costura de test, y la implementación de producción (raw-mode de
|
|
85
|
+
* stdin) vive fuera — este fichero solo la usa.
|
|
86
|
+
*/
|
|
87
|
+
leerSecreto: (pregunta: string) => Promise<string>;
|
|
88
|
+
/** El catálogo vivo entra por puerto; los tests le dan su doble determinista. */
|
|
89
|
+
catalogoModelos: CatalogoModelosPort;
|
|
90
|
+
/** Escritura global inyectada: la consola elige, pero no conoce el disco. */
|
|
91
|
+
guardarModeloGlobal: (papel: Papel, id: string) => {
|
|
92
|
+
ruta: string;
|
|
93
|
+
id: string;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Selector opcional de una piel rica. La consola conserva su flujo de preguntas y
|
|
97
|
+
* número cuando no existe (stdio y tests que no montan la TUI).
|
|
98
|
+
*/
|
|
99
|
+
seleccionar?: (selector: SelectorDeConsola) => Promise<string | undefined>;
|
|
100
|
+
/**
|
|
101
|
+
* La piel que los turnos usan para pintarse. La consola stdio no la define (se usa
|
|
102
|
+
* `crearPielStdio`); la TUI la aporta — mismo contrato `Piel`, otro render.
|
|
103
|
+
*/
|
|
104
|
+
piel?: () => Piel;
|
|
105
|
+
/**
|
|
106
|
+
* Las aprobaciones propias (modal TUI). Ausente = `pedirDecisiones` por readline.
|
|
107
|
+
* Mismo contrato que el puerto `pedirAprobacion` de `abrirSesionReal`.
|
|
108
|
+
*/
|
|
109
|
+
aprobacionesTui?: (pendientes: PendienteDeAprobacion[], ficheros: Map<string, string>, diffs: Map<string, LineaDeDiff[]>) => Promise<Map<string, Decision>>;
|
|
110
|
+
/**
|
|
111
|
+
* Cuántas RONDAS de aprobación admite un turno de esta consola. Ausente = el de siempre
|
|
112
|
+
* (`MAX_APPROVAL_ROUNDS`).
|
|
113
|
+
*
|
|
114
|
+
* Lo pone quien monta la consola porque es quien sabe QUIÉN está detrás: el tope de
|
|
115
|
+
* cinco se dimensionó para una persona pulsando —«te lo he preguntado cinco veces,
|
|
116
|
+
* para»—, y en una tarea de fondo una ronda no es una pregunta, es una tanda de
|
|
117
|
+
* escrituras que se autorizan solas. Lo reenvía `crearEjecutorReal` a `abrirSesionReal`,
|
|
118
|
+
* que es donde vive el bucle; ver `TOPE_DE_RONDAS_DE_TAREA` (`core/tareas.ts`) para el
|
|
119
|
+
* valor y el porqué de que no sea infinito.
|
|
120
|
+
*/
|
|
121
|
+
topeDeAprobaciones?: number;
|
|
122
|
+
/**
|
|
123
|
+
* Esta piel tiene el modo de escritura SIEMPRE a la vista. Ausente = no.
|
|
124
|
+
*
|
|
125
|
+
* Lo declara quien monta la consola, igual que `topeDeAprobaciones`, y cambia cuánto
|
|
126
|
+
* EXPLICA `/aprobacion` al ponerlo. En la web hay una pastilla en el compositor y una
|
|
127
|
+
* nota permanente arriba del chat que ya cuentan los tres detalles —que se avisará con
|
|
128
|
+
* los nombres, que es de esta conversación y que subir sigue preguntando—, así que
|
|
129
|
+
* repetirlos en el transcript era la duplicación de siempre: cuatro renglones que dicen
|
|
130
|
+
* lo que se está leyendo dos centímetros más arriba. En el terminal no hay ni pastilla ni
|
|
131
|
+
* nota, y esos tres detalles son lo único que los cuenta.
|
|
132
|
+
*
|
|
133
|
+
* Va como propiedad del DESTINO y no como una bandera de la línea, por lo mismo que
|
|
134
|
+
* `Piel.anotarSincronizacion?`: la misma `/aprobacion` tecleada en el terminal DEBE
|
|
135
|
+
* imprimir la explicación entera, y eso no lo puede decidir quien compone el texto.
|
|
136
|
+
*/
|
|
137
|
+
modoALaVista?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* El agente puede PROPONER repartir un encargo en tareas de fondo encadenadas (`proponer_tareas`).
|
|
140
|
+
* Ausente = no. Lo declara solo la consola de una PERSONA en la web, que es la que tiene la cola de
|
|
141
|
+
* tareas y la tarjeta para encolarlas: la de una tarea de fondo no (encadenaría trabajo sin nadie
|
|
142
|
+
* delante), ni el terminal, `run` o los evals. Lo lee `crearEjecutorReal` al abrir la sesión.
|
|
143
|
+
*/
|
|
144
|
+
proponeTareas?: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Es la consola de una TAREA DE FONDO: nadie delante que conteste. Ausente = no. Con ella el agente resuelve sus dudas
|
|
147
|
+
* solo —su opción recomendada, o la que decida— y cierra con un resumen de lo que hizo (`trabajoSinPersona` en
|
|
148
|
+
* TrueForge). Lo declara solo `consolaDeTarea.ts`; lo lee `crearEjecutorReal` al abrir la sesión.
|
|
149
|
+
*/
|
|
150
|
+
tareaDeFondo?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* El estado de sesión ACABA de cambiar (un comando devolvió uno nuevo).
|
|
153
|
+
*
|
|
154
|
+
* Existe porque el modelo en vigor vive dentro del lazo: `/modelo` y `/modelos` cambian
|
|
155
|
+
* `estado.fuentes` en caliente y no tocan disco, así que nadie fuera de `correrConsola`
|
|
156
|
+
* puede saber cuál está puesto — y una piel que lo enseñe tiene que enterarse cuando
|
|
157
|
+
* cambia, no derivarlo de una frase del transcript. stdio y la TUI no la implementan: la
|
|
158
|
+
* TUI ya re-parsea `acuseDeModelo` para su barra lateral, y stdio no pinta estado.
|
|
159
|
+
*/
|
|
160
|
+
alEstado?: (estado: EstadoDeSesion) => void;
|
|
161
|
+
/** Cambia la paleta de la piel actual; la TUI además fuerza un repintado completo. */
|
|
162
|
+
aplicarTema?: (tema: IdTema) => void;
|
|
163
|
+
/** Persistencia inyectada: el tema es del proyecto, no de la cuenta. */
|
|
164
|
+
guardarTemaDeProyecto?: (tema: IdTema) => {
|
|
165
|
+
ruta: string;
|
|
166
|
+
tema: string;
|
|
167
|
+
};
|
|
168
|
+
/** Conexión OAuth + MCP, inyectada desde agent para que esta capa siga sin SDK MCP. */
|
|
169
|
+
conectarCloudStudio?: (url: string, scopes: readonly string[], informar: (texto: string) => void) => Promise<{
|
|
170
|
+
url: string;
|
|
171
|
+
scopes: readonly string[];
|
|
172
|
+
herramientas: Array<{
|
|
173
|
+
nombre: string;
|
|
174
|
+
descripcion: string;
|
|
175
|
+
}>;
|
|
176
|
+
proyectos: Array<{
|
|
177
|
+
id: string;
|
|
178
|
+
nombre: string;
|
|
179
|
+
}>;
|
|
180
|
+
}>;
|
|
181
|
+
/** El endpoint es configuración de proyecto; los tokens OAuth no. */
|
|
182
|
+
guardarCloudStudioDeProyecto?: (url: string, scopes: readonly string[]) => {
|
|
183
|
+
ruta: string;
|
|
184
|
+
url: string;
|
|
185
|
+
scopes: string[];
|
|
186
|
+
};
|
|
187
|
+
/** El modo es configuración local del proyecto, inyectada desde el adaptador de disco. */
|
|
188
|
+
guardarModoDeProyecto?: (modo: "offline" | "cloud") => {
|
|
189
|
+
ruta: string;
|
|
190
|
+
modo: "offline" | "cloud";
|
|
191
|
+
};
|
|
192
|
+
guardarProyectoCloudStudioDeProyecto?: (proyecto: {
|
|
193
|
+
id: string;
|
|
194
|
+
nombre: string;
|
|
195
|
+
}) => {
|
|
196
|
+
ruta: string;
|
|
197
|
+
proyecto: {
|
|
198
|
+
id: string;
|
|
199
|
+
nombre: string;
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Las ramas del proyecto remoto YA elegido, hermana de `conectarCloudStudio`: esta capa
|
|
204
|
+
* tampoco conoce MCP para esto. Con una sola rama disponible el alta no pregunta.
|
|
205
|
+
*/
|
|
206
|
+
ramasDeCloudStudio?: (proyecto: string) => Promise<string[]>;
|
|
207
|
+
/** La rama ORIGEN es identidad del remoto, no una preferencia: va dentro de `cloudstudio`. */
|
|
208
|
+
guardarRamaDeProyecto?: (rama: string) => {
|
|
209
|
+
ruta: string;
|
|
210
|
+
rama: string;
|
|
211
|
+
};
|
|
212
|
+
/** El modelo propio del proyecto, por papel. Nunca lleva claves. */
|
|
213
|
+
guardarModelosDeProyecto?: (papel: Papel, id: string) => {
|
|
214
|
+
ruta: string;
|
|
215
|
+
id: string;
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Sincronización con CloudStudio, inyectada desde `agent/`: esta capa no conoce MCP ni
|
|
219
|
+
* git. Su ausencia (modo guion, tests) es la que hace que `/sync` lo diga sin reventar.
|
|
220
|
+
*
|
|
221
|
+
* `politicaDeAprobacion` solo importa para «subir» (`core/cloudstudio.ts` documenta el
|
|
222
|
+
* hueco): quien construye el adaptador real la reenvía a `agent/cloudstudio/subida.ts#subir`, que
|
|
223
|
+
* la exige. Esta capa no rellena el hueco por su cuenta — eso es cosa del comando
|
|
224
|
+
* `/sync` (ver `politicaInteractiva` más abajo), que sí tiene `preguntar`/`escribir`.
|
|
225
|
+
*/
|
|
226
|
+
sincronizar?: (accion: AccionDeSincronizacion, raiz: string, politicaDeAprobacion?: PoliticaDeAprobacion,
|
|
227
|
+
/**
|
|
228
|
+
* Los avisos DETERMINISTAS de la sincronización, tal cual los emite `agent/`: «el
|
|
229
|
+
* servidor truncó el listado», «el ZIP falló; bajando fichero a fichero», qué
|
|
230
|
+
* ficheros no se pudieron bajar, cuántos no subieron, qué configuración de git se
|
|
231
|
+
* conservó. En este repo los avisos son código y no prompt; sin este cable estaban
|
|
232
|
+
* escritos y no llegaban a ninguna parte (el `informar` por omisión es `() => {}`).
|
|
233
|
+
*/
|
|
234
|
+
informar?: (texto: string) => void,
|
|
235
|
+
/**
|
|
236
|
+
* Para «bajar»: quien autoriza VACIAR la copia (`core/cloudstudio.ts#ConfirmacionDeBajada`).
|
|
237
|
+
* Ausente = no se vacía y se aplica la regla de antes. La rellena el comando `/sync`, que
|
|
238
|
+
* es quien tiene `preguntar`.
|
|
239
|
+
*/
|
|
240
|
+
confirmarBajada?: ConfirmacionDeBajada) => Promise<{
|
|
241
|
+
tipo: "texto";
|
|
242
|
+
texto: string;
|
|
243
|
+
subida?: ResultadoDeSubida;
|
|
244
|
+
bajada?: {
|
|
245
|
+
bajados: number;
|
|
246
|
+
};
|
|
247
|
+
} | {
|
|
248
|
+
tipo: "arbol-sucio";
|
|
249
|
+
accion: "bajar" | "subir";
|
|
250
|
+
pendientes: string[];
|
|
251
|
+
}>;
|
|
252
|
+
/**
|
|
253
|
+
* Una operación de sincronización ENTERA, para la piel que tiene un sitio propio donde
|
|
254
|
+
* contarla.
|
|
255
|
+
*
|
|
256
|
+
* **Es OPCIONAL, y por la misma asimetría que `fase?`, `razonamiento?` y `notificacion?` en
|
|
257
|
+
* `Piel`**: quien no lo implemente —stdio, la TUI, la consola de una tarea, los dobles de los
|
|
258
|
+
* tests— sigue recibiendo el recorrido por `escribir`, al vuelo y byte a byte como siempre.
|
|
259
|
+
* Lo que cambia NO es por dónde pasa la sincronización: `/sync subir` y `/sync bajar` siguen
|
|
260
|
+
* siendo la MISMA línea encolada, con el mismo plan, la misma guarda de árbol sucio y la
|
|
261
|
+
* misma aprobación. Lo que cambia es DÓNDE SE CUENTA, y eso es una propiedad del destino, no
|
|
262
|
+
* de la línea: la misma orden en el terminal DEBE imprimir su recorrido y en el navegador no
|
|
263
|
+
* tiene por qué ensuciar el hilo.
|
|
264
|
+
*
|
|
265
|
+
* El nombre es el de la piel web (`anotar*`), y aquí significa «guárdalo en tu registro»: el
|
|
266
|
+
* comando acumula las líneas y entrega UNA operación al final, ya con su hora y su acción.
|
|
267
|
+
* Implementado, `/sync` no escribe ni una línea por `escribir`.
|
|
268
|
+
*/
|
|
269
|
+
anotarSincronizacion?: (operacion: NarracionDeSincronizacion) => void;
|
|
270
|
+
/**
|
|
271
|
+
* Una decisión en la que quien contesta puede quedarse con PARTE del plan: la subida a
|
|
272
|
+
* CloudStudio en el navegador, donde el plan es un árbol con casillas.
|
|
273
|
+
*
|
|
274
|
+
* **OPCIONAL por la misma asimetría que `anotarSincronizacion?`**: stdio, la TUI, la consola
|
|
275
|
+
* de una tarea y los dobles no la tienen, y `politicaInteractiva` cae entonces en `preguntar`
|
|
276
|
+
* —todo o nada, byte a byte como siempre—. La implementa `web/servidor/consolaWeb.ts`, y un
|
|
277
|
+
* test de esa consola REAL comprueba que la selección llega a la política: un método opcional
|
|
278
|
+
* declarado y nunca implementado no da ningún error que leer.
|
|
279
|
+
*/
|
|
280
|
+
decidirConSeleccion?: (pregunta: string, decision: DecisionDeConsola) => Promise<RespuestaConSeleccion>;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Saludo local de la consola. No procede del modelo ni se incorpora al hilo: debe hacer
|
|
284
|
+
* visible que xonecode está listo sin gastar tokens ni sesgar la primera petición.
|
|
285
|
+
*/
|
|
286
|
+
export declare const MENSAJE_BIENVENIDA = "\u00A1Bienvenido a XOneCode! Puedo analizar, explicar y modificar tu proyecto XOne. Escribe `/` para ver los comandos o cu\u00E9ntame qu\u00E9 necesitas.\n";
|
|
287
|
+
/**
|
|
288
|
+
* Hay estado que retomar solo cuando existe la memoria del PROYECTO. Una carpeta
|
|
289
|
+
* `.xonecode` con `config.json` aislado no representa trabajo anterior y debe conservar
|
|
290
|
+
* el saludo de primera visita.
|
|
291
|
+
*/
|
|
292
|
+
export declare function hayEstadoDeProyecto(raiz: string): boolean;
|
|
293
|
+
/**
|
|
294
|
+
* Petición interna de reanudación. Es deliberadamente de solo lectura y estrecha para
|
|
295
|
+
* que abrir una sesión existente no se convierta en otra exploración exhaustiva.
|
|
296
|
+
*/
|
|
297
|
+
export declare const PETICION_REANUDAR_PROYECTO: string;
|
|
298
|
+
export declare const MENSAJE_REANUDANDO = "Analizando el estado guardado del repositorio\u2026\n";
|
|
299
|
+
export { URL_CLOUDSTUDIO_POR_OMISION };
|
|
300
|
+
/**
|
|
301
|
+
* Primer contacto con una carpeta. En pipes no se crea estado ni se pregunta: el modo
|
|
302
|
+
* offline histórico permanece exactamente igual. Cloud se persiste SOLO después de
|
|
303
|
+
* autenticar y descubrir el MCP, de modo que un login cancelado deja la carpeta virgen.
|
|
304
|
+
*/
|
|
305
|
+
export declare function configurarModoInicial(raiz: string, consola: Consola): Promise<void>;
|
|
306
|
+
/** Datos de un selector: UI-neutral, para que `consola.ts` no conozca Ink. */
|
|
307
|
+
export interface SelectorDeConsola {
|
|
308
|
+
titulo: string;
|
|
309
|
+
opciones: readonly {
|
|
310
|
+
id: string;
|
|
311
|
+
etiqueta: string;
|
|
312
|
+
detalle?: string;
|
|
313
|
+
}[];
|
|
314
|
+
/**
|
|
315
|
+
* Por qué se está preguntando esto (o por qué se pregunta OTRA VEZ). Existe porque hay
|
|
316
|
+
* una piel que no pinta el transcript mientras pregunta: durante el alta, la consola web
|
|
317
|
+
* enseña solo la tarjeta con el selector (`apps/web/src/App.tsx`, rama `enAlta`), así que
|
|
318
|
+
* un motivo dicho con `escribir` acabaría en un acto de sistema que nadie está mirando —
|
|
319
|
+
* un fallo mudo justo en el paso que se repite. Las pieles de terminal lo pueden ignorar:
|
|
320
|
+
* ahí el `escribir` ya está a la vista, encima del selector.
|
|
321
|
+
*/
|
|
322
|
+
aviso?: string;
|
|
323
|
+
}
|
|
324
|
+
export interface EstadoDeSesion {
|
|
325
|
+
hilo: string;
|
|
326
|
+
raiz: string;
|
|
327
|
+
fuentes: FuentesDeEleccion;
|
|
328
|
+
/** Overrides vivos de `/modelos`, separados de las banderas con las que arrancó la CLI. */
|
|
329
|
+
seleccionesDeCatalogo?: Partial<Record<Papel, string>>;
|
|
330
|
+
/**
|
|
331
|
+
* Cuánto razona el modelo en esta sesión. Ausente = no se manda el parámetro.
|
|
332
|
+
*
|
|
333
|
+
* Va FUERA de `fuentes` a propósito: `FuentesDeEleccion` contesta «qué modelo le toca a
|
|
334
|
+
* cada papel» y tiene su propia precedencia de seis escalones, mientras que esto es un
|
|
335
|
+
* ajuste DEL modelo resuelto — no compite con nada ni viene de un fichero. Meterlo ahí
|
|
336
|
+
* habría obligado a `resolver()` a devolverlo por papel, que es una pregunta que nadie
|
|
337
|
+
* hace: el esfuerzo es de la sesión, no del papel.
|
|
338
|
+
*
|
|
339
|
+
* No se valida aquí contra el modelo: eso lo hace `esfuerzoAplicable` al CONSTRUIR, que
|
|
340
|
+
* es el único sitio que conoce las dos mitades. Un nivel guardado que el modelo de ahora
|
|
341
|
+
* no admite se omite en vez de tumbar el turno — y vuelve a valer si se cambia a un
|
|
342
|
+
* modelo que sí lo acepte, que es justo lo que se quiere al ir probando.
|
|
343
|
+
*/
|
|
344
|
+
esfuerzo?: Esfuerzo;
|
|
345
|
+
/** El motor de agente de esta sesión (`core/motor.ts`). Ausente = el de la configuración. */
|
|
346
|
+
motor?: MotorDeAgente;
|
|
347
|
+
/**
|
|
348
|
+
* Quién aprueba las escrituras en esta sesión: supervisado (cada una con su diff) o
|
|
349
|
+
* autónomo (se aplican solas). Ausente = supervisado, y eso NO es «no consta»: de esto
|
|
350
|
+
* hay que decidir algo en cada escritura, así que el hueco se resuelve, y la única
|
|
351
|
+
* dirección segura para resolverlo es la que enseña el diff.
|
|
352
|
+
*
|
|
353
|
+
* Vive AQUÍ y no en `settings.json` —donde vivía, indexado por ruta— porque es de la
|
|
354
|
+
* SESIÓN: el mando está dentro de la caja del chat y se lee como «esta conversación».
|
|
355
|
+
* `core/modoDeEscritura.ts` tiene el argumento entero, incluido por qué se retiró la
|
|
356
|
+
* condición que lo prohibía en un proyecto conectado a CloudStudio.
|
|
357
|
+
*
|
|
358
|
+
* Va fuera de `fuentes` por lo mismo que el esfuerzo: `FuentesDeEleccion` contesta «qué
|
|
359
|
+
* modelo le toca a cada papel» y esto no compite con nada ni viene de un fichero.
|
|
360
|
+
*/
|
|
361
|
+
modo?: ModoDeEscritura;
|
|
362
|
+
}
|
|
363
|
+
/** Lo que hace un comando de barra: escribe y puede cambiar el estado de la sesión. */
|
|
364
|
+
export type ManejadorDeBarra = (args: string[], estado: EstadoDeSesion, consola: Consola) => Promise<{
|
|
365
|
+
seguir: boolean;
|
|
366
|
+
estado?: EstadoDeSesion;
|
|
367
|
+
}>;
|
|
368
|
+
/**
|
|
369
|
+
* Cómo se corre una línea de prosa. El valor por omisión usa el agente guionizado.
|
|
370
|
+
*
|
|
371
|
+
* **Devuelve lo que el turno sabe de sí mismo**, y ese retorno es una deuda que se paga
|
|
372
|
+
* aquí. Devolvía `Promise<void>`, así que `crearEjecutorReal` (`cli/main.ts`) tiraba el
|
|
373
|
+
* retorno de `sesion.turno` y con él el `cortadoPorTope` que sabe que quedaron escrituras
|
|
374
|
+
* sin aplicar. Medido con las tareas de fondo: cuatro ficheros escritos, una escritura
|
|
375
|
+
* abandonada, el verificador sin correr ni una vez, y el kanban diciendo «terminada».
|
|
376
|
+
*
|
|
377
|
+
* `void` sigue siendo válido a propósito: la mayoría de los caminos —el guionizado, las
|
|
378
|
+
* pieles que solo pintan— no tienen nada que informar, y **ausente no es vacío**: quien lo
|
|
379
|
+
* consume trata «no informó» como «no se sabe» y no como «todo bien»
|
|
380
|
+
* (`core/entrega.ts#medidaDeEntrega`). Con eso ninguna piel cambia y la tubería sigue
|
|
381
|
+
* siendo byte-idéntica.
|
|
382
|
+
*/
|
|
383
|
+
export type EjecutorDeTurno = (peticion: string, estado: EstadoDeSesion, consola: Consola) => Promise<ResultadoDeTurno | void>;
|
|
384
|
+
/**
|
|
385
|
+
* Un turno con `AgenteGuionizado`, igual que el `cmdRun` sin `--real`.
|
|
386
|
+
*
|
|
387
|
+
* Es el valor por omisión de `correrConsola`: mantiene el invariante de fase 1 (todo corre
|
|
388
|
+
* sin API y sin red). El cableado del agente REAL va en otra tarea y se inyecta como
|
|
389
|
+
* tercer parámetro, mismo patrón que `cmdVerify(ruta, escribir, verificador = ...)`.
|
|
390
|
+
*/
|
|
391
|
+
export declare function ejecutarTurnoGuionizado(peticion: string, _estado: EstadoDeSesion, consola: Consola): Promise<void>;
|
|
392
|
+
/** Filtra por id o nombre sin alterar el orden publicado por el proveedor. */
|
|
393
|
+
export declare function filtrarModelos(modelos: readonly ModeloDisponible[], filtro: string): ModeloDisponible[];
|
|
394
|
+
export type EleccionNumerada = {
|
|
395
|
+
tipo: "elegido";
|
|
396
|
+
modelo: ModeloDisponible;
|
|
397
|
+
} | {
|
|
398
|
+
tipo: "cancelado";
|
|
399
|
+
} | {
|
|
400
|
+
tipo: "invalido";
|
|
401
|
+
};
|
|
402
|
+
/** Un número visible es uno basado en uno; Enter significa cancelar, no elegir el primero. */
|
|
403
|
+
export declare function elegirPorNumero(modelos: readonly ModeloDisponible[], respuesta: string): EleccionNumerada;
|
|
404
|
+
/** Un papel vacío permite salir del flujo, pero cualquier otro texto debe ser exacto. */
|
|
405
|
+
export declare function elegirPapel(respuesta: string): Papel | undefined;
|
|
406
|
+
/** La global solo tiene efecto inmediato si no hay una fuente de rango superior para ese papel. */
|
|
407
|
+
export declare function fuenteQueEclipsaGlobal(papel: Papel, fuentes: FuentesDeEleccion, seleccionesDeCatalogo?: Partial<Record<Papel, string>>): "bandera" | "entorno" | "proyecto" | undefined;
|
|
408
|
+
/** Exportada: `main.ts` la usa para el contexto de `asistenteDeModelo` (stdio y TUI). */
|
|
409
|
+
export declare function hayCredencial(proveedor: Proveedor, raiz: string): boolean;
|
|
410
|
+
/**
|
|
411
|
+
* El selector de modelo de un catálogo ya elegido: la parte que `/modelos` y el alta de
|
|
412
|
+
* proyecto (`configurarModoInicial`) COMPARTEN, para que no haya dos copias del mismo
|
|
413
|
+
* flujo (rico con `seleccionar`, o numerado por `preguntar` cuando esa costura no existe).
|
|
414
|
+
* Devuelve el id crudo del catálogo (sin el prefijo `<proveedor>/`) o `undefined` si se
|
|
415
|
+
* canceló o no había nada entre lo que elegir — los mensajes de cada caso ya se escriben
|
|
416
|
+
* aquí, así que quien llama no repite el aviso.
|
|
417
|
+
*/
|
|
418
|
+
export declare function seleccionarModelo(proveedor: Proveedor, consola: Consola): Promise<string | undefined>;
|
|
419
|
+
export declare function crearCompleter(escribir: Escribir, ficherosDelProyecto?: () => ReadonlySet<string>): (linea: string) => [string[], string];
|
|
420
|
+
/**
|
|
421
|
+
* La ÚNICA política de aprobación que existe hoy: rellena el hueco de
|
|
422
|
+
* `core/cloudstudio.ts#PoliticaDeAprobacion` con un humano que ve el plan y responde.
|
|
423
|
+
* Vive aquí, en `cli/`, y no en `agent/cloudstudio/subida.ts`: la política es de la piel, el hueco es
|
|
424
|
+
* del motor.
|
|
425
|
+
*
|
|
426
|
+
* **Es MÁS estricta que `cli/aprobar.ts`, a propósito: aquí el Enter a secas no aprueba
|
|
427
|
+
* ni con TTY.** No es el mismo acto. En `aprobar.ts` se autoriza una escritura con su
|
|
428
|
+
* diff delante, línea a línea, y el Enter que aprueba lo pulsa alguien que está mirando
|
|
429
|
+
* el cambio; aquí se PUBLICA en un servidor remoto, lo que hay en pantalla es una lista
|
|
430
|
+
* de rutas —no el contenido— y es la operación menos reversible del producto. El detalle
|
|
431
|
+
* que lo hace peligroso no se ve: `APPROVALS_TTY` (`vendor/hitl.ts`) contiene la cadena
|
|
432
|
+
* VACÍA, así que pasarle `interactive` a `interpretAnswer` convertiría en «sube» toda
|
|
433
|
+
* respuesta vacía — y `consola.preguntar` devuelve "" también cuando el readline ya está
|
|
434
|
+
* cerrado (Ctrl-D, un stdin agotado a mitad de turno). Un EOF no puede publicar. Por eso
|
|
435
|
+
* se llama sin opciones, contra `APPROVALS_NO_TTY`, y el prompt enseña `[s/N]` siempre:
|
|
436
|
+
* un default visible que no fuera el real sería mentir en el paso que sube.
|
|
437
|
+
*
|
|
438
|
+
* **Y el plan viaja CON la pregunta, no solo delante de ella** (`DecisionDeConsola`): la
|
|
439
|
+
* tarjeta de la consola web enseña la lista y ofrece Aceptar/Cancelar, sin campo donde
|
|
440
|
+
* teclear, y para eso hay que decirle que la respuesta es sí o no. Adivinarlo del `[s/N]`
|
|
441
|
+
* sería leer la sintaxis, y el día que ese prompt cambie la tarjeta ofrecería un editor
|
|
442
|
+
* para una decisión —o dos botones sobre una pregunta abierta— sin un solo error.
|
|
443
|
+
*
|
|
444
|
+
* La política AUTÓNOMA (el papel `afilado` decidiendo sin que nadie mire) todavía no
|
|
445
|
+
* existe — hace falta, además del veredicto del juez, que el código compruebe
|
|
446
|
+
* condiciones deterministas (verificador en verde, árbol limpio, plan sin pendientes):
|
|
447
|
+
* ver el comentario de `PoliticaDeAprobacion`.
|
|
448
|
+
*
|
|
449
|
+
* **`decir` es el sumidero de la operación**, y entra por parámetro porque el plan NO siempre
|
|
450
|
+
* se cuenta en el scrollback: una piel con registro propio (`anotarSincronizacion`) guarda la
|
|
451
|
+
* operación entera y no quiere ni una línea suelta en el hilo. Por omisión es `consola.escribir`,
|
|
452
|
+
* así que quien no pase nada —los tests, cualquier otro llamador— tiene el comportamiento de
|
|
453
|
+
* siempre.
|
|
454
|
+
*/
|
|
455
|
+
export declare function politicaInteractiva(consola: Consola, decir?: (texto: string) => void): PoliticaDeAprobacion;
|
|
456
|
+
/**
|
|
457
|
+
* La confirmación de «Actualizar repo local», con lo que se pierde DELANTE — la misma forma
|
|
458
|
+
* que `politicaInteractiva`: las líneas que van al registro viajan también en la pregunta,
|
|
459
|
+
* y la tarjeta las pinta con dos botones. Fail-closed: lo que no sea un sí, no vacía nada.
|
|
460
|
+
*/
|
|
461
|
+
export declare function confirmacionInteractiva(consola: Consola, decir?: (texto: string) => void): ConfirmacionDeBajada;
|
|
462
|
+
export declare const COMANDOS: Record<string, {
|
|
463
|
+
descripcion: string;
|
|
464
|
+
manejador: ManejadorDeBarra;
|
|
465
|
+
}>;
|
|
466
|
+
/**
|
|
467
|
+
* El lazo: una línea, una acción, y a la siguiente.
|
|
468
|
+
*
|
|
469
|
+
* Tres cosas NO tumban la sesión: un comando de barra que lanza, un turno que lanza y un
|
|
470
|
+
* comando desconocido (que jamás se manda al modelo). El hilo vive en el checkpointer, así
|
|
471
|
+
* que lo que falle en un turno lo pierde ese turno, no la sesión.
|
|
472
|
+
*/
|
|
473
|
+
export declare function correrConsola(consola: Consola, estado: EstadoDeSesion, ejecutarTurno?: EjecutorDeTurno): Promise<number>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type FuentesDeEleccion } from "../core/modelos.js";
|
|
2
|
+
import { type Escribir } from "./stdio.js";
|
|
3
|
+
/**
|
|
4
|
+
* Qué hay montado. **Sin red, sin claves y sin el simulador**, a propósito: existe para
|
|
5
|
+
* ver la deriva, y un diagnóstico que necesita credenciales no se usa cuando hace falta.
|
|
6
|
+
*/
|
|
7
|
+
export declare function cmdDescribe(fuentes: FuentesDeEleccion, escribir?: Escribir, raiz?: string): number;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Escribir } from "./stdio.js";
|
|
2
|
+
/**
|
|
3
|
+
* ¿Puede este sitio ser un proyecto XOne, y responde el simulador?
|
|
4
|
+
*
|
|
5
|
+
* Sale con código != 0 si falta algo imprescindible: es un diagnóstico, y uno que siempre
|
|
6
|
+
* dice que sí no sirve de nada en CI.
|
|
7
|
+
*/
|
|
8
|
+
export declare function cmdDoctor(escribir?: Escribir): Promise<number>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { cargar } from "../agent/config/configEnDisco.js";
|
|
2
|
+
import type { FuentesDeEleccion } from "../core/modelos.js";
|
|
3
|
+
/**
|
|
4
|
+
* Lo que hay que leer del disco ANTES de elegir un modelo: la configuración —del proyecto y
|
|
5
|
+
* la global— y las credenciales, que se aplican al proceso.
|
|
6
|
+
*
|
|
7
|
+
* **Existe porque había DOS puertas y solo una lo hacía.** La consola hidrataba sus fuentes
|
|
8
|
+
* con `cargar()` y llamaba a `aplicarAuth`; `run --real` recibía únicamente lo que venía por
|
|
9
|
+
* bandera, así que corría con el modelo POR OMISIÓN aunque hubiera uno configurado —medido:
|
|
10
|
+
* el `config.json` global decía un modelo y el turno dijo otro, con su origen «(omision)» al
|
|
11
|
+
* lado— y, peor, sin `aplicarAuth` la clave nunca llegaba a `process.env`: un proveedor con
|
|
12
|
+
* credencial no se podía alcanzar desde `run` de ninguna forma. Para un comando cuyo trabajo
|
|
13
|
+
* es MEDIR lo que cuesta un turno, medir otro modelo del que se usa lo deja sin sentido.
|
|
14
|
+
*
|
|
15
|
+
* Un solo cuerpo de función y dos llamadores, que es la regla de siempre en este repo: dos
|
|
16
|
+
* copias de esto son dos sitios donde una de las dos se queda sin la mitad.
|
|
17
|
+
*
|
|
18
|
+
* **Lo que viene por bandera se conserva tal cual**: aquí no se decide ninguna precedencia
|
|
19
|
+
* —de eso va `core/modelos.ts#resolver`, que además recuerda el origen de cada valor—, esto
|
|
20
|
+
* solo rellena las dos fuentes que viven en disco.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hidratarFuentesDeDisco(raiz: string, fuentes: FuentesDeEleccion): {
|
|
23
|
+
fuentes: FuentesDeEleccion;
|
|
24
|
+
cargado: ReturnType<typeof cargar>;
|
|
25
|
+
};
|