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,96 @@
|
|
|
1
|
+
import type { Agente } from "./agentes.js";
|
|
2
|
+
/**
|
|
3
|
+
* Las reglas PURAS de traer una fuente de Google Fonts al proyecto: qué familia y peso valen,
|
|
4
|
+
* cómo se llama el fichero, de qué URLs se aceptan respuestas y qué bytes son un `.ttf`. La red
|
|
5
|
+
* es `FuentesPort` (`core/ports.ts`) y la hace `agent/config/fuentesEnRed.ts`; las tools son
|
|
6
|
+
* `agent/grafo/fuentesDeGoogle.ts`.
|
|
7
|
+
*
|
|
8
|
+
* ## Lo medido contra la red, sin clave
|
|
9
|
+
*
|
|
10
|
+
* - El CATÁLOGO es `fonts.google.com/metadata/fonts`: un JSON de unos 2,7 MB con ~1.950
|
|
11
|
+
* familias, cada una con sus pesos como claves de `fonts` (`"400"`, `"700i"` es la cursiva).
|
|
12
|
+
* - El FICHERO sale de la API `css2`: pedida sin cabeceras de navegador moderno, su `@font-face`
|
|
13
|
+
* apunta a un `.ttf` ESTÁTICO de ese peso en `fonts.gstatic.com` (`font/ttf`). Un peso que la
|
|
14
|
+
* familia no tiene contesta 400. Estático y por peso es justo la convención de la skill
|
|
15
|
+
* (`fontname: Roboto-Bold.ttf`); el `.ttf` variable del repo de GitHub sale con su peso por
|
|
16
|
+
* omisión y su nombre no se deduce sin listar la carpeta.
|
|
17
|
+
* - Tamaños: Inter 700 son 326 KB; Noto Sans JP 400, 5,7 MB (de ahí el tope).
|
|
18
|
+
*/
|
|
19
|
+
export declare const NOMBRE_BUSCAR_FUENTE = "buscar_fuente";
|
|
20
|
+
export declare const NOMBRE_TRAER_FUENTE = "traer_fuente";
|
|
21
|
+
/** La carpeta de una app XOne de donde `fontname` toma el `.ttf`. */
|
|
22
|
+
export declare const CARPETA_DE_FUENTES = "fonts";
|
|
23
|
+
/**
|
|
24
|
+
* Quién las recibe: quien puede dejar el `.ttf` en `fonts/`. Sin `escribeEn` escribe el proyecto
|
|
25
|
+
* entero (el desarrollador); con él, solo si una de sus carpetas cubre `fonts/` (el diseñador, que
|
|
26
|
+
* hace los RECURSOS: una fuente lo es, como un icono). La forma de `recibeBuscarIcono`, con otra
|
|
27
|
+
* carpeta. Regla de DATO, no un nombre. Solo llega a `motor: "modelo"` (un externo no recibe tools
|
|
28
|
+
* propias), y eso lo comprueba quien monta.
|
|
29
|
+
*/
|
|
30
|
+
export declare function recibeFuentes(a: Pick<Agente, "soloLectura" | "ejecucion" | "escribeEn">): boolean;
|
|
31
|
+
/** Tope de UNA llamada de red. El catálogo son 2,7 MB y una fuente CJK pasa de 5 MB. */
|
|
32
|
+
export declare const TOPE_DE_FUENTES_MS = 30000;
|
|
33
|
+
/** Lo que se acepta como `.ttf`. Medido: Noto Sans JP 400 son 5,7 MB; esto es holgura. */
|
|
34
|
+
export declare const TOPE_DE_FUENTE_BYTES: number;
|
|
35
|
+
/** Lo que se acepta como catálogo (2,7 MB medidos) o como hoja `css2` (unos cientos de bytes). */
|
|
36
|
+
export declare const TOPE_DE_CATALOGO_BYTES: number;
|
|
37
|
+
export declare const TOPE_DE_CSS_BYTES: number;
|
|
38
|
+
export declare const LIMITES_DE_BUSQUEDA_DE_FUENTES: {
|
|
39
|
+
readonly porOmision: 8;
|
|
40
|
+
readonly maximo: 20;
|
|
41
|
+
};
|
|
42
|
+
/** Los hosts son CONSTANTES: uno distinto es una decisión, no un parámetro. */
|
|
43
|
+
export declare const URL_DEL_CATALOGO = "https://fonts.google.com/metadata/fonts";
|
|
44
|
+
export declare const BASE_DE_CSS = "https://fonts.googleapis.com/css2";
|
|
45
|
+
export declare const HOST_DE_FICHEROS = "fonts.gstatic.com";
|
|
46
|
+
/** Los pesos que se traen. El catálogo trae también 1 y 1000 en alguna familia variable: fuera. */
|
|
47
|
+
export declare const PESOS: readonly [100, 200, 300, 400, 500, 600, 700, 800, 900];
|
|
48
|
+
export type Peso = (typeof PESOS)[number];
|
|
49
|
+
/** Una familia del catálogo, recortada a lo que el agente necesita. */
|
|
50
|
+
export interface FamiliaDeFuente {
|
|
51
|
+
familia: string;
|
|
52
|
+
categoria: string;
|
|
53
|
+
/** Los estilos que hay, como el catálogo: `"400"`, `"700i"`. Solo los de `PESOS`. */
|
|
54
|
+
estilos: string[];
|
|
55
|
+
}
|
|
56
|
+
export declare function motivoDeFamiliaInaceptable(familia: string): string | undefined;
|
|
57
|
+
export declare function motivoDePesoInaceptable(peso: number): string | undefined;
|
|
58
|
+
/** La clave del catálogo para un peso y estilo: `700` → `"700"`, cursiva → `"700i"`. */
|
|
59
|
+
export declare function claveDeEstilo(peso: Peso, cursiva: boolean): string;
|
|
60
|
+
/**
|
|
61
|
+
* El nombre del fichero, por la convención de los estáticos de Google: la familia SIN espacios,
|
|
62
|
+
* un guion y el estilo (`Roboto Mono`, 700 cursiva → `RobotoMono-BoldItalic.ttf`; 400 cursiva →
|
|
63
|
+
* `RobotoMono-Italic.ttf`). Es también lo que va en `fontname`, a secas: XOne lo busca en `fonts/`.
|
|
64
|
+
* Medido sobre el catálogo: quitar los espacios no junta dos familias en un mismo nombre.
|
|
65
|
+
*/
|
|
66
|
+
export declare function nombreDeFicheroDeFuente(familia: string, peso: Peso, cursiva: boolean): string;
|
|
67
|
+
/** Dónde se escribe (ruta virtual): `/fonts/Inter-Bold.ttf`. */
|
|
68
|
+
export declare function rutaDeFuente(familia: string, peso: Peso, cursiva: boolean): string;
|
|
69
|
+
/** La hoja `css2` de UN estilo. La familia ya viene validada: solo letras, cifras y espacios. */
|
|
70
|
+
export declare function urlDeCss(familia: string, peso: Peso, cursiva: boolean): string;
|
|
71
|
+
/**
|
|
72
|
+
* De la hoja `css2`, la URL del `.ttf`, o `undefined`. Solo si es HTTPS a `fonts.gstatic.com` y
|
|
73
|
+
* declara `truetype`: otro host u otro formato (un `woff2`, si Google cambiara lo que sirve a un
|
|
74
|
+
* cliente sin navegador) no es lo medido.
|
|
75
|
+
*/
|
|
76
|
+
export declare function urlDeTtfEnCss(css: string): string | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* ¿Son estos bytes un TrueType? Por su FIRMA, no por la cabecera HTTP: `00 01 00 00` (lo medido
|
|
79
|
+
* en todo lo que sirve gstatic) o `true` (el de Apple). Un OpenType con CFF (`OTTO`) no se acepta:
|
|
80
|
+
* lo que XOne dice cargar es `.ttf`.
|
|
81
|
+
*/
|
|
82
|
+
export declare function esTrueType(bytes: Uint8Array): boolean;
|
|
83
|
+
/** Del catálogo, las familias con forma conocida. Lo que no encaja no es del contrato y se salta. */
|
|
84
|
+
export declare function familiasDelCatalogo(cuerpo: unknown): Array<FamiliaDeFuente & {
|
|
85
|
+
popularidad: number;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Buscar en el catálogo: la coincidencia EXACTA primero (sin mayúsculas ni espacios: «robotomono»
|
|
89
|
+
* es «Roboto Mono», que es como lo escribe una maqueta en su `fontFamily`), luego las que la
|
|
90
|
+
* contienen, por popularidad (en el catálogo, menor es más popular).
|
|
91
|
+
*/
|
|
92
|
+
export declare function buscarEnCatalogo(catalogo: ReadonlyArray<FamiliaDeFuente & {
|
|
93
|
+
popularidad: number;
|
|
94
|
+
}>, consulta: string, limite: number): FamiliaDeFuente[];
|
|
95
|
+
/** Los estilos de una familia, legibles: `400, 700, 400 cursiva`. */
|
|
96
|
+
export declare function estilosLegibles(estilos: readonly string[]): string;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La GEOMETRÍA de una pantalla: comparar CAJAS, no píxeles. Pura.
|
|
3
|
+
*
|
|
4
|
+
* Existe por una sesión de MyAllXOne (crear una calculadora de Stitch): diez rondas de «cambio el CSS →
|
|
5
|
+
* despliega y captura → compara» porque nada le decía al agente QUÉ estaba mal. El comparador de franjas
|
|
6
|
+
* (`compararCapturas.ts`) da dónde hay contenido, no qué tecla; el SSIM se quedó en 0,44–0,48 en todas
|
|
7
|
+
* las rondas; y el crítico con visión no vio la «=» tapada por la barra de navegación y se inventó
|
|
8
|
+
* diferencias de color. Pero los dos lados se pueden tener como DATOS:
|
|
9
|
+
*
|
|
10
|
+
* - **El aparato** da su árbol de controles (`getAllElements`): cada control con su texto, su nombre y
|
|
11
|
+
* su caja en píxeles. Lo guarda con la captura, en el mismo momento, `xone-captura-android`.
|
|
12
|
+
* - **Una maqueta de Stitch** trae `code.html`: renderizado, da la caja de cada botón con su texto.
|
|
13
|
+
*
|
|
14
|
+
* Dos niveles:
|
|
15
|
+
* 1. **Solo con el aparato** (`hallazgosDelAparato`), haya maqueta o no: lo TAPADO por las barras del
|
|
16
|
+
* sistema (Android dibuja de borde a borde, así que un control puede quedar debajo de la de
|
|
17
|
+
* navegación), lo que se SALE de la pantalla y lo que se SOLAPA.
|
|
18
|
+
* 2. **Con la maqueta** (`compararConMaqueta`): se EMPAREJAN por texto Y posición —por texto solo, el
|
|
19
|
+
* «0» del visor se emparejó con la tecla «0»— y se dice qué FALTA, qué cambia de FILA o de ORDEN, y
|
|
20
|
+
* qué TAMAÑO RELATIVO a sus vecinas cambia. Nada de coordenadas absolutas: las proporciones de la
|
|
21
|
+
* maqueta (390×746) y del aparato (1080×2400) no coinciden, y cada «está 30 px más abajo» sería ruido.
|
|
22
|
+
*
|
|
23
|
+
* Lo que es BLOQUEANTE (tapado, fuera, falta) decide el veredicto; el resto son diferencias.
|
|
24
|
+
*/
|
|
25
|
+
export interface Caja {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
ancho: number;
|
|
29
|
+
alto: number;
|
|
30
|
+
}
|
|
31
|
+
export interface Rectangulo {
|
|
32
|
+
izquierda: number;
|
|
33
|
+
arriba: number;
|
|
34
|
+
derecha: number;
|
|
35
|
+
abajo: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ControlDelAparato {
|
|
38
|
+
nombre?: string;
|
|
39
|
+
texto?: string;
|
|
40
|
+
tipo?: string;
|
|
41
|
+
/** El `propType` de XOne: `B` botón, `IMG` imagen, `T`/`TL`/`L` texto o etiqueta… */
|
|
42
|
+
clase?: string;
|
|
43
|
+
caja: Caja;
|
|
44
|
+
/** El contenedor del que cuelga (un número por contenedor del árbol): solo los HERMANOS pueden solaparse por error. */
|
|
45
|
+
padre?: number;
|
|
46
|
+
/** El árbol dice que no se ve (`visibleBounds: null`): está fuera por el scroll de su lista, no fuera de la pantalla. */
|
|
47
|
+
fueraDeVista?: true;
|
|
48
|
+
}
|
|
49
|
+
export interface GeometriaDelAparato {
|
|
50
|
+
pantalla: {
|
|
51
|
+
ancho: number;
|
|
52
|
+
alto: number;
|
|
53
|
+
};
|
|
54
|
+
barras?: {
|
|
55
|
+
estado?: Rectangulo;
|
|
56
|
+
navegacion?: Rectangulo;
|
|
57
|
+
};
|
|
58
|
+
controles: ControlDelAparato[];
|
|
59
|
+
}
|
|
60
|
+
export interface ElementoDeMaqueta {
|
|
61
|
+
/** El texto visible. Un botón de solo icono trae el nombre de la ligadura (`backspace`): eso NO es texto. */
|
|
62
|
+
texto: string;
|
|
63
|
+
caja: Caja;
|
|
64
|
+
/** Su ancho no se conoce (una maqueta DESCRITA sin unidades): no entra en la comparación de anchos. */
|
|
65
|
+
sinAncho?: true;
|
|
66
|
+
/**
|
|
67
|
+
* Es un BOTÓN de la maqueta (`cajasDeMaqueta.ts#medirElementos`). Lo que no lo es y no tiene letras es un DATO de
|
|
68
|
+
* ejemplo («12 pend.», el reloj «09:41» de una barra de iOS simulada): que falte en el aparato no es un defecto.
|
|
69
|
+
*/
|
|
70
|
+
boton?: true;
|
|
71
|
+
/** La caja de su TEXTO, si es un botón con el texto en un elemento propio: ahí se mide la letra; en `caja`, la forma. */
|
|
72
|
+
cajaDelTexto?: Caja;
|
|
73
|
+
}
|
|
74
|
+
export interface MaquetaMedida {
|
|
75
|
+
ancho: number;
|
|
76
|
+
alto: number;
|
|
77
|
+
elementos: ElementoDeMaqueta[];
|
|
78
|
+
/**
|
|
79
|
+
* Los BLOQUES anchos de la maqueta (cabecera, visor, panel…): casi tan anchos como la pantalla. No son controles,
|
|
80
|
+
* pero su fondo y su forma también son el diseño (medido: una cabecera amarilla que la maqueta no tiene no salía).
|
|
81
|
+
*/
|
|
82
|
+
bloques?: Caja[];
|
|
83
|
+
}
|
|
84
|
+
export interface HallazgosDeGeometria {
|
|
85
|
+
/** Tapado, fuera de la pantalla, falta: deciden el veredicto. */
|
|
86
|
+
bloqueantes: string[];
|
|
87
|
+
/** Fila, orden, tamaño relativo, solapes, lo que sobra. */
|
|
88
|
+
diferencias: string[];
|
|
89
|
+
/** Lo que no se pudo comparar y por qué: se dice, no se calla. */
|
|
90
|
+
notas: string[];
|
|
91
|
+
}
|
|
92
|
+
/** Cuántos hallazgos de cada clase como mucho: más es ruido que nadie lee. */
|
|
93
|
+
export declare const TOPE_DE_HALLAZGOS = 10;
|
|
94
|
+
/** Los controles del árbol de `getAllElements` (lista anidada de nodos con `bounds`), aplanados. */
|
|
95
|
+
export declare function controlesDelArbol(arbol: unknown): ControlDelAparato[];
|
|
96
|
+
export declare function hallazgosDelAparato(g: GeometriaDelAparato): HallazgosDeGeometria;
|
|
97
|
+
/**
|
|
98
|
+
* El texto con el que se empareja, o `""` si es un ICONO. Los botones de Stitch llevan iconos de Material
|
|
99
|
+
* como ligaduras (`backspace`, `content_copy COPY`): una palabra en minúsculas y con `_` es el nombre de un
|
|
100
|
+
* icono, no texto que se vea.
|
|
101
|
+
*/
|
|
102
|
+
export declare function textoParaEmparejar(texto: string): string;
|
|
103
|
+
interface Pareja {
|
|
104
|
+
maqueta: ElementoDeMaqueta;
|
|
105
|
+
aparato: ControlDelAparato;
|
|
106
|
+
/** Tenía texto en la maqueta y se emparejó por POSICIÓN con un control sin texto (una imagen). */
|
|
107
|
+
porPosicion?: true;
|
|
108
|
+
/** Los dos tienen PALABRAS y dicen otra cosa, en el mismo sitio: un texto traducido o cambiado. */
|
|
109
|
+
otroTexto?: true;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* ¿Lleva LETRAS el texto (ya pasado por `textoParaEmparejar`)? Una cifra o un signo no se empareja por sitio con una
|
|
113
|
+
* palabra: medido en la calculadora, el «19» del visor salía como pareja de «COPY».
|
|
114
|
+
*/
|
|
115
|
+
export declare function tieneLetras(texto: string): boolean;
|
|
116
|
+
/** Lo que se VE de un texto: sin el nombre de la ligadura de un icono (`content_copy COPY` → `COPY`). */
|
|
117
|
+
export declare function textoVisible(texto: string): string;
|
|
118
|
+
/**
|
|
119
|
+
* Empareja uno a uno: primero por TEXTO igual, eligiendo entre los iguales el más cercano (así el «0» de
|
|
120
|
+
* la tecla no se empareja con el «0» del visor); después los ICONOS por posición, solo si el más cercano
|
|
121
|
+
* está cerca y libre. Lo que no se empareja se devuelve aparte.
|
|
122
|
+
*/
|
|
123
|
+
export declare function emparejar(m: MaquetaMedida, g: GeometriaDelAparato,
|
|
124
|
+
/** Solo por texto: con una maqueta DESCRITA las posiciones son de una rejilla, y un icono «cerca» no significa nada. */
|
|
125
|
+
soloTexto?: boolean): {
|
|
126
|
+
parejas: Pareja[];
|
|
127
|
+
sinPareja: ElementoDeMaqueta[];
|
|
128
|
+
};
|
|
129
|
+
/** Agrupa en FILAS: dos van en la misma si sus centros verticales están a menos de medio alto. Devuelve el índice de fila de cada uno. */
|
|
130
|
+
export declare function filas(cajas: readonly Caja[]): number[];
|
|
131
|
+
/**
|
|
132
|
+
* Cómo se compara. Por omisión, una maqueta MEDIDA contra el aparato. `aproximada` es una maqueta DESCRITA
|
|
133
|
+
* por el modelo (`maquetaDescrita.ts`): sus cajas son una rejilla, así que se empareja solo por texto, no hay
|
|
134
|
+
* proporción que comparar, y lo que falta NO es bloqueante —es lo que el modelo dijo ver, no una medida—.
|
|
135
|
+
*/
|
|
136
|
+
export interface ModoDeComparacion {
|
|
137
|
+
aproximada?: true;
|
|
138
|
+
/** Cómo se nombra cada lado en los hallazgos: por omisión «la maqueta» y «el aparato». */
|
|
139
|
+
nombres?: {
|
|
140
|
+
maqueta: string;
|
|
141
|
+
aparato: string;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export declare function compararConMaqueta(m: MaquetaMedida, g: GeometriaDelAparato, modo?: ModoDeComparacion): HallazgosDeGeometria;
|
|
145
|
+
/** Los dos niveles juntos, recortados al tope, y sin repetir. */
|
|
146
|
+
export declare function hallazgosDeGeometria(g: GeometriaDelAparato, m?: MaquetaMedida): HallazgosDeGeometria;
|
|
147
|
+
/**
|
|
148
|
+
* La marca de una línea BLOQUEANTE en el informe del crítico: la lee el cierre de una tarea (`bloqueantesDelInforme`) para
|
|
149
|
+
* su `## CRITICAL`, y le dice al agente qué es lo grave entre las diferencias.
|
|
150
|
+
*/
|
|
151
|
+
export declare const MARCA_DE_BLOQUEANTE = "BLOQUEANTE \u00B7 ";
|
|
152
|
+
/** Las líneas bloqueantes de un informe del crítico, sin la marca. Puro. */
|
|
153
|
+
export declare function bloqueantesDelInforme(informe: string): string[];
|
|
154
|
+
/** El bloque de texto que ve el agente (y que se le da al crítico como HECHOS). */
|
|
155
|
+
export declare function informeDeGeometria(h: HallazgosDeGeometria, conMaqueta: boolean): string[];
|
|
156
|
+
/**
|
|
157
|
+
* Los controles que SE VEN en el aparato, en filas de arriba abajo y cada fila de izquierda a derecha: los que
|
|
158
|
+
* tienen texto, y los botones e imágenes sin él. Es la ESTRUCTURA que se le da a quien describe la captura
|
|
159
|
+
* (`descripcionDePantalla.ts`), para que describa estos controles y no se invente otros.
|
|
160
|
+
*/
|
|
161
|
+
/**
|
|
162
|
+
* La caja con la que se mide el ESTILO de un texto del aparato: la suya o la de su ENVOLTORIO. En XOne un botón o una
|
|
163
|
+
* píldora se hace a menudo con un `<frame>` (fondo, borde, radio) y una etiqueta dentro; la maqueta lo tiene como un
|
|
164
|
+
* botón o un `<span>` con su borde. Medida la etiqueta, salía «le falta el borde» y otro color de fondo (Maset: SALIR y
|
|
165
|
+
* el chip «ID»). El envoltorio es el frame MÁS PEQUEÑO que contiene la etiqueta, sin otro texto dentro y con un control
|
|
166
|
+
* más como mucho (el icono del botón). Una tarjeta, con varios textos, no lo es. El árbol del canal es PLANO: la
|
|
167
|
+
* contención se deduce de las cajas. Pura.
|
|
168
|
+
*/
|
|
169
|
+
export declare function cajaParaElEstilo(c: ControlDelAparato, g: GeometriaDelAparato): Caja;
|
|
170
|
+
export declare function filasDelAparato(g: GeometriaDelAparato): ControlDelAparato[][];
|
|
171
|
+
export {};
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El gestor de tareas de un proyecto (IXCODE-11), como PUERTO: el panel del proyecto lista las
|
|
3
|
+
* pendientes, abre una sesión con una, y al empezar y al cerrar escribe en él —siempre el HARNESS,
|
|
4
|
+
* con la aprobación de la persona, nunca el agente—. Lo implementan DOS adaptadores, cada uno por
|
|
5
|
+
* su conector MCP: Jira (`agent/conectores/gestorJira.ts`) y Notion (`gestorNotion.ts`, IXCODE-15);
|
|
6
|
+
* nada fuera de ellos sabe cuál es.
|
|
7
|
+
*
|
|
8
|
+
* Puro: `core/` no importa `@modelcontextprotocol` (`imports.test.ts`).
|
|
9
|
+
*/
|
|
10
|
+
export type CategoriaDeTarea = "por-hacer" | "en-curso" | "terminada";
|
|
11
|
+
export interface Vinculo {
|
|
12
|
+
/** El id del conector (`jira`, `notion`). */
|
|
13
|
+
conector: string;
|
|
14
|
+
/** El sitio del gestor (en Jira, el `cloudId`; en Notion, `SITIO_DE_NOTION`: un espacio por cuenta OAuth). */
|
|
15
|
+
sitio: string;
|
|
16
|
+
/** El proyecto en el gestor: en Jira su clave (`IXCODE`); en Notion la URL `collection://…` del data source. */
|
|
17
|
+
proyecto: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* El vínculo tal como se GUARDA en el `config.json` del proyecto (IXCODE-15): el `Vinculo` más si
|
|
21
|
+
* ese gestor admite «asignadas a mí», decidido UNA vez al vincular —cuando ya se describió la base—
|
|
22
|
+
* para que `estado` lo lea del disco sin tocar la red.
|
|
23
|
+
*/
|
|
24
|
+
export interface VinculoGuardado extends Vinculo {
|
|
25
|
+
admiteMias?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* El nombre para MOSTRAR del proyecto vinculado (IXCODE-15), el que el gestor dijo al vincular:
|
|
28
|
+
* el de la base en Notion (su `proyecto` es un `collection://…` que no se lee), el del proyecto
|
|
29
|
+
* en Jira. Se guarda con el vínculo para que sobreviva a un reinicio; ausente = no consta (un
|
|
30
|
+
* vínculo de antes), y entonces no se inventa.
|
|
31
|
+
*/
|
|
32
|
+
nombreDelProyecto?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Qué estado DEL PROYECTO cumple cada papel de una tarea en background (`core/tareasEnElGestor.ts`): xonecode no
|
|
35
|
+
* impone estados, se adapta a los del flujo. Ausente = la regla por categoría (`transicionPropuesta`).
|
|
36
|
+
*/
|
|
37
|
+
estados?: MapeoDeEstados;
|
|
38
|
+
/** Si los tickets de este proyecto DISPARAN tareas solos (la puerta 2). Ausente o `false`: no. Apagado por omisión. */
|
|
39
|
+
automatico?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Si, con el disparo encendido, el encargo ampliado ESPERA a que la persona lo revise y mueva el ticket al estado de
|
|
42
|
+
* lanzar. Ausente o `false` (lo de omisión, decisión suya): se prepara y se lanza en la MISMA pasada, y es xonecode
|
|
43
|
+
* quien mueve el ticket al empezar.
|
|
44
|
+
*/
|
|
45
|
+
revisarEncargo?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** El mapeo de estados: el NOMBRE del estado, tal como lo da el gestor. Cada papel es opcional. */
|
|
48
|
+
export interface MapeoDeEstados {
|
|
49
|
+
/** Un ticket asignado que entra aquí sin encargo: se amplía y se sube el encargo. */
|
|
50
|
+
preparar?: string;
|
|
51
|
+
/** Un ticket asignado que entra aquí sin tarea: se crea la tarea. Y a él pasa una tarea al empezar. */
|
|
52
|
+
lanzar?: string;
|
|
53
|
+
/** A él pasa el ticket al terminar la tarea. */
|
|
54
|
+
terminar?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Un estado del flujo de un proyecto, con su categoría (para proponer el mapeo). */
|
|
57
|
+
export interface EstadoDelGestor {
|
|
58
|
+
nombre: string;
|
|
59
|
+
categoria: CategoriaDeTarea;
|
|
60
|
+
}
|
|
61
|
+
/** Un comentario de un ticket: lo que hace falta para leer el último encargo y lo añadido debajo. */
|
|
62
|
+
export interface ComentarioDelGestor {
|
|
63
|
+
texto: string;
|
|
64
|
+
/** ISO. Ordena. */
|
|
65
|
+
creado: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Si se ofrece «asignadas a mí» para un vínculo guardado. Lo guardado manda; ausente —un vínculo
|
|
69
|
+
* escrito antes de este campo— es `true` para Jira (su `currentUser()` no depende del proyecto) y
|
|
70
|
+
* `false` para cualquier otro: lo que no se sabe no se ofrece.
|
|
71
|
+
*/
|
|
72
|
+
export declare function admiteMiasDelVinculo(v: VinculoGuardado): boolean;
|
|
73
|
+
/** El único «sitio» de Notion: una cuenta OAuth ve UN espacio, y el MCP no expone su nombre (medido). */
|
|
74
|
+
export declare const SITIO_DE_NOTION = "notion";
|
|
75
|
+
export interface TareaDelGestor {
|
|
76
|
+
/** Lo que identifica la tarea ante el gestor: en Jira `IXCODE-11`, en Notion el UUID de la página. */
|
|
77
|
+
clave: string;
|
|
78
|
+
/** Lo que se ENSEÑA cuando la clave no está hecha para leerse (Notion: el id corto). Ausente = se enseña `clave`. */
|
|
79
|
+
etiqueta?: string;
|
|
80
|
+
titulo: string;
|
|
81
|
+
estado: string;
|
|
82
|
+
categoria: CategoriaDeTarea;
|
|
83
|
+
/** Solo el nombre visible: el correo y el id de la cuenta no cruzan el cable. */
|
|
84
|
+
asignado?: string;
|
|
85
|
+
/** Para abrirla en el navegador. */
|
|
86
|
+
url?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface FichaDelGestor extends TareaDelGestor {
|
|
89
|
+
descripcion: string;
|
|
90
|
+
}
|
|
91
|
+
export interface TransicionDelGestor {
|
|
92
|
+
id: string;
|
|
93
|
+
nombre: string;
|
|
94
|
+
/** El estado al que lleva. */
|
|
95
|
+
destino: string;
|
|
96
|
+
categoria: CategoriaDeTarea;
|
|
97
|
+
}
|
|
98
|
+
/** Cómo se acota la consulta de pendientes, además del texto. Todo de LECTURA. */
|
|
99
|
+
export interface OpcionesDePendientes {
|
|
100
|
+
/** Solo las asignadas a quien tiene la sesión del conector. Ausente o `false`: las de todos. */
|
|
101
|
+
mias?: boolean;
|
|
102
|
+
}
|
|
103
|
+
/** Un proyecto encontrado por texto (`buscarProyectos`). En Notion `proyecto` es el id de la BASE,
|
|
104
|
+
* no su data source: el data source se resuelve al ELEGIRLA (`describirProyecto`), no en la lista. */
|
|
105
|
+
export interface ProyectoEncontrado {
|
|
106
|
+
proyecto: string;
|
|
107
|
+
nombre: string;
|
|
108
|
+
/** Dónde vive, para distinguir dos bases con el mismo nombre («Hypergraph / Projects & Tasks»). */
|
|
109
|
+
ruta?: string;
|
|
110
|
+
}
|
|
111
|
+
/** Lo que el adaptador ENTENDIÓ del esquema de un proyecto: qué propiedad es el estado, cuál el título y cuál el asignado. */
|
|
112
|
+
export interface EsquemaDelProyecto {
|
|
113
|
+
/** Lo que se guarda al vincular (en Notion, la URL `collection://…` del data source ya resuelto). */
|
|
114
|
+
proyecto: string;
|
|
115
|
+
nombre: string;
|
|
116
|
+
estado: {
|
|
117
|
+
propiedad: string;
|
|
118
|
+
opciones: {
|
|
119
|
+
nombre: string;
|
|
120
|
+
categoria: CategoriaDeTarea;
|
|
121
|
+
}[];
|
|
122
|
+
};
|
|
123
|
+
titulo: string;
|
|
124
|
+
/** Ausente = la base no tiene una propiedad de persona, y entonces no hay «asignadas a mí». */
|
|
125
|
+
asignado?: string;
|
|
126
|
+
/** Cuántos data sources tiene la base cuando son VARIOS (se usa el primero, y se dice). */
|
|
127
|
+
fuentes?: number;
|
|
128
|
+
}
|
|
129
|
+
/** O lo entendido, o por qué esa base no vale como gestor. */
|
|
130
|
+
export type DescripcionDelProyecto = {
|
|
131
|
+
esquema: EsquemaDelProyecto;
|
|
132
|
+
} | {
|
|
133
|
+
motivo: string;
|
|
134
|
+
};
|
|
135
|
+
export interface GestorDeTareasPort {
|
|
136
|
+
sitios(): Promise<{
|
|
137
|
+
id: string;
|
|
138
|
+
nombre: string;
|
|
139
|
+
url?: string;
|
|
140
|
+
}[]>;
|
|
141
|
+
proyectos(sitio: string): Promise<{
|
|
142
|
+
clave: string;
|
|
143
|
+
nombre: string;
|
|
144
|
+
}[]>;
|
|
145
|
+
/**
|
|
146
|
+
* Buscar proyectos por texto (IXCODE-15). Opcional: Jira no lo implementa —sus proyectos se eligen
|
|
147
|
+
* de la lista de `proyectos(sitio)`—, y quien no lo tiene contesta con un motivo, no con una lista vacía.
|
|
148
|
+
*/
|
|
149
|
+
buscarProyectos?(texto: string): Promise<ProyectoEncontrado[]>;
|
|
150
|
+
/**
|
|
151
|
+
* Lo que se entiende del esquema de un proyecto (`v.proyecto` puede ser lo que dio `buscarProyectos`
|
|
152
|
+
* o lo ya vinculado). Opcional: quien lo tiene, `vincular` lo usa para comprobar que el proyecto vale
|
|
153
|
+
* ANTES de escribir; quien no (Jira), comprueba contra `proyectos(sitio)` como siempre.
|
|
154
|
+
*/
|
|
155
|
+
describirProyecto?(v: Vinculo): Promise<DescripcionDelProyecto>;
|
|
156
|
+
/** `opciones.mias`: solo las asignadas a quien tiene la sesión del conector (en Jira, `currentUser()`). */
|
|
157
|
+
pendientes(v: Vinculo, texto?: string, opciones?: OpcionesDePendientes): Promise<TareaDelGestor[]>;
|
|
158
|
+
ficha(v: Vinculo, clave: string): Promise<FichaDelGestor>;
|
|
159
|
+
transiciones(v: Vinculo, clave: string): Promise<TransicionDelGestor[]>;
|
|
160
|
+
transicionar(v: Vinculo, clave: string, transicion: string): Promise<void>;
|
|
161
|
+
comentar(v: Vinculo, clave: string, texto: string): Promise<void>;
|
|
162
|
+
/**
|
|
163
|
+
* Crear una tarea EN el gestor (una tarea en background de un proyecto vinculado vive ahí, ver
|
|
164
|
+
* `docs/superpowers/specs/2026-10-15-tareas-desde-el-gestor-design.md`), asignada a quien tiene la sesión del
|
|
165
|
+
* conector. **Opcional**: quien no lo implementa no ofrece crear en el gestor, y la tarea se encola en local diciéndolo.
|
|
166
|
+
* Lo propio de cada gestor (el tipo de incidencia de Jira, la propiedad de título de Notion) lo resuelve su adaptador:
|
|
167
|
+
* aquí no entra nada que no tengan todos.
|
|
168
|
+
*/
|
|
169
|
+
crear?(v: Vinculo, nueva: NuevaTareaEnElGestor): Promise<TareaDelGestor>;
|
|
170
|
+
/** Los estados del flujo del proyecto, para elegir el mapeo. Opcional: sin él, el mapeo no se ofrece. */
|
|
171
|
+
estados?(v: Vinculo): Promise<EstadoDelGestor[]>;
|
|
172
|
+
/** Los comentarios de un ticket, del más viejo al más nuevo. Opcional: sin él, lanzar usa el texto del ticket. */
|
|
173
|
+
comentarios?(v: Vinculo, clave: string): Promise<ComentarioDelGestor[]>;
|
|
174
|
+
}
|
|
175
|
+
/** Lo que se le da al gestor para crear una tarea: lo que tienen TODOS. La descripción va en markdown. */
|
|
176
|
+
export interface NuevaTareaEnElGestor {
|
|
177
|
+
titulo: string;
|
|
178
|
+
descripcion: string;
|
|
179
|
+
}
|
|
180
|
+
/** Una clave de proyecto de Jira: MAYÚSCULAS, dígitos y `_`, empezando por letra. Entra en una JQL. */
|
|
181
|
+
export declare function motivoDeClaveDeProyecto(clave: string): string | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Lo que se ENSEÑA de una clave que no está hecha para leerse (IXCODE-15): el UUID de una página
|
|
184
|
+
* de Notion (con o sin guiones) se enseña por sus 8 primeros caracteres; cualquier otra clave (la
|
|
185
|
+
* de Jira, `IXCODE-11`) no tiene etiqueta y se enseña tal cual. UNA regla: el adaptador la usa para
|
|
186
|
+
* `TareaDelGestor.etiqueta`, y el cliente la REDECLARA para las claves que cruzan sin fila (el
|
|
187
|
+
* `ticket` de una sesión, `cierre.clave`, `transiciones.clave`).
|
|
188
|
+
*/
|
|
189
|
+
export declare function etiquetaDeClave(clave: string): string | undefined;
|
|
190
|
+
/** Un data source de Notion: `collection://<uuid>`. Es lo que se guarda como `proyecto` del vínculo. */
|
|
191
|
+
export declare function motivoDeFuenteDeNotion(proyecto: string): string | undefined;
|
|
192
|
+
/**
|
|
193
|
+
* La regla de qué `proyecto` vale, SEGÚN el conector (IXCODE-15): la clave de Jira entra en una JQL,
|
|
194
|
+
* la URL de Notion en un `notion-fetch` y como tabla de un SQL. Un conector que no es un gestor
|
|
195
|
+
* conocido no tiene regla que lo acepte. Única, para `config.ts#validar`, `vincular` y los adaptadores.
|
|
196
|
+
*/
|
|
197
|
+
export declare function motivoDeProyectoInaceptable(conector: string, proyecto: string): string | undefined;
|
|
198
|
+
/**
|
|
199
|
+
* La descripción de la regla, SIN el valor: para un aviso de `config.ts`, que nunca lleva la
|
|
200
|
+
* entrada (ni siquiera a través del motivo de otra función, que la interpola).
|
|
201
|
+
*/
|
|
202
|
+
export declare function formaDeProyecto(conector: string): string;
|
|
203
|
+
/**
|
|
204
|
+
* Lo que `describir` acepta de Notion: el id de una BASE (con o sin guiones, como sale de
|
|
205
|
+
* `notion-search` o de una URL) o un data source ya resuelto. Entra en un `notion-fetch`, no en SQL.
|
|
206
|
+
*/
|
|
207
|
+
export declare function motivoDeReferenciaDeNotion(ref: string): string | undefined;
|
|
208
|
+
/** Cuántas pendientes se piden a Notion de una vez: el mismo tope que en Jira (`PENDIENTES_POR_CONSULTA`). */
|
|
209
|
+
export declare const PENDIENTES_DE_NOTION = 100;
|
|
210
|
+
/**
|
|
211
|
+
* El SQL de las pendientes de un data source de Notion (IXCODE-15), con `params` para `?`: NUNCA
|
|
212
|
+
* se interpola un texto de la persona. Los nombres de propiedad vienen del ESQUEMA de Notion (no
|
|
213
|
+
* del cliente), pero son identificadores y no parámetros, así que se citan con la comilla doblada.
|
|
214
|
+
*
|
|
215
|
+
* - Pendiente = estado fuera de los del grupo `complete`, O sin estado (en SQL, `NULL NOT IN (…)`
|
|
216
|
+
* no es cierto, y una tarea recién creada sin estado desaparecería). Sin opciones `complete`,
|
|
217
|
+
* no hay cláusula: `IN ()` no es SQL.
|
|
218
|
+
* - `texto`: sobre el título, `LIKE ? ESCAPE '\\'` (medido: el SQLite de Notion acepta ESCAPE).
|
|
219
|
+
* - `yo`: el id de quien tiene la sesión; la columna de persona es un JSON `["user://…"]` (medido).
|
|
220
|
+
* - `ORDER BY createdTime DESC`: la tabla que expone el MCP no trae la última edición (medido).
|
|
221
|
+
*/
|
|
222
|
+
export declare function sqlDePendientes(esquema: Pick<EsquemaDelProyecto, "proyecto" | "estado" | "titulo" | "asignado">, texto?: string, opciones?: {
|
|
223
|
+
yo?: string;
|
|
224
|
+
}): {
|
|
225
|
+
query: string;
|
|
226
|
+
params: string[];
|
|
227
|
+
};
|
|
228
|
+
/** La categoría de un GRUPO de estado de Notion: `current`/`future` (y lo desconocido), por hacer. */
|
|
229
|
+
export declare function categoriaDeGrupoDeNotion(grupo: string): CategoriaDeTarea;
|
|
230
|
+
/**
|
|
231
|
+
* Las pendientes: categoría distinta de terminada, lo último tocado arriba. Con `mias`, solo las
|
|
232
|
+
* asignadas a quien tiene la sesión del conector: `currentUser()` es una FUNCIÓN de la JQL, no un
|
|
233
|
+
* texto que venga del cliente, así que no hay nada que escapar — el cliente solo dice sí o no.
|
|
234
|
+
*/
|
|
235
|
+
export declare function jqlDePendientes(v: Pick<Vinculo, "proyecto">, texto?: string, opciones?: OpcionesDePendientes): string;
|
|
236
|
+
/** La categoría de estado del gestor (en Jira, `statusCategory.key`). Lo que no se conoce, por hacer. */
|
|
237
|
+
export declare function categoriaDeEstado(clave: string | undefined): CategoriaDeTarea;
|
|
238
|
+
/**
|
|
239
|
+
* La transición que se PROPONE en la tarjeta (la persona puede elegir otra o ninguna). Al empezar,
|
|
240
|
+
* la que lleva a EN CURSO; al cerrar, PROBAR si existe —es el flujo de IXCODE: PROBLEMA → EN CURSO →
|
|
241
|
+
* PROBAR → PREPROD → TERMINADO—, y si no, la primera que termina.
|
|
242
|
+
*/
|
|
243
|
+
export declare function transicionPropuesta(ts: readonly TransicionDelGestor[], para: "empezar" | "cerrar"): TransicionDelGestor | undefined;
|
|
244
|
+
/**
|
|
245
|
+
* Lo que hace falta para escribir el comentario de cierre de una tarea (Task 9, IXCODE-11): lo que
|
|
246
|
+
* `datosDeCierre` (`web/servidor/datosDeCierre.ts`) reúne del disco —ficheros y commits de la
|
|
247
|
+
* sesión, el último veredicto del verificador, y la última respuesta del asistente— más un `plan`
|
|
248
|
+
* que hoy nadie compone (ver el comentario de cabecera de `datosDeCierre.ts`). El FORMATO es puro
|
|
249
|
+
* y vive aquí; una tarea posterior lo manda a Jira con `GestorDeTareasPort.comentar`, tras
|
|
250
|
+
* aprobación de la persona.
|
|
251
|
+
*/
|
|
252
|
+
export interface DatosDeCierre {
|
|
253
|
+
ficheros: {
|
|
254
|
+
ruta: string;
|
|
255
|
+
clase: "nuevo" | "modificado" | "borrado";
|
|
256
|
+
}[];
|
|
257
|
+
commits: string[];
|
|
258
|
+
/** Ausente = el verificador no corrió en la última ronda: NUNCA se pinta «verde» sin esto. */
|
|
259
|
+
veredicto?: {
|
|
260
|
+
verde: boolean;
|
|
261
|
+
errores: number;
|
|
262
|
+
avisos: number;
|
|
263
|
+
};
|
|
264
|
+
plan?: string;
|
|
265
|
+
resumen?: string;
|
|
266
|
+
/**
|
|
267
|
+
* Qué tan de fiar es la lista de `ficheros`, la MISMA distinción que `CambiosDeSesion.via`
|
|
268
|
+
* de `agent/sesiones/sesionGit.ts` (redeclarada aquí: `core/` no importa `agent/`). Ausente
|
|
269
|
+
* mantiene el comportamiento de antes de este campo —la lista tal cual, como si fuera `git`—
|
|
270
|
+
* para no romper a quien ya llamaba a `comentarioDeCierre` sin saberlo.
|
|
271
|
+
*
|
|
272
|
+
* **Por qué esto no es cosmético**: `sin-marca` es una lista VACÍA que NO significa «no
|
|
273
|
+
* tocaste nada» (`sesionGit.ts#desdeLaApertura`), y `desde-apertura` es el árbol de ahora
|
|
274
|
+
* contra la foto de apertura —lo normal para un proyecto FUERA del workspace, donde
|
|
275
|
+
* `commitDeTurno` no commitea nunca— y explícitamente NO es atribución: puede llevar lo que
|
|
276
|
+
* escribió otra sesión o una tarea de fondo mientras esta estaba abierta. Publicar esa lista
|
|
277
|
+
* en Jira como «lo que hizo esta sesión» sin decir cuál de las tres es sería la misma mentira
|
|
278
|
+
* que el comentario de cabecera de `sesionGit.ts` describe para la pestaña Revisión.
|
|
279
|
+
*/
|
|
280
|
+
atribucion?: "git" | "desde-apertura" | "sin-marca";
|
|
281
|
+
/**
|
|
282
|
+
* Lo CRÍTICO de una tarea que se cerró (cortada, sin escribir, un bloqueante visual): va ARRIBA, bajo `## CRITICAL`,
|
|
283
|
+
* para que nadie lo pase por alto en el ticket. Ausente o vacío = nada crítico.
|
|
284
|
+
*/
|
|
285
|
+
criticos?: readonly string[];
|
|
286
|
+
/** Lo que quedó con problemas o detalles (el juez, el verificador): `## Observaciones`, no crítico. */
|
|
287
|
+
observaciones?: readonly string[];
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* El texto del comentario de cierre, en markdown, con lo que el harness sabe de la sesión.
|
|
291
|
+
* Cuatro secciones fijas —«Qué cambió», «Verificación», y «Plan»/«Resumen» solo si hay algo que
|
|
292
|
+
* decir— y una firma, para que quien lea el ticket sepa que lo escribió el harness y no una
|
|
293
|
+
* persona a mano.
|
|
294
|
+
*/
|
|
295
|
+
export declare function comentarioDeCierre(datos: DatosDeCierre): string;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La carta de presentación del proyecto, pegada al turno.
|
|
3
|
+
*
|
|
4
|
+
* **Existe por una medida, y la medida es de hoy** (19-09-2026): en seis turnos reales sobre un
|
|
5
|
+
* proyecto de verdad, cada especialista repetía las MISMAS búsquedas —`grep` ×42 en un solo
|
|
6
|
+
* turno, con `xnTituloHeaderC` ×7 y `xnHeader` ×3— y el orquestador se llevaba entre el 38 % y
|
|
7
|
+
* el 50 % del gasto averiguando. No por delegar mal: porque **nadie hace el descubrimiento una
|
|
8
|
+
* sola vez**. El prompt del orquestador ya PIDE lo contrario («No pidas al siguiente
|
|
9
|
+
* especialista redescubrir esos hechos») y no basta — una instrucción no es una garantía.
|
|
10
|
+
*
|
|
11
|
+
* Así que los hechos baratos se ponen delante en vez de pedirse: el inventario cuesta cientos
|
|
12
|
+
* de tokens donde abrir los `.xne` cuesta decenas de miles (`xone_navegacion`).
|
|
13
|
+
*
|
|
14
|
+
* **Es el patrón de `conAdjuntos` y de `inventarioDelProyecto`**: montar no basta, hay que
|
|
15
|
+
* DECIR lo que hay. Aquí ni siquiera hay nada montado — el índice existe detrás de una tool
|
|
16
|
+
* que el agente tiene que acordarse de llamar, y un turno que no la llama trabaja a ciegas.
|
|
17
|
+
*
|
|
18
|
+
* **Y se calcula al MANDAR el turno, no al abrir la sesión.** Eso no es un detalle de
|
|
19
|
+
* cableado: `xone_navegacion` no cachea a propósito porque «un índice viejo que dice que un
|
|
20
|
+
* campo existe cuando el agente acaba de borrarlo es peor que no tener índice». Congelar esta
|
|
21
|
+
* foto en el prompt de sistema reintroduciría justo eso. Rehacerla por turno cuesta decenas de
|
|
22
|
+
* milisegundos y no puede quedarse vieja dentro del turno que la usa.
|
|
23
|
+
*
|
|
24
|
+
* Puro y en `core/`: quién lee el disco es de `agent/`.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Los hechos que se cuentan. Deliberadamente POCOS y todos baratos de obtener.
|
|
28
|
+
*
|
|
29
|
+
* Lo que NO entra, y es una decisión: los CAMPOS de cada colección. Son el grueso del índice,
|
|
30
|
+
* envejecen dentro del turno —el agente los crea y los borra— y la pregunta «qué campos tiene
|
|
31
|
+
* X» ya la contesta `xone_navegacion campos` cuando de verdad hace falta. Poner aquí una lista
|
|
32
|
+
* de campos sería pagar el peaje en cada turno para acertar en pocos.
|
|
33
|
+
*/
|
|
34
|
+
import type { IndiceDeNavegacion } from "./navegacion.js";
|
|
35
|
+
export interface HechosDelProyecto {
|
|
36
|
+
/** Las colecciones de entrada. Vacío significa NO CONSTA, no «no hay». */
|
|
37
|
+
entrada: readonly string[];
|
|
38
|
+
/** Las colecciones de login, si el proyecto tiene. */
|
|
39
|
+
login: readonly string[];
|
|
40
|
+
/** Las hojas de estilo declaradas. */
|
|
41
|
+
estilos: readonly string[];
|
|
42
|
+
/** Los nombres de todas las colecciones, en el orden en que los da el índice. */
|
|
43
|
+
colecciones: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Del índice a los hechos. PURA: el índice entra ya construido.
|
|
47
|
+
*
|
|
48
|
+
* Separada de quien lo construye por el motivo de siempre —poder probar la traducción sin
|
|
49
|
+
* disco— y porque el índice es la AUTORIDAD: aquí solo se elige qué poquito de él se adelanta.
|
|
50
|
+
* Lo que se elige son las cuatro cosas que un turno cualquiera pregunta primero, y ninguna
|
|
51
|
+
* lleva rutas: solo NOMBRES, así que esto no puede filtrar una ruta de la máquina por el cable.
|
|
52
|
+
*/
|
|
53
|
+
export declare function hechosDeIndice(indice: IndiceDeNavegacion): HechosDelProyecto;
|
|
54
|
+
/**
|
|
55
|
+
* Cuántos nombres de colección caben antes de contar el resto.
|
|
56
|
+
*
|
|
57
|
+
* Un proyecto real medido tiene 98 colecciones y eso son unos cientos de tokens: barato al
|
|
58
|
+
* lado de los 18.000 que cuesta enterarse leyendo. El tope existe para que un proyecto mucho
|
|
59
|
+
* mayor no se coma la ventana, y **lo que no cabe se CUENTA** en vez de recortarse en
|
|
60
|
+
* silencio: una lista truncada sin decirlo se lee como la lista entera, y entonces el agente
|
|
61
|
+
* concluye que una colección no existe.
|
|
62
|
+
*/
|
|
63
|
+
export declare const TOPE_DE_COLECCIONES = 150;
|
|
64
|
+
/**
|
|
65
|
+
* La petición del turno con los hechos del proyecto detrás.
|
|
66
|
+
*
|
|
67
|
+
* Sin hechos —no hay índice, o el proyecto no se pudo leer— devuelve la petición TAL CUAL.
|
|
68
|
+
* Nombrar un inventario que no se tiene sería la mentira con forma de dato de siempre.
|
|
69
|
+
*/
|
|
70
|
+
export declare function conHechosDelProyecto(peticion: string, hechos: HechosDelProyecto | undefined): string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El prefijo virtual, con barra final: `CompositeBackend` la exige para no reconstruir
|
|
3
|
+
* `//nombre` fuera de la raíz montada — la misma trampa medida con `/skills/`.
|
|
4
|
+
*
|
|
5
|
+
* **El nombre ata el harness a UNA skill, y eso se declara en vez de disimularse.** Lo
|
|
6
|
+
* honesto sería un nombre que diga la función y no el protocolo (`/volcados/`), porque
|
|
7
|
+
* mañana otra skill querrá lo mismo; se deja `hotswap` porque hoy hay exactamente un
|
|
8
|
+
* escritor, y un nombre genérico con un solo usuario es una abstracción que nadie ha medido.
|
|
9
|
+
* El día que haya un segundo, el sitio de la decisión es este.
|
|
10
|
+
*/
|
|
11
|
+
export declare const RUTA_HOTSWAP = "/hotswap/";
|
|
12
|
+
/**
|
|
13
|
+
* Dónde cae en DISCO: al LADO de la de artefactos de la sesión, nunca dentro.
|
|
14
|
+
*
|
|
15
|
+
* **Hermana y no subcarpeta**, y eso no es estética: desde que la foto de
|
|
16
|
+
* `anunciarArtefactosDeLaShell` es recursiva, cualquier cosa que cuelgue de `artefactos/` se
|
|
17
|
+
* anuncia — o sea que un `artefactos/hotswap/` volvería a llenar la pestaña de volcados, que
|
|
18
|
+
* es justo lo que esto viene a quitar.
|
|
19
|
+
*
|
|
20
|
+
* Se deriva de la carpeta de artefactos en vez de recibir su propio parámetro, por lo mismo
|
|
21
|
+
* que `carpetaDeDescargas`: esa carpeta ya lleva dentro la única decisión que hace falta
|
|
22
|
+
* —¿hay una sesión con IDENTIDAD?—, que `turnoReal.ts` resuelve pasando
|
|
23
|
+
* `.xonecode/sesiones/<id>/artefactos` en la web y cayendo a `.xonecode/artefactos` en el
|
|
24
|
+
* terminal. Dos parámetros serían dos sitios donde contestar la misma pregunta, y el segundo
|
|
25
|
+
* es justo el que se cae en un cableado de ocho saltos.
|
|
26
|
+
*
|
|
27
|
+
* Y de vivir ahí cuelga gratis lo que si no habría que escribir: `borrarSesion` borra la
|
|
28
|
+
* carpeta `<id>` entera, así que borrar una conversación se lleva también sus volcados.
|
|
29
|
+
*/
|
|
30
|
+
export declare function carpetaDeHotswap(carpetaDeArtefactos: string): string;
|