xonecode 0.38.44 → 0.39.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
  2. package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
  3. package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
  4. package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
  5. package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
  6. package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
  7. package/dist/agent/cloudstudio/crearRama.js +16 -0
  8. package/dist/agent/cloudstudio/crearRama.js.map +1 -0
  9. package/dist/agent/cloudstudio/descarga.d.ts +44 -0
  10. package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
  11. package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
  12. package/dist/agent/cloudstudio/subida.d.ts +61 -0
  13. package/dist/agent/cloudstudio/subida.js +7 -1
  14. package/dist/agent/cloudstudio/subida.js.map +1 -1
  15. package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
  16. package/dist/agent/cloudstudio/zip.d.ts +13 -0
  17. package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
  18. package/dist/agent/conectores/gestorJira.d.ts +50 -0
  19. package/dist/agent/conectores/gestorNotion.d.ts +45 -0
  20. package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
  21. package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
  22. package/dist/agent/config/authEnDisco.d.ts +43 -0
  23. package/dist/agent/config/catalogoModelos.d.ts +79 -0
  24. package/dist/agent/config/configEnDisco.d.ts +235 -0
  25. package/dist/agent/config/crearProyecto.d.ts +20 -0
  26. package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
  27. package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
  28. package/dist/agent/config/entorno.d.ts +83 -0
  29. package/dist/agent/config/fuentesEnRed.d.ts +12 -0
  30. package/dist/agent/config/gemini.d.ts +5 -0
  31. package/dist/agent/config/iconosEnRed.d.ts +10 -0
  32. package/dist/agent/config/identidadEnDisco.d.ts +27 -0
  33. package/dist/agent/config/modelos.d.ts +77 -0
  34. package/dist/agent/config/modelosDeMotor.d.ts +52 -0
  35. package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
  36. package/dist/agent/config/persona.d.ts +1 -0
  37. package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
  38. package/dist/agent/config/settingsEnDisco.d.ts +206 -0
  39. package/dist/agent/config/versionEnDisco.d.ts +17 -0
  40. package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
  41. package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
  42. package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
  43. package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
  44. package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
  45. package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
  46. package/dist/agent/dispositivos/hotswap.d.ts +194 -0
  47. package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
  48. package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
  49. package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
  50. package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
  51. package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
  52. package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
  53. package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
  54. package/dist/agent/exportarPdf.d.ts +72 -0
  55. package/dist/agent/grafo/aprendido.d.ts +28 -0
  56. package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
  57. package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
  58. package/dist/agent/grafo/atributosXone.d.ts +31 -0
  59. package/dist/agent/grafo/buscarIcono.d.ts +32 -0
  60. package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
  61. package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
  62. package/dist/agent/grafo/compararCapturas.d.ts +22 -0
  63. package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
  64. package/dist/agent/grafo/criticaVisual.d.ts +60 -0
  65. package/dist/agent/grafo/describirImagen.d.ts +79 -0
  66. package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
  67. package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
  68. package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
  69. package/dist/agent/grafo/excluirTools.d.ts +37 -0
  70. package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
  71. package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
  72. package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
  73. package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
  74. package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
  75. package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
  76. package/dist/agent/grafo/navegacionXone.d.ts +60 -0
  77. package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
  78. package/dist/agent/grafo/perfiles.d.ts +225 -0
  79. package/dist/agent/grafo/proyecto.d.ts +450 -0
  80. package/dist/agent/grafo/skills.d.ts +181 -0
  81. package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
  82. package/dist/agent/grafo/unirSecciones.d.ts +20 -0
  83. package/dist/agent/grafo/validacionXone.d.ts +35 -0
  84. package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
  85. package/dist/agent/grafo/xoneAgent.d.ts +166 -0
  86. package/dist/agent/motores/motoresLocales.d.ts +87 -0
  87. package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
  88. package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
  89. package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
  90. package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
  91. package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
  92. package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
  93. package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
  94. package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
  95. package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
  96. package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
  97. package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
  98. package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
  99. package/dist/agent/motores/trueforge/notas.d.ts +48 -0
  100. package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
  101. package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
  102. package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
  103. package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
  104. package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
  105. package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
  106. package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
  107. package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
  108. package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
  109. package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
  110. package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
  111. package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
  112. package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
  113. package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
  114. package/dist/agent/planesEnDisco.d.ts +18 -0
  115. package/dist/agent/publicarPlan.d.ts +20 -0
  116. package/dist/agent/raizDelPaquete.d.ts +9 -0
  117. package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
  118. package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
  119. package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
  120. package/dist/agent/renombrarSobre.d.ts +14 -0
  121. package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
  122. package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
  123. package/dist/agent/sesiones/checkpointer.d.ts +146 -0
  124. package/dist/agent/sesiones/git.d.ts +66 -0
  125. package/dist/agent/sesiones/gitSync.d.ts +264 -0
  126. package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
  127. package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
  128. package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
  129. package/dist/agent/sesiones/sesionGit.d.ts +155 -0
  130. package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
  131. package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
  132. package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
  133. package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
  134. package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
  135. package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
  136. package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
  137. package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
  138. package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
  139. package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
  140. package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
  141. package/dist/agent/tareas/aumentador.d.ts +99 -0
  142. package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
  143. package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
  144. package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
  145. package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
  146. package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
  147. package/dist/agent/turno/depuracion.d.ts +1 -0
  148. package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
  149. package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
  150. package/dist/agent/turno/guionizado.d.ts +18 -0
  151. package/dist/agent/turno/informeDeTraza.d.ts +220 -0
  152. package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
  153. package/dist/agent/turno/instantanea.d.ts +16 -0
  154. package/dist/agent/turno/interrupts.d.ts +54 -0
  155. package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
  156. package/dist/agent/turno/mensajes.d.ts +23 -0
  157. package/dist/agent/turno/normalizar.d.ts +15 -0
  158. package/dist/agent/turno/puente.d.ts +196 -0
  159. package/dist/agent/turno/registroDeFallos.d.ts +39 -0
  160. package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
  161. package/dist/agent/turno/resumenDeTool.d.ts +33 -0
  162. package/dist/agent/turno/rubrica.d.ts +35 -0
  163. package/dist/agent/turno/sesionReal.d.ts +89 -0
  164. package/dist/agent/turno/textoDeTool.d.ts +19 -0
  165. package/dist/agent/turno/turnoReal.d.ts +210 -0
  166. package/dist/agent/turno/verificacion.d.ts +85 -0
  167. package/dist/agent/turno/verificador.d.ts +66 -0
  168. package/dist/bin.d.ts +2 -0
  169. package/dist/cli/acuseDeModelo.d.ts +18 -0
  170. package/dist/cli/aprobar.d.ts +162 -0
  171. package/dist/cli/config.d.ts +17 -0
  172. package/dist/cli/consola.d.ts +473 -0
  173. package/dist/cli/describe.d.ts +7 -0
  174. package/dist/cli/doctor.d.ts +8 -0
  175. package/dist/cli/fuentesDeDisco.d.ts +25 -0
  176. package/dist/cli/main.d.ts +291 -0
  177. package/dist/cli/markdown.d.ts +126 -0
  178. package/dist/cli/panel.d.ts +38 -0
  179. package/dist/cli/podar.d.ts +38 -0
  180. package/dist/cli/run.d.ts +30 -0
  181. package/dist/cli/spinner.d.ts +37 -0
  182. package/dist/cli/stdio.d.ts +94 -0
  183. package/dist/cli/tema.d.ts +68 -0
  184. package/dist/cli/tokens.d.ts +16 -0
  185. package/dist/cli/traza.d.ts +19 -0
  186. package/dist/cli/tui/app.d.ts +23 -0
  187. package/dist/cli/tui/aprobarTui.d.ts +46 -0
  188. package/dist/cli/tui/barra.d.ts +43 -0
  189. package/dist/cli/tui/correrTui.d.ts +119 -0
  190. package/dist/cli/tui/entrada.d.ts +14 -0
  191. package/dist/cli/tui/filas.d.ts +13 -0
  192. package/dist/cli/tui/logo.d.ts +20 -0
  193. package/dist/cli/tui/pielTui.d.ts +15 -0
  194. package/dist/cli/tui/raton.d.ts +68 -0
  195. package/dist/cli/tui/sidebar.d.ts +63 -0
  196. package/dist/cli/tui/store.d.ts +102 -0
  197. package/dist/cli/tui/tarjeta.d.ts +8 -0
  198. package/dist/cli/tui/temaInk.d.ts +67 -0
  199. package/dist/cli/tui/transcript.d.ts +32 -0
  200. package/dist/cli/verify.d.ts +9 -0
  201. package/dist/cli/wizardInicial.d.ts +59 -0
  202. package/dist/core/actos.d.ts +437 -0
  203. package/dist/core/adjuntos.d.ts +77 -0
  204. package/dist/core/agentes.d.ts +353 -0
  205. package/dist/core/analisisDeSesion.d.ts +63 -0
  206. package/dist/core/aprendido.d.ts +41 -0
  207. package/dist/core/artefactos.d.ts +74 -0
  208. package/dist/core/atributosXone.d.ts +53 -0
  209. package/dist/core/bitacora.d.ts +21 -0
  210. package/dist/core/cloudstudio.d.ts +168 -0
  211. package/dist/core/codificacion.d.ts +81 -0
  212. package/dist/core/comandoExterno.d.ts +49 -0
  213. package/dist/core/compararCapturas.d.ts +136 -0
  214. package/dist/core/conectores.d.ts +296 -0
  215. package/dist/core/config.d.ts +148 -0
  216. package/dist/core/contextos.d.ts +54 -0
  217. package/dist/core/convertirAP.d.ts +56 -0
  218. package/dist/core/copiaDeAvd.d.ts +44 -0
  219. package/dist/core/cssBienFormado.d.ts +22 -0
  220. package/dist/core/deps.d.ts +28 -0
  221. package/dist/core/descargas.d.ts +61 -0
  222. package/dist/core/descripcionDePantalla.d.ts +121 -0
  223. package/dist/core/descriptoresDeApp.d.ts +108 -0
  224. package/dist/core/diagnosticoDeNode.d.ts +51 -0
  225. package/dist/core/diff.d.ts +26 -0
  226. package/dist/core/diffDeColecciones.d.ts +54 -0
  227. package/dist/core/disenoVinculado.d.ts +17 -0
  228. package/dist/core/dispositivoDeSesion.d.ts +22 -0
  229. package/dist/core/dispositivoElegido.d.ts +17 -0
  230. package/dist/core/dispositivos.d.ts +469 -0
  231. package/dist/core/entrega.d.ts +341 -0
  232. package/dist/core/entrelazar.d.ts +48 -0
  233. package/dist/core/esfuerzo.d.ts +120 -0
  234. package/dist/core/esqueleto.d.ts +38 -0
  235. package/dist/core/estiloMedido.d.ts +70 -0
  236. package/dist/core/estilos.d.ts +76 -0
  237. package/dist/core/events.d.ts +218 -0
  238. package/dist/core/exportacion.d.ts +88 -0
  239. package/dist/core/fallos.d.ts +79 -0
  240. package/dist/core/fondosSvg.d.ts +115 -0
  241. package/dist/core/fotoDeColecciones.d.ts +45 -0
  242. package/dist/core/fuentes.d.ts +96 -0
  243. package/dist/core/geometriaDePantalla.d.ts +171 -0
  244. package/dist/core/gestorDeTareas.d.ts +295 -0
  245. package/dist/core/hechosDelProyecto.d.ts +70 -0
  246. package/dist/core/hotswap.d.ts +30 -0
  247. package/dist/core/iconos.d.ts +86 -0
  248. package/dist/core/identidadDeProveedor.d.ts +20 -0
  249. package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
  250. package/dist/core/imagenesDeDocumento.d.ts +40 -0
  251. package/dist/core/jsParaRhino.d.ts +3 -0
  252. package/dist/core/juezDelTurno.d.ts +95 -0
  253. package/dist/core/logDeDispositivo.d.ts +67 -0
  254. package/dist/core/memoria.d.ts +18 -0
  255. package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
  256. package/dist/core/modelos.d.ts +198 -0
  257. package/dist/core/modoDeEscritura.d.ts +155 -0
  258. package/dist/core/motor.d.ts +43 -0
  259. package/dist/core/motoresLocales.d.ts +113 -0
  260. package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
  261. package/dist/core/navegacion.d.ts +172 -0
  262. package/dist/core/notify.d.ts +77 -0
  263. package/dist/core/nucleoXone.d.ts +28 -0
  264. package/dist/core/panorama.d.ts +68 -0
  265. package/dist/core/paqueteDeSoporte.d.ts +100 -0
  266. package/dist/core/planDeSubida.d.ts +56 -0
  267. package/dist/core/planes.d.ts +53 -0
  268. package/dist/core/podaDeCheckpoint.d.ts +75 -0
  269. package/dist/core/ports.d.ts +1034 -0
  270. package/dist/core/puedeLanzarse.d.ts +181 -0
  271. package/dist/core/puertosDeAvd.d.ts +59 -0
  272. package/dist/core/recargaEnCaliente.d.ts +52 -0
  273. package/dist/core/referenciasDeImagen.d.ts +36 -0
  274. package/dist/core/remoto.d.ts +76 -0
  275. package/dist/core/repartoDeEncargo.d.ts +80 -0
  276. package/dist/core/rubrica.d.ts +78 -0
  277. package/dist/core/rutaVirtual.d.ts +29 -0
  278. package/dist/core/selectorDeCarpeta.d.ts +59 -0
  279. package/dist/core/serieDeEscrituras.d.ts +58 -0
  280. package/dist/core/settings.d.ts +421 -0
  281. package/dist/core/shellDeAgente.d.ts +177 -0
  282. package/dist/core/skills.d.ts +129 -0
  283. package/dist/core/stitch.d.ts +114 -0
  284. package/dist/core/tareas.d.ts +412 -0
  285. package/dist/core/tareasDelPlan.d.ts +123 -0
  286. package/dist/core/tareasEnElGestor.d.ts +117 -0
  287. package/dist/core/textos.d.ts +8 -0
  288. package/dist/core/topeAgotado.d.ts +55 -0
  289. package/dist/core/traerDeLaMaquina.d.ts +33 -0
  290. package/dist/core/trazaDeErrores.d.ts +83 -0
  291. package/dist/core/tunel.d.ts +45 -0
  292. package/dist/core/turno.d.ts +154 -0
  293. package/dist/core/validacionDeEscritura.d.ts +95 -0
  294. package/dist/core/verificacionDeSubida.d.ts +14 -0
  295. package/dist/core/version.d.ts +35 -0
  296. package/dist/core/xmlBienFormado.d.ts +23 -0
  297. package/dist/core/zipDeAdjunto.d.ts +28 -0
  298. package/dist/core/zipDeSkill.d.ts +74 -0
  299. package/dist/lib/tareaAutonoma.d.ts +36 -0
  300. package/dist/lib/tareaAutonoma.js +259 -0
  301. package/dist/lib/tareaAutonoma.js.map +1 -0
  302. package/dist/lib.d.ts +31 -0
  303. package/dist/lib.js +28 -0
  304. package/dist/lib.js.map +1 -0
  305. package/dist/vendor/hitl.d.ts +69 -0
  306. package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
  307. package/dist/vendor/sqliteSaver.d.ts +22 -0
  308. package/dist/vendor/tokenTracking.d.ts +22 -0
  309. package/dist/web/servidor/arranque.d.ts +1372 -0
  310. package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
  311. package/dist/web/servidor/consolaWeb.d.ts +142 -0
  312. package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
  313. package/dist/web/servidor/datosDeCierre.d.ts +4 -0
  314. package/dist/web/servidor/interrupcion.d.ts +39 -0
  315. package/dist/web/servidor/pielWeb.d.ts +32 -0
  316. package/dist/web/servidor/puenteRemoto.d.ts +80 -0
  317. package/dist/web/servidor/servidor.d.ts +53 -0
  318. package/dist/web/servidor/sesiones.d.ts +342 -0
  319. package/dist/web/servidor/soporte.d.ts +65 -0
  320. package/dist/web/servidor/transporte.d.ts +2751 -0
  321. package/dist/web/servidor/vestibulo.d.ts +952 -0
  322. package/dist/web/servidor/visorOpenui.d.ts +33 -0
  323. package/package.json +9 -1
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Cuándo una tarea está TERMINADA: las condiciones que comprueba el código, más el
3
+ * veredicto de un juez, y por qué ninguna de las dos mitades basta sola.
4
+ *
5
+ * `core/`, o sea datos y reglas puras: ni disco, ni git, ni modelos. Quien MIDE es el
6
+ * corredor (`web/servidor/corredorDeTareas.ts`); aquí solo se decide con lo medido.
7
+ *
8
+ * **Por qué el veredicto del juez no basta solo.** Es la regla que este repo ya tenía
9
+ * escrita, palabra por palabra, para la subida autónoma
10
+ * (`core/cloudstudio.ts#PoliticaDeAprobacion`): «el veredicto del juez no bastará solo:
11
+ * exigirá además condiciones que comprueba el código (verificador en verde, árbol limpio,
12
+ * nada pendiente de aprobar), porque en este repo los avisos son código y no prompt
13
+ * precisamente porque a un modelo se le puede pedir que avise y no avisa». Este fichero es
14
+ * esa frase hecha código. Si el juez pudiera entregar solo, «terminada» valdría lo que
15
+ * valga la buena voluntad de un modelo esa vez.
16
+ *
17
+ * **Y por qué las condiciones tampoco bastan solas**: las tres son propiedades del
18
+ * PROCESO —se escribió, se midió, se puede revisar—, y ninguna dice si lo escrito es lo
19
+ * que se pedía. Eso es lo único que aporta el juez, y es también lo único que se le
20
+ * pregunta.
21
+ *
22
+ * **La tercera condición NO es «árbol de git limpio», y eso está MEDIDO.** El plan la
23
+ * escribía como `arbolSucio: false`, con `arbolLimpio` (`agent/sesiones/gitSync.ts`) detrás. Medido
24
+ * sobre un repo de verdad: una tarea que escribe UN fichero deja `git status --porcelain`
25
+ * con `?? Clientes.xne`, o sea `arbolLimpio === false` — el árbol de una tarea que ha
26
+ * trabajado está sucio POR DEFINICIÓN, así que con esa condición NINGUNA tarea se
27
+ * entregaría nunca. Lo que hay que exigir es otra cosa, y es la que el §0 del diseño
28
+ * nombra: «sin aprobación previa, la revisión posterior es la única forma de mirar». O
29
+ * sea, que lo que la tarea escribió se pueda REVISAR — que exista la marca de git de su
30
+ * sesión y el diff salga (`agent/sesiones/sesionGit.ts#cambiosDeSesion` con `via: "git"`, la misma
31
+ * función que pinta la pestaña Revisión, no una parecida). Un campo llamado `arbolSucio`
32
+ * que midiera eso sería la misma clase de mentira que `aplicados` habría sido para
33
+ * `Tarea.autorizadas`, así que se llama `revisable`.
34
+ */
35
+ import type { HallazgoDelTurno } from "./events.js";
36
+ /**
37
+ * Cómo acabó el verificador en el turno, con TRES valores y no un booleano.
38
+ *
39
+ * Por la misma razón que los estados de una herramienta en `dispositivos.ts`: «no se
40
+ * sabe» no es «está bien». Un turno que no escribió no corre el simulador, otro no lo
41
+ * encuentra en el PATH y otro se cortó antes de llegar — y ninguno de los tres es verde.
42
+ */
43
+ export type EstadoDeVerificador = "verde" | "rojo" | "no-corrio";
44
+ /**
45
+ * Lo que el simulador NO comprueba: documentación. Un `.md` no es parte de la app XOne y `xone-simulator validate`
46
+ * mira la app, así que verificar un turno que solo dejó documentación ni dice nada de lo escrito ni puede fallar por
47
+ * ello — y sin el binario en la máquina tumbaba un turno que había escrito bien (IXCODE-27). LISTA BLANCA y corta a
48
+ * propósito: lo que no esté aquí se sigue verificando, que es el lado seguro.
49
+ */
50
+ export declare const EXTENSIONES_DE_DOCUMENTACION: ReadonlySet<string>;
51
+ /** ¿Son TODAS las rutas documentación? Con alguna ruta: una lista vacía no es «solo documentación», es nada. */
52
+ export declare function soloDocumentacion(rutas: readonly string[]): boolean;
53
+ /**
54
+ * Lo que un TURNO puede decir de sí mismo, y que hasta ahora se tiraba.
55
+ *
56
+ * **Este tipo existe por una deuda medida.** `EjecutorDeTurno` devolvía `Promise<void>` y
57
+ * `crearEjecutorReal` (`cli/main.ts`) descartaba el retorno de `sesion.turno`, así que el
58
+ * `cortadoPorTope` que sabe que quedaron escrituras sin aplicar no salía de ahí. Medido
59
+ * con las tareas autónomas: cuatro ficheros escritos, una escritura abandonada al agotarse
60
+ * el tope de rondas, el verificador sin correr ni una vez, y el kanban diciendo
61
+ * «terminada». Sin abrir este canal, la condición `pendientes: 0` no tiene con qué
62
+ * medirse.
63
+ *
64
+ * Nada de aquí lleva contenido de ficheros: el estado del verificador, cuántas escrituras
65
+ * quedaron colgando, y los hallazgos en la misma forma que ya viaja en el evento
66
+ * `verificacion` —código, severidad, mensaje, fichero RELATIVO y línea—.
67
+ */
68
+ /** Cuánto de la pregunta entra en el motivo: se pinta en el kanban, y la pregunta entera se ve en su chat. */
69
+ export declare const TOPE_DE_PREGUNTA_EN_EL_MOTIVO = 300;
70
+ /** El motivo de una tarea aparcada porque el agente pregunta. Se contesta con el feedback de la tarea. */
71
+ export declare function motivoDePreguntaPendiente(pregunta: string): string;
72
+ export interface ResultadoDeTurno {
73
+ verificador: EstadoDeVerificador;
74
+ /**
75
+ * Escrituras que quedaron esperando aprobación y **no se aplicaron**.
76
+ *
77
+ * Se mide al final del turno y no se deduce de `cortadoPorTope`: por ahí se sale por
78
+ * tres puertas distintas (el tope de rondas, el tope de tandas automáticas y «no hay
79
+ * quién apruebe») y las tres dejan escrituras colgando. El número es lo accionable.
80
+ */
81
+ pendientes: number;
82
+ /**
83
+ * El tope de rondas de escritura que el turno AGOTÓ, si se cortó por eso. Ausente = no se cortó por el tope (o el
84
+ * motor no lo dice). Con él, el motivo dice la verdad: «agotó el tope de N rondas», no «quedaron escrituras esperando
85
+ * aprobación», que en una tarea —sin nadie a quien preguntar— hacía pensar que faltaba aprobar algo.
86
+ */
87
+ topeAgotado?: number;
88
+ /**
89
+ * El turno acabó con una pregunta del agente en espera (TrueForge, `ask_user_question`): su enunciado. Un turno así
90
+ * acaba «limpio», pero no ha terminado nada —espera una respuesta—, así que no pasa por la entrega: se aparca con la
91
+ * pregunta (`motivoDePreguntaPendiente`). Medido en Maset: pasaba por el juez, que dictaba «la sesión no escribió
92
+ * ningún fichero», y ese rojo se quedaba en la tarea mientras trabajaba después. Ausente = no quedó ninguna.
93
+ */
94
+ preguntaPendiente?: string;
95
+ /**
96
+ * Lo BLOQUEANTE medido por el crítico visual en su ÚLTIMA crítica del turno (el estado final de la pantalla): un
97
+ * control tapado, fuera de la pantalla o que falta respecto a la maqueta. Es CRÍTICO para el cierre (`## CRITICAL`);
98
+ * un defecto de detalle no. Ausente = no hubo crítica, o no dio nada bloqueante.
99
+ */
100
+ bloqueantesVisuales?: string[];
101
+ /**
102
+ * Bloqueantes visuales que el agente EXPLICA en su respuesta final (los nombra: los decidió no hacer, o dice por qué
103
+ * no pudo). No son críticos: van como observaciones (`omisionDeclarada`). Medido en Maset: «Turno de Día», los
104
+ * contadores y la quinta tarjeta salían en `## CRITICAL` estando en su apartado de decisiones.
105
+ */
106
+ omisionesExplicadas?: string[];
107
+ /**
108
+ * Bloqueantes de una crítica ANTERIOR a los últimos cambios del proyecto: no describen la pantalla final, así que no son
109
+ * críticos —se dicen como observación, sin comprobar—. Medido en Maset: el desarrollador cambió la pantalla tras la
110
+ * última crítica y el cierre puso en `## CRITICAL` lo que esa crítica había visto antes.
111
+ */
112
+ bloqueantesDesfasados?: string[];
113
+ /**
114
+ * Pantallas de Stitch que el turno pidió por título y no existen (ni casan por palabras). CRÍTICO, decisión suya:
115
+ * medido en Maset, «Menu Listado Entregas» no estaba y la tarea construyó la ventana con otra maqueta.
116
+ */
117
+ pantallasNoEncontradas?: string[];
118
+ /**
119
+ * Las comprobaciones VISUALES del turno, una línea cada una y medidas por el harness: lo que dio cada
120
+ * `comparar_capturas` y `xone_critica_visual`, y el crítico de pantalla del cierre. Van al juez de QA como HECHO:
121
+ * medido en una tarea real (Maset), el juez dictó rojo porque «no consta la validación visual» que el criterio pedía,
122
+ * con seis comparaciones y seis críticas hechas en ese turno — no recibía nada de eso. Ausente = no hubo ninguna.
123
+ */
124
+ comprobacionesVisuales?: string[];
125
+ /**
126
+ * Los hallazgos del turno, si el verificador corrió. Es lo que el informe del verificador
127
+ * ya declara que viaja «al ejecutor como brief, al juez como hecho»
128
+ * (`core/ports.ts#InformeVerificacion`).
129
+ */
130
+ hallazgos?: HallazgoDelTurno[];
131
+ /**
132
+ * Cuántos hallazgos del simulador quedaron FUERA del reparto: los que caen en ficheros
133
+ * que este turno no tocó. El otro lado de `hallazgos`, y hasta ahora solo se pintaba en
134
+ * la consola (evento `verificacion`) y se tiraba.
135
+ *
136
+ * **Viaja porque el juez de QA lo necesita para no acusar al agente de lo que no hizo.**
137
+ * `hallazgos` ya está filtrada por el reparto de `agent/turno/turnoReal.ts#conVerificacion`,
138
+ * pero quien la recibe no puede saber que lo está: en la primera ejecución real del juez
139
+ * eso acabó en un rojo que decía que el turno había modificado los ficheros de los que
140
+ * hablaban los hallazgos. Con este número, la lista se lee por lo que es.
141
+ *
142
+ * **Ausente y CERO no son lo mismo**, como siempre por aquí: `0` es «el verificador
143
+ * corrió y no había ningún otro», y ausente es «no se midió» — el turno que no escribió,
144
+ * el que no tiene simulador, el que se cortó antes. El evento lo omite en cero porque
145
+ * ahí es una línea de consola que no diría nada; esto es un dato, y cero es un dato.
146
+ */
147
+ preexistentes?: number;
148
+ /**
149
+ * Por qué NO corrió, cuando se sabe: el binario que falta, o que esta ejecución no
150
+ * tiene verificador. Ausente con `no-corrio` significa que el turno no llegó a
151
+ * intentarlo — casi siempre porque no escribió nada, o porque se cortó antes.
152
+ */
153
+ motivoSinVerificar?: string;
154
+ /**
155
+ * El texto de las notas (IXCODE-4) que nadie llegó a recibir antes de que el turno cerrara,
156
+ * concatenado. Quien orquesta las sesiones (`vestibulo.ts`) decide con esto si dispara el
157
+ * turno siguiente — este tipo solo REPORTA, no dispara nada.
158
+ */
159
+ notasSobrantes?: string;
160
+ }
161
+ /** Lo del turno más lo que solo se puede medir desde fuera. */
162
+ export interface MedidaDeEntrega extends ResultadoDeTurno {
163
+ /**
164
+ * ¿Se puede REVISAR lo que la tarea escribió? O sea: existe la marca de git de su sesión
165
+ * y el diff sale (`cambiosDeSesion(...).via === "git"`).
166
+ *
167
+ * No es «el árbol está limpio» (ver la cabecera): es que lo escrito sea visible. Sin
168
+ * aprobación previa, ese diff es el ÚNICO momento en que una persona puede mirar lo que
169
+ * hizo una tarea; entregar trabajo que nadie puede ver sería exactamente el sitio vacío
170
+ * que el modal de aprobación dejó.
171
+ */
172
+ revisable: boolean;
173
+ /**
174
+ * ¿Cambió la sesión algún fichero, **SEGÚN GIT**? `undefined` = no se sabe.
175
+ *
176
+ * De aquí depende que una tarea de SOLO LECTURA se pueda entregar, y la fuente importa:
177
+ * lo dice `cambiosDeSesion` —la misma que `revisable`— y **nunca `autorizadas`**. Aquello
178
+ * es una pista de lo que el agente quiso escribir, y puede llevar rutas que las guardas
179
+ * rechazaron; decidir con ella sería decidir con la intención en vez de con el hecho.
180
+ *
181
+ * Solo se puede afirmar cuando hay marca (`via: "git"`): sin ella no es que no escribiera,
182
+ * es que no hay con qué mirarlo — y entonces esto queda `undefined` y la condición del
183
+ * verificador se exige como siempre. Es la distinción de siempre entre «ninguno» y «no se
184
+ * sabe», y aquí colapsarla sería un camino para entregar sin verificar.
185
+ */
186
+ escribio?: boolean;
187
+ /**
188
+ * QUÉ cambió, según git: las rutas RELATIVAS del mismo diff del que sale `escribio`
189
+ * (`corredorDeTareas.ts#revisionConGit`, una sola medida para las dos cosas, así que no
190
+ * pueden discrepar). De aquí sale el HECHO que se le cuenta al juez de QA.
191
+ *
192
+ * **Existe porque `autorizadas` no puede hacer este trabajo.** Aquello se apunta al
193
+ * autorizar la escritura y es la intención del agente; esto es un diff contra el «antes»
194
+ * de la sesión. Todo el modo de fallo medido del juez era «no puedo comprobar la
195
+ * existencia ni el contenido de X»: darle el hecho fichero a fichero lo quita de raíz, y
196
+ * de paso le deja juzgar la cobertura del encargo ruta por ruta.
197
+ *
198
+ * **Ausente y VACÍA no son lo mismo**: ausente es «no se pudo preguntar a git» —sin marca
199
+ * no hay con qué comparar— y `[]` es «git dice que no cambió nada». Colapsarlas haría que
200
+ * un proyecto sin marca pareciera un proyecto intacto.
201
+ */
202
+ cambiados?: readonly string[];
203
+ /**
204
+ * Cuántas escrituras AUTORIZÓ el turno (`Tarea.autorizadas`), si consta.
205
+ *
206
+ * No es del turno ni de git: es de la tarea, y entra por su propio parámetro. Está aquí
207
+ * para una sola condición —autorizó escrituras y git no ve ni un cambio—, y **ausente es
208
+ * «no consta»**: una tarea de antes de que esto existiera, o un ejecutor que no lo informa.
209
+ * Acusar con un dato que no se tiene es exactamente lo que estas condiciones no hacen.
210
+ */
211
+ autorizadas?: number;
212
+ }
213
+ /** El veredicto de un juez de QA. Texto para leer y hallazgos, nunca contenido de ficheros. */
214
+ export interface VeredictoDeTarea {
215
+ /** `indeterminado` = no se entendió lo que contestó. No es verde. */
216
+ veredicto: "verde" | "rojo" | "indeterminado";
217
+ /** Una o dos frases. Es lo que una persona lee en la tarjeta. */
218
+ resumen: string;
219
+ /** Lo que le falta o le sobra, una frase por hallazgo. */
220
+ hallazgos?: string[];
221
+ /**
222
+ * Con qué condición de MENOS se entregó. **Lo pone el CÓDIGO, no el juez**, y viaja aquí
223
+ * porque el `motivo` de una tarea terminada no existe (`conEstado` lo borra a propósito:
224
+ * «el motivo vive SOLO en el estado que lo explica») y este es el único sitio que
225
+ * sobrevive a una entrega.
226
+ *
227
+ * Hoy son `SALVEDAD_SIN_ESCRITURAS` y `SALVEDAD_SOLO_DOCUMENTACION`. Una entrega con una condición menos no puede
228
+ * parecer una entrega normal — y eso solo es cierto porque este campo VIAJA: el veredicto
229
+ * entero sale por el cable (`web/servidor/transporte.ts#filaDeTarea`) y lo pinta
230
+ * `apps/web/src/componentes/EntregaDeTarea.tsx`. Estuvo un tiempo sin cablearse, y
231
+ * entonces esta frase era falsa en la única pantalla donde importa.
232
+ */
233
+ salvedad?: string;
234
+ }
235
+ /** ¿Se entrega? Y si no, POR QUÉ — que es lo único accionable de una tarjeta aparcada. */
236
+ export interface Entrega {
237
+ entregable: boolean;
238
+ motivo?: string;
239
+ /**
240
+ * Con qué condición de MENOS se entregó, cuando fue el caso. Texto para leer.
241
+ *
242
+ * Una entrega con una condición menos no puede parecer una entrega normal: hoy la única
243
+ * es la tarea que no escribió nada, donde el verificador no aplica y el veredicto del
244
+ * juez queda como la única condición de contenido. Quien lo lea tiene derecho a saberlo.
245
+ */
246
+ salvedad?: string;
247
+ /**
248
+ * Lo CRÍTICO, aparte de si se entrega: una tarea cortada (el tope de rondas), que no llegó a escribir lo que autorizó,
249
+ * o con un bloqueante visual medido. Decisión suya: una tarea que se completó con problemas o detalles (un rojo del
250
+ * juez, errores del verificador) NO es crítica. Va bajo `## CRITICAL` en el comentario de cierre. Ausente = nada.
251
+ */
252
+ criticos?: string[];
253
+ /** Lo que falló y NO es crítico (verificador, juez, marca de git…): observaciones del cierre. Ausente = nada. */
254
+ observaciones?: string[];
255
+ }
256
+ /**
257
+ * La medida a partir de lo que el turno informó. **Ausente no es vacío.**
258
+ *
259
+ * Un ejecutor que no informa —el guionizado, o una piel que no reenvíe el retorno— no ha
260
+ * dicho que el verificador esté verde: ha dicho nada. Darlo por verde sería la entrega
261
+ * silenciosa que todo esto existe para impedir, así que se traduce a `no-corrio` DICIENDO
262
+ * que nadie informó, que es otra cosa que «el simulador no está».
263
+ */
264
+ export declare function medidaDeEntrega(resultado: ResultadoDeTurno | undefined,
265
+ /** Lo que dice git de la sesión. `escribio` y `cambiados` solo se afirman con marca: ver
266
+ * los campos. Ausente no se rellena con nada, en las dos. */
267
+ revision: {
268
+ revisable: boolean;
269
+ escribio?: boolean;
270
+ cambiados?: readonly string[];
271
+ },
272
+ /** Cuántas escrituras autorizó el turno, si consta. Ver `MedidaDeEntrega.autorizadas`. */
273
+ autorizadas?: number): MedidaDeEntrega;
274
+ /**
275
+ * Lo que se dice de una entrega a la que le faltó una condición porque no APLICABA.
276
+ *
277
+ * Se exporta para que quien la lea (y quien la pruebe) no la reescriba a mano.
278
+ */
279
+ export declare const SALVEDAD_SIN_ESCRITURAS: string;
280
+ export declare const SALVEDAD_SOLO_DOCUMENTACION: string;
281
+ /**
282
+ * Las tres condiciones que comprueba el CÓDIGO. Pura.
283
+ *
284
+ * El motivo nombra TODAS las que fallaron y no la primera: es el caso medido de la deuda
285
+ * que esta pieza hereda —un turno cortado por el tope tiene escrituras pendientes Y un
286
+ * verificador que no corrió—, y decir solo una de las dos manda a adivinar la otra. Es la
287
+ * misma regla del aviso de honestidad que saca los NOMBRES de los ficheros en vez de un
288
+ * contador.
289
+ */
290
+ export declare function condicionesDeEntrega(medida: MedidaDeEntrega): Entrega;
291
+ /**
292
+ * La decisión final: las condiciones Y el juez.
293
+ *
294
+ * El orden importa y es el de siempre, fail-closed: si una condición falla, el veredicto
295
+ * del juez no se mira siquiera — su motivo sería ruido sobre un hecho. Quien llama puede
296
+ * además preguntar primero por `condicionesDeEntrega` para no gastar una llamada del
297
+ * modelo más caro cuando ya se sabe que no se entrega; esta función vuelve a comprobarlas
298
+ * porque la garantía no puede depender de que quien llama lo haya hecho en ese orden.
299
+ *
300
+ * **Sin veredicto no se entrega.** Es lo que hace que «el juez no se puede usar» sea un
301
+ * fallo del entorno con la tarea esperando feedback, y no una entrega en silencio.
302
+ */
303
+ export declare function decisionDeEntrega(medida: MedidaDeEntrega, veredicto: VeredictoDeTarea | undefined): Entrega;
304
+ /**
305
+ * El motivo de una tarea que agotó su tope de rondas de escritura: qué pasó, qué no se aplicó y cómo seguir. Medido en una
306
+ * tarea real (Maset), el motivo de antes —«quedaron 3 escritura(s) esperando aprobación»— no decía que el turno se había
307
+ * cortado ni qué hacer con una ventana casi lista.
308
+ */
309
+ /** El crítico de una tarea que no hizo el trabajo (`decisionDeEntrega`). */
310
+ /** El crítico de una pantalla de Stitch pedida que no existe: la persona tiene que elegir el diseño. */
311
+ export declare const criticoDePantallaNoEncontrada: (titulo: string) => string;
312
+ export declare const CRITICO_SIN_HACER = "no hizo el trabajo: no cambi\u00F3 ning\u00FAn fichero del proyecto y el juez no la da por cumplida";
313
+ /**
314
+ * ¿Explica el agente este bloqueante en su respuesta final? Cuando TODO lo que el bloqueante cita entre «» aparece en
315
+ * ella (sin mirar mayúsculas): lo nombra, así que lo decidió o dice por qué no está. Sin nada citado, no. Puro.
316
+ */
317
+ export declare function omisionExplicada(bloqueante: string, respuestaFinal: string): boolean;
318
+ /** El tope agotado dicho para el `## CRITICAL` de una tarea que se CIERRA: sin «Continuar», que una cerrada no tiene. */
319
+ export declare const criticoDeTopeAgotado: (tope: number, pendientes: number) => string;
320
+ export declare const motivoDeTopeAgotado: (tope: number, pendientes: number) => string;
321
+ /** Cuántas comprobaciones visuales llegan al juez: las ÚLTIMAS, que son las que describen cómo quedó. */
322
+ export declare const TOPE_DE_COMPROBACIONES_AL_JUEZ = 8;
323
+ /**
324
+ * Una comprobación visual en UNA línea para el juez: la herramienta, sobre qué captura, y lo primero que dijo, recortado.
325
+ * Sin saltos de línea: acaba en un prompt y en una lista que se lee de un vistazo.
326
+ */
327
+ export declare function lineaDeComprobacion(quien: string, sobre: string | undefined, texto: string, tope?: number): string;
328
+ /**
329
+ * **El CIERRE de una tarea que acaba**: lo crítico y las observaciones, para el comentario del ticket.
330
+ *
331
+ * Decisión suya: una tarea de fondo NO se queda esperando a que la persona decida al acabar —se cierra siempre—, y lo
332
+ * que haya quedado mal se DICE en el comentario. Lo crítico (`Entrega.criticos`: cortada, sin escribir, un bloqueante
333
+ * visual) va bajo `## CRITICAL`; lo demás de la entrega —un rojo del juez, errores del verificador, que no corriera—
334
+ * son OBSERVACIONES: «si la completó con problemas o detalles, eso no es crítico». Del motivo se quitan los fallos que
335
+ * ya son críticos, para no contarlos dos veces. Puro.
336
+ */
337
+ export interface CierreDeTarea {
338
+ criticos: string[];
339
+ observaciones: string[];
340
+ }
341
+ export declare function cierreDeLaEntrega(entrega: Entrega, veredicto: VeredictoDeTarea | undefined): CierreDeTarea;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Eventos que nacen FUERA del flujo del grafo, entrelazados con él.
3
+ *
4
+ * Existe por un silencio medido: un agente EXTERNO (Claude Code) corre en otro proceso, así
5
+ * que ni una de sus tools cruza el stream de langgraph — entre la línea de delegación y su
6
+ * respuesta final hay minutos sin nada que mirar, y una pantalla quieta se lee como que se
7
+ * ha colgado. Lo que hace falta no es una piel nueva: es que su actividad entre por el
8
+ * MISMO sitio que la de todos, para que el colapsador la agrupe igual (`core/notify.ts`),
9
+ * la bitácora la cuente igual y las tres pieles no se enteren de que hay dos orígenes.
10
+ *
11
+ * Es la misma forma que `conVerificacion`: un generador que envuelve a `aEventos`. La
12
+ * diferencia es que aquél añade AL FINAL y este tiene que intercalar MIENTRAS, que es lo
13
+ * único delicado de este fichero.
14
+ */
15
+ import type { DomainEvent } from "./events.js";
16
+ /**
17
+ * El buzón por el que se empujan esos eventos. Quien lo llena no sabe nada del flujo, y
18
+ * quien lo vacía no sabe nada de quién lo llena — que es lo que permite que el adaptador
19
+ * del agente externo viva en `agent/` sin conocer el turno.
20
+ */
21
+ export declare class ColaDeEventos {
22
+ private cola;
23
+ private avisar;
24
+ /** Encola y despierta a quien esté esperando. Nunca bloquea a quien lo llama. */
25
+ empujar(evento: DomainEvent): void;
26
+ /** Se lleva lo que haya, de una vez. Vacío es una respuesta válida. */
27
+ vaciar(): DomainEvent[];
28
+ /**
29
+ * Una promesa que se resuelve cuando hay algo. Se guarda UN solo resolutor: si hubiera una
30
+ * cola de esperas, la de una vuelta anterior seguiría viva y despertaría de más.
31
+ */
32
+ esperar(): Promise<void>;
33
+ }
34
+ /**
35
+ * El flujo del grafo más lo que se vaya encolando, en el orden en que ocurre.
36
+ *
37
+ * **La trampa de este fichero, y la razón de que `siguiente` sea una variable:** un
38
+ * `AsyncIterator` no admite dos `next()` vivos a la vez —el segundo se comería un valor o
39
+ * reventaría según la implementación—, así que se pide UNA vez, se guarda la promesa y se
40
+ * vuelve a esperar la MISMA en cada vuelta de la carrera. Solo cuando esa promesa se ha
41
+ * consumido de verdad se pide la siguiente. Volver a llamar a `it.next()` en cada vuelta
42
+ * sería el bug clásico de este patrón: se pierden eventos justo cuando hay actividad en los
43
+ * dos lados, que es cuando esto se usa.
44
+ *
45
+ * Y lo que quede encolado cuando el flujo se agota se dice IGUAL, antes de terminar: un
46
+ * evento que llegó tarde no es un evento que no ocurrió.
47
+ */
48
+ export declare function entrelazar(fuente: AsyncIterable<DomainEvent>, cola: ColaDeEventos): AsyncIterable<DomainEvent>;
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Cuánto tiene que PENSAR un modelo antes de contestar, y qué modelos admiten que se les
3
+ * pida.
4
+ *
5
+ * Es la tercera tabla de esta familia, detrás de `contextos.ts#TOPES` y de
6
+ * `modelos.ts#pideThinkingAdaptativo`, y existe por el mismo motivo que ellas: el
7
+ * parámetro no significa lo mismo en todos, lo que no se reconoce hay que OMITIRLO, y
8
+ * pedirlo a ciegas no da una respuesta peor — da un 400.
9
+ *
10
+ * **La unidad es el MODELO, nunca el proveedor**, y eso está medido: dentro de NVIDIA,
11
+ * `nvidia/nemotron-3-super-120b-a12b` acepta siete niveles y `openai/gpt-oss-20b` acepta
12
+ * tres, contra el mismo host y con la misma clave. Una tabla por proveedor habría sido
13
+ * falsa el primer día.
14
+ *
15
+ * **Y los niveles son una LISTA por modelo, no tres fijos.** Anthropic tiene cinco desde
16
+ * Opus 4.7 y cuatro en la 4.6; Gemini tres; `nvidia/nemotron-3` cinco y `openai/gpt-oss`
17
+ * tres. Pintar siempre los mismos tres daría, según el modelo, o un control recortado o
18
+ * dos opciones que hacen lo mismo sin decirlo — la misma clase de mentira que un contador
19
+ * a cero que nadie ha medido.
20
+ *
21
+ * **Lo desconocido devuelve `undefined`**: ni se ofrece control ni se manda parámetro. Es
22
+ * el mismo lado conservador de `pideThinkingAdaptativo`, y aquí es literal — un nivel
23
+ * mandado a quien no lo admite se contesta con un error duro, comprobado en los tres
24
+ * proveedores que se pudieron medir.
25
+ */
26
+ import type { Agente } from "./agentes.js";
27
+ import type { Proveedor } from "./modelos.js";
28
+ /**
29
+ * Los niveles que este harness sabe nombrar.
30
+ *
31
+ * `none` NO está, y es deliberado: en DeepSeek significa «no pienses», o sea que es un
32
+ * INTERRUPTOR y no un nivel. Mezclar «cuánto» con «si» en el mismo desplegable haría que
33
+ * un control que se lee como una intensidad apagara una capacidad.
34
+ */
35
+ export type Esfuerzo = "low" | "medium" | "high" | "xhigh" | "max";
36
+ export declare const ESFUERZOS: readonly Esfuerzo[];
37
+ export declare function esEsfuerzo(valor: string): valor is Esfuerzo;
38
+ /**
39
+ * Lo que el servidor ha dicho de ESTE modelo, cuando se le puede preguntar.
40
+ *
41
+ * Hoy solo Ollama, y por eso el campo es uno solo: su `POST /api/show` devuelve
42
+ * `capabilities`, y ahí está `"thinking"` o no está. Medido: `granite4.2:3b`,
43
+ * `glm-5.3-flash:cloud` y `qwen3.8:27b-mlx` la tienen; `ministral-3:3b` no, y pedirle que
44
+ * piense contesta `"ministral-3:3b" does not support thinking`.
45
+ *
46
+ * Entra por PARÁMETRO en vez de consultarse aquí porque son dos cadencias distintas y este
47
+ * módulo es puro: preguntar es asíncrono, toca la red y vive en `agent/`. Es el mismo
48
+ * reparto que ya declara `contextos.ts` sobre el `max_input_tokens` del catálogo vivo, solo
49
+ * que aquí el dato sí llega — quien lo rellena es `agent/config/catalogoModelos.ts`.
50
+ */
51
+ export interface CapacidadesVivas {
52
+ /** ¿El servidor dice que este modelo piensa? Ausente = no se ha preguntado. */
53
+ piensa?: boolean;
54
+ }
55
+ /**
56
+ * Los niveles de esfuerzo que admite un modelo, o `undefined` si no admite ninguno —que es
57
+ * también lo que se devuelve cuando no se sabe, porque no saberlo y no poder son lo mismo
58
+ * para quien tiene que decidir si manda el parámetro.
59
+ *
60
+ * **Ollama va por las capacidades vivas y no por la tabla**, y esa asimetría es el hallazgo
61
+ * que la justifica: sus modelos los elige el usuario y no hay prefijo que los describa, pero
62
+ * el servidor contesta por cada uno. Sin capacidades —porque aún no se preguntó— no se
63
+ * afirma nada, que es distinto de afirmar que no puede.
64
+ */
65
+ export declare function nivelesDeEsfuerzo(proveedor: Proveedor, modelo: string, vivas?: CapacidadesVivas): readonly Esfuerzo[] | undefined;
66
+ /**
67
+ * Lo que el servidor de Ollama valida, y está medido en su propio mensaje de error: un
68
+ * `think: "banana"` contesta `must be "high", "medium", "low", "max", true, or false`.
69
+ *
70
+ * O sea que Ollama SÍ tiene niveles; que el tipo de `@langchain/ollama` los declare como un
71
+ * `boolean` es una limitación del cliente y no del servidor, y el cliente pasa el valor tal
72
+ * cual al request.
73
+ *
74
+ * **Y aquí hay un límite declarado que no se puede cerrar desde esta tabla**: que el
75
+ * servidor acepte el nivel no significa que el modelo lo honre. Medido: en `granite4.2:3b`
76
+ * solo `low` cambia algo y `medium`/`high`/`max` son idénticos entre sí; en
77
+ * `glm-5.3-flash:cloud` —que es el modelo POR OMISIÓN de este repo— `high` se comporta como
78
+ * apagado y solo `medium` piensa. No es monótono y no lo podemos arreglar: lo pone el
79
+ * template de cada modelo. Quien pinte esto tiene que DECIRLO.
80
+ */
81
+ export declare const NIVELES_DE_OLLAMA: readonly Esfuerzo[];
82
+ /**
83
+ * El nivel que se va a usar de verdad, dado lo que el usuario eligió y lo que el modelo
84
+ * admite.
85
+ *
86
+ * Existe porque elegir y aplicar están separados en el tiempo: el esfuerzo se fija una vez
87
+ * y el modelo se cambia después, así que un `xhigh` elegido con Opus 5 sigue puesto cuando
88
+ * alguien se pasa a Gemini, que no lo tiene. Ahí NO se manda el parámetro y NO se sustituye
89
+ * por el más parecido: bajar `xhigh` a `high` por nuestra cuenta sería decidir en nombre de
90
+ * alguien, y en este harness eso se paga en tokens que no pidió.
91
+ */
92
+ export declare function esfuerzoAplicable(elegido: Esfuerzo | undefined, proveedor: Proveedor, modelo: string, vivas?: CapacidadesVivas): Esfuerzo | undefined;
93
+ /**
94
+ * A qué CLASE de trabajo pertenece un subagente, sacada de sus DATOS y no de su nombre (mismo
95
+ * criterio que `recibeBuscarIcono`): un subagente propio con `ejecucion: true` es de la misma
96
+ * clase que `device-controller`.
97
+ *
98
+ * Solo hay una clase con nivel por omisión: **`mecanica`**, quien EJECUTA comandos y lee salidas.
99
+ * Consultor y analista son los dos `soloLectura` y no hay dato que los separe, y uno es una
100
+ * búsqueda y el otro escribe el plan; escritores y orquestador son donde se cometen los errores.
101
+ * Ahí no se decide por nadie: se queda lo que haga el proveedor.
102
+ */
103
+ export type ClaseDeTrabajo = "mecanica";
104
+ export declare function claseDeTrabajo(a: Pick<Agente, "ejecucion">): ClaseDeTrabajo | undefined;
105
+ /**
106
+ * El interruptor de PENSAMIENTO, aparte del esfuerzo: «cuánto» y «si» son preguntas distintas (`none` no está
107
+ * entre los niveles por eso mismo). Un `.md` lo declara (`pensamiento: apagado`); ausente decide la familia.
108
+ */
109
+ export type Pensamiento = "apagado" | "activo";
110
+ export declare function esPensamiento(valor: string): valor is Pensamiento;
111
+ /**
112
+ * Qué modelos admiten apagar el pensamiento con `thinking: {type: "disabled"}`. Solo DeepSeek, y MEDIDO contra la
113
+ * API: sin nada piensa, con `low` o `high` piensa casi igual (25, 23 y 23 tokens con una pregunta fácil), y con
114
+ * `thinking` desactivado la salida bajó de 27 tokens a 1. Lo demás no se sabe, y un parámetro que un modelo no
115
+ * conoce se paga en un 400: sin fila no hay interruptor.
116
+ */
117
+ export declare function admiteApagarElPensamiento(proveedor: Proveedor, modelo: string): boolean;
118
+ export declare function pensamientoPorOmision(proveedor: Proveedor, clase: ClaseDeTrabajo | undefined): Pensamiento | undefined;
119
+ /** El pensamiento que se va a aplicar de verdad: lo que dice el agente, o la omisión de su familia, y solo si el modelo lo admite. */
120
+ export declare function pensamientoAplicable(elegido: Pensamiento | undefined, proveedor: Proveedor, modelo: string, clase: ClaseDeTrabajo | undefined): Pensamiento | undefined;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * El esqueleto de un proyecto XOne mínimo, como DATOS y sin tocar el disco.
3
+ *
4
+ * Todo el contenido sale del «Hola Mundo» de la documentación XOne
5
+ * (`xone-help-docs`, topico 01 §9 y guia de UI §8.2): **nada inventado**. XOne
6
+ * ignora en silencio lo desconocido, así que un atributo o una función
7
+ * inventada no da error — da un bug mudo, y un esqueleto recién creado que no
8
+ * arranca sería la peor primera impresión posible.
9
+ *
10
+ * La escritura en disco vive en `agent/config/crearProyecto.ts`: aquí solo se DECIDE
11
+ * qué ficheros hay y qué llevan dentro, que es exactamente lo que se puede
12
+ * probar sin conexión, sin simulador y sin clave (el invariante de `npm test`).
13
+ */
14
+ export interface DatosDelProyecto {
15
+ /** Nombre interno, sin espacios ni caracteres especiales (`Name=` del app.ini). */
16
+ nombre: string;
17
+ /** Título visible de la aplicación. */
18
+ titulo: string;
19
+ orientacion: "portrait" | "landscape";
20
+ /** Con login: `autologon="false"`, `<login-coll>` en app.xml y `Login.xne`. */
21
+ login: boolean;
22
+ }
23
+ export interface Ficha {
24
+ /** Ruta relativa a la raíz del proyecto. */
25
+ ruta: string;
26
+ contenido: string;
27
+ }
28
+ /**
29
+ * Las carpetas del runtime, VACÍAS y a propósito:
30
+ *
31
+ * - `bd/`: el `gestion.db` lo GENERA el simulador; un `.db` escrito a mano no
32
+ * sería una base de datos, sería un fichero que estorba.
33
+ * - `icons/`: los PNG no se pueden generar aquí (salen de Material Icons
34
+ * convertidos con cairosvg). La carpeta existe porque `app.ini` la declara.
35
+ * - `files/`: la carpeta de archivos dinámicos del runtime.
36
+ */
37
+ export declare function carpetasDelEsqueleto(): string[];
38
+ export declare function generarEsqueleto(datos: DatosDelProyecto): Ficha[];
@@ -0,0 +1,70 @@
1
+ /**
2
+ * El ESTILO de cada control, MEDIDO en los píxeles de su caja: lo que `descripcionDePantalla.ts` le pedía al modelo
3
+ * (forma, fondo, color del texto, tamaño de la letra, borde, texto recortado, alineación), sacado de la imagen con
4
+ * aritmética. Puro: recibe los píxeles ya en RGBA.
5
+ *
6
+ * Existe porque describirlo con el modelo no sirvió, medido sobre la calculadora de MyAllXOne: la MISMA imagen
7
+ * descrita dos veces salía con diecisiete teclas de otra forma y colores a más de cien puntos, y ninguna de dos
8
+ * pasadas vio el «12 + 3» recortado del visor. Con las cajas del árbol de controles (la captura) o del `code.html`
9
+ * renderizado (la maqueta), cada medida es la misma cada vez y cuesta milisegundos.
10
+ *
11
+ * Cómo se mide, dentro de la caja de un control:
12
+ * - **Fuera**: el color del anillo de píxeles que rodea la caja (lo que hay detrás).
13
+ * - **Fondo**: el color más repetido dentro de la caja, si se distingue de lo de fuera; si no, el control no pinta
14
+ * fondo propio (un texto suelto) y no tiene forma que medir.
15
+ * - **Forma**: sobre el rectángulo que ocupa el fondo, cuánto se come cada esquina (radio) frente al lado corto, y
16
+ * la proporción ancho/alto: recta, redondeada, píldora o círculo.
17
+ * - **Tinta**: los píxeles lejos del fondo Y de lo de fuera: el texto o el icono. De ahí el color del texto, la
18
+ * altura de la letra (en fracción del ANCHO de la pantalla: aparato y maqueta tienen distinta proporción de alto) y
19
+ * la alineación.
20
+ * - **Recortado**: hay tinta en la primera o la última fila de la caja: las letras siguen más allá del borde.
21
+ * - **Borde**: los lados de la caja (o del fondo) son una línea de un color distinto del de dentro.
22
+ */
23
+ import type { ImagenRgba } from "./compararCapturas.js";
24
+ import type { Caja } from "./geometriaDePantalla.js";
25
+ import type { ControlVisto, Forma, Letra, PantallaDescrita } from "./descripcionDePantalla.js";
26
+ /** Un control medido: los campos de estilo de `ControlVisto`, con las cifras de las que salen sus categorías. */
27
+ export type EstiloMedido = Omit<ControlVisto, "texto" | "unidades" | "centro">;
28
+ /** Las categorías de forma a partir de las cifras. Pura y exportada para el test. */
29
+ export declare function formaDe(radio: number, proporcion: number): Forma;
30
+ /** El tamaño de letra a partir de su altura (fracción del ancho de pantalla). */
31
+ export declare function letraDe(altura: number): Letra;
32
+ /** Mide un control. `img` es la imagen entera; `caja`, en sus píxeles. Lo que no se puede medir no se pone. */
33
+ export declare function medirControl(img: ImagenRgba, caja: Caja): EstiloMedido;
34
+ /** Un control que medir: su texto (o `[NOMBRE]` si no tiene) y su caja en los píxeles de la imagen. */
35
+ export interface ControlAMedir {
36
+ texto: string;
37
+ caja: Caja;
38
+ /**
39
+ * Su caja ABRAZA su texto (un `<span>` de la maqueta, no un botón): dónde cae el texto dentro de ella no dice nada,
40
+ * así que su alineación no se mide. Medido en Maset: cada título salía «centrado» y el del aparato «a la izquierda».
41
+ */
42
+ ajustado?: true;
43
+ /**
44
+ * La caja de su ENVOLTORIO (`geometriaDePantalla.ts#cajaParaElEstilo`: el frame que hace de botón o de píldora). De
45
+ * ella salen la forma, el fondo y el borde; de la propia, lo de la LETRA —recorte, tamaño, color, alineación—, que es
46
+ * de la etiqueta: medido sobre el frame, el «RAD» recortado de la calculadora dejaba de verse.
47
+ */
48
+ envoltorio?: Caja;
49
+ }
50
+ export declare function pantallaMedida(img: ImagenRgba, filas: readonly (readonly ControlAMedir[])[]): PantallaDescrita;
51
+ /** Los bloques que no están dentro de otro: la cabecera y no su título, el visor y no sus filas. Pura. */
52
+ export declare function bloquesDeFuera(cajas: readonly Caja[]): Caja[];
53
+ /** Un bloque y la imagen en la que vive, con la franja útil de la pantalla (sin barras del sistema), en píxeles. */
54
+ export interface BloquesAMedir {
55
+ img: ImagenRgba;
56
+ bloques: readonly Caja[];
57
+ util: {
58
+ arriba: number;
59
+ abajo: number;
60
+ };
61
+ }
62
+ /**
63
+ * Compara el COLOR y la FORMA de los bloques anchos, emparejados por su altura relativa dentro de la franja útil de
64
+ * cada pantalla (la maqueta y el aparato no tienen la misma proporción). Pura. Existe por la calculadora: una cabecera
65
+ * amarilla donde la maqueta tiene la del fondo oscuro no la veía nadie, porque solo se comparaban los botones.
66
+ *
67
+ * Solo dice DIFERENCIAS de lo emparejado: un bloque sin pareja no es noticia, porque los dos lados no parten igual
68
+ * (el aparato puede tener un bloque por fila de teclas donde la maqueta tiene un solo panel).
69
+ */
70
+ export declare function compararBloques(maqueta: BloquesAMedir, aparato: BloquesAMedir): string[];