xonecode 0.38.41 → 0.39.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/web/dist/assets/{EditorDeFichero-B5qtmfKO.js → EditorDeFichero-BeWDctgN.js} +1 -1
- package/apps/web/dist/assets/{index-C6XoIOQg.js → index-B-6cDRAV.js} +20 -20
- package/apps/web/dist/assets/{php-I6JfbNBQ.js → php-D3QdOnb8.js} +1 -1
- package/apps/web/dist/assets/{ruby-DlqXDLOX.js → ruby-DDAcW-Z2.js} +1 -1
- package/apps/web/dist/index.html +1 -1
- package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
- package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
- package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
- package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
- package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
- package/dist/agent/cloudstudio/crearRama.js +16 -0
- package/dist/agent/cloudstudio/crearRama.js.map +1 -0
- package/dist/agent/cloudstudio/descarga.d.ts +44 -0
- package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
- package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
- package/dist/agent/cloudstudio/subida.d.ts +61 -0
- package/dist/agent/cloudstudio/subida.js +7 -1
- package/dist/agent/cloudstudio/subida.js.map +1 -1
- package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
- package/dist/agent/cloudstudio/zip.d.ts +13 -0
- package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
- package/dist/agent/conectores/gestorJira.d.ts +50 -0
- package/dist/agent/conectores/gestorNotion.d.ts +45 -0
- package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
- package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
- package/dist/agent/config/authEnDisco.d.ts +43 -0
- package/dist/agent/config/catalogoModelos.d.ts +79 -0
- package/dist/agent/config/configEnDisco.d.ts +235 -0
- package/dist/agent/config/crearProyecto.d.ts +20 -0
- package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
- package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
- package/dist/agent/config/entorno.d.ts +83 -0
- package/dist/agent/config/fuentesEnRed.d.ts +12 -0
- package/dist/agent/config/gemini.d.ts +5 -0
- package/dist/agent/config/iconosEnRed.d.ts +10 -0
- package/dist/agent/config/identidadEnDisco.d.ts +27 -0
- package/dist/agent/config/modelos.d.ts +77 -0
- package/dist/agent/config/modelosDeMotor.d.ts +52 -0
- package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
- package/dist/agent/config/persona.d.ts +1 -0
- package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
- package/dist/agent/config/settingsEnDisco.d.ts +206 -0
- package/dist/agent/config/versionEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
- package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
- package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
- package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
- package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
- package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
- package/dist/agent/dispositivos/hotswap.d.ts +194 -0
- package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
- package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
- package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
- package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
- package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
- package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
- package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
- package/dist/agent/exportarPdf.d.ts +72 -0
- package/dist/agent/grafo/aprendido.d.ts +28 -0
- package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
- package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
- package/dist/agent/grafo/atributosXone.d.ts +31 -0
- package/dist/agent/grafo/buscarIcono.d.ts +32 -0
- package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
- package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
- package/dist/agent/grafo/compararCapturas.d.ts +22 -0
- package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
- package/dist/agent/grafo/criticaVisual.d.ts +60 -0
- package/dist/agent/grafo/describirImagen.d.ts +79 -0
- package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
- package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
- package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
- package/dist/agent/grafo/excluirTools.d.ts +37 -0
- package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
- package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
- package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
- package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
- package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
- package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
- package/dist/agent/grafo/navegacionXone.d.ts +60 -0
- package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
- package/dist/agent/grafo/perfiles.d.ts +225 -0
- package/dist/agent/grafo/proyecto.d.ts +450 -0
- package/dist/agent/grafo/skills.d.ts +181 -0
- package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
- package/dist/agent/grafo/unirSecciones.d.ts +20 -0
- package/dist/agent/grafo/validacionXone.d.ts +35 -0
- package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
- package/dist/agent/grafo/xoneAgent.d.ts +166 -0
- package/dist/agent/motores/motoresLocales.d.ts +87 -0
- package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
- package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
- package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
- package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
- package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
- package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
- package/dist/agent/motores/trueforge/medidaAutomatica.js +4 -2
- package/dist/agent/motores/trueforge/medidaAutomatica.js.map +1 -1
- package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
- package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
- package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
- package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
- package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
- package/dist/agent/motores/trueforge/notas.d.ts +48 -0
- package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
- package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
- package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
- package/dist/agent/motores/trueforge/sesionTrueforge.js +32 -15
- package/dist/agent/motores/trueforge/sesionTrueforge.js.map +1 -1
- package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
- package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
- package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
- package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
- package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
- package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
- package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
- package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
- package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
- package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
- package/dist/agent/planesEnDisco.d.ts +18 -0
- package/dist/agent/publicarPlan.d.ts +20 -0
- package/dist/agent/raizDelPaquete.d.ts +9 -0
- package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
- package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
- package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
- package/dist/agent/renombrarSobre.d.ts +14 -0
- package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
- package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
- package/dist/agent/sesiones/checkpointer.d.ts +146 -0
- package/dist/agent/sesiones/git.d.ts +66 -0
- package/dist/agent/sesiones/gitSync.d.ts +264 -0
- package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
- package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
- package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
- package/dist/agent/sesiones/sesionGit.d.ts +155 -0
- package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
- package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
- package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
- package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
- package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
- package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
- package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
- package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
- package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
- package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
- package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
- package/dist/agent/tareas/aumentador.d.ts +99 -0
- package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
- package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
- package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
- package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
- package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
- package/dist/agent/turno/depuracion.d.ts +1 -0
- package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
- package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
- package/dist/agent/turno/guionizado.d.ts +18 -0
- package/dist/agent/turno/informeDeTraza.d.ts +220 -0
- package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
- package/dist/agent/turno/instantanea.d.ts +16 -0
- package/dist/agent/turno/interrupts.d.ts +54 -0
- package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
- package/dist/agent/turno/mensajes.d.ts +23 -0
- package/dist/agent/turno/normalizar.d.ts +15 -0
- package/dist/agent/turno/puente.d.ts +196 -0
- package/dist/agent/turno/registroDeFallos.d.ts +39 -0
- package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
- package/dist/agent/turno/resumenDeTool.d.ts +33 -0
- package/dist/agent/turno/rubrica.d.ts +35 -0
- package/dist/agent/turno/sesionReal.d.ts +89 -0
- package/dist/agent/turno/textoDeTool.d.ts +19 -0
- package/dist/agent/turno/turnoReal.d.ts +210 -0
- package/dist/agent/turno/verificacion.d.ts +85 -0
- package/dist/agent/turno/verificador.d.ts +66 -0
- package/dist/bin.d.ts +2 -0
- package/dist/cli/acuseDeModelo.d.ts +18 -0
- package/dist/cli/aprobar.d.ts +162 -0
- package/dist/cli/config.d.ts +17 -0
- package/dist/cli/consola.d.ts +473 -0
- package/dist/cli/describe.d.ts +7 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/fuentesDeDisco.d.ts +25 -0
- package/dist/cli/main.d.ts +291 -0
- package/dist/cli/markdown.d.ts +126 -0
- package/dist/cli/panel.d.ts +38 -0
- package/dist/cli/podar.d.ts +38 -0
- package/dist/cli/run.d.ts +30 -0
- package/dist/cli/spinner.d.ts +37 -0
- package/dist/cli/stdio.d.ts +94 -0
- package/dist/cli/tema.d.ts +68 -0
- package/dist/cli/tokens.d.ts +16 -0
- package/dist/cli/traza.d.ts +19 -0
- package/dist/cli/tui/app.d.ts +23 -0
- package/dist/cli/tui/aprobarTui.d.ts +46 -0
- package/dist/cli/tui/barra.d.ts +43 -0
- package/dist/cli/tui/correrTui.d.ts +119 -0
- package/dist/cli/tui/entrada.d.ts +14 -0
- package/dist/cli/tui/filas.d.ts +13 -0
- package/dist/cli/tui/logo.d.ts +20 -0
- package/dist/cli/tui/pielTui.d.ts +15 -0
- package/dist/cli/tui/raton.d.ts +68 -0
- package/dist/cli/tui/sidebar.d.ts +63 -0
- package/dist/cli/tui/store.d.ts +102 -0
- package/dist/cli/tui/tarjeta.d.ts +8 -0
- package/dist/cli/tui/temaInk.d.ts +67 -0
- package/dist/cli/tui/transcript.d.ts +32 -0
- package/dist/cli/verify.d.ts +9 -0
- package/dist/cli/wizardInicial.d.ts +59 -0
- package/dist/core/actos.d.ts +437 -0
- package/dist/core/adjuntos.d.ts +77 -0
- package/dist/core/agentes.d.ts +353 -0
- package/dist/core/analisisDeSesion.d.ts +63 -0
- package/dist/core/aprendido.d.ts +41 -0
- package/dist/core/artefactos.d.ts +74 -0
- package/dist/core/atributosXone.d.ts +53 -0
- package/dist/core/bitacora.d.ts +21 -0
- package/dist/core/cloudstudio.d.ts +168 -0
- package/dist/core/codificacion.d.ts +81 -0
- package/dist/core/comandoExterno.d.ts +49 -0
- package/dist/core/compararCapturas.d.ts +136 -0
- package/dist/core/conectores.d.ts +296 -0
- package/dist/core/config.d.ts +148 -0
- package/dist/core/contextos.d.ts +54 -0
- package/dist/core/convertirAP.d.ts +56 -0
- package/dist/core/copiaDeAvd.d.ts +44 -0
- package/dist/core/cssBienFormado.d.ts +22 -0
- package/dist/core/deps.d.ts +28 -0
- package/dist/core/descargas.d.ts +61 -0
- package/dist/core/descripcionDePantalla.d.ts +121 -0
- package/dist/core/descriptoresDeApp.d.ts +108 -0
- package/dist/core/diagnosticoDeNode.d.ts +51 -0
- package/dist/core/diff.d.ts +26 -0
- package/dist/core/diffDeColecciones.d.ts +54 -0
- package/dist/core/disenoVinculado.d.ts +17 -0
- package/dist/core/dispositivoDeSesion.d.ts +22 -0
- package/dist/core/dispositivoElegido.d.ts +17 -0
- package/dist/core/dispositivos.d.ts +469 -0
- package/dist/core/entrega.d.ts +341 -0
- package/dist/core/entrelazar.d.ts +48 -0
- package/dist/core/esfuerzo.d.ts +120 -0
- package/dist/core/esqueleto.d.ts +38 -0
- package/dist/core/estiloMedido.d.ts +70 -0
- package/dist/core/estilos.d.ts +76 -0
- package/dist/core/events.d.ts +218 -0
- package/dist/core/exportacion.d.ts +88 -0
- package/dist/core/fallos.d.ts +79 -0
- package/dist/core/fondosSvg.d.ts +115 -0
- package/dist/core/fotoDeColecciones.d.ts +45 -0
- package/dist/core/fuentes.d.ts +96 -0
- package/dist/core/geometriaDePantalla.d.ts +171 -0
- package/dist/core/gestorDeTareas.d.ts +295 -0
- package/dist/core/hechosDelProyecto.d.ts +70 -0
- package/dist/core/hotswap.d.ts +30 -0
- package/dist/core/iconos.d.ts +86 -0
- package/dist/core/identidadDeProveedor.d.ts +20 -0
- package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
- package/dist/core/imagenesDeDocumento.d.ts +40 -0
- package/dist/core/jsParaRhino.d.ts +3 -0
- package/dist/core/juezDelTurno.d.ts +95 -0
- package/dist/core/logDeDispositivo.d.ts +67 -0
- package/dist/core/memoria.d.ts +18 -0
- package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
- package/dist/core/modelos.d.ts +198 -0
- package/dist/core/modoDeEscritura.d.ts +155 -0
- package/dist/core/motor.d.ts +43 -0
- package/dist/core/motoresLocales.d.ts +113 -0
- package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
- package/dist/core/navegacion.d.ts +172 -0
- package/dist/core/notify.d.ts +77 -0
- package/dist/core/nucleoXone.d.ts +28 -0
- package/dist/core/panorama.d.ts +68 -0
- package/dist/core/paqueteDeSoporte.d.ts +100 -0
- package/dist/core/planDeSubida.d.ts +56 -0
- package/dist/core/planes.d.ts +53 -0
- package/dist/core/podaDeCheckpoint.d.ts +75 -0
- package/dist/core/ports.d.ts +1034 -0
- package/dist/core/puedeLanzarse.d.ts +181 -0
- package/dist/core/puertosDeAvd.d.ts +59 -0
- package/dist/core/recargaEnCaliente.d.ts +52 -0
- package/dist/core/referenciasDeImagen.d.ts +36 -0
- package/dist/core/remoto.d.ts +76 -0
- package/dist/core/repartoDeEncargo.d.ts +80 -0
- package/dist/core/rubrica.d.ts +78 -0
- package/dist/core/rutaVirtual.d.ts +29 -0
- package/dist/core/selectorDeCarpeta.d.ts +59 -0
- package/dist/core/serieDeEscrituras.d.ts +58 -0
- package/dist/core/settings.d.ts +421 -0
- package/dist/core/shellDeAgente.d.ts +177 -0
- package/dist/core/skills.d.ts +129 -0
- package/dist/core/stitch.d.ts +114 -0
- package/dist/core/tareas.d.ts +412 -0
- package/dist/core/tareasDelPlan.d.ts +123 -0
- package/dist/core/tareasEnElGestor.d.ts +117 -0
- package/dist/core/textos.d.ts +8 -0
- package/dist/core/topeAgotado.d.ts +55 -0
- package/dist/core/traerDeLaMaquina.d.ts +33 -0
- package/dist/core/trazaDeErrores.d.ts +83 -0
- package/dist/core/tunel.d.ts +45 -0
- package/dist/core/turno.d.ts +154 -0
- package/dist/core/validacionDeEscritura.d.ts +95 -0
- package/dist/core/verificacionDeSubida.d.ts +14 -0
- package/dist/core/version.d.ts +35 -0
- package/dist/core/xmlBienFormado.d.ts +23 -0
- package/dist/core/zipDeAdjunto.d.ts +28 -0
- package/dist/core/zipDeSkill.d.ts +74 -0
- package/dist/lib/tareaAutonoma.d.ts +36 -0
- package/dist/lib/tareaAutonoma.js +259 -0
- package/dist/lib/tareaAutonoma.js.map +1 -0
- package/dist/lib.d.ts +31 -0
- package/dist/lib.js +28 -0
- package/dist/lib.js.map +1 -0
- package/dist/vendor/hitl.d.ts +69 -0
- package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
- package/dist/vendor/sqliteSaver.d.ts +22 -0
- package/dist/vendor/tokenTracking.d.ts +22 -0
- package/dist/web/servidor/arranque.d.ts +1372 -0
- package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
- package/dist/web/servidor/consolaWeb.d.ts +142 -0
- package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
- package/dist/web/servidor/datosDeCierre.d.ts +4 -0
- package/dist/web/servidor/interrupcion.d.ts +39 -0
- package/dist/web/servidor/pielWeb.d.ts +32 -0
- package/dist/web/servidor/puenteRemoto.d.ts +80 -0
- package/dist/web/servidor/servidor.d.ts +53 -0
- package/dist/web/servidor/sesiones.d.ts +342 -0
- package/dist/web/servidor/soporte.d.ts +65 -0
- package/dist/web/servidor/soporte.js +2 -0
- package/dist/web/servidor/soporte.js.map +1 -1
- package/dist/web/servidor/transporte.d.ts +2751 -0
- package/dist/web/servidor/vestibulo.d.ts +952 -0
- package/dist/web/servidor/visorOpenui.d.ts +33 -0
- package/package.json +9 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El mime de un adjunto, por su EXTENSIÓN.
|
|
3
|
+
*
|
|
4
|
+
* Es literalmente la MISMA tabla que la de los artefactos y se reexporta en vez de
|
|
5
|
+
* copiarse: dos tablas de extensiones son dos tablas que divergen, y el criterio ya está
|
|
6
|
+
* argumentado ahí (por extensión y no olfateando los bytes, porque un PNG lleva ceros en su
|
|
7
|
+
* cabecera; y lo que no está en la tabla es `undefined`, que es «no lo sé» y no «es
|
|
8
|
+
* binario»).
|
|
9
|
+
*/
|
|
10
|
+
export { mimeDeArtefacto as mimeDeAdjunto } from "./artefactos.js";
|
|
11
|
+
/**
|
|
12
|
+
* Dónde caen en DISCO los adjuntos que una persona anexa en el CHAT de una sesión (IXCODE-7):
|
|
13
|
+
* `.xonecode/sesiones/<id>/adjuntos/`, HERMANA de `artefactos/`. A diferencia de los de una tarea
|
|
14
|
+
* (`~/.xonecode/tareas/<id>/adjuntos/`), una sesión ya tiene carpeta en el proyecto, y `.xonecode`
|
|
15
|
+
* no entra en git ni sube a CloudStudio. `segmentoSeguro`: el id llega del cliente.
|
|
16
|
+
*/
|
|
17
|
+
export declare function carpetaDeAdjuntosDeSesion(raiz: string, id: string): string;
|
|
18
|
+
/** El prefijo virtual. Con barra final: `CompositeBackend` la exige para no reconstruir
|
|
19
|
+
* `//nombre` fuera de la raíz montada — la misma trampa medida con `/skills/`. */
|
|
20
|
+
export declare const RUTA_ADJUNTOS = "/adjuntos/";
|
|
21
|
+
/**
|
|
22
|
+
* El nombre de la tool que mete un adjunto en el PROYECTO (`agent/grafo/incorporarAdjunto.ts`).
|
|
23
|
+
*
|
|
24
|
+
* Vive aquí, en un módulo neutral, y no junto a la tool: la aprobación va por NOMBRE de tool en
|
|
25
|
+
* los dos motores, así que lo necesitan `perfiles.ts` (el HITL), `interrupts.ts` (la tarjeta) y
|
|
26
|
+
* las capacidades de TrueForge — y la tool importa `perfiles.ts` para reaplicar sus permisos.
|
|
27
|
+
* Declarada al lado de la tool, esas importaciones cerrarían un ciclo de VALOR
|
|
28
|
+
* (`src/ciclos.test.ts`). Y un literal repetido en cuatro sitios es cuatro sitios donde divergir.
|
|
29
|
+
*/
|
|
30
|
+
export declare const NOMBRE_INCORPORAR_ADJUNTO = "incorporar_adjunto";
|
|
31
|
+
export declare function nombreDeAdjuntoAceptable(nombre: string): boolean;
|
|
32
|
+
/** Lo que se sabe de un adjunto para poder nombrarlo. La forma de `AdjuntoDeTarea`
|
|
33
|
+
* (`core/tareas.ts`) reducida a lo que este texto usa. */
|
|
34
|
+
export interface AdjuntoNombrable {
|
|
35
|
+
nombre: string;
|
|
36
|
+
bytes: number;
|
|
37
|
+
mime?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Lo que el harness DESCOMPRIMIÓ de un `.zip` al guardarlo (`core/zipDeAdjunto.ts`), con el nombre
|
|
40
|
+
* relativo a la carpeta de adjuntos (`x/screen.png`). Ausente si no es un zip o no se extrajo.
|
|
41
|
+
*/
|
|
42
|
+
contenido?: readonly AdjuntoNombrable[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* La petición del turno con el inventario de los adjuntos detrás.
|
|
46
|
+
*
|
|
47
|
+
* **Existe porque montar la carpeta no basta.** El agente no explora `/adjuntos/` por su
|
|
48
|
+
* cuenta: es una raíz virtual que ninguna instrucción suya nombra, así que un encargo que no
|
|
49
|
+
* la mencione deja los ficheros ahí sin que nadie los abra. Y no se puede confiar en que lo
|
|
50
|
+
* diga el ENCARGO: el encargo lo redacta el aumentador —que puede haber fallado, y entonces
|
|
51
|
+
* es el texto crudo de la persona— o lo edita quien crea la tarea, y las dos cosas pueden
|
|
52
|
+
* borrar la única mención. Así que se añade al MANDAR el turno, que es el único momento en
|
|
53
|
+
* que se sabe lo que hay en disco. Es el mismo reparto que `peticionDeFeedback`
|
|
54
|
+
* (`web/servidor/corredorDeTareas.ts`): el texto de la persona, y detrás lo que el código
|
|
55
|
+
* sabe.
|
|
56
|
+
*
|
|
57
|
+
* **Sin adjuntos no toca nada.** Nombrar una carpeta que no se ha montado sería mandarle al
|
|
58
|
+
* agente a un sitio que no existe — el «control sin dato detrás» de siempre, aquí en forma
|
|
59
|
+
* de prompt.
|
|
60
|
+
*
|
|
61
|
+
* **Y dice la limitación de las imágenes** (§2 del diseño: que el agente VEA una imagen es
|
|
62
|
+
* multimodal y es otra tanda). Solo si hay alguna: el aviso pegado a un `.md` sería ruido.
|
|
63
|
+
* Prometerle que «mira» la captura y que la lea como bytes es la peor clase de mentira aquí,
|
|
64
|
+
* porque quien se la cree es el modelo y contestará que la ha mirado.
|
|
65
|
+
*
|
|
66
|
+
* **`de` distingue de DÓNDE viene el adjunto** (IXCODE-7), porque el resto de la frase cambia
|
|
67
|
+
* con el origen: uno de TAREA lo anexó quien la creó, antes de que el agente exista; uno de
|
|
68
|
+
* MENSAJE lo anexa la persona EN el chat, a mitad de conversación, y además dice cómo llevarlo
|
|
69
|
+
* al proyecto (`incorporar_adjunto`, que pasa por la aprobación) — sin esa línea, el orquestador
|
|
70
|
+
* no tiene forma de saber que delegar «pon este icono en el menú» necesita nombrar el adjunto Y
|
|
71
|
+
* el destino. Y dice a QUIÉN: la tool solo la montan los especialistas de motor propio (un hijo
|
|
72
|
+
* externo corre en otro proceso, sin tools nuestras ni `/adjuntos/`), así que «quien escribe la
|
|
73
|
+
* tiene» era falso para un `developer-xone` de Claude Code. Omisión `"tarea"`: el llamador de
|
|
74
|
+
* las tareas (`corredorDeTareas.ts`, con dos argumentos) no cambia de texto; el del chat
|
|
75
|
+
* (`vestibulo.ts`) pasa `"mensaje"`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function conAdjuntos(peticion: string, adjuntos: readonly AdjuntoNombrable[], de?: "tarea" | "mensaje"): string;
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los subagentes como DATOS: qué es uno, cómo se lee de un fichero y cómo se compone su
|
|
3
|
+
* prompt. TypeScript puro — leer el disco es cosa de `agent/subagentes/agentesEnDisco.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Hasta ahora los cuatro especialistas (`agent/grafo/perfiles.ts`) vivían a fuego en un
|
|
6
|
+
* `Record`, y su prompt lo componía `xoneAgent.ts#promptDe` con un `nombre === "planner"`
|
|
7
|
+
* dentro. Eso ya estaba señalado como provisional ahí mismo («los prompts pasan a ficheros
|
|
8
|
+
* `.md` en la fase 9»); esto es esa fase, y con ella los cuatro dejan de ser un caso
|
|
9
|
+
* especial: son los mismos ficheros que puede escribir el usuario, sembrados la primera vez.
|
|
10
|
+
*
|
|
11
|
+
* **Lo que NO sale del fichero, y es deliberado.** Las reglas de XOne se anteponen SIEMPRE,
|
|
12
|
+
* desde código, a todo subagente venga de donde venga (`REGLAS_XONE`). Un subagente que no
|
|
13
|
+
* sepa que XOne ignora en silencio lo desconocido escribirá un atributo inventado y no dará
|
|
14
|
+
* error — dará un bug mudo, que es la razón de ser de este producto. Poder borrarlas
|
|
15
|
+
* editando un `.md` convertiría el invariante en una preferencia; es el mismo principio por
|
|
16
|
+
* el que los avisos de honestidad son código y no prompt (`core/bitacora.ts`).
|
|
17
|
+
*/
|
|
18
|
+
import { type Esfuerzo, type Pensamiento } from "./esfuerzo.js";
|
|
19
|
+
/** De qué está hecho un subagente. Los tres van al MISMO sitio: la lista de deepagents. */
|
|
20
|
+
export type Motor = "modelo" | "claude-code" | "codex" | "opencode";
|
|
21
|
+
export declare const MOTORES: readonly Motor[];
|
|
22
|
+
export interface Agente {
|
|
23
|
+
/**
|
|
24
|
+
* Sale del NOMBRE DEL FICHERO, no del frontmatter. Dos razones: la unicidad la garantiza
|
|
25
|
+
* el sistema de ficheros en vez de una comprobación nuestra que hay que acordarse de
|
|
26
|
+
* hacer, y renombrar el agente es renombrar el fichero — sin dos sitios que puedan
|
|
27
|
+
* discrepar sobre cómo se llama.
|
|
28
|
+
*/
|
|
29
|
+
nombre: string;
|
|
30
|
+
/**
|
|
31
|
+
* **Es un prompt, no una etiqueta.** Es el texto que el orquestador lee para decidir
|
|
32
|
+
* cuándo delegar en este subagente: una descripción vaga hace que no se use nunca, o que
|
|
33
|
+
* se use para todo. Obligatoria y no vacía por eso.
|
|
34
|
+
*/
|
|
35
|
+
descripcion: string;
|
|
36
|
+
motor: Motor;
|
|
37
|
+
/**
|
|
38
|
+
* Qué modelo usa este subagente. Ausente = el que le tocaría por omisión, y lo que eso
|
|
39
|
+
* significa depende del MOTOR — que es justo por lo que este campo vale para los tres:
|
|
40
|
+
* - `modelo`: `proveedor/modelo` de los nuestros; ausente, el del papel `trabajo`.
|
|
41
|
+
* - `claude-code`: un alias del producto (`opus`, `sonnet`, `haiku`, `fable`) o un id
|
|
42
|
+
* entero; ausente, el que Claude Code use por su cuenta.
|
|
43
|
+
* - `codex`: un id de los que su propio `model/list` devuelve; ausente, el suyo.
|
|
44
|
+
*
|
|
45
|
+
* Este campo se RECHAZABA con los dos motores externos, con el argumento de que ahí el
|
|
46
|
+
* modelo lo elige el agente. Era falso y está medido: el SDK de Claude Code acepta
|
|
47
|
+
* `options.model` —y documenta esos alias— y el `ThreadStartParams` de Codex acepta
|
|
48
|
+
* `model`. Rechazarlo dejaba fuera lo que el usuario quería decidir de verdad: con qué
|
|
49
|
+
* modelo corre cada especialista.
|
|
50
|
+
*/
|
|
51
|
+
modelo?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Cuánto tiene que PENSAR su modelo antes de contestar.
|
|
54
|
+
*
|
|
55
|
+
* Es un ajuste DEL modelo y por eso va pegado a él: qué niveles hay depende de cuál esté
|
|
56
|
+
* puesto, y la mitad de los que este harness ofrece no admiten ninguno (`core/esfuerzo.ts`
|
|
57
|
+
* tiene la tabla y lo medido). Ausente = no se manda el parámetro, que es lo que hacía
|
|
58
|
+
* este harness entero hasta ahora.
|
|
59
|
+
*
|
|
60
|
+
* **Tiene efecto con `motor: "modelo"` y con `claude-code`**, que lo recibe como `effort` de su SDK
|
|
61
|
+
* (`PeticionExterna.esfuerzo`; medido en Maset, el desarrollador en Opus pasaba casi todo su tiempo
|
|
62
|
+
* generando). En Codex y OpenCode el modelo lo construye el hijo con su configuración y un campo
|
|
63
|
+
* nuestro no llega: declararlo ahí no rompe nada, pero no hace nada, y la ventana de Ajustes lo dice.
|
|
64
|
+
*
|
|
65
|
+
* Se valida al APLICARLO y no al leerlo: un nivel que el modelo no admite se omite
|
|
66
|
+
* (`esfuerzoAplicable`), porque rechazar el `.md` haría desaparecer un subagente que
|
|
67
|
+
* funciona por un campo que solo afinaba su coste.
|
|
68
|
+
*/
|
|
69
|
+
esfuerzo?: Esfuerzo;
|
|
70
|
+
/**
|
|
71
|
+
* Si su modelo PIENSA antes de contestar: `apagado` o `activo`, aparte del esfuerzo (que es cuánto). Ausente
|
|
72
|
+
* decide la omisión de la familia del proveedor y la clase de trabajo (`pensamientoPorOmision`); solo se
|
|
73
|
+
* aplica donde el modelo lo admite (`admiteApagarElPensamiento`), y en otro caso se ignora sin error, como el
|
|
74
|
+
* esfuerzo. Un valor que no es exactamente uno de los dos se descarta.
|
|
75
|
+
*/
|
|
76
|
+
pensamiento?: Pensamiento;
|
|
77
|
+
/** Sin escribir nada. Decide `permisosDe` y si se le monta el HITL. */
|
|
78
|
+
soloLectura: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Las carpetas del PROYECTO donde este agente SÍ puede escribir, aun siendo de solo
|
|
81
|
+
* lectura. Rutas virtuales (`/doc/`), separadas por comas.
|
|
82
|
+
*
|
|
83
|
+
* Nace del que documenta: su entregable es un manual en `doc/`, y sin esto la única forma
|
|
84
|
+
* de dárselo era quitarle el `soloLectura` — o sea, abrirle el código entero para que
|
|
85
|
+
* pudiera escribir un `.md`. Esto separa las dos cosas: puede escribir DONDE se le diga y
|
|
86
|
+
* en ningún otro sitio.
|
|
87
|
+
*
|
|
88
|
+
* **No afloja lo denegado a todo el mundo**: `permisosDe` pone estas filas DETRÁS de
|
|
89
|
+
* `DENEGADO_SIEMPRE`, y con *first-match-wins* eso mantiene ganando a `/.env`, `/.git` y
|
|
90
|
+
* `/.xonecode`. Un `.md` puede cambiar el prompt de un agente; no puede concederle leer
|
|
91
|
+
* la clave del cliente.
|
|
92
|
+
*
|
|
93
|
+
* Solo tiene efecto con `soloLectura: true`: quien ya escribe, escribe en todas partes.
|
|
94
|
+
*/
|
|
95
|
+
escribeEn?: string[];
|
|
96
|
+
/**
|
|
97
|
+
* Si puede EJECUTAR comandos en la máquina (la tool `execute` de deepagents).
|
|
98
|
+
*
|
|
99
|
+
* **Ausente es que no**, y es lo único que puede significar: es una capacidad, y una
|
|
100
|
+
* capacidad que se concede por omisión es la que nadie decidió conceder. Cierto solo con
|
|
101
|
+
* exactamente «true», como `soloLectura` — la trampa del `"false"` de CloudStudio, que
|
|
102
|
+
* aquí concedería la máquina entera.
|
|
103
|
+
*
|
|
104
|
+
* **Lo que concede no es «correr un comando», es la máquina.** Una shell no pasa por
|
|
105
|
+
* `permisosDe` ni por el `virtualMode`: lee `/.env`, escribe el proyecto sin aprobación y
|
|
106
|
+
* sale de la raíz. La propia deepagents se niega a fingir lo contrario y LANZA si le pasas
|
|
107
|
+
* `permissions` junto a un backend ejecutable. Por eso se declara aquí, en el fichero, en
|
|
108
|
+
* vez de deducirse de nada: lo que no se declara, no se concede.
|
|
109
|
+
*
|
|
110
|
+
* **Tiene efecto con `motor: "modelo"` y con `claude-code`** (`admiteEjecucion`). En Claude
|
|
111
|
+
* Code la shell se abre ESTRECHA: solo los scripts de sus skills, por su nombre y con
|
|
112
|
+
* argumentos que la shell no reinterpreta (`core/comandoExterno.ts`), con el entorno de
|
|
113
|
+
* nuestra shell. En OpenCode (la tool retirada) y en Codex (sandbox `read-only`) sigue
|
|
114
|
+
* cerrada: declararlo ahí no rompe nada, pero no hace nada, y la ventana de Ajustes lo dice.
|
|
115
|
+
*/
|
|
116
|
+
ejecucion?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* A qué otros especialistas puede LLAMAR él mismo, por nombre (`llama: [device-controller]`). Solo lo honra
|
|
119
|
+
* TrueForge y solo con el interruptor del bucle del desarrollador encendido: es lo que deja que quien escribe
|
|
120
|
+
* pruebe su trabajo sin pasar por el orquestador. Un nombre que no está en esta lista NO se le concede.
|
|
121
|
+
*/
|
|
122
|
+
llama?: string[];
|
|
123
|
+
/**
|
|
124
|
+
* De qué otros especialistas ESPERA el fin, por nombre (`espera: [designer-xone]`), cuando el orquestador los
|
|
125
|
+
* lanza a la vez: no hace ninguna llamada al modelo mientras haya un hilo vivo de esos. Solo lo honra TrueForge.
|
|
126
|
+
* Existe porque dos escritores en paralelo con una dependencia entre ellos (los recursos gráficos del uno, el
|
|
127
|
+
* `.xne` que los usa del otro) dejaban recursos sin usar.
|
|
128
|
+
*/
|
|
129
|
+
espera?: string[];
|
|
130
|
+
/** Las skills del catálogo que se le cargan, por nombre. */
|
|
131
|
+
skills: string[];
|
|
132
|
+
/** El cuerpo del `.md`: sus instrucciones. Puede estar vacío. */
|
|
133
|
+
instrucciones: string;
|
|
134
|
+
/** De dónde salió, para poder decirlo en la interfaz y al resolver colisiones. */
|
|
135
|
+
origen: "proyecto" | "global" | "semilla";
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Las reglas del dominio, iguales para todos y NO editables desde el fichero.
|
|
139
|
+
*
|
|
140
|
+
* Están aquí y no repetidas en cada `.md` sembrado por lo mismo que `marca.css` tiene los
|
|
141
|
+
* colores en un solo sitio: cuatro copias de esto es como se acaba con una que se queda
|
|
142
|
+
* vieja. Y un agente que el usuario escriba mañana las hereda sin tener que copiarlas.
|
|
143
|
+
*/
|
|
144
|
+
/**
|
|
145
|
+
* Dónde está cada cosa en un proyecto XOne.
|
|
146
|
+
*
|
|
147
|
+
* **No son reglas, es un mapa**, y por eso va aparte de `REGLAS_XONE`: aquello dice lo que no
|
|
148
|
+
* se puede hacer y esto dice dónde mirar. Existe porque el gasto medido de este harness no son
|
|
149
|
+
* los ficheros que se leen —181 líneas de XML en una medida real, del orden de 2-3k tokens de
|
|
150
|
+
* 39k— sino **los viajes que hacen falta para averiguar dónde mirar**: cada uno reenvía el
|
|
151
|
+
* prompt entero y cuesta miles de tokens. Cuatro líneas que hacen certero el primer `grep`
|
|
152
|
+
* salen baratas comparadas con una lectura exploratoria de más.
|
|
153
|
+
*
|
|
154
|
+
* Lo ve el orquestador **y** cada especialista: desde que el orquestador contesta lo que puede
|
|
155
|
+
* en vez de delegarlo todo, él es quien más lo necesita, y dejarlo solo en `promptDeAgente`
|
|
156
|
+
* habría sido escribirlo para quien ya no hace ese trabajo.
|
|
157
|
+
*
|
|
158
|
+
* Comprobado contra el esqueleto y contra un proyecto real antes de escribirlo: `app.xml` lleva
|
|
159
|
+
* `<entry-point>`, `<login-coll>`, `<style url>` e `<include file>`, y las colecciones son
|
|
160
|
+
* `<coll>` en `.xne`, una por fichero salvo `mappings.xne`, que agrupa varias. Un mapa
|
|
161
|
+
* inventado sería exactamente el bug mudo que este producto existe para evitar.
|
|
162
|
+
*/
|
|
163
|
+
export declare const MAPA_DEL_PROYECTO: string;
|
|
164
|
+
export declare const REGLAS_XONE: string;
|
|
165
|
+
/** ¿Recibe el núcleo de trabajo? Quien escribe el proyecto entero, o quien conduce el aparato. Regla de DATO. */
|
|
166
|
+
export declare function recibeNucleoDeTrabajo(a: Pick<Agente, "soloLectura" | "ejecucion" | "escribeEn">): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* ¿Recibe `marcar_criterios_del_plan`? Quien TRABAJA las tareas de un plan: el mismo reparto que el
|
|
169
|
+
* núcleo de trabajo —de los de serie, `developer-xone`, `designer-xone` y `device-controller`—.
|
|
170
|
+
*
|
|
171
|
+
* Solo la llevaba quien ejecuta, y medido en una sesión real el plan no se movió en todo el turno: el
|
|
172
|
+
* desarrollador llamó tres veces al conductor sin nombrarle el plan, así que el conductor no marcó
|
|
173
|
+
* nada, y el propio desarrollador reescribió el `TASKS.md` entero al acabar. Quien cierra una tarea
|
|
174
|
+
* es quien sabe que la cerró. No abre nada: los dos que la ganan ya escriben en `/planes/`
|
|
175
|
+
* (`permisosDe`), y la tool solo cambia `- [ ]` por `- [x]`. Vive en `core/` porque la usan los DOS motores.
|
|
176
|
+
*/
|
|
177
|
+
export declare function recibeMarcarCriterios(a: Pick<Agente, "soloLectura" | "ejecucion" | "escribeEn">): boolean;
|
|
178
|
+
/**
|
|
179
|
+
* El prompt completo de un subagente: sus reglas, su descripción y sus instrucciones.
|
|
180
|
+
*
|
|
181
|
+
* Las reglas van PRIMERO y las instrucciones al final, en ese orden a propósito: lo último
|
|
182
|
+
* que lee el modelo es lo que más pesa, y lo que el usuario escribió es lo específico de la
|
|
183
|
+
* tarea. Las reglas no se pueden perder por ir arriba — son cinco líneas, no un preámbulo
|
|
184
|
+
* largo del que el modelo se despiste.
|
|
185
|
+
*/
|
|
186
|
+
export declare function promptDeAgente(agente: Agente, skills?: EstadoDeSkills): string;
|
|
187
|
+
/**
|
|
188
|
+
* Las skills de un agente MÁS las de los agentes a los que llama (`llama`). Para un hijo de Claude Code con ejecución:
|
|
189
|
+
* corre en otro proceso y no puede llamar a nuestros especialistas, así que lo que haría el de pruebas —desplegar,
|
|
190
|
+
* recargar, capturar— lo hace él, con las skills y los scripts de ese agente (medido en una tarea de Maset: el
|
|
191
|
+
* desarrollador en Claude Code no tenía ningún script y no pudo probar nada). Sin repetidos, las suyas primero.
|
|
192
|
+
*/
|
|
193
|
+
export declare function skillsConLasDeQuienLlama(agente: Pick<Agente, "skills" | "llama">, todos: readonly Pick<Agente, "nombre" | "skills">[]): string[];
|
|
194
|
+
/**
|
|
195
|
+
* Lo que se le dice a un hijo de Claude Code CON ejecución que tenía a quién llamar: no puede, y lo hace él, con su visión
|
|
196
|
+
* para comparar con la maqueta (al abrir una imagen con `Read`, Claude la ve). `carpeta` es la de artefactos de la
|
|
197
|
+
* sesión, en disco: ahí guardan sus capturas los scripts y ahí está la maqueta traída de Stitch.
|
|
198
|
+
*/
|
|
199
|
+
export declare function textoDeTrabajoSinLlamar(llama: readonly string[], carpeta: string): string;
|
|
200
|
+
/**
|
|
201
|
+
* Para un hijo de motor EXTERNO: lo que hacer con una tool de xonecode que su `.md` o su encargo nombren. Medido en Maset:
|
|
202
|
+
* el desarrollador en Claude Code buscó `validar_fichero_xone` y `comparar_capturas` con `ToolSearch`, y el orquestador
|
|
203
|
+
* le pedía abrir la maqueta «con describe_image».
|
|
204
|
+
*/
|
|
205
|
+
export declare const HERRAMIENTAS_DEL_EXTERNO: string;
|
|
206
|
+
/**
|
|
207
|
+
* Dónde están EN EL DISCO las carpetas de la sesión que un encargo nombra por su ruta virtual. Para un hijo de Claude
|
|
208
|
+
* Code: él ve el disco, y `/artefactos/diseno/screen.jpg` es para él una ruta del sistema, fuera del proyecto. Medido en
|
|
209
|
+
* Maset: el analista recibió esa ruta y contestó «no he podido leer la maqueta». Las dos carpetas se pueden LEER
|
|
210
|
+
* aunque no ejecute (`PeticionExterna.lecturas`).
|
|
211
|
+
*/
|
|
212
|
+
export declare function textoDeCarpetasDeLaSesion(artefactos: string, hotswap: string): string;
|
|
213
|
+
/** Qué skills de las que el agente declara existen de verdad en el catálogo, y cuáles no. */
|
|
214
|
+
export interface EstadoDeSkills {
|
|
215
|
+
suyas: string[];
|
|
216
|
+
faltan: string[];
|
|
217
|
+
}
|
|
218
|
+
/** Reparte las skills declaradas entre las que hay y las que no. Puro: el catálogo entra. */
|
|
219
|
+
export declare function repartirSkills(agente: Agente, disponibles: ReadonlySet<string>): EstadoDeSkills;
|
|
220
|
+
/**
|
|
221
|
+
* Por qué ese nombre no vale, o `undefined` si vale. El molde de `motivoDeClaveInaceptable`
|
|
222
|
+
* y `motivoDeEndpointInaceptable`: una sola función, y el motivo en la voz de quien lo lee.
|
|
223
|
+
*
|
|
224
|
+
* **Se aplica al GUARDAR y no al cargar** (`leerCarpetaDeAgentes` solo lo DICE): rechazar al
|
|
225
|
+
* cargar haría desaparecer un agente que funciona, que es lo contrario de lo que hace el
|
|
226
|
+
* resto de este módulo. Guardar es el único momento en que hay alguien delante que lo puede
|
|
227
|
+
* arreglar — y desde que el nombre de un subagente propio se puede cambiar, tiene con qué.
|
|
228
|
+
*/
|
|
229
|
+
export declare function motivoDeNombreInaceptable(nombre: string): string | undefined;
|
|
230
|
+
/**
|
|
231
|
+
* El nombre que SÍ valdría, para poder ofrecerlo. `undefined` si no se puede proponer nada.
|
|
232
|
+
*
|
|
233
|
+
* Existe para que el aviso sea accionable: «renómbralo a `documentador`» se arregla, y «el
|
|
234
|
+
* nombre no vale» hay que adivinarlo. Los acentos se descomponen con NFD y se les quita la
|
|
235
|
+
* marca —así `diseñador` sale `disenador` y no `dise-ador`—, que es la diferencia entre una
|
|
236
|
+
* propuesta que el usuario acepta y una que tiene que corregir.
|
|
237
|
+
*
|
|
238
|
+
* Y se COMPRUEBA con la misma función antes de devolverlo: una propuesta que no valdría sería
|
|
239
|
+
* peor que no proponer nada.
|
|
240
|
+
*/
|
|
241
|
+
export declare function nombreSugerido(nombre: string): string | undefined;
|
|
242
|
+
/** Lo que se pudo leer, y lo que no con su motivo. Nunca se descarta nada en silencio. */
|
|
243
|
+
export interface Lectura {
|
|
244
|
+
agentes: Agente[];
|
|
245
|
+
/** Un fichero por línea: qué fichero y qué le pasa. Se dice por consola. */
|
|
246
|
+
problemas: string[];
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Un agente ya cargado: el fichero, más de QUIÉN es.
|
|
250
|
+
*
|
|
251
|
+
* `semilla` no sale del `.md` —no hay forma de escribirlo ahí, y está bien: sería un campo
|
|
252
|
+
* que el usuario podría mentir— sino de comparar lo que hay en disco con lo que sembramos
|
|
253
|
+
* nosotros (`agentesEnDisco.ts#marcarSemilla`). Por eso vive en un tipo aparte de `Agente`,
|
|
254
|
+
* que es lo que `leerAgente` devuelve de un fichero.
|
|
255
|
+
*
|
|
256
|
+
* TRES estados y no un booleano, porque la pantalla hace tres cosas distintas con ellos y
|
|
257
|
+
* un `{deSerie, modificado}` admitiría la combinación imposible «no es de serie pero está
|
|
258
|
+
* modificado»:
|
|
259
|
+
*
|
|
260
|
+
* | valor | qué es | qué se puede hacer con él |
|
|
261
|
+
* |---|---|---|
|
|
262
|
+
* | ausente | un subagente del usuario | borrarlo |
|
|
263
|
+
* | `"intacta"` | de serie, tal como lo entregamos | nada: no hay nada que restaurar |
|
|
264
|
+
* | `"modificada"` | de serie, con el prompt afinado | restaurar el de serie (pisa lo suyo) |
|
|
265
|
+
*
|
|
266
|
+
* Y un de serie NO se borra: ver `restaurarAgente`. Borrarlo no devolvía el de serie —la
|
|
267
|
+
* marca recuerda que se entregó y no se resiembra—, así que era perderlo para siempre.
|
|
268
|
+
*/
|
|
269
|
+
/**
|
|
270
|
+
* La ficha con la que el ORQUESTADOR conoce a un especialista: su descripción más lo que
|
|
271
|
+
* SABE HACER y lo que DEVUELVE.
|
|
272
|
+
*
|
|
273
|
+
* **Por qué hace falta, medido en la librería.** deepagents arma la lista de especialistas con
|
|
274
|
+
* `- ${name}: ${description}` y nada más
|
|
275
|
+
* (`getTaskToolDescription`/`subagentDescriptions.push`), bajo un encabezado que promete
|
|
276
|
+
* «Available agent types **and the tools they have access to**» — una promesa que su cuerpo no
|
|
277
|
+
* cumple. O sea que lo único que el orquestador sabe de su equipo es una frase en prosa: no
|
|
278
|
+
* sabe quién escribe, quién alcanza la máquina ni qué devuelve cada uno. Y con eso no se puede
|
|
279
|
+
* ENGRANAR nada: componer un pipeline exige conocer las capacidades y qué entra y sale de cada
|
|
280
|
+
* pieza.
|
|
281
|
+
*
|
|
282
|
+
* **Se DERIVA de lo que el `.md` ya declara**, nunca se escribe a mano. Así un subagente del
|
|
283
|
+
* usuario trae su ficha solo y no hay una segunda lista que se quede vieja — que es el fallo
|
|
284
|
+
* que este repo ya tiene anotado para la regla de los diagramas, la única escrita a pelo.
|
|
285
|
+
*
|
|
286
|
+
* Y la frase del usuario va DELANTE y entera: es lo que él quiso decir, y esto solo la
|
|
287
|
+
* completa con lo que el código sabe y él no tiene por qué repetir.
|
|
288
|
+
*/
|
|
289
|
+
/**
|
|
290
|
+
* La skill que TRAE OpenUI (`skills/openui-builder/`). Vive aquí porque la nombran dos lados: la
|
|
291
|
+
* ficha que el orquestador lee para delegar y la capability que monta la tool
|
|
292
|
+
* (`agent/motores/trueforge/capacidades.ts`), y dos literales serían dos sitios donde el nombre
|
|
293
|
+
* puede cambiar sin que el otro se entere.
|
|
294
|
+
*/
|
|
295
|
+
export declare const SKILL_DE_OPENUI = "openui-builder";
|
|
296
|
+
export declare function fichaDeAgente(agente: Agente, opciones?: {
|
|
297
|
+
conIconos?: boolean;
|
|
298
|
+
conFuentes?: boolean;
|
|
299
|
+
}): string;
|
|
300
|
+
export interface AgenteCargado extends Agente {
|
|
301
|
+
semilla?: "intacta" | "modificada";
|
|
302
|
+
}
|
|
303
|
+
/** Lo que `cargarAgentes` contesta: como `Lectura`, pero sabiendo de quién es cada uno. */
|
|
304
|
+
export interface Carga {
|
|
305
|
+
agentes: AgenteCargado[];
|
|
306
|
+
problemas: string[];
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Un `.md` con frontmatter, a `Agente`. Devuelve el motivo en vez de lanzar: un fichero
|
|
310
|
+
* roto no puede tumbar el arranque de la consola — se salta, se dice cuál y por qué, y los
|
|
311
|
+
* demás siguen. Es la misma postura que `sesiones.ts` con una línea corrupta del `.jsonl`.
|
|
312
|
+
*/
|
|
313
|
+
export declare function leerAgente(nombre: string, contenido: string, origen: Agente["origen"]): {
|
|
314
|
+
agente: Agente;
|
|
315
|
+
} | {
|
|
316
|
+
error: string;
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Junta las dos carpetas: el de PROYECTO gana sobre el global con el mismo nombre.
|
|
320
|
+
*
|
|
321
|
+
* Misma precedencia que los modelos (`core/modelos.ts`), y por lo mismo: un «revisor de
|
|
322
|
+
* XOne» se quiere en todos los proyectos, y un «experto en esta app» solo en uno — y el
|
|
323
|
+
* segundo tiene que poder pisar al primero sin borrarlo.
|
|
324
|
+
*/
|
|
325
|
+
export declare function fusionarAgentes<T extends Agente>(global: readonly T[], proyecto: readonly T[]): T[];
|
|
326
|
+
/**
|
|
327
|
+
* Los campos del `.md` que la ventana de Ajustes NO enseña ni edita: no viajan por el cable, así que un guardado desde
|
|
328
|
+
* allí llegaba sin ellos y `escribirAgente` los BORRABA en silencio. Medido en Maset: el diseñador perdió `escribeEn`
|
|
329
|
+
* —lo único que lo confina a `icons/` y `fonts/`— y cualquier edición del desarrollador le quitaba `llama` y `espera`,
|
|
330
|
+
* el bucle con el de pruebas. El guardado los toma del agente que ya había (`conLoQueLaVentanaNoEdita`).
|
|
331
|
+
*/
|
|
332
|
+
export declare const CAMPOS_FUERA_DE_LA_VENTANA: readonly ["escribeEn", "llama", "espera", "pensamiento"];
|
|
333
|
+
/**
|
|
334
|
+
* El agente que llega de la ventana, con los campos que ella no edita tomados del que ya había. Lo que SÍ trae el
|
|
335
|
+
* cable manda: el día que la ventana edite uno de ellos, su valor gana sin tocar esto. Sin `previo` (un alta), tal cual.
|
|
336
|
+
*/
|
|
337
|
+
export declare function conLoQueLaVentanaNoEdita<T extends Partial<Agente>>(previo: Partial<Agente> | undefined, nuevo: T): T;
|
|
338
|
+
/**
|
|
339
|
+
* Un agente con SHELL y con `escribeEn` promete un confinamiento que no tiene: la shell no pasa por `permisosDe`, y a
|
|
340
|
+
* quien ejecuta se le quitan `write_file`/`edit_file`, así que lo que escriba lo escribe por la shell, en cualquier
|
|
341
|
+
* carpeta y sin aprobación. Medido en Maset: el diseñador con la casilla marcada escribió sus SVG con `echo` en cmd.exe.
|
|
342
|
+
* Se DICE al cargar (no se rechaza: haría desaparecer un subagente que funciona).
|
|
343
|
+
*/
|
|
344
|
+
export declare function avisoDeEjecucionConCarpetas(a: Pick<Agente, "ejecucion" | "escribeEn">): string | undefined;
|
|
345
|
+
/** El `.md` de un agente, para escribirlo. Lo inverso de `leerAgente`. */
|
|
346
|
+
export declare function escribirAgente(agente: Agente): string;
|
|
347
|
+
/**
|
|
348
|
+
* Con qué motores `ejecucion: true` concede de verdad una shell: el nuestro, y Claude Code con la
|
|
349
|
+
* shell ESTRECHA de `core/comandoExterno.ts`. Codex y OpenCode, no. La usan la ficha con la que el
|
|
350
|
+
* orquestador conoce a su equipo, Ajustes (su copia declarada) y la sesión: tres sitios que tienen
|
|
351
|
+
* que contestar lo mismo.
|
|
352
|
+
*/
|
|
353
|
+
export declare function admiteEjecucion(motor: Motor): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El análisis PREVIO de un chat o de una tarea, para la pestaña Soporte: qué salió mal, dicho
|
|
3
|
+
* con reglas de código y sin llamar a ningún modelo.
|
|
4
|
+
*
|
|
5
|
+
* ## Lo que lee, y lo que NO lee
|
|
6
|
+
*
|
|
7
|
+
* Solo datos ESTRUCTURADOS: el `tipo` de cada acto, sus campos (`verde`, `errores`,
|
|
8
|
+
* `detalles[].nombre`, `detalles[].error`, `consumo.ventana`), las líneas de la traza por su
|
|
9
|
+
* `tipo`, los registros de fallos y el estado de la tarea. **Nunca el `texto` de un acto
|
|
10
|
+
* `sistema`**: su clase viaja con el acto precisamente para que nadie la deduzca de la
|
|
11
|
+
* redacción (`core/actos.ts`), y una regla que buscara «no ha corrido» en un aviso se
|
|
12
|
+
* rompería el día que alguien cambie la frase, sin que nada avisara.
|
|
13
|
+
*
|
|
14
|
+
* ## Límites declarados
|
|
15
|
+
*
|
|
16
|
+
* - **Una escritura que se RECHAZÓ no consta.** El acto `sistema` de clase `permiso` es una
|
|
17
|
+
* escritura aplicada SIN preguntar (modo autónomo); del rechazo no queda acto estructurado.
|
|
18
|
+
* - **«Escribió y no se verificó» puede ser un artefacto**: la línea de tool no dice a qué
|
|
19
|
+
* ruta escribió como dato, así que un `write_file` a `/artefactos/` cuenta igual. Por eso es
|
|
20
|
+
* un aviso y lo dice.
|
|
21
|
+
* - Solo ve lo que ESTE chat dejó con su id: las líneas de traza y de fallos sin `chat` no
|
|
22
|
+
* entran aquí (`core/paqueteDeSoporte.ts`).
|
|
23
|
+
*/
|
|
24
|
+
import type { Acto } from "./actos.js";
|
|
25
|
+
import type { RegistroDeFallo } from "./fallos.js";
|
|
26
|
+
import type { Tarea } from "./tareas.js";
|
|
27
|
+
export type GravedadDeHallazgo = "info" | "aviso" | "error";
|
|
28
|
+
export type GravedadDeAnalisis = "ok" | "aviso" | "error";
|
|
29
|
+
export type ReglaDeAnalisis = "turno-con-error" | "verificador-en-rojo" | "escritura-sin-verificar" | "tools-fallidas" | "escrituras-sin-preguntar" | "pregunta-sin-contestar" | "corte-por-tope" | "tool-en-bucle" | "contexto-cerca-del-tope" | "fallo-registrado" | "turno-sin-terminar" | "tarea-requiere-atencion" | "juez-no-verde";
|
|
30
|
+
export interface HallazgoDeAnalisis {
|
|
31
|
+
regla: ReglaDeAnalisis;
|
|
32
|
+
gravedad: GravedadDeHallazgo;
|
|
33
|
+
mensaje: string;
|
|
34
|
+
/** El turno, contado desde 1 por cada mensaje de usuario. Ausente = no es de un turno. */
|
|
35
|
+
turno?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface AnalisisDeSesion {
|
|
38
|
+
gravedad: GravedadDeAnalisis;
|
|
39
|
+
hallazgos: HallazgoDeAnalisis[];
|
|
40
|
+
}
|
|
41
|
+
export interface EntradaDeAnalisis {
|
|
42
|
+
actos: readonly Acto[];
|
|
43
|
+
/** Las líneas de `traza-tools.jsonl` de ESTE chat, ya parseadas. */
|
|
44
|
+
trazas?: readonly Record<string, unknown>[];
|
|
45
|
+
/** Los registros de `fallos.jsonl` de ESTE chat. */
|
|
46
|
+
fallos?: readonly RegistroDeFallo[];
|
|
47
|
+
tarea?: Pick<Tarea, "estado" | "motivo" | "veredicto">;
|
|
48
|
+
/** El chat tiene un turno EN VUELO: el último turno sin cerrar no es un problema todavía. */
|
|
49
|
+
enVuelo?: boolean;
|
|
50
|
+
/** El tope de contexto del modelo de la sesión, si se sabe. Sin él la regla no corre. */
|
|
51
|
+
topeDeContexto?: number;
|
|
52
|
+
}
|
|
53
|
+
/** Cuántas llamadas IGUALES seguidas son un bucle y no una lectura en varias partes. */
|
|
54
|
+
export declare const LLAMADAS_IGUALES_PARA_BUCLE = 4;
|
|
55
|
+
/** A partir de qué fracción del tope la ventana está «cerca»: queda poco antes de resumir. */
|
|
56
|
+
export declare const FRACCION_DE_CONTEXTO_CERCA = 0.9;
|
|
57
|
+
/** Las tools que ESCRIBEN en el proyecto (las que llevan HITL, `CLAUDE.md`). */
|
|
58
|
+
export declare const TOOLS_QUE_ESCRIBEN: ReadonlySet<string>;
|
|
59
|
+
/** Lo que cabe de un mensaje de error en un hallazgo: se reconoce, no se reproduce. */
|
|
60
|
+
export declare const TOPE_DE_MENSAJE = 200;
|
|
61
|
+
/** La gravedad del conjunto: la del peor hallazgo. Un `info` solo no es un problema. */
|
|
62
|
+
export declare function gravedadDe(hallazgos: readonly HallazgoDeAnalisis[]): GravedadDeAnalisis;
|
|
63
|
+
export declare function analizarSesion(entrada: EntradaDeAnalisis): AnalisisDeSesion;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Lo APRENDIDO en un proyecto**, de un encargo para los siguientes: cómo entrar en la app (usuario y clave), qué hay que
|
|
3
|
+
* pulsar para llegar a una pantalla, una trampa del aparato. Lo apunta el agente con `apuntar_aprendizaje` y el HARNESS
|
|
4
|
+
* se lo pone delante en cada encargo siguiente, sin depender de que se acuerde de leerlo.
|
|
5
|
+
*
|
|
6
|
+
* Existe por una medida: en Maset el agente redescubría en cada encargo que había que pulsar «Entrar» con el usuario
|
|
7
|
+
* `08006`. La memoria del proyecto (`MEMORIA_PROYECTO.md`) existía, pero solo se escribía si al agente se le ocurría.
|
|
8
|
+
*
|
|
9
|
+
* Vive en `.xonecode/aprendido.json` del proyecto: no sube a CloudStudio ni entra en los commits, y **no viaja en un
|
|
10
|
+
* paquete de soporte** (`SECRETOS_QUE_NO_VIAJAN`), porque puede llevar una contraseña. Puro: el disco va en `agent/`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const FICHERO_DE_APRENDIDO = "aprendido.json";
|
|
13
|
+
export declare const NOMBRE_APUNTAR_APRENDIZAJE = "apuntar_aprendizaje";
|
|
14
|
+
export interface Aprendizaje {
|
|
15
|
+
/** De qué va, corto y estable: el mismo tema se SUSTITUYE (`cómo entrar en la app`). */
|
|
16
|
+
tema: string;
|
|
17
|
+
texto: string;
|
|
18
|
+
/** Cuándo se apuntó, ISO. */
|
|
19
|
+
cuando: string;
|
|
20
|
+
/** Quién lo apuntó (el agente). */
|
|
21
|
+
quien?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Cuántos se guardan: al pasar, se va el más viejo. Todos van delante de cada encargo, así que pocos y útiles. */
|
|
24
|
+
export declare const TOPE_DE_APRENDIZAJES = 30;
|
|
25
|
+
export declare const TOPE_DE_TEMA = 80;
|
|
26
|
+
export declare const TOPE_DE_TEXTO = 600;
|
|
27
|
+
/** Por qué no se puede apuntar, o `undefined`. */
|
|
28
|
+
export declare function motivoDeAprendizajeInaceptable(a: {
|
|
29
|
+
tema: string;
|
|
30
|
+
texto: string;
|
|
31
|
+
}): string | undefined;
|
|
32
|
+
/** La lista con el nuevo: el mismo tema se SUSTITUYE (y pasa al final, el más reciente); pasado el tope, fuera el más viejo. */
|
|
33
|
+
export declare function conAprendizaje(lista: readonly Aprendizaje[], nuevo: Aprendizaje): Aprendizaje[];
|
|
34
|
+
/** El fichero leído: lo que no se entienda se deja fuera, entrada a entrada; un fichero roto es una lista vacía. */
|
|
35
|
+
export declare function interpretarAprendido(texto: string): Aprendizaje[];
|
|
36
|
+
/** El bloque que el harness pone delante de cada encargo. Sin nada apuntado, nada. */
|
|
37
|
+
export declare function bloqueDeAprendido(lista: readonly Aprendizaje[]): string | undefined;
|
|
38
|
+
/** Cuándo apuntar, para quien tiene la tool: una tool sin un «cuándo» no se usa. */
|
|
39
|
+
export declare const USO_DE_APUNTAR_APRENDIZAJE: string;
|
|
40
|
+
/** Para un hijo de motor EXTERNO, que no tiene la tool: lo cuenta al volver y quien le llamó lo apunta. */
|
|
41
|
+
export declare const USO_DE_APRENDIDO_EXTERNO: string;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dónde caen en DISCO los artefactos de una sesión: `.xonecode/sesiones/<id>/artefactos/`.
|
|
3
|
+
*
|
|
4
|
+
* Vive en `core/` y no en `web/servidor/sesiones.ts` porque lo necesitan los dos lados —el
|
|
5
|
+
* que borra la sesión y el que monta el backend—, y `cli/` no puede importar de `web/`. Es
|
|
6
|
+
* lo que ya son las rutas de `core/settings.ts`: una regla de dónde va cada cosa.
|
|
7
|
+
*
|
|
8
|
+
* Pasa por `segmentoSeguro` por lo mismo que el `.jsonl`: el id llega del cliente por HTTP,
|
|
9
|
+
* y sin esa guarda un `"../../.env"` compondría una ruta fuera de `sesiones/`.
|
|
10
|
+
*
|
|
11
|
+
* Convive con `<id>.jsonl` sin chocar —uno es fichero con extensión, otra es carpeta—, así
|
|
12
|
+
* que no hay nada que mover. Meter el transcript dentro (`<id>/sesion.jsonl`) es una mudanza
|
|
13
|
+
* aparte, con su respaldo de lectura para las sesiones que ya existen.
|
|
14
|
+
*/
|
|
15
|
+
export declare function carpetaDeArtefactosDeSesion(raiz: string, id: string): string;
|
|
16
|
+
/** El prefijo virtual. Con barra final: `CompositeBackend` la exige para no reconstruir
|
|
17
|
+
* `//nombre` fuera de la raíz montada — la misma trampa medida con `/skills/`. */
|
|
18
|
+
export declare const RUTA_ARTEFACTOS = "/artefactos/";
|
|
19
|
+
export declare function esRutaDeArtefacto(ruta: string | undefined): boolean;
|
|
20
|
+
export declare function esBasuraDeArtefacto(relativa: string): boolean;
|
|
21
|
+
export declare function artefactoFueraDeSitio(ruta: string): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* ¿Es una ruta de `/artefactos/` que ha llegado al backend del PROYECTO?
|
|
24
|
+
*
|
|
25
|
+
* Solo puede pasar si el montaje FALTA: con él, el `CompositeBackend` desvía `/artefactos/` a la
|
|
26
|
+
* carpeta de la sesión antes de que el proyecto la vea. Y que falte no es teórico: el motor
|
|
27
|
+
* TrueForge no recibía carpeta en la consola de terminal ni en `run --real`, y un `write_file` de
|
|
28
|
+
* `/artefactos/panel.html` acabó en `artefactos/panel.html` de la app del cliente —y SIN
|
|
29
|
+
* aprobación, porque por una ruta de artefacto no se pregunta (`perfiles.ts#seDetieneEn`)—.
|
|
30
|
+
* Medido el 24-09-2026. Así que la guarda del proyecto la rechaza: si el montaje vuelve a faltar,
|
|
31
|
+
* el fallo es un error que el modelo lee, no un fichero en la app.
|
|
32
|
+
*
|
|
33
|
+
* El primer segmento y sin distinguir mayúsculas, como `artefactoFueraDeSitio`. El precio es el
|
|
34
|
+
* mismo que allí y ya se pagaba: una carpeta `artefactos/` en la raíz del proyecto no se puede
|
|
35
|
+
* escribir con el agente —con el montaje puesto, tampoco se podía—.
|
|
36
|
+
*/
|
|
37
|
+
export declare function artefactoSinMontar(ruta: string): boolean;
|
|
38
|
+
/** El nombre que se le enseña a una persona: el último segmento y nada más. */
|
|
39
|
+
export declare function nombreDeArtefacto(ruta: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Lo que hay que poner detrás de la carpeta para ABRIR el fichero: la ruta sin `/artefactos/`.
|
|
42
|
+
*
|
|
43
|
+
* **No es `nombreDeArtefacto` y confundirlas era un botón muerto.** Aquélla contesta «cómo se
|
|
44
|
+
* llama esto para una persona» y se queda con el último segmento, que es lo correcto para una
|
|
45
|
+
* tarjeta. Para abrirlo hace falta el camino ENTERO: un `unzip` deja un ÁRBOL bajo la carpeta
|
|
46
|
+
* de la sesión —una maqueta descomprimida vive en `/artefactos/diseno/screen.png`— y con el
|
|
47
|
+
* basename el `join` apuntaba a `<carpeta>/screen.png`, que no existe. El síntoma era un
|
|
48
|
+
* «no pude abrir» sobre un fichero que estaba ahí y que la propia foto había anunciado.
|
|
49
|
+
*
|
|
50
|
+
* **No lleva guarda de travesía y no la necesita**: quien la llama ha pasado antes por
|
|
51
|
+
* `esRutaDeArtefacto`, que ya exige que cada segmento sea llano y que ninguno sea `.` ni `..`.
|
|
52
|
+
* Ponerla aquí sería un segundo sitio donde decidir sobre una ruta, que es la única forma en
|
|
53
|
+
* la que estas guardas se han roto nunca.
|
|
54
|
+
*/
|
|
55
|
+
export declare function rutaRelativaDeArtefacto(ruta: string): string;
|
|
56
|
+
export declare function mimeDeArtefacto(nombre: string): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Lo que se sabe de un artefacto recién escrito.
|
|
59
|
+
*
|
|
60
|
+
* No lleva el CONTENIDO, y esa ausencia es la de siempre: por aquí pasa lo que acaba en el
|
|
61
|
+
* transcript y en el cable, y un panel de `artifacts-builder` son cientos de kilobytes de
|
|
62
|
+
* HTML. Lleva lo que deja decir «hay un diagrama de 42 KB y se llama así» y lo que deja ir a
|
|
63
|
+
* buscarlo: la ruta virtual, con la que se lee después.
|
|
64
|
+
*/
|
|
65
|
+
export interface Artefacto {
|
|
66
|
+
/** La ruta virtual, tal como la escribió el agente (`/artefactos/flujo.html`). */
|
|
67
|
+
ruta: string;
|
|
68
|
+
/** El último segmento, para enseñarlo. */
|
|
69
|
+
nombre: string;
|
|
70
|
+
/** Por extensión, o ausente si no se sabe. Nunca se adivina. */
|
|
71
|
+
mime?: string;
|
|
72
|
+
/** Tamaño en bytes de lo que se escribió. */
|
|
73
|
+
bytes: number;
|
|
74
|
+
}
|