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,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Una skill: el `SKILL.md` que el agente carga bajo demanda, y de quién es.
|
|
3
|
+
*
|
|
4
|
+
* **Este módulo es PURO.** Quién lee el disco es `agent/grafo/skills.ts`; quién las monta
|
|
5
|
+
* para el agente, `agent/grafo/proyecto.ts#backendConSkills`. Aquí solo vive el formato del
|
|
6
|
+
* fichero y la regla de qué nombre vale — las dos cosas que la ventana de Ajustes, el
|
|
7
|
+
* cargador y los tests tienen que entender igual.
|
|
8
|
+
*
|
|
9
|
+
* **Tres orígenes y no dos**, con la misma precedencia que los subagentes y los modelos:
|
|
10
|
+
*
|
|
11
|
+
* | origen | dónde | quién la escribe |
|
|
12
|
+
* |---|---|---|
|
|
13
|
+
* | `serie` | la carpeta `skills/` del PAQUETE | xonecode, y no se toca desde la consola |
|
|
14
|
+
* | `global` | `~/.xonecode/skills/` | el usuario, para todos sus proyectos |
|
|
15
|
+
* | `proyecto` | `<raiz>/.xonecode/skills/` | el usuario, solo para ese proyecto |
|
|
16
|
+
*
|
|
17
|
+
* Las de serie son de SOLO LECTURA y no se borran ni se editan: viven dentro del paquete
|
|
18
|
+
* instalado, así que una edición se la llevaría por delante el siguiente `npm install` sin
|
|
19
|
+
* decir nada. Lo que sí se puede es COPIARLA a las tuyas y cambiarla ahí, que además deja
|
|
20
|
+
* ver de dónde salió. Por eso no hay `.semilla.json` como en los subagentes: nada nuestro
|
|
21
|
+
* se copia nunca a la casa del usuario, así que no hay marca que llevar ni nada que
|
|
22
|
+
* restaurar.
|
|
23
|
+
*
|
|
24
|
+
* El `SKILL.md` es el formato de Claude Code, y eso no es una coincidencia que convenga
|
|
25
|
+
* mantener: es lo que hace que una skill escrita para otro harness se lea aquí tal cual, y
|
|
26
|
+
* que `SkillsMiddleware` de deepagents —que es quien las descubre de verdad— la encuentre
|
|
27
|
+
* sin que xonecode traduzca nada.
|
|
28
|
+
*/
|
|
29
|
+
import { motivoDeNombreInaceptable, nombreSugerido } from "./agentes.js";
|
|
30
|
+
/** De dónde sale una skill. No se escribe en el fichero: lo pone quien lo lee. */
|
|
31
|
+
export type OrigenDeSkill = "serie" | "global" | "proyecto";
|
|
32
|
+
/** El fichero, sin de quién es. Es lo que se escribe y lo que se lee. */
|
|
33
|
+
export interface Skill {
|
|
34
|
+
nombre: string;
|
|
35
|
+
descripcion: string;
|
|
36
|
+
/** El cuerpo del `SKILL.md`, sin el frontmatter. Son las instrucciones. */
|
|
37
|
+
cuerpo: string;
|
|
38
|
+
/**
|
|
39
|
+
* El frontmatter TAL COMO está en el fichero, sin los `---`.
|
|
40
|
+
*
|
|
41
|
+
* Existe por dos cosas distintas y las dos importan:
|
|
42
|
+
*
|
|
43
|
+
* - **Se ENSEÑA.** `description` no es lo único que puede haber ahí: `archify` declara
|
|
44
|
+
* además `license` y un bloque `metadata` anidado, y una ventana que solo enseña la
|
|
45
|
+
* descripción haría creer que eso es todo lo que el fichero dice.
|
|
46
|
+
* - **Se CONSERVA al guardar.** `escribirSkill` reescribe `name` y `description` DENTRO de
|
|
47
|
+
* este texto en vez de componer uno nuevo: sin eso, editar desde la ventana una skill
|
|
48
|
+
* escrita a mano le borraba en silencio todas las claves que no conocemos — que es la
|
|
49
|
+
* pérdida muda de siempre, y encima sobre un fichero que el usuario escribió él.
|
|
50
|
+
*
|
|
51
|
+
* Ausente en la que se está creando: entonces se compone el mínimo.
|
|
52
|
+
*/
|
|
53
|
+
frontmatter?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Una skill ya cargada: el fichero, más de dónde salió y lo que cuesta. */
|
|
56
|
+
export interface SkillCargada extends Skill {
|
|
57
|
+
origen: OrigenDeSkill;
|
|
58
|
+
/** Estimación de coste del `SKILL.md` ENTERO, frontmatter incluido. */
|
|
59
|
+
tokens: number;
|
|
60
|
+
/**
|
|
61
|
+
* Los ficheros que acompañan al `SKILL.md`, por nombre y sin contenido.
|
|
62
|
+
*
|
|
63
|
+
* Viajan porque una skill puede ser una carpeta entera —plantillas, ejemplos, un script—
|
|
64
|
+
* y la ventana que solo enseña el `SKILL.md` haría creer que editarlo es editarla toda.
|
|
65
|
+
* Lo que se puede tocar desde aquí es el `SKILL.md`; el resto se dice que está y se deja
|
|
66
|
+
* donde vive, que es la misma postura que `omitidas` en el plan de subida.
|
|
67
|
+
*/
|
|
68
|
+
ficheros: string[];
|
|
69
|
+
}
|
|
70
|
+
/** Lo que se pudo leer, y lo que no con su motivo. Nunca se descarta nada en silencio. */
|
|
71
|
+
export interface LecturaDeSkills {
|
|
72
|
+
skills: SkillCargada[];
|
|
73
|
+
/** Una línea por fichero: qué skill y qué le pasa. */
|
|
74
|
+
problemas: string[];
|
|
75
|
+
}
|
|
76
|
+
/** 4 caracteres por token, la regla de servilleta de siempre. */
|
|
77
|
+
export declare const tokensDeSkill: (texto: string) => number;
|
|
78
|
+
/**
|
|
79
|
+
* El nombre de una skill es un SEGMENTO DE RUTA —la carpeta donde vive— y también lo que el
|
|
80
|
+
* subagente declara en su `.md`, así que vale la MISMA regla que la de un subagente y por la
|
|
81
|
+
* misma razón: `motivoDeNombreInaceptable` (`core/agentes.ts`). No se escribe una segunda
|
|
82
|
+
* aquí porque dos reglas para el mismo tipo de nombre es donde divergen.
|
|
83
|
+
*/
|
|
84
|
+
export declare const motivoDeNombreDeSkillInaceptable: typeof motivoDeNombreInaceptable;
|
|
85
|
+
export declare const nombreDeSkillSugerido: typeof nombreSugerido;
|
|
86
|
+
/**
|
|
87
|
+
* Compone el `SKILL.md`.
|
|
88
|
+
*
|
|
89
|
+
* El frontmatter es el mínimo que `parseFrontmatter` (`vendor/skillLoaders/catalog.ts`) y
|
|
90
|
+
* deepagents leen: `name` y `description`, una línea cada uno. La descripción se aplana a
|
|
91
|
+
* una línea porque ahí un salto la partiría en dos claves y la segunda mitad se perdería en
|
|
92
|
+
* silencio — el mismo motivo por el que el nombre es un slug.
|
|
93
|
+
*
|
|
94
|
+
* **Y lo demás del frontmatter se CONSERVA**: las claves que no son `name` ni `description`
|
|
95
|
+
* se reescriben tal cual, en su orden. Componer uno nuevo desde cero le borraba a una skill
|
|
96
|
+
* escrita a mano su `license`, su `allowed-tools` o su bloque `metadata` en cuanto alguien
|
|
97
|
+
* abriera la ventana y pulsara Guardar — sin error, sin aviso y sobre un fichero suyo. Las
|
|
98
|
+
* líneas INDENTADAS van con la clave que las abre, que es lo que deja pasar un bloque
|
|
99
|
+
* anidado entero sin entender YAML.
|
|
100
|
+
*/
|
|
101
|
+
export declare function escribirSkill(skill: Skill): string;
|
|
102
|
+
/**
|
|
103
|
+
* Lee un `SKILL.md`.
|
|
104
|
+
*
|
|
105
|
+
* **El nombre sale de la CARPETA, no del frontmatter**, exactamente como el de un subagente
|
|
106
|
+
* sale del fichero: es lo que la hace direccionable (`/skills/<nombre>/`) y lo que el
|
|
107
|
+
* subagente declara. Un `name:` que diga otra cosa se ignora — mandaría sobre una ruta que
|
|
108
|
+
* ya está decidida, y entonces `rutasDeSkills` apuntaría a una carpeta que no existe.
|
|
109
|
+
*
|
|
110
|
+
* **Sin `description` no se carga.** Es lo que el modelo lee para decidir si esta skill le
|
|
111
|
+
* sirve: sin ella, la skill está en el catálogo y no la usa nadie nunca, que es peor que no
|
|
112
|
+
* estar. Misma regla que la `descripcion` de un subagente.
|
|
113
|
+
*/
|
|
114
|
+
export declare function leerSkill(texto: string, nombreDeCarpeta: string, origen: OrigenDeSkill, ficheros?: string[]): {
|
|
115
|
+
skill: SkillCargada;
|
|
116
|
+
} | {
|
|
117
|
+
error: string;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Funde las listas por nombre: la ÚLTIMA gana.
|
|
121
|
+
*
|
|
122
|
+
* Se llama con `serie`, `global`, `proyecto` en ese orden, así que una skill del proyecto
|
|
123
|
+
* tapa a la global del mismo nombre y las dos tapan a la de serie — la misma precedencia
|
|
124
|
+
* que los subagentes y que los modelos, y por lo mismo: lo particular manda sobre lo
|
|
125
|
+
* general. Que una tape a otra NO es un problema que reportar: es la forma de afinar una
|
|
126
|
+
* skill nuestra sin editarla donde el `npm install` la pisaría. Quien lo dice es la ficha,
|
|
127
|
+
* con su origen al lado.
|
|
128
|
+
*/
|
|
129
|
+
export declare function fusionarSkills(...listas: readonly SkillCargada[][]): SkillCargada[];
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traer una pantalla de Stitch a la sesión: lo que se decide sin red ni disco.
|
|
3
|
+
*
|
|
4
|
+
* Stitch no devuelve la imagen ni el HTML de una pantalla: devuelve ENLACES de descarga
|
|
5
|
+
* (`get_screen` → `screenshot.downloadUrl`, `htmlCode.downloadUrl`), y el agente no puede bajar
|
|
6
|
+
* una URL. Lo baja el harness (`agent/motores/trueforge/traerDeStitch.ts`), y solo URLs que vienen
|
|
7
|
+
* de la respuesta de Stitch —nunca una que escriba el modelo—, de los hosts MEDIDOS, con tope de
|
|
8
|
+
* tamaño y tipo comprobado.
|
|
9
|
+
*
|
|
10
|
+
* El destino es FIJO, `/artefactos/diseno/`: es donde el harness ya espera una maqueta (`buscarMaqueta`),
|
|
11
|
+
* de donde `ultimaCaptura` y el crítico de pantalla NO toman capturas del aparato, y la misma carpeta
|
|
12
|
+
* que deja descomprimir un export de Stitch a mano.
|
|
13
|
+
*/
|
|
14
|
+
import type { DisenoVinculado } from "./disenoVinculado.js";
|
|
15
|
+
export { motivoDeProyectoDeStitchInaceptable, type DisenoVinculado } from "./disenoVinculado.js";
|
|
16
|
+
/** La carpeta, dentro de la de artefactos, donde vive la maqueta traída. */
|
|
17
|
+
export declare const CARPETA_DE_DISENO = "diseno";
|
|
18
|
+
export declare const RUTA_DE_DISENO = "/artefactos/diseno/";
|
|
19
|
+
/** ¿Es esta ruta virtual algo de la maqueta traída (y no una captura del aparato)? */
|
|
20
|
+
export declare function esDeLaMaqueta(ruta: string): boolean;
|
|
21
|
+
/** Medidos el 30-09-2026: la imagen viene de `lh3`, el HTML de `contribution`. Nada más se baja. */
|
|
22
|
+
export declare const HOSTS_DE_DESCARGA: readonly ["lh3.googleusercontent.com", "contribution.usercontent.google.com"];
|
|
23
|
+
/** Una pantalla de Stitch a tamaño completo son ~150 KB; el tope es holgado y es un tope. */
|
|
24
|
+
export declare const TOPE_DE_IMAGEN: number;
|
|
25
|
+
export declare const TOPE_DE_HTML: number;
|
|
26
|
+
/** Lo que admite la imagen: el tipo manda sobre la extensión del fichero que se escribe. */
|
|
27
|
+
export declare const TIPOS_DE_IMAGEN: Readonly<Record<string, string>>;
|
|
28
|
+
export declare function motivoDePantallaInaceptable(pantalla: string): string | undefined;
|
|
29
|
+
/** El proyecto de una pantalla: `projects/<id>`. */
|
|
30
|
+
export declare function proyectoDePantalla(pantalla: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* ¿Se puede bajar esta URL? HTTPS, sin credenciales, de un host medido. Se aplica a URLs que vienen
|
|
33
|
+
* de la respuesta de Stitch, y aun así se comprueba: la respuesta la escribe otro.
|
|
34
|
+
*/
|
|
35
|
+
export declare function motivoDeDescargaInaceptable(url: string): string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* La imagen a su tamaño REAL. Medido: el enlace de `lh3` sin sufijo da una miniatura (226×512 de una
|
|
38
|
+
* pantalla de 780×1768); con `=s0`, la de verdad. Solo si el enlace no trae ya su propio tamaño.
|
|
39
|
+
*/
|
|
40
|
+
export declare function urlDeImagenCompleta(url: string): string;
|
|
41
|
+
export interface PantallaDeStitch {
|
|
42
|
+
titulo: string;
|
|
43
|
+
ancho?: number;
|
|
44
|
+
alto?: number;
|
|
45
|
+
imagen: string;
|
|
46
|
+
html?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Lo que interesa de la respuesta de `get_screen`, o el motivo de que no se entienda. */
|
|
49
|
+
export declare function leerPantalla(texto: string): PantallaDeStitch | string;
|
|
50
|
+
/** El `DESIGN.md` del proyecto (`get_project` → `designTheme.designMd`), si lo trae. */
|
|
51
|
+
export declare function designMdDeProyecto(texto: string): string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Buscar una pantalla por su TÍTULO, y no por su `name`. Medido en Maset: con solo el `name`, el orquestador listaba las
|
|
54
|
+
* pantallas de TODOS los proyectos de Stitch (diecinueve llamadas) para dar con la que la persona había nombrado, y esos
|
|
55
|
+
* listados se quedaban en su contexto el turno entero. Puro: las respuestas entran como texto.
|
|
56
|
+
*/
|
|
57
|
+
export interface EntradaDeStitch {
|
|
58
|
+
name: string;
|
|
59
|
+
title: string;
|
|
60
|
+
}
|
|
61
|
+
/** Un título comparable: sin mayúsculas, sin tildes y con los espacios reducidos. */
|
|
62
|
+
export declare function tituloComparable(titulo: string): string;
|
|
63
|
+
/** Las entradas `{name, title}` de la lista `clave` (`projects` o `screens`) de una respuesta. Lo que no tiene forma, fuera. */
|
|
64
|
+
export declare function entradasDeStitch(texto: string, clave: "projects" | "screens"): EntradaDeStitch[];
|
|
65
|
+
/**
|
|
66
|
+
* Las que casan con el título: las de título IGUAL si hay alguna (comparable), y si no las que lo CONTIENEN. Sin título,
|
|
67
|
+
* todas. Una pantalla con el título exacto no se ensucia con las que solo lo contienen.
|
|
68
|
+
*/
|
|
69
|
+
export declare function casanConTitulo<T extends EntradaDeStitch>(entradas: readonly T[], titulo: string | undefined): T[];
|
|
70
|
+
/**
|
|
71
|
+
* Las palabras de un título, comparables y por su RAÍZ, sin las vacías: singular y plural valen lo mismo (`entregas` y
|
|
72
|
+
* `entrega`, `albaranes` y `albaran`, `pendientes` y `pendiente`). Se quita `-es`/`-s` y luego una `e` final.
|
|
73
|
+
*/
|
|
74
|
+
export declare function palabras(titulo: string): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Las palabras de lo buscado que DISTINGUEN una pantalla de otra: sin las vacías y sin las que salen en la MAYORÍA de
|
|
77
|
+
* los títulos del proyecto («Maset», «Logística» en «X - Maset Logística»), que no distinguen nada.
|
|
78
|
+
*/
|
|
79
|
+
export declare function palabrasQueDistinguen(titulo: string, entradas: readonly EntradaDeStitch[]): string[];
|
|
80
|
+
/** El id de un proyecto (`projects/<id>` → `<id>`), que es lo que pide `list_screens`. */
|
|
81
|
+
export declare function idDeProyecto(name: string): string;
|
|
82
|
+
/** Una pantalla para el selector: su `name`, su título y la miniatura (solo de los hosts medidos). */
|
|
83
|
+
export interface PantallaConMiniatura extends EntradaDeStitch {
|
|
84
|
+
miniatura?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Las pantallas de una respuesta de `list_screens`, con su miniatura (`screenshot.downloadUrl`, medido: la traen todas).
|
|
88
|
+
* Una miniatura fuera de los hosts medidos no se da: la pantalla se ofrece sin imagen.
|
|
89
|
+
*/
|
|
90
|
+
export declare function pantallasConMiniatura(texto: string): PantallaConMiniatura[];
|
|
91
|
+
/**
|
|
92
|
+
* La pantalla elegida para una tarea, si vale: un `name` de pantalla bien formado, DEL proyecto de Stitch vinculado, y
|
|
93
|
+
* un título corto. Lo que llega del cable no se cree: sin vínculo, o de otro proyecto, `undefined`.
|
|
94
|
+
*/
|
|
95
|
+
export declare function pantallaElegidaValida(valor: unknown, vinculo: DisenoVinculado | undefined): {
|
|
96
|
+
name: string;
|
|
97
|
+
titulo: string;
|
|
98
|
+
proyecto: string;
|
|
99
|
+
} | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* La línea que se añade al encargo de una tarea con pantalla ELEGIDA: si ya está traída, dónde está y que es LA
|
|
102
|
+
* referencia; si no se pudo traer antes de empezar, con qué `name` traerla. En los dos casos, que no se busque otra por
|
|
103
|
+
* título ni se sustituya (decisión suya: el diseño lo elige la persona).
|
|
104
|
+
*/
|
|
105
|
+
export declare function textoDePantallaElegida(pantalla: {
|
|
106
|
+
name: string;
|
|
107
|
+
titulo: string;
|
|
108
|
+
proyecto?: string;
|
|
109
|
+
}, traida: {
|
|
110
|
+
ok: true;
|
|
111
|
+
} | {
|
|
112
|
+
ok: false;
|
|
113
|
+
motivo: string;
|
|
114
|
+
}): string;
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import type { CierreDeTarea, VeredictoDeTarea } from "./entrega.js";
|
|
2
|
+
import type { MapeoDeEstados } from "./gestorDeTareas.js";
|
|
3
|
+
/**
|
|
4
|
+
* Los cuatro estados, y ninguno más.
|
|
5
|
+
*
|
|
6
|
+
* **No hay «fallida»**: un error del turno, un proyecto que ya no está, una escritura que
|
|
7
|
+
* nadie aprobó y una pregunta sin contestar acaban todos en `requiere-atencion`, porque la
|
|
8
|
+
* acción que piden es la misma —que alguien mire— y lo que los distingue es el `motivo`. Un
|
|
9
|
+
* estado «fallida» aparte obligaría a decidir en el código qué fallos son recuperables, y
|
|
10
|
+
* esa es justo la decisión que se le devuelve a la persona.
|
|
11
|
+
*
|
|
12
|
+
* **Tampoco hay «cancelada»**: descartar una tarea la BORRA. Un estado terminal de basura
|
|
13
|
+
* sería un archivo que nadie mira, la misma razón por la que «archivar» no está en el menú
|
|
14
|
+
* de una sesión.
|
|
15
|
+
*/
|
|
16
|
+
export type EstadoDeTarea = "nuevo" | "en-proceso" | "requiere-atencion" | "terminada";
|
|
17
|
+
/** A dónde se puede ir desde cada estado. Lo que no esté aquí se rechaza al escribirlo. */
|
|
18
|
+
export declare const TRANSICIONES: Readonly<Record<EstadoDeTarea, readonly EstadoDeTarea[]>>;
|
|
19
|
+
/** Lo que se sabe de un adjunto. Nunca su contenido ni su ruta en la máquina. */
|
|
20
|
+
export interface AdjuntoDeTarea {
|
|
21
|
+
nombre: string;
|
|
22
|
+
bytes: number;
|
|
23
|
+
/** Por extensión, o ausente si no se sabe. Nunca se adivina. */
|
|
24
|
+
mime?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Un feedback del desarrollador sobre una tarea que estaba `requiere-atencion`.
|
|
28
|
+
*
|
|
29
|
+
* §0 del diseño, textual: «esperando por feedback, se edita la tarea y se agrega el
|
|
30
|
+
* feedback del usuario». Es el mismo patrón que los hallazgos del verificador
|
|
31
|
+
* (`agent/turno/turnoReal.ts#conVerificacion`): entra al hilo que ya existe como un mensaje de
|
|
32
|
+
* USUARIO, nunca como un encargo nuevo que le haría perder a la tarea todo lo que ya sabe.
|
|
33
|
+
*/
|
|
34
|
+
export interface FeedbackDeTarea {
|
|
35
|
+
texto: string;
|
|
36
|
+
creado: string;
|
|
37
|
+
/**
|
|
38
|
+
* Si ya se le mandó al agente. Se pone al REANUDAR el turno con este feedback —no al
|
|
39
|
+
* añadirlo—, o la vuelta siguiente del corredor se lo mandaría otra vez: el mismo
|
|
40
|
+
* argumento que separa «autorizó» de «aplicado» en `Tarea.autorizadas`, aquí dentro de
|
|
41
|
+
* cada entrada en vez de en el campo entero.
|
|
42
|
+
*/
|
|
43
|
+
consumido: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface Tarea {
|
|
46
|
+
id: string;
|
|
47
|
+
/**
|
|
48
|
+
* El proyecto, con las TRES cosas y no dos: el `id` es lo que viaja por el cable y con lo
|
|
49
|
+
* que la interfaz filtra («las tareas de este proyecto»), el `nombre` es para leer, y la
|
|
50
|
+
* `raiz` es ABSOLUTA y solo se usa aquí dentro para abrirlo.
|
|
51
|
+
*
|
|
52
|
+
* Mover o renombrar la carpeta deja la tarea huérfana, y entonces NO se ejecuta — falla
|
|
53
|
+
* cerrado, igual que el índice de tareas, que también se indexa por ruta absoluta.
|
|
54
|
+
*/
|
|
55
|
+
proyecto: {
|
|
56
|
+
id: string;
|
|
57
|
+
raiz: string;
|
|
58
|
+
nombre: string;
|
|
59
|
+
};
|
|
60
|
+
/** La primera frase de la petición. Para leer en el kanban. */
|
|
61
|
+
titulo: string;
|
|
62
|
+
/** Lo que escribió el usuario, tal cual. Se conserva aunque el encargo se edite. */
|
|
63
|
+
peticion: string;
|
|
64
|
+
/** El encargo augmentado y revisado: es lo que se le manda al agente. */
|
|
65
|
+
encargo: string;
|
|
66
|
+
adjuntos: AdjuntoDeTarea[];
|
|
67
|
+
estado: EstadoDeTarea;
|
|
68
|
+
/** Por qué está aparcada. Obligatorio con `requiere-atencion` y solo con él. */
|
|
69
|
+
motivo?: string;
|
|
70
|
+
/** La sesión donde corre, en cuanto existe: es lo que hace que atenderla sea abrirla. */
|
|
71
|
+
sesion?: string;
|
|
72
|
+
/**
|
|
73
|
+
* La tarea ANTERIOR de su cadena: esta no arranca hasta que aquella esté `terminada`. Existe porque un encargo grande
|
|
74
|
+
* se reparte en tareas que van EN ORDEN (`docs/superpowers/plans/2026-10-06-tareas-encadenadas.md`), y la regla de
|
|
75
|
+
* «nunca dos del mismo proyecto» no basta: deja de bloquear cuando la anterior queda en `requiere-atencion`, y la
|
|
76
|
+
* siguiente arrancaría sobre un trabajo a medias. Si la anterior ya no existe (la persona la borró), esta queda libre.
|
|
77
|
+
*/
|
|
78
|
+
tras?: string;
|
|
79
|
+
creada: string;
|
|
80
|
+
empezada?: string;
|
|
81
|
+
acabada?: string;
|
|
82
|
+
/** El proceso que la tiene. Se usa para reconciliar al arrancar; se va al parar. */
|
|
83
|
+
pid?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Cuántas veces el harness la REANUDÓ solo tras cortarse el proceso a mitad (`reanudadaTrasCorte`). Ausente = ninguna.
|
|
86
|
+
* Es lo que frena el bucle de una tarea que tumba el proceso cada vez. No viaja: en la pantalla no sirve de nada.
|
|
87
|
+
*/
|
|
88
|
+
reanudaciones?: number;
|
|
89
|
+
/**
|
|
90
|
+
* Las escrituras que la tarea AUTORIZÓ sin que ninguna persona las aprobara, con la ruta
|
|
91
|
+
* RELATIVA a la raíz del proyecto.
|
|
92
|
+
*
|
|
93
|
+
* **Se llama `autorizadas` y no `aplicados`, y el nombre es la mitad del contrato.** Se
|
|
94
|
+
* apunta cuando se toma la decisión, que es ANTES de que el backend escriba: una ruta que
|
|
95
|
+
* las guardas de ruta rechazan —`/artifacts/`, una vista aplanada, `/.env`— sale aquí y
|
|
96
|
+
* NO aparece en el disco. Un campo llamado «aplicados» prometería un hecho sobre el disco
|
|
97
|
+
* que este dato no puede sostener, y de aquí sale lo que el kanban le cuenta a una
|
|
98
|
+
* persona: en este repo un campo mal nombrado es la misma clase de fallo que un control
|
|
99
|
+
* sin dato detrás. **La verdad sobre lo que cambió la tiene Revisión**, que es un diff de
|
|
100
|
+
* git contra la ref de la sesión; esto es una PISTA, y su nombre no puede prometer más.
|
|
101
|
+
*
|
|
102
|
+
* **Se guarda porque nadie lo aprobó.** La autorización de una tarea es el acto de
|
|
103
|
+
* crearla, así que el diff dejó de ser el momento en que alguien ve lo que se va a
|
|
104
|
+
* escribir; lo único que queda es el registro. Con los NOMBRES y no un contador, que es
|
|
105
|
+
* el mismo criterio del aviso de honestidad del modo autónomo — un contador a
|
|
106
|
+
* secas es el aviso que enseña a ignorar los avisos.
|
|
107
|
+
*
|
|
108
|
+
* **Ausente y vacío no son lo mismo**, y aquí la diferencia es la de siempre: ausente es
|
|
109
|
+
* «no consta» —una tarea de antes de que esto existiera, o una que nunca llegó a correr
|
|
110
|
+
* un turno porque su proyecto no estaba— y `[]` es «corrió y no autorizó ninguna
|
|
111
|
+
* escritura», que es un dato distinto y el que el juez de la entrega necesita.
|
|
112
|
+
*/
|
|
113
|
+
autorizadas?: string[];
|
|
114
|
+
/**
|
|
115
|
+
* El historial de lo que el desarrollador contestó mientras la tarea esperaba feedback.
|
|
116
|
+
*
|
|
117
|
+
* **Es una LISTA y no un campo**, porque puede haber varias vueltas —una tarea aparcada
|
|
118
|
+
* dos veces— y la segunda no puede borrar la primera: la misma regla que `autorizadas`.
|
|
119
|
+
* `conFeedback` solo AÑADE.
|
|
120
|
+
*
|
|
121
|
+
* **Ausente y vacío no son lo mismo, otra vez la misma regla.** Ausente es «nunca se le
|
|
122
|
+
* pidió nada a esta tarea»; `conFeedback` nunca produce `[]` porque solo se llama para
|
|
123
|
+
* AÑADIR un feedback, así que un array presente siempre tiene al menos uno.
|
|
124
|
+
*/
|
|
125
|
+
feedback?: FeedbackDeTarea[];
|
|
126
|
+
/**
|
|
127
|
+
* El veredicto del juez de QA sobre lo que hizo la tarea: resumen y hallazgos, **nunca
|
|
128
|
+
* contenido de ficheros** (`core/entrega.ts#VeredictoDeTarea` lo acota).
|
|
129
|
+
*
|
|
130
|
+
* Se guarda porque es la mitad de la decisión de «terminada» —la otra son las condiciones
|
|
131
|
+
* que comprueba el código— y porque cuando el veredicto es el motivo de que la tarea NO
|
|
132
|
+
* se entregue, sus palabras son lo único que dice qué falta. Se guarda **siempre que haya
|
|
133
|
+
* uno**, también en verde: si no, una tarea terminada no podría distinguir «el juez la
|
|
134
|
+
* aprobó» de «se entregó sin que nadie la juzgara», que es la duda que este campo existe
|
|
135
|
+
* para cerrar. Y la cierra en la PANTALLA, no solo en disco: viaja entero por el cable
|
|
136
|
+
* (`web/servidor/transporte.ts#filaDeTarea`) y lo pinta `EntregaDeTarea.tsx`. La cuarta
|
|
137
|
+
* forma de llegar a «terminada» —que la dé por buena una persona— no la puede distinguir
|
|
138
|
+
* este campo, porque el veredicto que hubiera se conserva: la distingue
|
|
139
|
+
* `terminadaAMano`.
|
|
140
|
+
*
|
|
141
|
+
* **Y este SUSTITUYE, al contrario que `autorizadas`.** Aquello acumula porque un
|
|
142
|
+
* fichero escrito en el primer intento sigue escrito; un veredicto, en cambio, es una
|
|
143
|
+
* opinión sobre el estado ACTUAL del trabajo, y conservar el del intento anterior al lado
|
|
144
|
+
* del nuevo enseñaría dos respuestas a una sola pregunta.
|
|
145
|
+
*/
|
|
146
|
+
veredicto?: VeredictoDeTarea;
|
|
147
|
+
/**
|
|
148
|
+
* Con qué se CERRÓ, cuando la entrega no salió limpia (`core/entrega.ts#cierreDeLaEntrega`): lo crítico y las
|
|
149
|
+
* observaciones, que van al comentario de cierre del ticket. Ausente = se entregó sin nada que decir.
|
|
150
|
+
*/
|
|
151
|
+
cierre?: CierreDeTarea;
|
|
152
|
+
/**
|
|
153
|
+
* La dio por buena una PERSONA, con el botón «Dar por bueno», en vez de la puerta de
|
|
154
|
+
* entrega (`core/entrega.ts#decisionDeEntrega`).
|
|
155
|
+
*
|
|
156
|
+
* **Existe porque el veredicto no basta para distinguirlo, y eso está razonado sobre el
|
|
157
|
+
* código y no supuesto.** Una tarea aparcada puede llegar a ese botón con un veredicto
|
|
158
|
+
* ROJO (el juez dijo que no y la persona lo pisa), con NINGUNO (se cortó a mitad, el turno
|
|
159
|
+
* falló, el proyecto ya no estaba: el juez no llegó a hablar) y también con uno VERDE —el
|
|
160
|
+
* camino es estrecho pero existe: la puerta la aprueba y la escritura del estado final
|
|
161
|
+
* revienta, así que se aparca «el corredor no pudo cerrarla» con el verde ya guardado
|
|
162
|
+
* (`corredorDeTareas.ts`)—. En ese último caso, sin esta marca, la tarjeta resultante
|
|
163
|
+
* sería byte a byte la de una entrega por la puerta completa.
|
|
164
|
+
*
|
|
165
|
+
* **Solo la pone `darPorBuenaAMano`**, nunca `conEstado`: marcar ahí una entrega del
|
|
166
|
+
* corredor sería la mentira simétrica. Y `undefined` es «no consta» —una tarea de antes
|
|
167
|
+
* de que esto existiera—, que no es lo mismo que `false`.
|
|
168
|
+
*/
|
|
169
|
+
terminadaAMano?: boolean;
|
|
170
|
+
/**
|
|
171
|
+
* El ticket del GESTOR de tareas en el que vive esta tarea (Jira, Notion…), si su proyecto tenía uno vinculado al
|
|
172
|
+
* crearla. Se COPIA al crear y no se recalcula nunca desde el vínculo de ahora —la regla de `TicketDeSesion`—: si la
|
|
173
|
+
* persona revincula el proyecto, lo que se escribe sigue yendo a ESTE ticket. Ausente = tarea solo local.
|
|
174
|
+
*/
|
|
175
|
+
ticket?: TicketDeTarea;
|
|
176
|
+
/**
|
|
177
|
+
* La pantalla de Stitch ELEGIDA para la tarea (una), del proyecto de Stitch vinculado. El corredor la trae a
|
|
178
|
+
* `/artefactos/diseno/` antes del primer turno y el encargo lo dice: no se busca por nombre (decisión suya; medido en
|
|
179
|
+
* Maset, «Menu Listado Entregas» no era el título de ninguna y la tarea construyó con otra maqueta).
|
|
180
|
+
*/
|
|
181
|
+
pantallaDeStitch?: PantallaElegida;
|
|
182
|
+
}
|
|
183
|
+
/** Una pantalla de Stitch elegida: su `name` (`projects/<id>/screens/<id>`) y su título, para decirlo sin preguntar. */
|
|
184
|
+
export interface PantallaElegida {
|
|
185
|
+
name: string;
|
|
186
|
+
titulo: string;
|
|
187
|
+
/** El nombre del proyecto de Stitch, del vínculo al crearla; su id sale del `name`. */
|
|
188
|
+
proyecto?: string;
|
|
189
|
+
}
|
|
190
|
+
/** El ticket de una tarea en su gestor. `sitio` no sale del host; `aviso` es el último reflejo que FALLÓ. */
|
|
191
|
+
export interface TicketDeTarea {
|
|
192
|
+
conector: string;
|
|
193
|
+
sitio: string;
|
|
194
|
+
/** El proyecto del gestor (clave de Jira, data source de Notion): lo que el adaptador necesita en el `Vinculo`. */
|
|
195
|
+
proyecto: string;
|
|
196
|
+
clave: string;
|
|
197
|
+
url?: string;
|
|
198
|
+
/** Lo que no se pudo escribir en el gestor la última vez («no se pudo pasar a PROBAR: …»). Ausente = nada pendiente. */
|
|
199
|
+
aviso?: string;
|
|
200
|
+
/** El mapeo de estados del vínculo AL CREARLA (copiado, como el resto): a qué estado pasa al empezar y al terminar. */
|
|
201
|
+
estados?: MapeoDeEstados;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* La ruta de un fichero tal como se apunta y se dice en una tarea: relativa a la raíz.
|
|
205
|
+
*
|
|
206
|
+
* Las rutas que llegan de un interrupt vienen del backend virtual del agente (`/app.xne`),
|
|
207
|
+
* así que nunca son de la máquina — pero la barra de delante las hace parecerlo, y estas
|
|
208
|
+
* cadenas acaban en el índice de tareas y en el registro que una persona lee. Vive aquí, y
|
|
209
|
+
* no en quien las escribe, porque la usan los dos extremos: el texto que se pinta en el
|
|
210
|
+
* transcript y la lista que se guarda. Dos copias de esto son dos reglas que divergen.
|
|
211
|
+
*/
|
|
212
|
+
export declare const rutaRelativaDeTarea: (ruta: string) => string;
|
|
213
|
+
/** El título de una tarea: la primera frase de su petición, como el de una sesión. */
|
|
214
|
+
export declare const tituloDeTarea: (peticion: string) => string;
|
|
215
|
+
/** Tope de concurrencia por omisión. Dos: una corriendo y otra avanzando sin que la máquina
|
|
216
|
+
* se quede sin aire para lo que esté haciendo la persona delante. */
|
|
217
|
+
export declare const CONCURRENCIA_POR_OMISION = 2;
|
|
218
|
+
/**
|
|
219
|
+
* Cuántas RONDAS de aprobación admite el turno de una tarea. **Su propio tope, y no el de
|
|
220
|
+
* la persona.**
|
|
221
|
+
*
|
|
222
|
+
* `MAX_APPROVAL_ROUNDS` son cinco y se dimensionaron para alguien pulsando: «te lo he
|
|
223
|
+
* preguntado cinco veces, para». En una tarea autónoma una ronda no es una pregunta, es una
|
|
224
|
+
* TANDA de escrituras que se autorizan solas — y cinco tandas se agotan en un encargo
|
|
225
|
+
* mediano: medido, un turno de tarea acabó con cuatro ficheros escritos, una escritura
|
|
226
|
+
* abandonada y el verificador sin correr, porque cada tanda gastaba ronda.
|
|
227
|
+
*
|
|
228
|
+
* **Y no es infinito**, por el mismo argumento que el tope propio de los artefactos: cada
|
|
229
|
+
* pasada es una llamada al modelo y aquí no hay ningún humano que frene el bucle.
|
|
230
|
+
*
|
|
231
|
+
* **De dónde sale el 20, dicho como lo que es: una observación por cuatro, no un encargo
|
|
232
|
+
* grande medido.** Lo único medido es el turno que se cortó, que necesitaba cinco tandas;
|
|
233
|
+
* veinte deja sitio a un encargo bastante mayor y sigue cortando un bucle en un tiempo
|
|
234
|
+
* finito. No hay medida de un encargo de verdad grande detrás, y por eso es un número
|
|
235
|
+
* provisional que se puede afinar. Lo que lo hace aceptable mientras tanto es su MODO DE
|
|
236
|
+
* FALLO: al agotarse se dice, quedan escrituras sin aplicar, y `core/entrega.ts` no entrega
|
|
237
|
+
* — o sea que un tope corto aparca con un motivo VERDADERO en vez de dar por bueno un
|
|
238
|
+
* trabajo a medias. Un número provisional con un fallo honesto se afina luego; lo que no se
|
|
239
|
+
* puede es que al agotarse mienta.
|
|
240
|
+
*
|
|
241
|
+
* **Subido a 50 por una medida**: una tarea que ajustaba una pantalla contra su maqueta (Maset, Entradas/Salidas) gastó
|
|
242
|
+
* las 20 en un solo turno —editar, desplegar, capturar, criticar, volver a editar, una edición por fichero y ronda— y se
|
|
243
|
+
* cortó con tres ediciones sin aplicar y el simulador sin correr, con la ventana casi lista. Ese ciclo de diseño es el
|
|
244
|
+
* trabajo normal de una tarea, no un bucle; a petición de la persona, el mismo 50 que el chat.
|
|
245
|
+
*/
|
|
246
|
+
export declare const TOPE_DE_RONDAS_DE_TAREA = 50;
|
|
247
|
+
/**
|
|
248
|
+
* Qué tareas pueden arrancar AHORA.
|
|
249
|
+
*
|
|
250
|
+
* Cuatro reglas, y las dos últimas son las que importan:
|
|
251
|
+
* - **FIFO por fecha de creación**, global: predecible y explicable. Una prioridad es un
|
|
252
|
+
* campo más que nadie ha pedido.
|
|
253
|
+
* - **Tope de concurrencia**, contando las que ya corren.
|
|
254
|
+
* - **Nunca dos del mismo proyecto**, ni con las que corren ni entre las elegidas en esta
|
|
255
|
+
* misma pasada: comparten disco, índice de git, checkpointer y `sync`, y dos turnos a la
|
|
256
|
+
* vez sobre eso es una carrera con escrituras de por medio.
|
|
257
|
+
* - **Y GANA LA PERSONA**: ver `bloqueados`.
|
|
258
|
+
* - **Y las ENCADENADAS esperan a su anterior** (`Tarea.tras`) hasta que esté `terminada`, también si quedó en
|
|
259
|
+
* `requiere-atencion`. Igual que un bloqueado: no gasta hueco ni para la cola.
|
|
260
|
+
*/
|
|
261
|
+
export declare function siguientesAEjecutar(tareas: readonly Tarea[], opciones: {
|
|
262
|
+
concurrencia: number;
|
|
263
|
+
/**
|
|
264
|
+
* Raíces en las que NO se puede arrancar nada, aunque haya hueco.
|
|
265
|
+
*
|
|
266
|
+
* Existe por el hueco que el cerrojo del corredor no cubre: ese arbitra dos
|
|
267
|
+
* CORREDORES, y esto es una tarea y una PERSONA sobre el mismo árbol, que no tienen
|
|
268
|
+
* aislamiento de ninguna clase — se pisan las ediciones, y la foto por turno de
|
|
269
|
+
* `instantanea.ts` metería las escrituras de la tarea en el diff de la persona,
|
|
270
|
+
* atribuyéndoselas. Gana la persona: la tarea espera.
|
|
271
|
+
*
|
|
272
|
+
* La condición que se le pasa es «la consola está ABIERTA» y no «hay un turno en
|
|
273
|
+
* vuelo», porque solo la primera es estable en el instante de despachar: con la
|
|
274
|
+
* segunda, una tarea arrancaría y chocaría después, que es justo el fallo que se
|
|
275
|
+
* quiere evitar.
|
|
276
|
+
*
|
|
277
|
+
* **No gasta hueco de concurrencia** —no está corriendo nada— y **no para la cola**:
|
|
278
|
+
* el hueco se lo lleva la siguiente de otro proyecto. Ausente y vacía significan lo
|
|
279
|
+
* mismo aquí (nada que bloquear), al contrario que en `Entorno.proyectos`: no hay
|
|
280
|
+
* ninguna omisión que una lista vacía pudiera estar contradiciendo.
|
|
281
|
+
*/
|
|
282
|
+
bloqueados?: readonly string[];
|
|
283
|
+
}): Tarea[];
|
|
284
|
+
/**
|
|
285
|
+
* La tarea con otro estado, o una excepción.
|
|
286
|
+
*
|
|
287
|
+
* Lanza en vez de devolver la tarea sin tocar: un estado imposible escrito en disco es más
|
|
288
|
+
* difícil de depurar que un error en el momento de escribirlo. Y `requiere-atencion` EXIGE
|
|
289
|
+
* motivo, porque una tarea aparcada sin decir por qué no es accionable — es la misma razón
|
|
290
|
+
* por la que el aviso de honestidad lleva los nombres de los ficheros y no un contador.
|
|
291
|
+
*/
|
|
292
|
+
export declare function conEstado(tarea: Tarea, estado: EstadoDeTarea, motivo?: string, sello?: {
|
|
293
|
+
pid?: number;
|
|
294
|
+
ahora?: string;
|
|
295
|
+
}): Tarea;
|
|
296
|
+
/**
|
|
297
|
+
* La tarea con lo que AUTORIZÓ, si es que se sabe.
|
|
298
|
+
*
|
|
299
|
+
* `undefined` significa «no se sabe» y entonces no se toca el campo: una tarea que ni
|
|
300
|
+
* llegó a correr un turno —su proyecto se movió— no autorizó nada, pero afirmarlo con una
|
|
301
|
+
* lista vacía sería contar como medido algo que nadie midió. Es la misma distinción que
|
|
302
|
+
* `Entorno.proyectos` y la que `detalles` de un acto guardado conserva.
|
|
303
|
+
*
|
|
304
|
+
* **Se SUMA a lo que ya hubiera, no lo sustituye.** Una tarea aparcada se reintenta
|
|
305
|
+
* (`requiere-atencion → nuevo`) y su segundo turno es otro turno: si esto reemplazara, el
|
|
306
|
+
* fichero que autorizó el primer intento desaparecería del registro **cuando muy
|
|
307
|
+
* probablemente siga escrito**, que es justo la clase de mentira que este campo evita. Y así `[]` sigue
|
|
308
|
+
* queriendo decir lo que dice: «este turno no autorizó nada» — no borra lo que autorizó el
|
|
309
|
+
* anterior. (`sesion` NO se pierde al reintentar: el corredor reabre la MISMA —Task 12,
|
|
310
|
+
* `corredorDeTareas.ts#correr`—, así que el segundo turno cae en el mismo hilo y Revisión
|
|
311
|
+
* sigue comparando contra el «antes» de la primera apertura, no contra uno a medias.)
|
|
312
|
+
*
|
|
313
|
+
* Normaliza en un solo sitio: rutas relativas (`rutaRelativaDeTarea`), sin huecos y sin
|
|
314
|
+
* repetidos — el mismo fichero escrito en dos rondas del turno, o en dos intentos, es un
|
|
315
|
+
* fichero tocado y no dos—, conservando el orden en que se aplicaron.
|
|
316
|
+
*/
|
|
317
|
+
export declare function conAutorizadas(tarea: Tarea, autorizadas: readonly string[] | undefined): Tarea;
|
|
318
|
+
/**
|
|
319
|
+
* La tarea con un feedback nuevo, sin consumir, y devuelta al lazo (`requiere-atencion →
|
|
320
|
+
* nuevo`).
|
|
321
|
+
*
|
|
322
|
+
* **Rechaza el vacío, lanzando.** Un feedback en blanco devolvería la tarea al lazo sin
|
|
323
|
+
* nada nuevo que decirle: la aparcaron por una decisión que hacía falta tomar, y «nada» no
|
|
324
|
+
* es una decisión. Es el mismo argumento que rechaza un título vacío en
|
|
325
|
+
* `sesiones.ts#renombrarSesion` — no es validación de formulario, es que aceptarlo dejaría
|
|
326
|
+
* la tarea «resuelta» sin haberla resuelto, y el siguiente turno correría igual de
|
|
327
|
+
* bloqueado que este.
|
|
328
|
+
*
|
|
329
|
+
* **Solo vale desde `requiere-atencion`, y eso lo decide `conEstado` y no una comprobación
|
|
330
|
+
* aparte aquí.** Si la tarea no está aparcada, no hay pregunta que este feedback esté
|
|
331
|
+
* contestando; `conEstado` ya lanza con un motivo legible (`«nuevo» no puede pasar a
|
|
332
|
+
* «nuevo»`), y repetir esa regla en dos sitios es como acaban divergiendo.
|
|
333
|
+
*
|
|
334
|
+
* **Se SUMA a lo que ya hubiera, nunca lo sustituye** — la misma regla que
|
|
335
|
+
* `conAutorizadas`: un segundo feedback no puede borrar el primero, porque el agente ya
|
|
336
|
+
* actuó sobre lo que el primero dijo y perder el registro sería fingir que nunca se dijo.
|
|
337
|
+
* `consumido` nace en `false`: se pone en `true` cuando el corredor de verdad lo manda al
|
|
338
|
+
* turno (`corredorDeTareas.ts#correr`), no aquí — hasta entonces «no consta que se haya
|
|
339
|
+
* mandado» es la verdad.
|
|
340
|
+
*/
|
|
341
|
+
export declare function conFeedback(tarea: Tarea, texto: string, ahora?: string): Tarea;
|
|
342
|
+
/**
|
|
343
|
+
* ¿Se puede cambiar su encargo? (IXCODE-52). Solo una que NUNCA ha arrancado: `nuevo` y sin
|
|
344
|
+
* `empezada`. Una reintentada o con feedback también vuelve a `nuevo`, pero lo que se le manda
|
|
345
|
+
* entonces es su hilo y el feedback, no el encargo: dejar editarlo sería cambiar un texto que el
|
|
346
|
+
* agente no va a volver a leer.
|
|
347
|
+
*/
|
|
348
|
+
export declare function puedeEditarEncargo(tarea: Pick<Tarea, "estado" | "empezada">): boolean;
|
|
349
|
+
/**
|
|
350
|
+
* La tarea con otro encargo, o una excepción con el motivo. Sin `peticion`, la petición y el título
|
|
351
|
+
* no se tocan; con ella (IXCODE-53: se edita lo que escribió la persona y se vuelve a preparar el
|
|
352
|
+
* encargo) se cambia, y el título sale de ella como al crear.
|
|
353
|
+
*/
|
|
354
|
+
export declare function conEncargo(tarea: Tarea, encargo: string, peticion?: string,
|
|
355
|
+
/** La pantalla de Stitch: una nueva la sustituye, `null` la QUITA, ausente no la toca. Ya comprobada por quien llama. */
|
|
356
|
+
pantalla?: PantallaElegida | null): Tarea;
|
|
357
|
+
/**
|
|
358
|
+
* La tarea con el veredicto del juez, si es que hay uno.
|
|
359
|
+
*
|
|
360
|
+
* `undefined` significa «no se le preguntó» y entonces no se toca el campo: se llega aquí
|
|
361
|
+
* también por los caminos que aparcan antes de llegar al juez —el proyecto que ya no está,
|
|
362
|
+
* el turno que revienta—, y escribir ahí una ausencia borraría el veredicto del intento
|
|
363
|
+
* anterior, que sigue siendo lo último que se supo del trabajo.
|
|
364
|
+
*
|
|
365
|
+
* Cuando SÍ hay veredicto, sustituye: ver `Tarea.veredicto`.
|
|
366
|
+
*/
|
|
367
|
+
export declare function conVeredicto(tarea: Tarea, veredicto: VeredictoDeTarea | undefined): Tarea;
|
|
368
|
+
/**
|
|
369
|
+
* La tarea que una PERSONA da por buena, con la marca puesta.
|
|
370
|
+
*
|
|
371
|
+
* `conEstado` borra el `motivo` a propósito («el motivo vive SOLO en el estado que lo
|
|
372
|
+
* explica»), así que después de esto no queda ni una palabra que diga que aquí no hubo ni
|
|
373
|
+
* verificador ni juez: eso es lo que guarda `terminadaAMano`, y de ahí sale lo que la
|
|
374
|
+
* tarjeta pinta. El `veredicto` que hubiera **no se toca** — la persona lo pisa, no lo
|
|
375
|
+
* desmiente, y lo que el juez dijo sigue siendo lo que hay que poder leer al lado.
|
|
376
|
+
*
|
|
377
|
+
* La transición la decide `conEstado`, que LANZA si no vale: repetir esa regla aquí es como
|
|
378
|
+
* acaban divergiendo (el mismo argumento de `conFeedback`).
|
|
379
|
+
*/
|
|
380
|
+
export declare function darPorBuenaAMano(tarea: Tarea, ahora?: string): Tarea;
|
|
381
|
+
/**
|
|
382
|
+
* Cuántas veces se reanuda SOLA una tarea cortada a mitad. Una: si vuelve a cortarse, puede ser ella la que tumba el
|
|
383
|
+
* proceso, y reanudarla siempre sería un bucle; entonces se aparca y espera a una persona.
|
|
384
|
+
*/
|
|
385
|
+
export declare const TOPE_DE_REANUDACIONES = 1;
|
|
386
|
+
/**
|
|
387
|
+
* Lo que recibe el agente al reanudar, como un mensaje más en SU hilo. El trabajo de antes del corte está en el disco
|
|
388
|
+
* (las tareas escriben sin aprobación) y en su memoria hasta el último paso guardado, pero la llamada en curso se perdió:
|
|
389
|
+
* por eso manda MIRAR antes de rehacer.
|
|
390
|
+
*/
|
|
391
|
+
export declare const TEXTO_DE_REANUDACION: string;
|
|
392
|
+
/**
|
|
393
|
+
* Una tarea que el proceso dejó «en proceso» al morir, REANUDADA: vuelve a la cola con `TEXTO_DE_REANUDACION` como
|
|
394
|
+
* feedback pendiente, que el corredor manda en su MISMO hilo (`peticionDeFeedback` con `reanudando`). Pasa por las
|
|
395
|
+
* transiciones de siempre —aparcada con su motivo y devuelta con un feedback—, así que no hay un atajo nuevo que vigilar.
|
|
396
|
+
*
|
|
397
|
+
* `undefined` = NO se reanuda y se aparca como hasta ahora: sin hilo que reabrir (empezar de cero sin decírselo a nadie
|
|
398
|
+
* podría rehacer o pisar lo escrito) o con el tope gastado.
|
|
399
|
+
*/
|
|
400
|
+
export declare function reanudadaTrasCorte(tarea: Tarea, motivo: string, ahora?: string): Tarea | undefined;
|
|
401
|
+
/** El motivo de aparcar una cortada que YA se reanudó sola: lo de siempre, más por qué esta vez no sigue. */
|
|
402
|
+
export declare const motivoTrasReanudar: (motivo: string) => string;
|
|
403
|
+
/**
|
|
404
|
+
* «Continuar» en una tarea aparcada sin escribir nada: lo que entra en SU hilo como feedback. Sin esto, seguir sin
|
|
405
|
+
* añadir nada era «Reintentar», que vuelve a mandar el encargo entero.
|
|
406
|
+
*/
|
|
407
|
+
export declare const TEXTO_DE_CONTINUAR = "Contin\u00FAa donde lo dejaste.";
|
|
408
|
+
/**
|
|
409
|
+
* ¿Se puede «Arrancar ahora»? Una tarea `nuevo` que no espera a ninguna anterior (`tras`): las encadenadas esperan a
|
|
410
|
+
* que la suya termine, y saltárselo sería arrancar sobre trabajo sin aceptar. La MISMA regla que `siguientesAEjecutar`.
|
|
411
|
+
*/
|
|
412
|
+
export declare function puedeArrancarYa(tarea: Pick<Tarea, "estado" | "tras">, lista: readonly Pick<Tarea, "id" | "estado">[]): boolean;
|