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.
Files changed (335) hide show
  1. package/apps/web/dist/assets/{EditorDeFichero-BeWDctgN.js → EditorDeFichero-4HFwLke_.js} +1 -1
  2. package/apps/web/dist/assets/index-C57A_ylS.css +1 -0
  3. package/apps/web/dist/assets/index-CYZEmLsX.js +506 -0
  4. package/apps/web/dist/assets/{php-D3QdOnb8.js → php-CdQiFsq1.js} +1 -1
  5. package/apps/web/dist/assets/{ruby-DDAcW-Z2.js → ruby-3JrCXo0h.js} +1 -1
  6. package/apps/web/dist/index.html +2 -2
  7. package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
  8. package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
  9. package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
  10. package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
  11. package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
  12. package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
  13. package/dist/agent/cloudstudio/crearRama.js +16 -0
  14. package/dist/agent/cloudstudio/crearRama.js.map +1 -0
  15. package/dist/agent/cloudstudio/descarga.d.ts +44 -0
  16. package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
  17. package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
  18. package/dist/agent/cloudstudio/subida.d.ts +61 -0
  19. package/dist/agent/cloudstudio/subida.js +7 -1
  20. package/dist/agent/cloudstudio/subida.js.map +1 -1
  21. package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
  22. package/dist/agent/cloudstudio/zip.d.ts +13 -0
  23. package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
  24. package/dist/agent/conectores/gestorJira.d.ts +50 -0
  25. package/dist/agent/conectores/gestorNotion.d.ts +45 -0
  26. package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
  27. package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
  28. package/dist/agent/config/authEnDisco.d.ts +43 -0
  29. package/dist/agent/config/catalogoModelos.d.ts +79 -0
  30. package/dist/agent/config/configEnDisco.d.ts +235 -0
  31. package/dist/agent/config/crearProyecto.d.ts +20 -0
  32. package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
  33. package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
  34. package/dist/agent/config/entorno.d.ts +83 -0
  35. package/dist/agent/config/fuentesEnRed.d.ts +12 -0
  36. package/dist/agent/config/gemini.d.ts +5 -0
  37. package/dist/agent/config/iconosEnRed.d.ts +10 -0
  38. package/dist/agent/config/identidadEnDisco.d.ts +27 -0
  39. package/dist/agent/config/modelos.d.ts +77 -0
  40. package/dist/agent/config/modelosDeMotor.d.ts +52 -0
  41. package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
  42. package/dist/agent/config/persona.d.ts +1 -0
  43. package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
  44. package/dist/agent/config/settingsEnDisco.d.ts +206 -0
  45. package/dist/agent/config/versionEnDisco.d.ts +17 -0
  46. package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
  47. package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
  48. package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
  49. package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
  50. package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
  51. package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
  52. package/dist/agent/dispositivos/hotswap.d.ts +194 -0
  53. package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
  54. package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
  55. package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
  56. package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
  57. package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
  58. package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
  59. package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
  60. package/dist/agent/exportarPdf.d.ts +72 -0
  61. package/dist/agent/grafo/aprendido.d.ts +28 -0
  62. package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
  63. package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
  64. package/dist/agent/grafo/atributosXone.d.ts +31 -0
  65. package/dist/agent/grafo/buscarIcono.d.ts +32 -0
  66. package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
  67. package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
  68. package/dist/agent/grafo/compararCapturas.d.ts +22 -0
  69. package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
  70. package/dist/agent/grafo/criticaVisual.d.ts +60 -0
  71. package/dist/agent/grafo/describirImagen.d.ts +79 -0
  72. package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
  73. package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
  74. package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
  75. package/dist/agent/grafo/excluirTools.d.ts +37 -0
  76. package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
  77. package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
  78. package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
  79. package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
  80. package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
  81. package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
  82. package/dist/agent/grafo/navegacionXone.d.ts +60 -0
  83. package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
  84. package/dist/agent/grafo/perfiles.d.ts +225 -0
  85. package/dist/agent/grafo/proyecto.d.ts +450 -0
  86. package/dist/agent/grafo/skills.d.ts +181 -0
  87. package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
  88. package/dist/agent/grafo/unirSecciones.d.ts +20 -0
  89. package/dist/agent/grafo/validacionXone.d.ts +35 -0
  90. package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
  91. package/dist/agent/grafo/xoneAgent.d.ts +166 -0
  92. package/dist/agent/motores/motoresLocales.d.ts +87 -0
  93. package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
  94. package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
  95. package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
  96. package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
  97. package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
  98. package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
  99. package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
  100. package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
  101. package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
  102. package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
  103. package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
  104. package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
  105. package/dist/agent/motores/trueforge/notas.d.ts +48 -0
  106. package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
  107. package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
  108. package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
  109. package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
  110. package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
  111. package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
  112. package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
  113. package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
  114. package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
  115. package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
  116. package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
  117. package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
  118. package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
  119. package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
  120. package/dist/agent/planesEnDisco.d.ts +18 -0
  121. package/dist/agent/publicarPlan.d.ts +20 -0
  122. package/dist/agent/raizDelPaquete.d.ts +9 -0
  123. package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
  124. package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
  125. package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
  126. package/dist/agent/renombrarSobre.d.ts +14 -0
  127. package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
  128. package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
  129. package/dist/agent/sesiones/checkpointer.d.ts +146 -0
  130. package/dist/agent/sesiones/git.d.ts +66 -0
  131. package/dist/agent/sesiones/gitSync.d.ts +264 -0
  132. package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
  133. package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
  134. package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
  135. package/dist/agent/sesiones/sesionGit.d.ts +155 -0
  136. package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
  137. package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
  138. package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
  139. package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
  140. package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
  141. package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
  142. package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
  143. package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
  144. package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
  145. package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
  146. package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
  147. package/dist/agent/tareas/aumentador.d.ts +99 -0
  148. package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
  149. package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
  150. package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
  151. package/dist/agent/tareas/tareasEnDisco.d.ts +148 -0
  152. package/dist/agent/tareas/tareasEnDisco.js +17 -0
  153. package/dist/agent/tareas/tareasEnDisco.js.map +1 -1
  154. package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
  155. package/dist/agent/turno/depuracion.d.ts +1 -0
  156. package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
  157. package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
  158. package/dist/agent/turno/guionizado.d.ts +18 -0
  159. package/dist/agent/turno/informeDeTraza.d.ts +220 -0
  160. package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
  161. package/dist/agent/turno/instantanea.d.ts +16 -0
  162. package/dist/agent/turno/interrupts.d.ts +54 -0
  163. package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
  164. package/dist/agent/turno/mensajes.d.ts +23 -0
  165. package/dist/agent/turno/normalizar.d.ts +15 -0
  166. package/dist/agent/turno/puente.d.ts +196 -0
  167. package/dist/agent/turno/registroDeFallos.d.ts +39 -0
  168. package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
  169. package/dist/agent/turno/resumenDeTool.d.ts +33 -0
  170. package/dist/agent/turno/rubrica.d.ts +35 -0
  171. package/dist/agent/turno/sesionReal.d.ts +89 -0
  172. package/dist/agent/turno/textoDeTool.d.ts +19 -0
  173. package/dist/agent/turno/turnoReal.d.ts +210 -0
  174. package/dist/agent/turno/verificacion.d.ts +85 -0
  175. package/dist/agent/turno/verificador.d.ts +66 -0
  176. package/dist/bin.d.ts +2 -0
  177. package/dist/cli/acuseDeModelo.d.ts +18 -0
  178. package/dist/cli/aprobar.d.ts +162 -0
  179. package/dist/cli/config.d.ts +17 -0
  180. package/dist/cli/consola.d.ts +473 -0
  181. package/dist/cli/describe.d.ts +7 -0
  182. package/dist/cli/doctor.d.ts +8 -0
  183. package/dist/cli/fuentesDeDisco.d.ts +25 -0
  184. package/dist/cli/main.d.ts +291 -0
  185. package/dist/cli/markdown.d.ts +126 -0
  186. package/dist/cli/panel.d.ts +38 -0
  187. package/dist/cli/podar.d.ts +38 -0
  188. package/dist/cli/run.d.ts +30 -0
  189. package/dist/cli/spinner.d.ts +37 -0
  190. package/dist/cli/stdio.d.ts +94 -0
  191. package/dist/cli/tema.d.ts +68 -0
  192. package/dist/cli/tokens.d.ts +16 -0
  193. package/dist/cli/traza.d.ts +19 -0
  194. package/dist/cli/tui/app.d.ts +23 -0
  195. package/dist/cli/tui/aprobarTui.d.ts +46 -0
  196. package/dist/cli/tui/barra.d.ts +43 -0
  197. package/dist/cli/tui/correrTui.d.ts +119 -0
  198. package/dist/cli/tui/entrada.d.ts +14 -0
  199. package/dist/cli/tui/filas.d.ts +13 -0
  200. package/dist/cli/tui/logo.d.ts +20 -0
  201. package/dist/cli/tui/pielTui.d.ts +15 -0
  202. package/dist/cli/tui/raton.d.ts +68 -0
  203. package/dist/cli/tui/sidebar.d.ts +63 -0
  204. package/dist/cli/tui/store.d.ts +102 -0
  205. package/dist/cli/tui/tarjeta.d.ts +8 -0
  206. package/dist/cli/tui/temaInk.d.ts +67 -0
  207. package/dist/cli/tui/transcript.d.ts +32 -0
  208. package/dist/cli/verify.d.ts +9 -0
  209. package/dist/cli/wizardInicial.d.ts +59 -0
  210. package/dist/core/actos.d.ts +437 -0
  211. package/dist/core/adjuntos.d.ts +77 -0
  212. package/dist/core/agentes.d.ts +353 -0
  213. package/dist/core/analisisDeSesion.d.ts +63 -0
  214. package/dist/core/aprendido.d.ts +41 -0
  215. package/dist/core/artefactos.d.ts +74 -0
  216. package/dist/core/atributosXone.d.ts +53 -0
  217. package/dist/core/bitacora.d.ts +21 -0
  218. package/dist/core/cloudstudio.d.ts +168 -0
  219. package/dist/core/codificacion.d.ts +81 -0
  220. package/dist/core/comandoExterno.d.ts +49 -0
  221. package/dist/core/compararCapturas.d.ts +136 -0
  222. package/dist/core/conectores.d.ts +296 -0
  223. package/dist/core/config.d.ts +148 -0
  224. package/dist/core/contextos.d.ts +54 -0
  225. package/dist/core/convertirAP.d.ts +56 -0
  226. package/dist/core/copiaDeAvd.d.ts +44 -0
  227. package/dist/core/cssBienFormado.d.ts +22 -0
  228. package/dist/core/deps.d.ts +28 -0
  229. package/dist/core/descargas.d.ts +61 -0
  230. package/dist/core/descripcionDePantalla.d.ts +121 -0
  231. package/dist/core/descriptoresDeApp.d.ts +108 -0
  232. package/dist/core/diagnosticoDeNode.d.ts +51 -0
  233. package/dist/core/diff.d.ts +26 -0
  234. package/dist/core/diffDeColecciones.d.ts +54 -0
  235. package/dist/core/disenoVinculado.d.ts +17 -0
  236. package/dist/core/dispositivoDeSesion.d.ts +22 -0
  237. package/dist/core/dispositivoElegido.d.ts +17 -0
  238. package/dist/core/dispositivos.d.ts +469 -0
  239. package/dist/core/entrega.d.ts +341 -0
  240. package/dist/core/entrelazar.d.ts +48 -0
  241. package/dist/core/esfuerzo.d.ts +120 -0
  242. package/dist/core/esqueleto.d.ts +38 -0
  243. package/dist/core/estiloMedido.d.ts +70 -0
  244. package/dist/core/estilos.d.ts +76 -0
  245. package/dist/core/events.d.ts +218 -0
  246. package/dist/core/exportacion.d.ts +88 -0
  247. package/dist/core/fallos.d.ts +79 -0
  248. package/dist/core/fondosSvg.d.ts +115 -0
  249. package/dist/core/fotoDeColecciones.d.ts +45 -0
  250. package/dist/core/fuentes.d.ts +96 -0
  251. package/dist/core/geometriaDePantalla.d.ts +171 -0
  252. package/dist/core/gestorDeTareas.d.ts +295 -0
  253. package/dist/core/hechosDelProyecto.d.ts +70 -0
  254. package/dist/core/hotswap.d.ts +30 -0
  255. package/dist/core/iconos.d.ts +86 -0
  256. package/dist/core/identidadDeProveedor.d.ts +20 -0
  257. package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
  258. package/dist/core/imagenesDeDocumento.d.ts +40 -0
  259. package/dist/core/jsParaRhino.d.ts +3 -0
  260. package/dist/core/juezDelTurno.d.ts +95 -0
  261. package/dist/core/logDeDispositivo.d.ts +67 -0
  262. package/dist/core/memoria.d.ts +18 -0
  263. package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
  264. package/dist/core/modelos.d.ts +198 -0
  265. package/dist/core/modoDeEscritura.d.ts +155 -0
  266. package/dist/core/motor.d.ts +43 -0
  267. package/dist/core/motoresLocales.d.ts +113 -0
  268. package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
  269. package/dist/core/navegacion.d.ts +172 -0
  270. package/dist/core/notify.d.ts +77 -0
  271. package/dist/core/nucleoXone.d.ts +28 -0
  272. package/dist/core/panorama.d.ts +68 -0
  273. package/dist/core/paqueteDeSoporte.d.ts +100 -0
  274. package/dist/core/planDeSubida.d.ts +56 -0
  275. package/dist/core/planes.d.ts +53 -0
  276. package/dist/core/podaDeCheckpoint.d.ts +75 -0
  277. package/dist/core/ports.d.ts +1034 -0
  278. package/dist/core/puedeLanzarse.d.ts +181 -0
  279. package/dist/core/puertosDeAvd.d.ts +59 -0
  280. package/dist/core/recargaEnCaliente.d.ts +52 -0
  281. package/dist/core/referenciasDeImagen.d.ts +36 -0
  282. package/dist/core/remoto.d.ts +76 -0
  283. package/dist/core/repartoDeEncargo.d.ts +80 -0
  284. package/dist/core/rubrica.d.ts +78 -0
  285. package/dist/core/rutaVirtual.d.ts +29 -0
  286. package/dist/core/selectorDeCarpeta.d.ts +59 -0
  287. package/dist/core/serieDeEscrituras.d.ts +58 -0
  288. package/dist/core/settings.d.ts +421 -0
  289. package/dist/core/shellDeAgente.d.ts +177 -0
  290. package/dist/core/skills.d.ts +129 -0
  291. package/dist/core/stitch.d.ts +114 -0
  292. package/dist/core/tareas.d.ts +412 -0
  293. package/dist/core/tareasDelPlan.d.ts +123 -0
  294. package/dist/core/tareasEnElGestor.d.ts +117 -0
  295. package/dist/core/textos.d.ts +8 -0
  296. package/dist/core/topeAgotado.d.ts +55 -0
  297. package/dist/core/traerDeLaMaquina.d.ts +33 -0
  298. package/dist/core/trazaDeErrores.d.ts +83 -0
  299. package/dist/core/tunel.d.ts +45 -0
  300. package/dist/core/turno.d.ts +154 -0
  301. package/dist/core/validacionDeEscritura.d.ts +95 -0
  302. package/dist/core/verificacionDeSubida.d.ts +14 -0
  303. package/dist/core/version.d.ts +35 -0
  304. package/dist/core/xmlBienFormado.d.ts +23 -0
  305. package/dist/core/zipDeAdjunto.d.ts +28 -0
  306. package/dist/core/zipDeSkill.d.ts +74 -0
  307. package/dist/lib/tareaAutonoma.d.ts +36 -0
  308. package/dist/lib/tareaAutonoma.js +259 -0
  309. package/dist/lib/tareaAutonoma.js.map +1 -0
  310. package/dist/lib.d.ts +31 -0
  311. package/dist/lib.js +28 -0
  312. package/dist/lib.js.map +1 -0
  313. package/dist/vendor/hitl.d.ts +69 -0
  314. package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
  315. package/dist/vendor/sqliteSaver.d.ts +22 -0
  316. package/dist/vendor/tokenTracking.d.ts +22 -0
  317. package/dist/web/servidor/arranque.d.ts +1372 -0
  318. package/dist/web/servidor/arranque.js +39 -0
  319. package/dist/web/servidor/arranque.js.map +1 -1
  320. package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
  321. package/dist/web/servidor/consolaWeb.d.ts +142 -0
  322. package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
  323. package/dist/web/servidor/datosDeCierre.d.ts +4 -0
  324. package/dist/web/servidor/interrupcion.d.ts +39 -0
  325. package/dist/web/servidor/pielWeb.d.ts +32 -0
  326. package/dist/web/servidor/puenteRemoto.d.ts +80 -0
  327. package/dist/web/servidor/servidor.d.ts +53 -0
  328. package/dist/web/servidor/sesiones.d.ts +342 -0
  329. package/dist/web/servidor/soporte.d.ts +65 -0
  330. package/dist/web/servidor/transporte.d.ts +2751 -0
  331. package/dist/web/servidor/vestibulo.d.ts +952 -0
  332. package/dist/web/servidor/visorOpenui.d.ts +33 -0
  333. package/package.json +9 -1
  334. package/apps/web/dist/assets/index-B-6cDRAV.js +0 -506
  335. package/apps/web/dist/assets/index-BQdHnRbo.css +0 -1
@@ -0,0 +1,181 @@
1
+ /**
2
+ * El veredicto de «¿se puede lanzar esta app en este dispositivo?»: el predicado de listo y el
3
+ * catálogo de causas por las que NO lo está, cada una con su frase y con dónde se arregla.
4
+ *
5
+ * **Por qué esto existe, y es un caso medido.** El `launchApplication` del framework contesta
6
+ * `{"result":true}` y eso es un ACUSE, no una medida: a un proyecto cuyo `app.xml` declara
7
+ * `<connection name="main" connstring="bd/gestion.db" />` y que **no tiene** ese fichero le
8
+ * contestó `true`, y la app murió detrás en un diálogo «Error opening database». El verificador
9
+ * no lo caza —`xone-simulator validate` sobre ese mismo proyecto da `success: true`, 0 errores
10
+ * y 0 avisos, porque **no mira la conexión**—, así que el síntoma es el peor de todos: nada
11
+ * falla por ningún lado y la app no arranca.
12
+ *
13
+ * **Y lo que se comprueba NO se deduce de `app.xml`: la base es `bd/gestion.db` POR DEFECTO.**
14
+ * Aquí hubo una regla que solo miraba los `connstring` declarados con forma de ruta, y es un
15
+ * **falso negativo**, que es el error peligroso de este módulo: medido sobre los proyectos
16
+ * reales, **solo MinitsMT declara su base** (`<connection name="NoReplica"
17
+ * connstring="bd/gestion.db" />`); MyAllXOne y Replanteos_2026 declaran únicamente conexiones de
18
+ * proveedor (`Provider=…`), AppDemo no declara **ninguna**, y **los cuatro tienen su
19
+ * `bd/gestion.db`**. O sea: la declaración es la forma RARA, y una regla que dependiera de ella
20
+ * dejaría sin comprobar justo lo que se quería comprobar —el caso medido, el diálogo «Database
21
+ * not found»— en tres de cada cuatro proyectos. Comprobado en el aparato: XOne usa esa ruta por
22
+ * defecto, se declare o no. Así que la comprobación tiene DOS entradas y una sola pregunta: la
23
+ * ruta de la convención siempre, más cualquier otra ruta que el `app.xml` declare —una segunda
24
+ * base es un sitio distinto donde puede faltar un fichero—.
25
+ *
26
+ * Datos puros y sin efectos: lo caro entra por parámetro (`existe`, los textos de los ficheros),
27
+ * que es lo que deja `npm test` sin disco y sin dispositivo. Quien lee el proyecto y mide la
28
+ * máquina es `web/servidor` / `agent/`.
29
+ *
30
+ * **Y el catálogo es una unión discriminada y no una lista de booleanos.** Cada causa lleva sus
31
+ * datos (el nombre del dispositivo, el `connstring` que falta) porque la frase los necesita, y
32
+ * el `switch` de `motivoDeBloqueo` va exhaustivo y sin `default`: añadir una causa es un error de
33
+ * compilación hasta que alguien escriba qué decir y dónde se arregla. Una lista de booleanos se
34
+ * amplía en silencio, y lo que se amplía en silencio es lo que acaba sin frase.
35
+ */
36
+ import { type Dispositivo } from "./dispositivos.js";
37
+ import { type ConexionDeclarada } from "./descriptoresDeApp.js";
38
+ /**
39
+ * Lo MÍNIMO que el veredicto necesita saber del framework de XOne en el dispositivo.
40
+ *
41
+ * **Se declara aquí y no se importa de `agent/dispositivos/dispositivosEnMaquina.ts`**, que tiene el tipo
42
+ * rico (`FrameworkEnDispositivo`, con `paquete` y `detalle`) y que lo satisface por ESTRUCTURA:
43
+ * `core/` declara la forma que consume y no mira hacia `agent/`, que además importa de `core/`
44
+ * y sería un ciclo. Y no lo caza ningún test —`core/imports.test.ts` vigila langchain, ink y
45
+ * compañía, no esto—, así que el día que alguien «reutilice» el tipo de `agent/` no habrá rojo
46
+ * que leer: habrá una capa mirando hacia arriba en silencio.
47
+ */
48
+ export interface FrameworkMedido {
49
+ instalado: boolean;
50
+ }
51
+ /**
52
+ * La base local de una app XOne, siempre en el mismo sitio: `bd/gestion.db`.
53
+ *
54
+ * **Es una convención de la plataforma, no algo que haya que leer de `app.xml`.** XOne la usa
55
+ * por defecto cuando no se declara ninguna conexión, así que un proyecto que no la declara **sí
56
+ * la necesita**, y comprobar solo lo declarado dejaría sin comprobar el caso más común —está
57
+ * medido: de cuatro proyectos reales, tres no la declaran y los cuatro la tienen—.
58
+ *
59
+ * Se comprueba tal cual, sin normalizar, porque es como la nombra el propio XOne y como la
60
+ * declara el esqueleto de `core/esqueleto.ts`.
61
+ */
62
+ export declare const RUTA_DE_LA_BASE = "bd/gestion.db";
63
+ /**
64
+ * Todo lo que puede impedir un lanzamiento, con el dato que hace falta para decirlo.
65
+ *
66
+ * Las tres primeras son del eje DISPOSITIVO (no hay ninguno, el elegido ya no está, o está pero
67
+ * no se llega a él), `plataforma-sin-camino` es del eje CAMINO, las dos del framework son del
68
+ * eje MEDIDA, y las cuatro últimas del PROYECTO —de `app.xml` para abajo—.
69
+ *
70
+ * **Y no está «no declara ninguna conexión», que estuvo y se quitó.** Un proyecto que no declara
71
+ * ninguna `<connection>` no tiene nada que comprobar, y no declarar ninguna no es síntoma de
72
+ * nada: medido, AppDemo —la app con la que se prueba— declara cero y arranca. Bloquear ahí es el
73
+ * mismo error que este catálogo evita para los `connstring` de proveedor, cometido con el caso
74
+ * vecino, y además negaría el lanzamiento de la app que alguien nombró. Lo que el recorrido
75
+ * quiera decir de las conexiones lo lleva `Veredicto.conexiones`, que es un DATO y no una causa.
76
+ */
77
+ export type CausaDeBloqueo = {
78
+ causa: "sin-dispositivo-elegido";
79
+ } | {
80
+ causa: "dispositivo-desconocido";
81
+ } | {
82
+ causa: "dispositivo-no-alcanzable";
83
+ nombre: string;
84
+ estado: Dispositivo["estado"];
85
+ } | {
86
+ causa: "framework-ausente";
87
+ nombre: string;
88
+ } | {
89
+ causa: "framework-no-medido";
90
+ nombre: string;
91
+ } | {
92
+ causa: "sin-app-xml";
93
+ } | {
94
+ causa: "app-xml-ilegible";
95
+ motivo: string;
96
+ } | {
97
+ causa: "falta-el-fichero-de-la-conexion";
98
+ connstring: string;
99
+ } | {
100
+ causa: "falta-la-base";
101
+ } | {
102
+ causa: "plataforma-sin-camino";
103
+ plataforma: Dispositivo["plataforma"];
104
+ };
105
+ /**
106
+ * Lo que el veredicto necesita, ya resuelto por quien SÍ puede tocar el disco y la máquina.
107
+ *
108
+ * El dispositivo llega resuelto porque resolverlo es cruzar la elección de la sesión con la
109
+ * última medida, y eso pide el informe entero: aquí llega el `Dispositivo` o nada.
110
+ */
111
+ export interface EntradaDeVeredicto {
112
+ /** El dispositivo de la sesión, ya cruzado con la última medida. `undefined` = no hay ninguno. */
113
+ dispositivo: Dispositivo | undefined;
114
+ /**
115
+ * El id que la sesión tiene ELEGIDO, cuando no se ha podido resolver contra la medida.
116
+ *
117
+ * Es lo único que separa «no has elegido nada» de «elegiste uno que ahora no está»: las dos
118
+ * llegan aquí con `dispositivo: undefined`, y sin este campo la segunda se contaría como la
119
+ * primera — decirle a alguien que no eligió cuando sí eligió es la clase de mentira que esta
120
+ * casa no se permite. Con el elegido resuelto se deja sin poner: manda `dispositivo`.
121
+ */
122
+ elegido?: string;
123
+ /** Lo que se midió del framework en ESE dispositivo. `undefined` = nadie lo ha medido. */
124
+ framework: FrameworkMedido | undefined;
125
+ /** El texto de `app.xml` del proyecto. */
126
+ xml: string | undefined;
127
+ /**
128
+ * Por qué no se pudo leer `app.xml`: UNA línea, nunca la salida entera. Que venga puesto es
129
+ * lo que distingue «no hay app.xml» de «hay algo que no se deja leer», que no son la misma
130
+ * cosa ni se arreglan en el mismo sitio.
131
+ */
132
+ motivoDeLectura?: string;
133
+ /** El texto de `app.ini`. **Su ausencia NO bloquea**: sin él solo se pierde el nombre. */
134
+ ini: string | undefined;
135
+ /** ¿Existe esa ruta del proyecto? Inyectado: `core/` no toca el disco. */
136
+ existe: (rutaRelativa: string) => boolean;
137
+ }
138
+ export interface Veredicto {
139
+ listo: boolean;
140
+ /** TODAS las causas, no solo la primera. Ver `motivoDeBloqueo` para la frase de cada una. */
141
+ causas: CausaDeBloqueo[];
142
+ /** El nombre de la app que dice `app.ini`, si se pudo leer. Ausente = no consta. */
143
+ app?: string;
144
+ /** Las conexiones declaradas, para poder decirlas en el recorrido antes de lanzar. */
145
+ conexiones: ConexionDeclarada[];
146
+ }
147
+ /**
148
+ * ¿Está este dispositivo listo para lanzar? Alcanzable **y** con el framework instalado.
149
+ *
150
+ * **Un framework sin medir NO es un framework ausente, y aquí las dos cosas dan «no listo» pero
151
+ * la frase que lo acompaña es distinta** —«no se sabe» no se arregla instalando nada—. El
152
+ * predicado se queda con el lado conservador: un botón de lanzar sobre un «no se sabe» es la
153
+ * promesa que este repo no se permite, porque el acuse del framework llega igual y el fallo
154
+ * aparece detrás, en la app.
155
+ *
156
+ * Es el eje DISPOSITIVO de `puedeLanzarse`, no el veredicto entero: un proyecto sin `app.xml`
157
+ * bloquea aunque esto diga que sí. `puedeLanzarse` no lo recalcula por su cuenta —el veredicto
158
+ * sale de su lista de causas, que es exhaustiva sobre este eje— y hay un test que ata las dos
159
+ * respuestas para que no puedan divergir.
160
+ */
161
+ export declare function dispositivoListo(dispositivo: Dispositivo | undefined, framework: FrameworkMedido | undefined): boolean;
162
+ /**
163
+ * El veredicto entero: el dispositivo, el camino, la medida del framework y el proyecto.
164
+ *
165
+ * **El orden de las causas es el de la lectura**, y no es alfabético a propósito: primero lo que
166
+ * hay que arreglar antes de que nada más importe —elegir un dispositivo— y al final el proyecto,
167
+ * para que quien esté mirando la pantalla no arregle una cosa y descubra la siguiente después.
168
+ * Las causas son todas las que hay, no la primera.
169
+ */
170
+ export declare function puedeLanzarse(entrada: EntradaDeVeredicto): Veredicto;
171
+ /**
172
+ * UNA frase por causa, en español, y **cada una dice DÓNDE se arregla**.
173
+ *
174
+ * El `switch` va exhaustivo y sin `default` a propósito: un `default` que devolviera «no se
175
+ * puede» taparía la causa nueva en vez de obligar a escribir qué falta y con qué se arregla, que
176
+ * es justo lo único que esta pestaña tiene que decir. Y por eso ninguna frase es un «no se
177
+ * puede» a secas: quien la lee está mirando una pantalla que le acaba de negar algo, y lo único
178
+ * que puede hacer con un «no se puede» es irse a buscar por su cuenta —o creer que xonecode
179
+ * tenía que haberlo puesto él.
180
+ */
181
+ export declare function motivoDeBloqueo(causa: CausaDeBloqueo): string;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * El puerto LOCAL del túnel de hotswap, uno por AVD.
3
+ *
4
+ * Medido: `adb -s B forward tcp:8443 tcp:8443` le QUITA el puerto a `A` sin error, así que
5
+ * con dos emuladores y un puerto fijo la sesión de uno acaba hablando con el aparato del otro.
6
+ * Dentro de cada aparato el 8443 es independiente; lo que se reparte es el del Mac.
7
+ *
8
+ * Con UN solo AVD el puerto es el de siempre y no hay nada que decidir (decisión suya: la UI
9
+ * no enseña campo). Pero se GUARDA igual (`asignarPuertosPendientes` también siembra al único):
10
+ * si se sembrara solo al aparecer el segundo, por orden alfabético, un AVD nuevo que ordenara
11
+ * antes le quitaría el 8443 al que ya se usaba.
12
+ *
13
+ * **Un móvil FÍSICO también tiene el suyo, por su serie** (IXCODE-32): iba siempre al 8443, que
14
+ * es también el del primer AVD, y con el móvil y el emulador enchufados el último `adb forward`
15
+ * se quedaba el puerto — la sesión del móvil acababa hablando con el emulador sin error. Se
16
+ * siembra igual que el de un AVD (solo AÑADE) y, mientras no está sembrado, es el primero LIBRE
17
+ * (`primerPuertoLibre`), el mismo que la siembra le daría.
18
+ *
19
+ * Puro: ni disco ni red. La copia que LEEN los scripts está en
20
+ * `skills/xone-hotswap/lib/dispositivo.mjs`, y un test compara las dos.
21
+ */
22
+ import type { AjustesDeDispositivos } from "./settings.js";
23
+ /** El puerto del servidor hotswap DENTRO del aparato, y el local por omisión. */
24
+ export declare const PUERTO_DEL_HOTSWAP = 8443;
25
+ /** La MISMA forma que acepta `arranqueDeEmulador.ts`: lo que puede ser una carpeta de `~/.android/avd`. */
26
+ export declare const FORMA_DE_NOMBRE_DE_AVD: RegExp;
27
+ /** La forma de un serial de adb: USB (`R58M123`), por red (`192.168.1.5:5555`) o mDNS (`adb-…._adb-tls-connect._tcp`). */
28
+ export declare const FORMA_DE_SERIE: RegExp;
29
+ export declare function puertoDeAvd(ajustes: AjustesDeDispositivos | undefined, avd: string): number;
30
+ /** El puerto de un móvil físico: el guardado para su serie o, sin él, el primero libre. */
31
+ export declare function puertoDeFisico(ajustes: AjustesDeDispositivos | undefined, serie: string): number;
32
+ /**
33
+ * El puerto local del túnel de un Android, sea emulador o físico. Un emulador cuyo AVD no se pudo
34
+ * identificar va al de siempre, como hasta ahora: no hay de quién leer otro.
35
+ */
36
+ export declare function puertoDeDispositivo(ajustes: AjustesDeDispositivos | undefined, d: {
37
+ id: string;
38
+ clase: "emulador" | "simulador" | "fisico";
39
+ avd?: string;
40
+ }): number;
41
+ /**
42
+ * Los puertos que faltan, o `undefined` si no falta ninguno. Solo AÑADE: un puerto guardado no
43
+ * se mueve nunca. Entre los que faltan, por orden alfabético (que no dependa del orden de
44
+ * `emulator -list-avds`), desde el 8443 si está libre. Como el único AVD ya queda sembrado, el
45
+ * orden solo decide entre AVD que aparecieron a la vez.
46
+ */
47
+ export declare function asignarPuertosPendientes(avds: readonly string[], ajustes: AjustesDeDispositivos | undefined): Record<string, number> | undefined;
48
+ /**
49
+ * Lo mismo para los móviles físicos Android medidos, por su serie: solo AÑADE, y salta todo
50
+ * puerto guardado (de AVD o de otro físico). Se llama DESPUÉS de sembrar los AVD, con los ajustes
51
+ * ya releídos, para que un AVD nuevo y un físico nuevo no se lleven el mismo.
52
+ */
53
+ export declare function asignarPuertosDeFisicos(series: readonly string[], ajustes: AjustesDeDispositivos | undefined): Record<string, number> | undefined;
54
+ export declare function motivoDePuertoInaceptable(puerto: number, avd: string, ajustes: AjustesDeDispositivos | undefined): string | undefined;
55
+ export declare function motivoDeNombreDeAvdInaceptable(nombre: string, existentes: readonly string[]): string | undefined;
56
+ /** Los argumentos de `emulator`. Sin ventana lleva `-no-metrics`: su aviso será una pregunta que nadie ve. */
57
+ export declare function argsDeArranque(avd: string, opciones: {
58
+ sinVentana?: boolean;
59
+ }): string[];
@@ -0,0 +1,52 @@
1
+ export type ClaseDeRecarga = "coleccion" | "js" | "css" | "relanzar" | "no-aplica";
2
+ /**
3
+ * Cómo se aplica `ruta` (relativa, con `/`) con estos `bytes`. El texto se mira byte a byte: la
4
+ * etiqueta `<coll` es ASCII en cualquier tabla.
5
+ */
6
+ export declare function claseDeRecarga(ruta: string, bytes: Uint8Array): ClaseDeRecarga;
7
+ /**
8
+ * El nombre de la codificación que se le dice al framework para que lea ESTOS bytes. Es la misma
9
+ * regla que la lectura del agente y del editor (`core/codificacion.ts`): UTF-8 si lo es; si no, la
10
+ * tabla de 8 bits que declare el prólogo (ISO-8859-15) o windows-1252. Mandar `UTF-8` a secas
11
+ * —lo que hace el script— enseñaba en el aparato un «�» en cada tilde de un `.xne` Latin-1.
12
+ * Los nombres son los de `java.nio.charset`, que es quien los lee al otro lado.
13
+ */
14
+ export declare function codificacionParaElAparato(bytes: Uint8Array): "UTF-8" | "ISO-8859-15" | "windows-1252";
15
+ /**
16
+ * Lo que se le da a `loadCollection`: el MISMO XML, en UTF-8 y con el prólogo diciendo UTF-8.
17
+ *
18
+ * MEDIDO en el emulador (framework 5.0.5.5dev) con un `.xne` en ISO-8859-15 y «Año ñá»: con sus
19
+ * bytes y `encoding: "ISO-8859-15"` el aparato pintaba «Año ñá» —y estropeaba también el
20
+ * «Contraseña» que ya estaba—; con el texto en UTF-8 y el prólogo cambiado a UTF-8 se ve bien. El
21
+ * framework decodifica con `encoding` y su analizador vuelve a leer el prólogo: si los dos no dicen
22
+ * lo mismo que los bytes, cada tilde sale doble. Solo para la copia EN MEMORIA: lo que se sube a
23
+ * disco (`uploadFile`) son los bytes tal cual, que es lo que el framework lee al relanzar.
24
+ */
25
+ export declare function xmlParaCargarEnMemoria(bytes: Uint8Array): Uint8Array;
26
+ /** Dónde guarda el framework lo que se le sube: `app_<nombre en minúsculas>/<ruta>` (medido). */
27
+ export declare function destinoEnElAparato(app: string, ruta: string): string;
28
+ /**
29
+ * En qué acabó una recarga. Cada estado es un hecho distinto y se pinta distinto:
30
+ * - `aplicada`: subido, aplicado, y la app CONTESTA su árbol después (no «cambiado»: `result:true`
31
+ * es «aceptado», y lo que se cambió lo comprueba quien mira la pantalla).
32
+ * - `relanzar`: subido; para verse hay que relanzar la app, y eso se ofrece, no se hace.
33
+ * - `relanzada`: se relanzó a petición y la app volvió a contestar.
34
+ * - `sin-app`: no hay a dónde recargar —la app no contesta, o no hay aparato, o no está en la medida—;
35
+ * `motivo` dice cuál. No se tocó nada.
36
+ * - `desplegando`: se pidió PROBAR y la app no corría, así que se lanzó el despliegue entero (el de
37
+ * Ejecutar); su recorrido se cuenta allí.
38
+ * - `desplegada`: el despliegue que lanzó «Probar» acabó con la app viva.
39
+ * - `ocupado`: hay un despliegue en curso; no se recarga encima de él.
40
+ * - `no-aplica`: este fichero no se lleva suelto.
41
+ * - `fallo`: algo dijo que no; `motivo` es la frase literal.
42
+ */
43
+ export type EstadoDeRecarga = "aplicada" | "relanzar" | "relanzada" | "sin-app" | "desplegando" | "desplegada" | "ocupado" | "no-aplica" | "fallo";
44
+ export interface ResultadoDeRecarga {
45
+ estado: EstadoDeRecarga;
46
+ /** Qué se hizo, cuando se hizo algo: la clase con que se aplicó. */
47
+ clase?: ClaseDeRecarga;
48
+ /** UNA línea: lo que dijo el framework, o por qué no hay a dónde recargar. En `fallo` y `sin-app`. */
49
+ motivo?: string;
50
+ }
51
+ /** La frase que enseña la cabecera del editor. Pura para que el test la fije. */
52
+ export declare function textoDeRecarga(r: ResultadoDeRecarga): string;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * De dónde puede salir la MAQUETA con la que se compara una captura (IXCODE-18).
3
+ *
4
+ * ## Por qué existe, medido
5
+ *
6
+ * Las tools de comparación (`comparar_capturas`, `xone_critica_visual`) solo leían de
7
+ * `/artefactos/`. Pero la maqueta de un encargo no vive ahí: la trae la persona en el CHAT
8
+ * (`/adjuntos/`) o está en el proyecto (`/diseno/`). Rehaciendo una calculadora de Stitch desde cero,
9
+ * el agente lo dijo tal cual —«el proyecto no traía maqueta»— y el crítico corrió sin referencia:
10
+ * su verde significaba «nada roto», y no vio que faltaba la barra superior entera ni que el teclado
11
+ * no llegaba abajo. Comparar contra el diseño era imposible por una ruta, no por falta de tool.
12
+ *
13
+ * ## Qué se acepta
14
+ *
15
+ * Una imagen PNG o JPEG en uno de tres sitios, por su ruta VIRTUAL:
16
+ * - `/artefactos/…`: lo de siempre.
17
+ * - `/adjuntos/…`: lo que la persona adjuntó (de solo lectura).
18
+ * - Un fichero del PROYECTO (`/diseno/screen.png`): cualquier ruta cuyos segmentos sean llanos.
19
+ *
20
+ * **Lista BLANCA de forma, sobre el TEXTO** (como `esRutaDeArtefacto`): letras, cifras, punto, guion y
21
+ * guion bajo; nada de `..`, `.`, segmentos vacíos, barra invertida, NUL. Y en el proyecto **ningún
22
+ * segmento puede empezar por punto**: eso deja fuera `.env`, `.git` y `.xonecode` (la memoria, los
23
+ * planes y `checkpoint.sqlite`) sin depender de una lista de nombres que se quede corta. Lo que
24
+ * compruebe la lectura real (`agent/grafo/lectorDeReferencias.ts`) es lo mismo, dos veces: texto y
25
+ * `realpath`.
26
+ */
27
+ export type OrigenDeImagen = "artefactos" | "adjuntos" | "proyecto";
28
+ export interface ImagenReferida {
29
+ origen: OrigenDeImagen;
30
+ /** La ruta detrás de la carpeta de su origen (para el proyecto, sin la barra inicial). */
31
+ relativa: string;
32
+ /** El último segmento: lo que se le enseña a una persona. */
33
+ nombre: string;
34
+ }
35
+ /** La imagen a la que apunta la ruta, o el MOTIVO en palabras. Comprueba el texto y no abre nada. */
36
+ export declare function imagenReferida(ruta: string): ImagenReferida | string;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Qué cruza el puente de la sesión remota, en las dos direcciones. Es la FRONTERA de seguridad
3
+ * del lado de xonecode: lo que no está aquí no sale de la máquina ni entra en la consola, aunque
4
+ * el móvil lo pida. Puro y sin dependencias (`core/`); el paquete del puente (`xonecode-remoto`) tiene
5
+ * su propia validación para la web, pero quien decide aquí es xonecode.
6
+ */
7
+ export type EntradaDelMovil = {
8
+ clase: "prosa";
9
+ texto: string;
10
+ detener?: true;
11
+ } | {
12
+ clase: "decision";
13
+ decisiones: Record<string, "approve" | "reject">;
14
+ consola?: string;
15
+ } | {
16
+ clase: "respuesta";
17
+ texto: string;
18
+ } | {
19
+ clase: "feedback";
20
+ tarea: string;
21
+ texto: string;
22
+ } | {
23
+ clase: "continuar";
24
+ tarea: string;
25
+ } | {
26
+ clase: "cancelar";
27
+ }
28
+ /** Ver un artefacto del hilo (una captura): su ruta VIRTUAL, la del acto `artefacto`. Quien lo
29
+ * sirve vuelve a pasarla por `esRutaDeArtefacto` y el lector la comprueba contra el disco. */
30
+ | {
31
+ clase: "artefacto";
32
+ ruta: string;
33
+ };
34
+ /** Lo que se manda al móvil, ya en su forma de salida; `undefined` = no sale. */
35
+ export declare function filtrarSalida(mensaje: unknown): unknown | undefined;
36
+ export declare function validarEntradaDelMovil(m: unknown): EntradaDelMovil | undefined;
37
+ /**
38
+ * Lo máximo que se manda al móvil en UN mensaje, en bytes de su JSON. El relé cierra la conexión
39
+ * si el sobre pasa de `TOPE_DE_SOBRE` (1_000_000) y base64 + AES-GCM lo engordan ~33 %, así que
40
+ * se queda por debajo de ese tope dividido entre ~1,4. Pasarse no da un error legible: da un cierre.
41
+ */
42
+ export declare const TOPE_DE_SALIDA_BYTES = 700000;
43
+ /**
44
+ * Hace caber un mensaje de salida en el tope. Una `reemision` se recorta quitando los actos más
45
+ * VIEJOS (lo reciente es lo que el móvil necesita ver); cualquier otro que no quepa devuelve
46
+ * `undefined` y quien llama lo anota, porque partir una aprobación o un diff lo falsearía.
47
+ */
48
+ export declare function ajustarATope(mensaje: unknown, tope?: number): unknown | undefined;
49
+ /**
50
+ * Los artefactos que el móvil puede VER: imágenes, que son lo que pide quien sigue un turno desde el
51
+ * teléfono (las capturas del aparato). Un HTML o un `.openui` no: en el escritorio se sirven dentro de un
52
+ * iframe con dos capas de sandbox, y en la web móvil no hay con qué aislarlos.
53
+ */
54
+ export declare const MIMES_DE_ARTEFACTO_AL_MOVIL: ReadonlySet<string>;
55
+ /** Lo máximo que se manda de UN artefacto al móvil, en bytes del fichero: una captura cabe de sobra. */
56
+ export declare const TOPE_DE_ARTEFACTO_AL_MOVIL = 6000000;
57
+ /** Caracteres de base64 por trozo: con su sobre JSON queda por debajo de `TOPE_DE_SALIDA_BYTES`. */
58
+ export declare const CARACTERES_POR_TROZO = 450000;
59
+ export type MensajeDeArtefactoAlMovil = {
60
+ clase: "artefacto.trozo";
61
+ ruta: string;
62
+ mime: string;
63
+ indice: number;
64
+ total: number;
65
+ datos: string;
66
+ } | {
67
+ clase: "artefacto.error";
68
+ ruta: string;
69
+ motivo: string;
70
+ };
71
+ /**
72
+ * Un artefacto partido en los mensajes que cruzan el puente: base64 en trozos que caben en el tope de
73
+ * salida (una captura pasa de él entera), en ORDEN —el canal cifrado los manda en cola, en el orden de
74
+ * llamada— y numerados para que el móvil los junte y sepa cuándo tiene todos.
75
+ */
76
+ export declare function trozosDeArtefacto(ruta: string, mime: string, datos: Uint8Array): MensajeDeArtefactoAlMovil[];
@@ -0,0 +1,80 @@
1
+ import type { Acto } from "./actos.js";
2
+ import { type Tarea } from "./tareas.js";
3
+ /**
4
+ * Repartir un encargo GRANDE en tareas de fondo que corren EN ORDEN (petición de la persona, 06-10-2026: «cuando le doy
5
+ * una tarea grande, por ejemplo el diseño de dos ventanas…»; plan en
6
+ * `docs/superpowers/plans/2026-10-06-tareas-encadenadas.md`).
7
+ *
8
+ * El orquestador PROPONE (`proponer_tareas`), con los diseños que necesita cada tarea; la persona ve cada una aumentada
9
+ * y editable y, al pulsar «Encolar en orden», se crean encadenadas por `Tarea.tras`. **Nada de aquí crea una tarea por su
10
+ * cuenta**: crear una tarea es la autorización para que escriba sin preguntar (CLAUDE.md § tareas), y esa la da la
11
+ * persona, también en modo autónomo. Puro.
12
+ */
13
+ export declare const NOMBRE_PROPONER_TAREAS = "proponer_tareas";
14
+ /** Un reparto de más tareas es otro plan, no un encargo repartido. */
15
+ export declare const TOPE_DE_TAREAS_PROPUESTAS = 6;
16
+ /** El mismo tope que el encargo aumentado (`agent/tareas/aumentador.ts#TOPE_DE_ENCARGO`). */
17
+ export declare const TOPE_DE_PETICION = 8000;
18
+ export interface TareaPropuesta {
19
+ titulo: string;
20
+ /** El encargo de ESA tarea, autosuficiente: la tarea no ve la conversación en que se propuso. */
21
+ peticion: string;
22
+ /** Los adjuntos de la sesión que necesita ESTA tarea (sus diseños), por nombre (`/adjuntos/x.zip` o `x.zip`). */
23
+ adjuntos?: string[];
24
+ }
25
+ export interface PropuestaDeTareas {
26
+ /** Por qué no cabe en un turno: se le enseña a la persona encima de las tareas. */
27
+ motivo: string;
28
+ tareas: TareaPropuesta[];
29
+ }
30
+ /** La propuesta en una línea, para la piel que no la pinta como tarjeta (stdio, la TUI). */
31
+ export declare function textoDePropuesta(p: PropuestaDeTareas): string;
32
+ /** El nombre de un adjunto sin el prefijo de su ruta virtual. */
33
+ export declare const nombreDeAdjuntoPropuesto: (a: string) => string;
34
+ /** Por qué la propuesta no vale, o `undefined`. Lo dice en palabras, para devolvérselo al agente. */
35
+ export declare function motivoDePropuestaInaceptable(p: PropuestaDeTareas): string | undefined;
36
+ /**
37
+ * Las `Tarea` de una propuesta aceptada: en estado `nuevo`, encadenadas por `tras` y con `creada` creciente (+1 ms cada
38
+ * una: el FIFO del corredor ordena por `creada`, y dos iguales no tienen orden). Sin adjuntos: los pone el servidor
39
+ * después de copiarlos, leyéndolos del disco como siempre.
40
+ */
41
+ export declare function tareasEncadenadas(opciones: {
42
+ proyecto: Tarea["proyecto"];
43
+ /** `titulo` es el que puso el agente en la propuesta: deducirlo de la petición daba «Proyecto XOne
44
+ * (app Android de…» en las dos (medido en la prueba real). Vacío cae a la petición. */
45
+ tareas: readonly {
46
+ titulo: string;
47
+ peticion: string;
48
+ encargo: string;
49
+ }[];
50
+ ahora: Date;
51
+ id: () => string;
52
+ }): Tarea[];
53
+ /**
54
+ * La propuesta `id` si está en el transcript y nadie la ha resuelto todavía; si no, `undefined`.
55
+ *
56
+ * Es la guarda del servidor antes de encolar o descartar: lo que se encola sale de AQUÍ —el acto
57
+ * que escribió la piel—, no de lo que mande el cliente, y una propuesta ya resuelta no se encola
58
+ * otra vez (dos pestañas, un doble clic).
59
+ */
60
+ export declare function propuestaPendiente(actos: readonly Acto[], id: string): Extract<Acto, {
61
+ tipo: "propuesta-de-tareas";
62
+ }> | undefined;
63
+ /**
64
+ * Desde cuántas tareas un plan se RECUERDA al orquestador que puede repartirlo. Tres porque dos son a menudo «el cambio
65
+ * y su prueba», que caben en un turno; los planes medidos que no cabían traían seis y siete.
66
+ */
67
+ export declare const TAREAS_PARA_RECORDAR_EL_REPARTO = 3;
68
+ /**
69
+ * El aviso del HARNESS al orquestador cuando un especialista le deja un plan grande (`/planes/<slug>/TASKS.md`).
70
+ *
71
+ * Existe por una sesión real (Maset, rediseño del menú y pantalla de Entradas/Salidas): el orquestador vio que el encargo
72
+ * era «candidate for proponer_tareas», decidió esperar al plan del analista para saberlo, y con el plan ya escrito —seis
73
+ * tareas— siguió preguntando detalles sin volver sobre ello. La regla estaba en su prompt; un prompt no es un contador,
74
+ * así que el recordatorio va en código, en el informe del hijo, justo cuando el plan existe. No decide por él: si cabe en
75
+ * el turno, sigue.
76
+ */
77
+ export declare function avisoDeReparto(planes: readonly {
78
+ ruta: string;
79
+ tareas: number;
80
+ }[]): string | undefined;
@@ -0,0 +1,78 @@
1
+ /**
2
+ * La rúbrica: qué significa «hecho» en ESTE encargo, y qué se hace cuando no lo está.
3
+ *
4
+ * Portado del `RubricMiddleware` de deepagents, que existe en su SDK de **Python** y no en el
5
+ * de JS. El diseño es suyo y es bueno: en la parada natural del agente —el modelo contesta sin
6
+ * pedir más tools— un CALIFICADOR juzga lo hecho contra unos criterios, y si dice que falta
7
+ * algo su comentario vuelve como mensaje y el bucle sigue, con tope de vueltas.
8
+ *
9
+ * ## Qué es esto y qué NO es
10
+ *
11
+ * **No sustituye al verificador** (`turnoReal.ts#conVerificacion`), lo complementa, y la
12
+ * frontera es lo que cada uno puede saber. El simulador contesta lo OBJETIVO —esto parsea, este
13
+ * atributo existe, este JavaScript no revienta— y por eso su veredicto se puede creer. Un
14
+ * calificador contesta lo que el simulador no ve: si el título se lee entero, si se hizo lo que
15
+ * se pidió, si se cambió algo que nadie pidió. Medido hoy: un especialista cambió
16
+ * `editable="false"` por `locked="true"` dentro de un arreglo visual, y ninguna comprobación
17
+ * estática tiene nada que decir de eso.
18
+ *
19
+ * **Y por eso un rojo suyo no es el rojo del verificador.** El del simulador es una medida; éste
20
+ * es la opinión de un modelo sobre un transcript. Se dice con esas palabras donde se enseñe.
21
+ *
22
+ * ## Dos cosas del original que NO se copian
23
+ *
24
+ * - **Terminar sin satisfacer no puede ser mudo.** Ellos documentan que con `failed`,
25
+ * `max_iterations_reached` o `grader_error` no tocan los mensajes, así que la última respuesta
26
+ * es la del modelo y quien llama tiene que ir a mirar un campo privado del estado. Eso es el
27
+ * mismo fallo que el tope de llamadas tenía aquí: trabajo que acaba a medias sin que nadie se
28
+ * entere. Aquí el estado no satisfecho SE DICE.
29
+ * - **El calificador entra por un PUERTO**, no como un modelo construido dentro. Así esto se
30
+ * prueba sin red ni clave, que es el invariante que sostiene el diseño de este repo.
31
+ *
32
+ * Puro: aquí está la política. Quién llama al modelo y quién monta el middleware es de `agent/`.
33
+ */
34
+ /** Lo que el calificador puede decir. */
35
+ export type Veredicto = "satisfecho" | "necesita-revision" | "fallido";
36
+ /**
37
+ * Cómo acabó una evaluación. Los dos últimos no los dice el calificador: los dice el harness.
38
+ *
39
+ * `fallido` es «la rúbrica no se puede evaluar» —está mal escrita, o no habla de esto—, y es
40
+ * distinto de `error-del-calificador`, que es que el modelo no contestó. Uno culpa a la rúbrica
41
+ * y el otro al entorno, y mezclarlos manda a arreglar lo que no estaba roto.
42
+ */
43
+ export type EstadoDeRubrica = Veredicto | "tope-de-vueltas" | "error-del-calificador";
44
+ /** Un estado terminal cierra el bucle; `necesita-revision` es el único que lo continúa. */
45
+ export declare function esTerminal(estado: EstadoDeRubrica): boolean;
46
+ export interface Calificacion {
47
+ veredicto: Veredicto;
48
+ /** Qué falta, en palabras del calificador. Vacío con `satisfecho`. */
49
+ comentario: string;
50
+ }
51
+ /**
52
+ * Cuántas vueltas se le dan.
53
+ *
54
+ * Tres es el valor del original. **Aquí importa más que allí**: cada vuelta puede traer
55
+ * escrituras, y cada escritura pasa por una aprobación — así que un tope alto no es solo gasto,
56
+ * son paradas delante de una persona. Y en una tarea de fondo no hay nadie que frene el bucle,
57
+ * que es el mismo argumento por el que existen `TOPE_REPARACIONES` y el tope de tandas.
58
+ */
59
+ export declare const TOPE_DE_VUELTAS = 3;
60
+ /**
61
+ * El mensaje con que vuelve el trabajo al agente.
62
+ *
63
+ * Va con voz del HARNESS y no del usuario: quien lo lee tiene que saber que esto no es alguien
64
+ * pidiendo otra cosa, es una comprobación diciendo que lo pedido no está. Si se disfrazara de
65
+ * petición nueva, el agente podría tomarlo por un cambio de encargo y empezar otra cosa.
66
+ *
67
+ * Y dice de qué vuelta va: sin eso, tres mensajes iguales seguidos se leen como un bucle y el
68
+ * modelo no sabe cuánto margen le queda.
69
+ */
70
+ export declare function mensajeDeRevision(comentario: string, vuelta: number, tope: number): string;
71
+ /**
72
+ * Lo que se le dice a quien mira cuando el bucle acaba SIN satisfacer.
73
+ *
74
+ * Existe porque el original no lo tiene: allí el estado no satisfecho vive en un campo privado
75
+ * y la última respuesta sigue siendo la del modelo, que puede estar afirmando que terminó. Un
76
+ * trabajo que no cumple y lo dice como si cumpliera es peor que uno que falla.
77
+ */
78
+ export declare function avisoDeNoSatisfecho(estado: EstadoDeRubrica, comentario?: string): string | undefined;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * La ruta REAL de una ruta VIRTUAL del backend del agente, o `undefined` si se sale del
3
+ * proyecto.
4
+ *
5
+ * El backend del agente es un `FilesystemBackend` con `virtualMode: true`, así que lo que el
6
+ * modelo escribe —y lo que llega en los argumentos de un `interrupt`— viene ROOTEADO en el
7
+ * proyecto: `/app.xne`, `/artefactos/x.html`. Es la forma que usan las descripciones de las
8
+ * tools, las skills y el predicado `seDetieneEn`.
9
+ *
10
+ * Y ahí estaba la trampa, medida: `resolve(raiz, "/app.xne")` devuelve `/app.xne`, porque una
11
+ * ruta absoluta DESCARTA la base. Quien leyera el disco así con la forma rooteada no
12
+ * encontraba nada — con la relativa sí, que es por lo que pasó desapercibido: el test que lo
13
+ * cubría usaba `"app.xne"` sin barra. En el ANTES del diff de una aprobación eso significaba
14
+ * un fichero existente enseñado como si fuera NUEVO, con sus líneas quitadas invisibles. Es
15
+ * el peor sitio posible para una media verdad: el diff de la aprobación es el único momento
16
+ * en que alguien ve lo que el agente va a escribir antes de que exista.
17
+ *
18
+ * Las dos formas se aceptan —la relativa y la rooteada— porque las dos funcionan contra el
19
+ * backend y por tanto las dos pueden llegar. Los separadores se normalizan antes de resolver:
20
+ * en POSIX `resolve` trata «\» como un carácter más del nombre, la misma lección que ya pagó
21
+ * `leerFicheroDeProyecto`.
22
+ *
23
+ * La contención se comprueba porque `..` sí puede salir del proyecto, y de aquí sale una
24
+ * lectura de disco: sin ella, el contenido de un fichero de FUERA acabaría en la pantalla de
25
+ * la aprobación. Es lexical y no `realpath` —esta función es pura y no toca disco—, así que
26
+ * quien necesite además cerrar los enlaces simbólicos recomprueba después, como hace
27
+ * `arbolDeProyecto.ts`.
28
+ */
29
+ export declare function rutaRealDeVirtual(raiz: string, virtual: string): string | undefined;
@@ -0,0 +1,59 @@
1
+ /** Lo que tarda un diálogo en contestar lo pone una persona, así que el tope es largo: solo
2
+ * existe para que un diálogo que nadie cierra no deje un proceso vivo para siempre. */
3
+ export declare const TOPE_DEL_SELECTOR_MS: number;
4
+ export interface ComandoDeSelector {
5
+ programa: string;
6
+ argumentos: readonly string[];
7
+ }
8
+ /**
9
+ * El comando que abre el selector, o AUSENTE si este sistema no tiene ninguno conocido.
10
+ *
11
+ * Ausente no es un fallo: es «aquí no hay selector», y entonces no se ofrece el botón. Un
12
+ * botón que no hace nada es peor que no tenerlo, y el campo de texto ya resuelve el caso.
13
+ *
14
+ * `desde` es dónde se abre el diálogo — la carpeta que hay puesta ahora, para no empezar en
15
+ * un sitio cualquiera. Se pasa como argumento SEPARADO, nunca interpolado en el guion de
16
+ * AppleScript: ahí dentro una comilla en un nombre de carpeta cerraría la cadena.
17
+ */
18
+ export declare function comandoDelSelector(plataforma: string, desde?: string): ComandoDeSelector | undefined;
19
+ /**
20
+ * La carpeta elegida, leída de lo que escupió el comando — o AUSENTE si no se eligió ninguna.
21
+ *
22
+ * **Cancelar no es un fallo y se cuenta igual que no elegir.** `osascript` sale con código 1
23
+ * y `zenity` con 1 cuando la persona cierra el diálogo, así que quien llama no puede
24
+ * distinguir un «no, gracias» de una avería por el código; lo que sí distingue es que no hay
25
+ * ruta, y con eso basta: el campo se queda como estaba.
26
+ *
27
+ * Se recorta el salto de línea final, que es del terminal y no del dato, y se exige que
28
+ * empiece por `/`: cualquier otra cosa que salga por ahí no es una carpeta y no se cuela
29
+ * hasta el validador disfrazada de ruta.
30
+ */
31
+ export declare function carpetaDeLaSalida(salida: string): string | undefined;
32
+ /**
33
+ * El comando que abre, en el explorador de ficheros del sistema, la carpeta que CONTIENE
34
+ * `ruta` — pensado para «enséñame dónde está este binario», no para elegir una carpeta.
35
+ *
36
+ * Los tres sistemas, sin lista cerrada que devuelva ausente: a diferencia del selector de
37
+ * arriba, `explorer.exe`/`open`/`xdg-open` existen en cualquier Windows, macOS o Linux de
38
+ * escritorio, así que no hace falta un tercer estado «este sistema no tiene».
39
+ *
40
+ * `dirname` y no `ruta` tal cual: `ruta` apunta al BINARIO (`…\platform-tools\adb.exe`), y
41
+ * lo que el botón promete es enseñar dónde vive, no intentar «ejecutar» la carpeta.
42
+ *
43
+ * **El `dirname` es el de `plataforma`, no el de este proceso.** `node:path` por omisión
44
+ * resuelve al del sistema donde CORRE el test, y una ruta de Windows partida con el
45
+ * `dirname` POSIX de un runner Linux/Mac no encuentra ninguna barra que cortar —
46
+ * `npm test` tiene que poder probar los tres sistemas desde uno solo.
47
+ *
48
+ * Pura: compone el comando. Lanzarlo es de `agent/config/selectorEnMaquina.ts`.
49
+ */
50
+ export declare function comandoParaAbrirCarpeta(plataforma: string, ruta: string): ComandoDeSelector;
51
+ /**
52
+ * El comando que abre ESA carpeta —no la que la contiene— en el explorador de ficheros del
53
+ * sistema. Es el de «ver los ficheros del proyecto» del resumen.
54
+ *
55
+ * En Windows la ruta se NORMALIZA a barras invertidas: la raíz de un proyecto sale de
56
+ * `rutaDeWorkspace`, que junta con `/` sobre una base de `\`, y `explorer.exe` no entiende una
57
+ * ruta mezclada — abre «Documentos» en su lugar, sin error que leer.
58
+ */
59
+ export declare function comandoParaAbrirDirectorio(plataforma: string, carpeta: string): ComandoDeSelector;