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,58 @@
1
+ /**
2
+ * Una cola por CLAVE: dos tareas con la misma clave nunca se solapan; con claves distintas
3
+ * corren a la vez.
4
+ *
5
+ * **Por qué hace falta.** `write` y `edit` de un backend de ficheros son
6
+ * leer-modificar-escribir: leen el fichero entero, sustituyen y lo escriben entero. Dos a la
7
+ * vez sobre el MISMO fichero se pisan, y el modo de fallo es el peor que hay — las dos
8
+ * devuelven «bien» y una de las dos no está en el disco. Reproducido contra el backend real:
9
+ * cuatro `edit` concurrentes sobre un fichero, cuatro resultados sin error, **una** aplicada.
10
+ *
11
+ * **Y serializar SÍ basta, que era la duda razonable.** La objeción es que la segunda edición
12
+ * se resolvió contra un contenido que la primera acaba de cambiar, así que su `old_string`
13
+ * podría no valer ya. Cierto, y por eso esto va DEBAJO de quien edita y no encima: el backend
14
+ * vuelve a leer el fichero y vuelve a buscar el `old_string` cuando le toca su turno, así que
15
+ * el ancla se comprueba contra lo que hay. Medido con el backend de verdad:
16
+ *
17
+ * | | en paralelo | en serie |
18
+ * |---|---|---|
19
+ * | cuatro ediciones independientes | 1 aplicada, 0 errores | 4 aplicadas, 0 errores |
20
+ * | dos que se pisan | — | 1 aplicada, **1 error** |
21
+ *
22
+ * O sea que la edición que ya no encaja **falla en voz alta** en vez de perderse en silencio,
23
+ * y el modelo recibe su error y reintenta, que es el camino que este harness ya tiene.
24
+ *
25
+ * **Puro a propósito**: no sabe de ficheros ni de backends, solo de claves y de promesas. Así
26
+ * se prueba sin disco (`npm test` no toca la casa de nadie) y el mismo mecanismo sirve el día
27
+ * que haya otro recurso que no admita dos a la vez.
28
+ */
29
+ /** Encola `tarea` detrás de lo que ya haya pendiente para `clave`. */
30
+ export type EnSerie = <T>(clave: string, tarea: () => Promise<T>) => Promise<T>;
31
+ /**
32
+ * Crea un serializador con su propia cola.
33
+ *
34
+ * Tres decisiones que no son de forma:
35
+ *
36
+ * - **Un fallo NO envenena la cola.** La siguiente se encadena al resultado *saldado* de la
37
+ * anterior, no a su promesa cruda: si la primera rechaza, la segunda corre igual. Lo
38
+ * contrario convertiría un error de una escritura en el bloqueo de todas las siguientes
39
+ * sobre ese fichero, que es un fallo mucho peor que el que esto viene a arreglar.
40
+ * - **La entrada se RETIRA cuando se vacía**, comparando que la cola siga siendo la suya.
41
+ * Sin eso el mapa crece con una entrada por fichero tocado y no se vacía nunca, en un
42
+ * proceso que vive lo que dure la consola.
43
+ * - **Devuelve lo que devuelva la tarea, y relanza lo que lance.** Esto es un turno de espera,
44
+ * no un envoltorio que decide: si además cambiara el resultado, cada sitio que lo use
45
+ * habría que volver a medirlo.
46
+ */
47
+ export declare function crearSerieDeEscrituras(): EnSerie;
48
+ /**
49
+ * Lo que se le DICE al modelo sobre escribir en paralelo, en la descripción de `write_file` y
50
+ * `edit_file` de los dos motores —una sola frase para los dos, para que no diverjan—.
51
+ *
52
+ * La cola de arriba hace que dos escrituras al mismo fichero no se pisen: es la CORRECCIÓN, y no
53
+ * depende de que el modelo obedezca. Esto es la otra mitad, la EFICIENCIA: sin decírselo, un
54
+ * modelo que agrupa `tool_calls` —DeepSeek lo hace, medido— pide cinco ediciones del mismo HTML
55
+ * en una respuesta; en fila, las que ya no encajan fallan y hay que reintentarlas. Lo que sí
56
+ * puede ir a la vez se dice también: prohibir el paralelismo entero tiraría lo que sí vale.
57
+ */
58
+ export declare const REGLA_DE_ESCRITURAS_EN_PARALELO: string;
@@ -0,0 +1,421 @@
1
+ import { type Aviso } from "./config.js";
2
+ import { type ModoDeEscritura } from "./modoDeEscritura.js";
3
+ import { type DispositivoDeLaSesion } from "./dispositivoElegido.js";
4
+ export interface Entorno {
5
+ id: string;
6
+ nombre: string;
7
+ /** La URL del MCP. Es lo que define el entorno. */
8
+ url: string;
9
+ scopes?: readonly string[];
10
+ /**
11
+ * Qué proyectos de este entorno se ENSEÑAN en la barra, por id.
12
+ *
13
+ * Es una preferencia de presentación y por eso vive con el entorno y no con el proyecto:
14
+ * un CloudStudio con doscientos proyectos no cabe en una barra lateral, y cuáles importan
15
+ * lo sabe la persona, no el servidor. **Ausente no es «ninguno»: es «no lo he dicho»**, y
16
+ * entonces manda la omisión (los primeros que devuelva el listado). Distinguirlo de una
17
+ * lista VACÍA —«no quiero ver ninguno», que es una elección legítima— es justo por lo que
18
+ * el campo es opcional en vez de arrancar en `[]`.
19
+ */
20
+ proyectos?: readonly string[];
21
+ /**
22
+ * Qué proyectos de este entorno van FIJADOS arriba de la barra, en su propio grupo, por id.
23
+ *
24
+ * Vive con el entorno por lo mismo que `proyectos`: es presentación y lo decide la persona.
25
+ * Es una lista APARTE y no una marca dentro de `proyectos` porque son dos preguntas: un
26
+ * fijado se enseña aunque no esté entre los visibles, y deja de pintarse en la lista de
27
+ * abajo. Aquí ausente y vacía significan lo mismo —ninguno fijado—.
28
+ */
29
+ fijados?: readonly string[];
30
+ }
31
+ /**
32
+ * Las cuatro clases de destino en que se prueba una app XOne. No son cuatro herramientas
33
+ * —`adb` sirve a la vez a los Android físicos y a los emuladores arrancados— sino las
34
+ * cuatro cosas distintas que una persona quiere mirar o dejar de mirar.
35
+ */
36
+ export declare const PLATAFORMAS_DE_DISPOSITIVO: readonly ["android", "androidEmulador", "ios", "iosSimulador"];
37
+ export type PlataformaDeDispositivo = (typeof PLATAFORMAS_DE_DISPOSITIVO)[number];
38
+ /**
39
+ * Lo que se recuerda de UN AVD, por su NOMBRE y no por su serie: `emulator-5554`/`-5556`
40
+ * dependen del orden en que se arrancan, el nombre no. Ausente = nada que decir.
41
+ */
42
+ export interface AjustesDeAvd {
43
+ /** El puerto LOCAL del túnel de hotswap (`adb forward tcp:<puerto> tcp:8443`). */
44
+ puerto?: number;
45
+ /** Arrancarlo sin ventana (`-no-window`). Solo `true` se guarda. */
46
+ sinVentana?: true;
47
+ /** De qué AVD salió, si se creó desde «Copia de». Ausente = los de antes o los creados fuera. */
48
+ copiaDe?: string;
49
+ /** Con `copiaDe`: se clonó CON lo instalado (y no solo la configuración). Solo `true` se guarda. */
50
+ clon?: true;
51
+ }
52
+ /**
53
+ * Qué destinos se MIRAN al medir la máquina.
54
+ *
55
+ * Vive en global y no en el proyecto porque describe el equipo, no la app: el mismo Mac
56
+ * mira los mismos simuladores para todos los proyectos que se abran en él.
57
+ *
58
+ * **Ausente no es «no»: es «no lo he dicho»**, y entonces se miran todos — la misma
59
+ * distinción que `Entorno.proyectos`, y por la misma razón: apagar un destino es una
60
+ * elección legítima que hay que poder distinguir de no haber elegido nunca. Por eso cada
61
+ * campo es opcional en vez de arrancar en `true`.
62
+ *
63
+ * Y apagar no es cosmético: medir cuesta procesos en el equipo del usuario —`adb devices`
64
+ * arranca el demonio de adb y se queda vivo, `xcrun` tarda segundos—, así que un destino
65
+ * apagado no se consulta, y su herramienta se declara «desactivada» en vez de fingir que
66
+ * no está.
67
+ *
68
+ * `rutaAdb`/`rutaEmulator` son la ruta a mano al binario, cuando `localizadorDeAndroid` no
69
+ * lo encuentra solo (PATH y SDK por omisión). Ausente = se sigue buscando como siempre.
70
+ * Son la SEGUNDA excepción declarada a `sinRutas`, igual que `Settings.workspace`: viajan
71
+ * ENTERAS por el cable (no abreviadas con `~` — eso se probó para el workspace y se
72
+ * descartó, ver `expandirConCasa`), y solo para `adb`/`emulator`; `xcrun`/`devicectl` se
73
+ * quedan en el host.
74
+ */
75
+ export type AjustesDeDispositivos = {
76
+ [K in PlataformaDeDispositivo]?: boolean;
77
+ } & {
78
+ rutaAdb?: string;
79
+ rutaEmulator?: string;
80
+ avds?: Record<string, AjustesDeAvd>;
81
+ /** El puerto del túnel de cada móvil físico Android, por su serie (IXCODE-32, `core/puertosDeAvd.ts`). */
82
+ fisicos?: Record<string, {
83
+ puerto?: number;
84
+ }>;
85
+ };
86
+ /** ¿Se mira este destino? Ausente = sí. */
87
+ export declare function seMira(ajustes: AjustesDeDispositivos | undefined, plataforma: PlataformaDeDispositivo): boolean;
88
+ /**
89
+ * ¿Está activa la depuración? Ausente = sí, mientras dure esta etapa de pruebas.
90
+ *
91
+ * Mismo molde que `seMira`: solo `false` apaga. Vive aquí, separado del campo crudo, para que
92
+ * quien resuelve el valor en vigor (`agent/turno/depuracion.ts#entornoConDepuracion`, y el
93
+ * cliente al pintar la casilla) no reimplemente la regla de la omisión cada vez.
94
+ */
95
+ export declare function depuracionActiva(depurar: boolean | undefined): boolean;
96
+ /**
97
+ * Tope máximo del selector de concurrencia de tareas en Ajustes. La omisión (sin nada
98
+ * guardado) es `CONCURRENCIA_POR_OMISION` de `core/tareas.ts` — 2 — y vive ahí y no aquí
99
+ * porque ese fichero es el dueño de la planificación; este solo guarda la ELECCIÓN.
100
+ */
101
+ export declare const TOPE_DE_CONCURRENCIA_DE_TAREAS = 8;
102
+ /**
103
+ * La sesión remota (móvil → esta consola por el puente de `xonecode-server`). EXPERIMENTAL y
104
+ * apagada por omisión: ausente o `habilitado` distinto de `true` = no hay botón en el chat ni se
105
+ * carga el paquete. Se activa con el interruptor de Ajustes → Sesión remota, que escribe
106
+ * `habilitado` (`docs/superpowers/specs/2026-10-09-sesion-remota-xonecode-design.md`).
107
+ */
108
+ export interface AjustesDeRemoto {
109
+ habilitado?: boolean;
110
+ /** `wss://` a cualquier host, o `ws://` solo a loopback. Ausente = `SERVIDOR_REMOTO_POR_OMISION`. */
111
+ servidor?: string;
112
+ /** Por dónde sale la sesión: el servidor de XOne o un túnel de ngrok. Ausente = ngrok, salvo `servidor` escrito. */
113
+ via?: ViaRemota;
114
+ /** Solo con la vía `ngrok`: un dominio reservado en la cuenta (opcional). */
115
+ ngrok?: {
116
+ dominio?: string;
117
+ };
118
+ }
119
+ export type ViaRemota = "servidor" | "ngrok";
120
+ export declare const SERVIDOR_REMOTO_POR_OMISION = "wss://remoto.xone.dev/ws";
121
+ /** Lo que manda: `XONECODE_REMOTO=1` enciende para un arranque; si no, el `settings.json`. */
122
+ export declare function remotoEnVigor(ajustes: AjustesDeRemoto | undefined, entorno: Record<string, string | undefined>): {
123
+ habilitado: boolean;
124
+ porEntorno?: true;
125
+ servidor: string;
126
+ via: ViaRemota;
127
+ dominio?: string;
128
+ };
129
+ export interface Settings {
130
+ entornos: Entorno[];
131
+ /** La carpeta donde se bajan las copias locales. La disposición de DENTRO la fija
132
+ * `rutaDeWorkspace` y no es configurable. Ausente = `~/.xonecode/workspace`. */
133
+ workspace?: string;
134
+ /** Qué destinos se miran al medir la máquina. Ausente = todos. */
135
+ dispositivos?: AjustesDeDispositivos;
136
+ /**
137
+ * El tope de concurrencia de la cola de tareas en background: cuántas corren a la vez EN
138
+ * ESTA MÁQUINA. Vive aquí y no en el índice de tareas (`~/.xonecode/tareas/indice.json`)
139
+ * por el mismo motivo que `dispositivos`: describe el EQUIPO, no una tarea concreta, y el
140
+ * mismo Mac soporta la misma concurrencia para cualquier cola que corra en él.
141
+ *
142
+ * **Ausente no es «cero»: es «no lo he dicho»**, y entonces manda
143
+ * `core/tareas.ts#CONCURRENCIA_POR_OMISION` (2) — la misma distinción que
144
+ * `AjustesDeDispositivos` y que `Entorno.proyectos`. Cero SÍ se guarda: es una elección
145
+ * legítima (pausar la cola) y no se puede confundir con «no lo he dicho».
146
+ */
147
+ concurrenciaDeTareas?: number;
148
+ /**
149
+ * Deja las dos trazas opt-in (`XONECODE_TRACE_ERRORES`, `XONECODE_TRACE_TOOLS`) encendidas
150
+ * por omisión, para poder enterarse de un cuelgue como el hotswap en Windows sin tener que
151
+ * pedirle a nadie que teclee una variable de entorno primero. Vive en `core/` porque es la
152
+ * MISMA regla de las demás: se aplica en `agent/turno/depuracion.ts#entornoConDepuracion`.
153
+ *
154
+ * **Ausente no es «no»: es «no lo he dicho», y entonces manda ENCENDIDA** — al revés que
155
+ * `AjustesDeDispositivos` y que `concurrenciaDeTareas`, y a propósito: esto es diagnóstico de
156
+ * una etapa de pruebas, no una preferencia de máquina, y la omisión tiene que dejar rastro
157
+ * hasta que la 1.0 invierta el valor por defecto. Solo se guarda `false`, cuando alguien la
158
+ * apaga; volver a encenderla borra la clave en vez de escribir `true`.
159
+ */
160
+ depurar?: boolean;
161
+ /**
162
+ * El modo con que NACEN las sesiones nuevas de una persona en cualquier proyecto (IXCODE-31,
163
+ * Ajustes > General). Lo pisa el del proyecto (`config.json#modoDeEscritura`); ver
164
+ * `core/modoDeEscritura.ts#modoParaSesionNueva`. Ausente = supervisado, y por eso elegir
165
+ * supervisado BORRA la clave en vez de escribirla.
166
+ */
167
+ modoDeEscritura?: ModoDeEscritura;
168
+ /**
169
+ * El modelo de OpenCode (`proveedor/modelo`) para la prueba de Ajustes → Motores locales y para
170
+ * todo subagente de OpenCode sin `modelo:` en su `.md`, que manda sobre este. Sin él, OpenCode
171
+ * elige solo uno de su tier gratuito, que no contesta fuera de su consola (medido).
172
+ */
173
+ modeloDeOpencode?: string;
174
+ /** Ver `AjustesDeRemoto`. Ausente = la sesión remota no existe. */
175
+ remoto?: AjustesDeRemoto;
176
+ /**
177
+ * El aparato con que NACEN las sesiones nuevas —de una persona y de una tarea— en cualquier
178
+ * proyecto (IXCODE-51, Ajustes > General). Sin él, una sesión nueva no tiene aparato y los
179
+ * scripts prefieren un emulador. Es la FOTO, como la de la pastilla: un móvil desenchufado al
180
+ * abrir sigue siendo el elegido, y Ejecutar dice que no está en vez de cambiar a otro.
181
+ */
182
+ dispositivoPorDefecto?: DispositivoDeLaSesion;
183
+ }
184
+ /**
185
+ * Un entorno mal formado se DESCARTA en silencio; una credencial deja un AVISO grave y
186
+ * sigue. La asimetría es deliberada: un entorno roto es un dato de menos y el arranque
187
+ * puede seguir sin decir nada, pero una credencial en el fichero equivocado es un fallo de
188
+ * seguridad que tiene que verse — igual que hace `config.json` (`config.ts`, línea 112):
189
+ * un aviso «grave» que descarta el campo, no una excepción que tumbe el arranque. Este
190
+ * fichero antes lanzaba (`SettingsConCredencial`); se cambió a aviso porque `CLAUDE.md`
191
+ * exige que un fallo de CloudStudio no pueda tumbar el arranque de la consola.
192
+ */
193
+ export declare function validarSettings(bruto: unknown): {
194
+ settings: Settings;
195
+ avisos: Aviso[];
196
+ };
197
+ /**
198
+ * Un segmento que no puede salirse de su carpeta ni inventar niveles.
199
+ *
200
+ * Exportada porque `web/servidor/sesiones.ts` necesita la misma guarda para el id de
201
+ * sesión, que llega del cliente y no puede componer una ruta: una segunda copia habría
202
+ * divergido de esta la primera vez que una se corrigiera y la otra no.
203
+ */
204
+ export declare function segmentoSeguro(valor: string, que: string): string;
205
+ /**
206
+ * Dónde queda la copia local de un proyecto: `<workspace>/<entorno>/<proyecto>`.
207
+ *
208
+ * El WORKSPACE es configurable (`settings.workspace`); la disposición de dentro NO, porque
209
+ * es lo que hace predecible encontrar una copia sin consultar un índice.
210
+ *
211
+ * **El literal `workspace` vivía aquí, en MEDIO** (`<base>/<entorno>/workspace/<proyecto>`),
212
+ * y se ha mudado a la omisión de la base (`~/.xonecode/workspace`). Dos motivos medidos:
213
+ * con la base en `~/.xonecode`, los ids de los entornos quedaban de HERMANOS de `agentes/`,
214
+ * `skills/`, `tareas/` y `auth.json` —la casa del harness mezclada con el trabajo—; y quien
215
+ * eligiera una carpeta suya se encontraba un nivel `workspace/` que no había pedido. Con el
216
+ * literal en la base, lo que se configura ES el workspace.
217
+ *
218
+ * **El segmento del ENTORNO se queda, y no es decoración**: el mismo nombre de proyecto
219
+ * existe a la vez en dos entornos, y sin ese nivel serían la misma carpeta (ver
220
+ * `Wizard.tsx`, que ya explica por qué un on-premise necesita id propio).
221
+ */
222
+ /**
223
+ * ¿Esa raíz es una copia que creó xonecode, o una carpeta del usuario?
224
+ *
225
+ * De esto depende si el harness puede COMMITEAR solo al cerrar cada turno. En
226
+ * `<workspace>/<entorno>/<proyecto>` la carpeta la creó él y es suya; en la que abrió
227
+ * una persona —un proyecto offline, o `./bin/xonecode` dentro de su propio repo— un commit
228
+ * por turno sería ensuciarle el historial cada vez que habla con el agente.
229
+ *
230
+ * Compara por SEGMENTOS y no por prefijo de texto: `/casa/.xonecodeX` empieza por
231
+ * `/casa/.xonecode` y no tiene nada que ver. Y normaliza antes, porque una barra final o un
232
+ * `..` por medio hacen que dos rutas equivalentes no se parezcan como cadenas. La base a
233
+ * secas devuelve `false`: ahí no hay ningún proyecto, solo la carpeta que los contiene.
234
+ */
235
+ export declare function dentroDelWorkspace(raiz: string, base: string): boolean;
236
+ /**
237
+ * ¿Las dos rutas nombran la MISMA carpeta? Con la misma normalización que
238
+ * `dentroDelWorkspace` —por segmentos, y en Windows sin distinguir mayúsculas ni barras—,
239
+ * porque la raíz de una tarea se guardó en su día y la de hoy sale de `rutaDeWorkspace`: dos
240
+ * textos distintos para la misma copia no pueden dejar pasar un borrado.
241
+ */
242
+ export declare function mismaRuta(a: string, b: string): boolean;
243
+ /**
244
+ * Una ruta de Windows —`C:\…`, `C:/…` o `\\servidor\…`— se compara con `\` como separador y
245
+ * SIN distinguir mayúsculas, que es lo que hace su sistema de ficheros. Con `posix` a secas la
246
+ * ruta entera era UN segmento, así que en Windows nada estaba nunca «dentro del workspace»:
247
+ * el alta no podía vaciar la copia y los commits por turno no corrían. Se decide por la FORMA
248
+ * del texto y no por `process.platform`, para que el módulo siga puro y se pueda probar en cualquier
249
+ * máquina.
250
+ */
251
+ export declare function esRutaDeWindows(ruta: string): boolean;
252
+ /**
253
+ * Un `~/…` tecleado, resuelto contra la casa. Solo `~` y `~/…`: un `~otro` es la casa de
254
+ * OTRA persona en la sintaxis del shell, y aquí no se resuelve — se deja tal cual y se
255
+ * rechaza después por no ser absoluta.
256
+ *
257
+ * Es una comodidad de ENTRADA y nada más. **Lo que se enseña y lo que se guarda es la ruta
258
+ * ENTERA**: se probó a mandarla abreviada por el cable, para que el caso normal no llevara
259
+ * el nombre de la cuenta del sistema, y no se sostiene — la cabecera de esa misma consola ya
260
+ * saluda por el nombre del usuario, así que el `~` no tapaba nada que no estuviera ya, y a
261
+ * cambio dejaba en pantalla una ruta que no se puede comprobar de un vistazo, que es justo
262
+ * para lo que ese campo existe. `casa` entra por parámetro: este módulo es puro.
263
+ */
264
+ export declare function expandirConCasa(ruta: string, casa: string): string;
265
+ /**
266
+ * ¿Vale eso como workspace? Ausente = sí.
267
+ *
268
+ * Se comprueba sobre la ruta ya EXPANDIDA. Tres noes, y ninguno es de estilo: vacío no es
269
+ * una elección, una ruta relativa dependería del directorio desde el que se arrancó la
270
+ * consola —que no es el proyecto ni nada estable— y la raíz del disco convertiría cada id de
271
+ * entorno en una carpeta de primer nivel del sistema.
272
+ */
273
+ export declare function motivoDeWorkspaceInaceptable(ruta: string): string | undefined;
274
+ export declare function rutaDeWorkspace(base: string, entorno: string, proyecto: string): string;
275
+ /**
276
+ * Qué entorno de `settings.json` sirve esta URL.
277
+ *
278
+ * Existe porque el `entorno` del `config.json` puede FALTAR o quedarse viejo, y las dos
279
+ * cosas mandaban el token al hueco equivocado:
280
+ *
281
+ * - Falta en todo proyecto dado de alta desde la terminal, que no elige entorno. Esos
282
+ * proyectos viven en `legado` hasta que alguien registra el oficial en el vestíbulo, y
283
+ * entonces `adoptarLegadoSiProcede` MUEVE ese juego a `webstudio` y los deja sin tokens:
284
+ * reautenticaban en silencio. Casando la URL leen el hueco adoptado y no se enteran.
285
+ * - Se queda viejo cuando `/connect-studio` reescribe la `url` del proyecto: sin volver a
286
+ * resolver, el `entorno` anterior seguiría nombrando el juego de OTRO servidor.
287
+ *
288
+ * La comparación normaliza con `URL` y cae a la comparación literal si alguna cadena no
289
+ * parsea. Qué absorbe esa normalización, MEDIDO y no supuesto: el case del host y el puerto
290
+ * por omisión explícito (`:443`) sí casan; una barra final de más, un `?` vacío, otro puerto,
291
+ * `http` frente a `https` y otro case en la RUTA no casan. Que no casen es benigno y no
292
+ * accidental: el fallo devuelve `undefined` —y cae en `legado`, donde ese proyecto ya
293
+ * estaba— en vez de resolver al id de otro entorno. Ninguna variante cruza a un id ajeno, y
294
+ * ESA es la propiedad de la que depende no mandarle a un servidor el token de otro.
295
+ */
296
+ export declare function entornoDeUrl(url: string, entornos: readonly Entorno[]): string | undefined;
297
+ /**
298
+ * Cuántos caracteres caben en el nombre de un entorno.
299
+ *
300
+ * Es un tope de PANTALLA, no de dato: el nombre se pinta en la pestaña de Ajustes y en la
301
+ * barra lateral, y ninguno de los dos es un párrafo. Se RECHAZA en vez de RECORTAR — un
302
+ * nombre cortado en silencio es el bug mudo de siempre, y quien lo escribió no se entera.
303
+ */
304
+ export declare const LARGO_NOMBRE_DE_ENTORNO = 60;
305
+ /**
306
+ * Por qué NO vale el nombre de un entorno, o `undefined` si vale.
307
+ *
308
+ * El nombre es un RÓTULO, no un identificador, y esa es toda la regla: el `id` sigue saliendo
309
+ * de la URL del servidor y sigue siendo la clave de todo —el segmento de la carpeta del
310
+ * workspace (`rutaDeWorkspace`), el hueco de sus credenciales de OAuth, el valor del
311
+ * `entorno` del `config.json` del proyecto y el valor que viaja por el cable—, así que aquí NO
312
+ * se aplica la regla de un slug. Espacios, acentos y mayúsculas valen: es la misma distinción
313
+ * que hace el `nombre` de un proveedor personalizado (`core/modelos.ts`), y por eso renombrar
314
+ * un entorno no mueve ninguna carpeta ni invalida ningún token.
315
+ *
316
+ * Un nombre VACÍO se rechaza, y no es una validación de formulario: `validarEntorno` DESCARTA
317
+ * un entorno sin nombre al cargar, así que dejarlo en blanco no deja un entorno «sin nombre» —
318
+ * lo hace DESAPARECER en el siguiente arranque, con sus credenciales y su carpeta colgando de
319
+ * un id que ya no está en ninguna lista. El motivo lo dice, porque la consecuencia no se
320
+ * adivina.
321
+ *
322
+ * Vive en `core/` porque la aplican los DOS lados: el servidor al guardar (y su negativa va en
323
+ * el 409, como la de `olvidar`) y el cliente para poder avisar sin haber ido al servidor. La
324
+ * frontera prohíbe compartir módulo, así que el cliente lleva su copia DECLARADA — la misma
325
+ * regla que `motivoDeWorkspaceInaceptable`.
326
+ *
327
+ * **Y NO se comprueba que no se repita**, que es una decisión y no un olvido: el nombre no es
328
+ * la clave, así que dos entornos que se llaman igual —el mismo servidor visto por dos redes, un
329
+ * clon de pruebas— se distinguen perfectamente por su `id`, y negarse obligaría a inventarse
330
+ * sufijos para algo que no está roto. Lo que sí hace falta es que la pantalla lo ADVIERTA, para
331
+ * que nadie acabe con dos pestañas idénticas creyendo que son cosas distintas.
332
+ */
333
+ export declare function motivoDeNombreDeEntornoInaceptable(nombre: string): string | undefined;
334
+ /**
335
+ * Por qué NO se puede quitar un entorno ahora mismo, o `undefined` si se puede.
336
+ *
337
+ * Se niega mientras algo VIVO depende de él: una consola abierta sobre una copia suya (su lazo
338
+ * sigue hablando con ese servidor) o una tarea de fondo que no ha terminado (la cola la
339
+ * abriría con un entorno que ya no está). Las copias de `<workspace>/<id>/` las reconoce por
340
+ * la RUTA, que es donde vive el id del entorno (`rutaDeWorkspace`). Lo que ya terminó no
341
+ * cuenta: quitar el entorno no borra nada del disco.
342
+ */
343
+ export declare function motivoParaNoOlvidarEntorno(datos: {
344
+ entorno: string;
345
+ baseDeWorkspace: string;
346
+ abiertas: readonly string[];
347
+ tareas: readonly {
348
+ estado: string;
349
+ raiz: string;
350
+ }[];
351
+ }): string | undefined;
352
+ /**
353
+ * Por qué NO se puede borrar la copia local de un proyecto ahora mismo, o `undefined` si se
354
+ * puede.
355
+ *
356
+ * Es la hermana de `motivoParaNoOlvidarEntorno`, con una diferencia a propósito: una consola
357
+ * ABIERTA no es motivo. Quien borra la cierra antes (`vestibulo.borrarCopia`, el mismo orden
358
+ * que borrar la sesión abierta), y negarse obligaría a cerrar algo que la web no ofrece
359
+ * cerrar. Lo que sí para el borrado es lo que está ESCRIBIENDO ahí: un turno en vuelo —el
360
+ * agente tiene ficheros a medio escribir y su hilo en `checkpoint.sqlite`— o una tarea de
361
+ * fondo sin terminar, que la cola volvería a abrir sobre una carpeta que ya no existe.
362
+ */
363
+ export declare function motivoParaNoBorrarCopia(datos: {
364
+ raiz: string;
365
+ trabajando: boolean;
366
+ tareas: readonly {
367
+ estado: string;
368
+ raiz: string;
369
+ }[];
370
+ }): string | undefined;
371
+ /**
372
+ * Por qué NO se puede guardar a mano un fichero en esa raíz ahora mismo (el editor de la pestaña
373
+ * Ficheros), o `undefined` si se puede.
374
+ *
375
+ * La hermana de `motivoParaNoBorrarCopia` con la misma idea —lo que importa es quién ESCRIBE ahí—
376
+ * y una diferencia: aquí no cuenta el índice de tareas sino las consolas VIVAS de este proceso,
377
+ * porque una tarea `requiere-atencion` espera feedback y no escribe. Dos fuentes:
378
+ *
379
+ * - una consola de persona de esa raíz con un turno en vuelo (no solo la del foco: puede haber
380
+ * varias consolas vivas a la vez);
381
+ * - una consola de TAREA de esa raíz sin cerrar, o cerrada con el turno aún en vuelo.
382
+ *
383
+ * Con esto el guardado no necesita la cola de `escriturasEnSerie`: los únicos que escriben en la
384
+ * copia son los turnos y las tareas, y mientras corren se niega. **Límite declarado**: una tarea
385
+ * en OTRO proceso no se ve, el mismo que ya declara `borrarSesion`.
386
+ */
387
+ export declare function motivoParaNoEditarFichero(datos: {
388
+ raiz: string;
389
+ personas: readonly {
390
+ raiz: string;
391
+ turnoEnVuelo: boolean;
392
+ }[];
393
+ tareas: readonly {
394
+ raiz: string;
395
+ cerrada: boolean;
396
+ turnoEnVuelo: boolean;
397
+ }[];
398
+ }): string | undefined;
399
+ /**
400
+ * Por qué NO se puede cambiar el workspace ahora mismo —y con él MUDAR las copias que hay
401
+ * dentro—, o `undefined` si se puede.
402
+ *
403
+ * La hermana de `motivoParaNoBorrarCopia` para TODA la base, con la misma diferencia a
404
+ * propósito: una consola ABIERTA y en reposo no es motivo. La web tiene siempre una en foco,
405
+ * así que negarse por ella haría el cambio imposible; quien muda la cierra antes, en el orden
406
+ * de `vestibulo.borrarCopia`. Lo que sí para la mudanza es lo que está ESCRIBIENDO en la base:
407
+ *
408
+ * - un turno en vuelo en cualquier copia de la base (`trabajando`: sus raíces);
409
+ * - una consola de TAREA abierta (`deTareas`), que no se cierra por nadie;
410
+ * - una tarea de fondo sin terminar con su raíz bajo la base vieja —`requiere-atencion`
411
+ * incluida: espera feedback y la cola la volvería a abrir en la ruta de antes—.
412
+ */
413
+ export declare function motivoParaNoMudarWorkspace(datos: {
414
+ base: string;
415
+ trabajando: readonly string[];
416
+ deTareas: readonly string[];
417
+ tareas: readonly {
418
+ estado: string;
419
+ raiz: string;
420
+ }[];
421
+ }): string | undefined;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * El ENTORNO con el que corre la shell de un subagente con ejecución.
3
+ *
4
+ * TypeScript puro: aquí se decide QUÉ variables ve esa shell, y quien la monta es
5
+ * `agent/grafo/proyecto.ts`. Separado por lo de siempre —compuesto dentro del montaje, que
6
+ * todos los tests doblan, la regla quedaría escrita y no probada—, y porque esto es una
7
+ * decisión sobre secretos, que es justo lo que no puede depender de acordarse.
8
+ *
9
+ * **Lo que se quita, y por qué es obligatorio quitarlo.** `guardarCredencial` escribe la
10
+ * clave de API TAMBIÉN en `process.env`, a propósito (`agent/config/authEnDisco.ts`). Un
11
+ * `inheritEnv: true` a secas le pasaría esas claves a la shell del modelo, y entonces un
12
+ * `printenv` —que es lo primero que hace cualquiera para orientarse— las deja en el
13
+ * resultado de la tool, o sea en el contexto y en el `.jsonl` de la sesión. No es una fuga
14
+ * hipotética: es la salida normal de un comando normal.
15
+ *
16
+ * Se quitan **por la tabla** (`VARIABLES_POR_PROVEEDOR`, el único sitio donde vive el nombre
17
+ * de la variable de cada proveedor — hubo cuatro copias y ya habían divergido) más el
18
+ * prefijo `XONECODE_CLAVE_`, que es el de los proveedores PERSONALIZADOS y por definición no
19
+ * puede estar en ninguna tabla: el slug lo elige el usuario. Y no se quita todo lo que
20
+ * empiece por `XONECODE_`, que se llevaría `XONECODE_TRACE_TOOLS` y `XONECODE_MODELO` sin
21
+ * que sean secretos de nadie.
22
+ *
23
+ * **Límite declarado, y conviene no engañarse con él**: esto quita NUESTRAS credenciales,
24
+ * las que xonecode puso ahí. El entorno de quien arranca el proceso puede traer un
25
+ * `GITHUB_TOKEN` o un `AWS_SECRET_ACCESS_KEY` suyos, y eso no se filtra — ni se podría con
26
+ * honestidad, porque «lo que parece una clave» es una heurística y una heurística que falla
27
+ * en silencio es peor que una regla declarada. Quien concede ejecución concede leer el
28
+ * entorno y el disco; lo que esto evita es que el harness REGALE lo que él mismo escribió.
29
+ *
30
+ * **Y los scripts de una skill se ponen en el PATH, que es lo que quita el problema en vez de
31
+ * explicarlo.** Medido corriéndolo: el agente tenía DOS espacios de rutas —las virtuales de
32
+ * `read_file` y las reales de sus comandos— y se pasó decenas de llamadas mezclándolos, leyendo
33
+ * con `read_file` rutas absolutas que no existen para esa tool y no van a existir nunca. Con los
34
+ * `scripts/` de cada skill montada en el PATH, un script se llama por su NOMBRE
35
+ * (`xone-hotswap …`) y no hay ninguna ruta que acertar, ni que meter en el prompt, ni que viaje
36
+ * en el evento. Un aparato nuevo mañana trae su skill con sus scripts y quedan disponibles solos.
37
+ *
38
+ * **Se AÑADEN al final, no al principio.** Prepender dejaría que una skill —que puede venir en
39
+ * un `.zip` de cualquier sitio— sombreara un binario del sistema llamando a un script suyo `ls`
40
+ * o `git`. Al final, lo que ya existe gana.
41
+ *
42
+ * **Y lo que se AÑADE además son rutas, una variable por cosa.** Una shell ve el disco de verdad,
43
+ * no nuestras rutas virtuales: `/skills/xone-hotswap/` no existe para ella. Pero meter la
44
+ * ruta absoluta en el prompt tendría dos precios —el comando que el modelo componga sería el
45
+ * `detalle` del evento, y ahí no puede viajar una ruta de la máquina (`sinRutas`), y la
46
+ * raíz no es UNA sino tres con la del proyecto ganando—. Con una variable por skill, el
47
+ * prompt dice `$XONECODE_SKILL_XONE_HOTSWAP/scripts/android.mjs` y ni el contexto ni el
48
+ * cable ven una ruta.
49
+ */
50
+ import { type DispositivoDeLaSesion } from "./dispositivoDeSesion.js";
51
+ /**
52
+ * La variable que nombra la carpeta donde dejar lo que se quiera enseñar a una persona.
53
+ *
54
+ * Sin ella, un script escribe en el `cwd` —la raíz del proyecto— que es justo lo que
55
+ * `artefactoFueraDeSitio` prohíbe a las tools de fichero, y una shell no pasa por ahí.
56
+ */
57
+ export declare const VARIABLE_DE_ARTEFACTOS = "XONECODE_ARTEFACTOS";
58
+ /**
59
+ * Y la que nombra la carpeta donde dejar lo que **no** se le enseña a nadie: lo que un script
60
+ * saca del contexto para no metérselo al agente en el hilo (`core/hotswap.ts`).
61
+ *
62
+ * Son dos variables y no una porque son dos preguntas: la de arriba dice «dónde dejo lo que
63
+ * quiero que vea», ésta «dónde dejo lo que quiero poder releer». Con una sola, el script
64
+ * escribía sus volcados donde se anuncian — medido: diez tarjetas en el hilo, seis de ellas
65
+ * de ficheros que nadie volvió a abrir.
66
+ */
67
+ export declare const VARIABLE_DE_HOTSWAP = "XONECODE_HOTSWAP";
68
+ /**
69
+ * Cómo se llama la variable que lleva la ruta real de una skill.
70
+ *
71
+ * La MISMA derivación que `variableDeProveedor` para un personalizado (mayúsculas y los
72
+ * guiones a guión bajo): dos formas de convertir un slug en variable son dos formas de
73
+ * discrepar. El prefijo es otro a propósito — `XONECODE_SKILL_` frente a
74
+ * `XONECODE_CLAVE_`—, así que una skill no puede fabricarse el nombre de una credencial.
75
+ */
76
+ export declare function variableDeSkill(nombre: string): string;
77
+ /**
78
+ * Las dos rutas de Android que la shell necesita y no puede deducir.
79
+ *
80
+ * **Medido en la máquina de desarrollo**: `adb` está en el PATH (`/opt/homebrew/bin/adb`) y
81
+ * `emulator` **no** —vive en `.../share/android-commandlinetools/emulator/`— con
82
+ * `ANDROID_HOME` y `ANDROID_SDK_ROOT` vacías. O sea que el caso normal de un Mac con
83
+ * Homebrew es justo el que deja al agente sin el binario que arranca un emulador.
84
+ *
85
+ * Quien sabe dónde está el SDK es `localizadorDeAndroid` (`agent/dispositivos/`), que ya
86
+ * mira las dos variables de entorno y las raíces por omisión de cada plataforma. Pasarlo por
87
+ * aquí es lo que evita que el script tenga que adivinarlo: **una segunda regla sobre dónde
88
+ * vive el SDK es una segunda regla que puede divergir**, y ésta es la clase de cosa que falla
89
+ * en silencio —el script no encuentra el binario, el modelo se apaña por su cuenta—.
90
+ *
91
+ * Va por VARIABLE y no por el prompt por lo mismo que las skills: el comando que el modelo
92
+ * componga sale como `detalle` del evento, y ahí no puede viajar una ruta de la máquina
93
+ * (`sinRutas`).
94
+ */
95
+ export declare const VARIABLE_DE_EMULATOR = "XONECODE_EMULATOR";
96
+ export declare const VARIABLE_DE_ADB = "XONECODE_ADB";
97
+ /**
98
+ * De un localizador de binarios del SDK a las variables que ve la shell.
99
+ *
100
+ * PURA y con el localizador por parámetro: así se prueba sin disco, y sobre todo así la
101
+ * composición de producción no vive dentro de `entornoDeLaShellDelProyecto` —que toca
102
+ * `process.env` y `existsSync`, y por tanto ningún test suyo podría ver si el localizador
103
+ * llegó a estar cableado—. Es el patrón de fallo que este repo lleva contadas nueve veces.
104
+ *
105
+ * Lo que no se encuentra **no sale**, ni siquiera como cadena vacía: la misma regla que el
106
+ * resto del módulo. Un `XONECODE_EMULATOR=""` no es «no consta», es una ruta rota que el
107
+ * script tomaría por buena.
108
+ */
109
+ export declare function variablesDeAndroid(enSdk: (nombre: string, subcarpeta: string) => string | undefined): Record<string, string>;
110
+ /** Una skill montada: su nombre de catálogo y dónde está DE VERDAD en el disco. */
111
+ export interface SkillEnDisco {
112
+ nombre: string;
113
+ dir: string;
114
+ }
115
+ export declare function entornoDeShell(opciones: {
116
+ entorno: Readonly<Record<string, string | undefined>>;
117
+ skills?: readonly SkillEnDisco[];
118
+ /** La carpeta de artefactos de la sesión, si la sesión tiene una. */
119
+ artefactos?: string;
120
+ /** Y su hermana, la de los volcados que no se anuncian. Misma condición: si la hay. */
121
+ hotswap?: string;
122
+ /** El FICHERO con el dispositivo de la sesión (`core/dispositivoDeSesion.ts`). Misma
123
+ * condición: solo con sesión. Se da la ruta aunque el fichero no exista todavía. */
124
+ dispositivo?: string;
125
+ /**
126
+ * Las carpetas de scripts que hay que poner al alcance, ya comprobadas por quien toca el
127
+ * disco: esto es puro y no mira si existen. Una que no exista no rompe nada, pero ensucia
128
+ * el PATH con una promesa vacía.
129
+ */
130
+ binarios?: readonly string[];
131
+ /**
132
+ * Las rutas de Android ya resueltas (`variablesDeAndroid`). Entran hechas y no como un
133
+ * localizador para que esto siga sin tocar disco.
134
+ */
135
+ android?: Readonly<Record<string, string>>;
136
+ /**
137
+ * El sistema: en Windows el PATH se llama `Path` y se separa con `;` (con `:` partiría `C:\…`). Por omisión, el de este
138
+ * proceso; por parámetro para probarlo sin estar en Windows.
139
+ */
140
+ plataforma?: string;
141
+ }): Record<string, string>;
142
+ /**
143
+ * Por qué un comando de quien ejecuta NO se lanza, o `undefined` si se lanza: una búsqueda que recorre el DISCO ENTERO.
144
+ *
145
+ * Medido en calc14: el conductor buscaba un script que el plan nombraba y no existe (`xone-validate`) y lanzó
146
+ * `find / -name "xone-validate*"`, que tardó más de cuatro minutos con el turno parado; luego otro `find /` para la carpeta
147
+ * del plan, que es virtual y no está en el disco con ese nombre. Nada de lo que busca vive fuera del proyecto, de sus
148
+ * variables o de su PATH, y recorrer la máquina del usuario es además mirar donde no le toca. Se reconoce `find`, `grep -r`
149
+ * y `ls -R` / `du` cuando su punto de partida es la raíz, la casa o una carpeta del sistema; lo relativo (`find .`) y lo de
150
+ * sus variables (`$XONECODE_…`) pasan. Es una lista de lo que se ha visto, no un filtro de shell: un límite declarado.
151
+ */
152
+ export declare function motivoDeComandoRechazado(comando: string): string | undefined;
153
+ /**
154
+ * Un comando que iría a OTRO aparato que el de la sesión (IXCODE-32), o `undefined` si no.
155
+ *
156
+ * El síntoma, de un usuario: con un móvil físico elegido, a mitad de sesión el trabajo pasó al
157
+ * emulador. Los scripts de `xone-hotswap` ya se niegan (`lib/dispositivo.mjs`); esto cierra la otra
158
+ * puerta, que es `adb` a mano en la shell. La regla es la que se pidió: **el aparato elegido se pasa
159
+ * SIEMPRE** —todo `adb` que actúe sobre un aparato lleva el `-s` de la sesión—, y con un físico o un
160
+ * iPhone elegido no se lanza un emulador. Lo que no toca un aparato (`adb devices`, `version`…) pasa.
161
+ *
162
+ * Como `motivoDeComandoRechazado`, mira palabras y no es un intérprete de shell: un `adb` dentro de
163
+ * un script propio, o un `ANDROID_SERIAL=` puesto a mano, no se ven. Límite declarado; tampoco mira
164
+ * el `--udid` de un `xcrun simctl` (los scripts de iOS sí).
165
+ */
166
+ export declare function motivoDeOtroAparato(comando: string, d: DispositivoDeLaSesion | undefined): string | undefined;
167
+ /**
168
+ * Lo que la traza dice del entorno de la shell de un agente (`DiagnosticoDeTools.entorno`), sin copiar el entorno: la
169
+ * clave del PATH (en Windows es `Path`), cuántas carpetas, si alguna tiene `node`/`adb` y cuántas son de scripts. `existe`
170
+ * mira el disco: entra por parámetro para que esto siga siendo puro.
171
+ */
172
+ export declare function resumenDelEntorno(entorno: Readonly<Record<string, string>>, opciones: {
173
+ plataforma: string;
174
+ existe: (ruta: string) => boolean;
175
+ scripts?: number;
176
+ nodeDelServidor?: string;
177
+ }): Record<string, string | number | boolean>;