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,155 @@
1
+ /**
2
+ * # El modo de escritura de una sesión
3
+ *
4
+ * Dos modos y nada más: **supervisado**, donde cada escritura para con su diff delante, y
5
+ * **autónomo**, donde el agente escribe los ficheros del proyecto sin preguntar.
6
+ *
7
+ * **Vive en la SESIÓN, no en el disco.** Antes esto era `settings.sinAprobacion`, un ajuste
8
+ * por RUTA en `settings.json` que se ponía una vez y se quedaba puesto para siempre, en
9
+ * todas las sesiones y todos los procesos. Se retiró entero: un mando que está dentro de la
10
+ * caja del chat se lee como «esta conversación», y una bandera global encendida sobre la app
11
+ * de un cliente que nadie recuerda haber dejado encendida es el peor final posible. Es la
12
+ * misma decisión que el esfuerzo de razonamiento (`core/esfuerzo.ts`), que también se elige
13
+ * por sesión, se anota en el índice y vuelve al reabrirla.
14
+ *
15
+ * **Con qué modo NACE una sesión sí tiene un valor por defecto (IXCODE-31)**, global y por
16
+ * proyecto (`modoParaSesionNueva`), y no es volver a `sinAprobacion`: aquello era un ajuste
17
+ * que GOBERNABA cada escritura de todas las sesiones; esto solo decide la posición inicial
18
+ * del conmutador de una sesión NUEVA de una persona, que lo ve en la caja del chat desde el
19
+ * primer momento y lo cambia ahí. Una sesión reabierta conserva el suyo y una tarea de fondo
20
+ * no lo usa.
21
+ *
22
+ * **Lo que el modo gobierna son las escrituras LOCALES, y solo eso.** No toca la subida:
23
+ * `/sync subir` conserva su plan delante y su aprobación fail-closed por TIPO en los dos
24
+ * modos, porque subir es llevar el trabajo a la app de otras personas y eso no es lo que
25
+ * esta palanca decide. Y no toca las guardas de RUTA: `/.env`, `/.git`, `/.xonecode`, las
26
+ * vistas aplanadas y un artefacto fuera de sitio se siguen denegando igual en autónomo. El
27
+ * modo quita la PREGUNTA, nunca la BARRERA.
28
+ *
29
+ * **Y por eso se levantó la condición de CloudStudio**, que era la que prohibía todo esto en
30
+ * un proyecto conectado. El argumento medido: escribir no sube; el commit por turno es git,
31
+ * o sea recuperable; y la subida sigue teniendo su propia aprobación. La incoherencia que lo
32
+ * hizo insostenible: sobre ese MISMO proyecto conectado, una tarea de fondo ya escribía sin
33
+ * preguntar y la consola no podía.
34
+ */
35
+ /** Supervisado: cada escritura con su diff. Autónomo: se aplican solas. */
36
+ export type ModoDeEscritura = "supervisado" | "autonomo";
37
+ /**
38
+ * Una sesión que no ha dicho nada PREGUNTA.
39
+ *
40
+ * Ausente no es «no consta» aquí, y esa es la diferencia con el esfuerzo o el dispositivo:
41
+ * de esto hay que decidir algo en cada escritura, así que el hueco tiene que resolverse, y
42
+ * la única dirección segura para resolverlo es la que enseña el diff.
43
+ */
44
+ export declare const MODO_POR_OMISION: ModoDeEscritura;
45
+ /** De dónde salió el modo de una sesión nueva: lo dice el código, para poder decirlo. */
46
+ export type OrigenDelModo = "proyecto" | "global" | "omision";
47
+ /**
48
+ * El modo con que NACE una sesión de una persona (IXCODE-31): el del PROYECTO si está puesto
49
+ * (`.xonecode/config.json#modoDeEscritura`), si no el GLOBAL (`settings.json#modoDeEscritura`,
50
+ * Ajustes > General), y si no ninguno, la omisión de siempre. Ausente en cada nivel es «no lo
51
+ * he dicho», y entonces decide el siguiente.
52
+ */
53
+ export declare function modoParaSesionNueva(valores: {
54
+ proyecto?: ModoDeEscritura;
55
+ global?: ModoDeEscritura;
56
+ }): {
57
+ modo: ModoDeEscritura;
58
+ origen: OrigenDelModo;
59
+ };
60
+ /**
61
+ * Cuántas rondas de aprobación admite un turno de la CONSOLA, en los dos modos.
62
+ *
63
+ * El `MAX_APPROVAL_ROUNDS` de `vendor/hitl.ts` son cinco y se dimensionaron para un modelo
64
+ * que insiste tras cada rechazo — «te lo he preguntado cinco veces, para». Medido después,
65
+ * eso no es lo que corta: lo que corta son trabajos legítimos a la mitad, porque una ronda
66
+ * no es una insistencia, es una TANDA de escrituras. Ya lo pagaron las tareas de fondo
67
+ * —`core/tareas.ts#TOPE_DE_RONDAS_DE_TAREA`, con un turno que acabó con cuatro ficheros
68
+ * escritos, una escritura abandonada y el verificador sin correr— y lo paga igual una
69
+ * sesión en modo autónomo, que es la misma forma de trabajar con alguien delante.
70
+ *
71
+ * **Es el MISMO 20 que la tarea, y sale de la misma medida**, no de una segunda
72
+ * observación: lo único medido es el turno que se cortó necesitando cinco tandas, y veinte
73
+ * deja sitio a un encargo bastante mayor. Sigue siendo un número provisional, y lo que lo
74
+ * hace aceptable es su MODO DE FALLO: al agotarse se DICE, quedan escrituras sin aplicar y
75
+ * el turno sale con `cortadoPorTope`. Un tope corto que para con un motivo verdadero se
76
+ * afina luego; lo que no se puede es que al agotarse mienta.
77
+ *
78
+ * **Vive aparte del de la tarea aunque hoy valgan lo mismo**: son dos situaciones y no una
79
+ * —aquí hay alguien que puede rechazar o pulsar parar, allí no hay nadie mirando—, así que
80
+ * fundirlos ataría dos decisiones que se van a afinar por separado.
81
+ *
82
+ * **Subido a 50 junto con el de la tarea**, a petición de la persona: el ciclo de ajustar una pantalla contra su maqueta
83
+ * gastaba las 20 en un turno (medido en una tarea; el chat en autónomo trabaja igual). Siguen separados.
84
+ */
85
+ export declare const TOPE_DE_RONDAS_DE_CONSOLA = 50;
86
+ /**
87
+ * El tope de rondas de `xonecode run --real` que se puede subir por ENTORNO, para medir.
88
+ *
89
+ * `run` no tiene a nadie delante, así que su tope es el corto (`MAX_APPROVAL_ROUNDS`, cinco). Medido
90
+ * sobre una calculadora hecha por los agentes, **las cinco pasadas se cortaron con él**, y siempre en
91
+ * el mismo punto: justo antes de la última vuelta del bucle de calidad, la que compara la captura
92
+ * final con la maqueta. El tope era un artefacto de medir con `run`, no del agente: en la consola
93
+ * son veinte. Con esto una prueba puede pedir el de la consola sin tocar el código.
94
+ *
95
+ * **Solo lo lee `run`**, nunca la consola ni las tareas, que ya tienen el suyo. Un valor que no sea un
96
+ * entero entre 1 y `TOPE_MAXIMO_DE_RONDAS_DE_ENTORNO` no se aplica y `run` lo DICE: el tope existe para
97
+ * cortar un bucle que nadie puede parar, y un `999999` por un descuido lo dejaría sin freno.
98
+ */
99
+ export declare const VARIABLE_DEL_TOPE_DE_RONDAS = "XONECODE_TOPE_DE_RONDAS";
100
+ export declare const TOPE_MAXIMO_DE_RONDAS_DE_ENTORNO = 50;
101
+ export declare function topeDeRondasDeEntorno(valor: string | undefined): number | undefined;
102
+ /** ¿Es uno de los dos nombres EXACTOS del modo? Nada de tildes ni sinónimos: eso es `modoDeTexto`. */
103
+ export declare function esModoDeEscritura(candidato: unknown): candidato is ModoDeEscritura;
104
+ /**
105
+ * Lo que alguien TECLEA, traducido a un modo.
106
+ *
107
+ * Acepta las dos parejas de palabras: la nueva —la que se lee en la pastilla y viaja por el
108
+ * cable— y la vieja de `/aprobacion [humana|automatica]`, que lleva meses en la ayuda y en
109
+ * los dedos de quien la usa. Un comando que deja de entender lo que siempre entendió es una
110
+ * regresión aunque el concepto sea el mismo.
111
+ *
112
+ * Las tildes se aceptan al ENTRAR y nunca se guardan: el valor que viaja y se persiste es
113
+ * siempre `autonomo` a secas, que es el que compara `esModoDeEscritura`.
114
+ *
115
+ * **Lo que no reconoce es `undefined`, jamás un modo por omisión**: quien llame decide qué
116
+ * hacer con un «no lo entiendo», y aquí adivinar sería adivinar en la dirección peligrosa la
117
+ * mitad de las veces.
118
+ */
119
+ export declare function modoDeTexto(texto: string): ModoDeEscritura | undefined;
120
+ /**
121
+ * ¿Las escrituras de esta sesión se aplican SIN preguntar, ahora mismo?
122
+ *
123
+ * Las dos condiciones son AND y ninguna sobra:
124
+ *
125
+ * - **El modo de la sesión es autónomo.** Lo eligió quien está en esta conversación.
126
+ * - **Hay alguien delante.** Auto-aprobar significa «el humano que está aquí ha decidido no
127
+ * pulsar», no «no hace falta humano». Es la única condición que sobrevivió al rediseño, y
128
+ * no es celo: `consolaWeb` declara `interactivo` a fuego, así que quien llama pasa la
129
+ * misma cuenta que `pedirDecisiones` (`interactivo && !eof()`). Con ella, una pestaña que
130
+ * se cierra a mitad de turno devuelve la escritura al camino de aprobación, donde el eof
131
+ * la rechaza — y `xonecode run` en CI y las tuberías siguen sin aplicar nada, que es lo
132
+ * que hacen hoy y lo que el código de salida 2 del contrato significa.
133
+ *
134
+ * Se pregunta en CADA RONDA, nunca se captura al abrir: el modo se cambia con la sesión en
135
+ * marcha, y un booleano capturado dejaría el cambio sin efecto hasta reabrir — la mitad de
136
+ * las veces en la dirección peligrosa.
137
+ */
138
+ export declare function seEscribeSinPreguntar(opciones: {
139
+ modo: ModoDeEscritura | undefined;
140
+ interactivo: boolean;
141
+ }): boolean;
142
+ /**
143
+ * Cuántas preguntas de UN turno se contestan solas en modo autónomo. Un modelo que encadena
144
+ * preguntas no puede dejar el turno dando vueltas: pasado el tope, la siguiente le llega a la persona.
145
+ */
146
+ export declare const TOPE_DE_PREGUNTAS_CONTESTADAS_SOLAS = 8;
147
+ /**
148
+ * La opción que el agente MARCÓ como recomendada, o `undefined`. Solo cuenta lo que el modelo
149
+ * escribió: sin marca no se elige por él, y la pregunta llega a la persona.
150
+ *
151
+ * **El modo autónomo quitaba la pregunta de las ESCRITURAS y no la del agente**, y una sesión
152
+ * autónoma se paraba igual a pedir «alcance» y «tipografías», cada una con su recomendada.
153
+ * Contestarla sola es decidir por la persona, así que se DICE en el chat, con la opción elegida.
154
+ */
155
+ export declare function opcionRecomendada(opciones: readonly string[]): string | undefined;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Qué motor de agente corre una sesión: `deepagents` (el de siempre) o `trueforge` (el segundo,
3
+ * `docs/VARIANTE-TRUEFORGE-HARNESS.md`).
4
+ *
5
+ * **deepagents es LEGACY** (decisión suya, 30-09-2026): sigue corriendo las sesiones que nacieron con
6
+ * él y a un `"motor": "deepagents"` de distancia, pero lo nuevo va solo a TrueForge y ahí no se toca
7
+ * nada. Primer caso: `describe_image` (IXCODE-23) no existe en deepagents, aunque el aviso de adjuntos,
8
+ * que es común, la nombra.
9
+ *
10
+ * **Se elige por CONFIGURACIÓN y no se enseña**: decisión suya —«la conexión que sea por
11
+ * configuración no visible para el usuario»—. La interfaz es la misma con los dos: el motor solo
12
+ * cambia quién produce los eventos de dominio que las pieles pintan.
13
+ *
14
+ * **Y una sesión conserva el motor con el que nació**: la memoria de una conversación de
15
+ * deepagents (su checkpoint) no la puede continuar TrueForge ni al revés, así que cambiar la
16
+ * configuración con sesiones abiertas no puede cambiarles el motor por debajo — las nuevas
17
+ * toman el de la configuración, y las viejas siguen con el suyo.
18
+ *
19
+ * Puro: ni disco ni entorno; quien llama pasa las fuentes.
20
+ */
21
+ export declare const MOTORES: readonly ["deepagents", "trueforge"];
22
+ export type MotorDeAgente = (typeof MOTORES)[number];
23
+ /**
24
+ * El de omisión, el que corre sin configurar nada: **TrueForge**, decisión suya (24-09-2026) tras el
25
+ * banco entre motores, que los dio equivalentes en coste dentro del ruido y a TrueForge sin peor
26
+ * calidad (`docs/VARIANTE-TRUEFORGE-HARNESS.md`, «El banco entre motores»). deepagents sigue a un
27
+ * `"motor": "deepagents"` de distancia, y una sesión que nació con él sigue con él: el vestíbulo la
28
+ * reabre con el suyo, y a una sin motor guardado —de antes de que hubiera dos— le pone deepagents a
29
+ * mano, sin pasar por aquí.
30
+ */
31
+ export declare const MOTOR_POR_OMISION: MotorDeAgente;
32
+ export declare function esMotor(valor: unknown): valor is MotorDeAgente;
33
+ /**
34
+ * El motor de una sesión. Precedencia, del más concreto al menos: el de la SESIÓN (con el que
35
+ * nació), la variable `XONECODE_MOTOR`, el `config.json` del proyecto, el global y la omisión. Un
36
+ * valor que no es un motor se salta, que es lo mismo que no haberlo puesto.
37
+ */
38
+ export declare function resolverMotor(fuentes: {
39
+ sesion?: unknown;
40
+ entorno?: unknown;
41
+ proyecto?: unknown;
42
+ global?: unknown;
43
+ }): MotorDeAgente;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Los MOTORES LOCALES —Claude Code, Codex, OpenCode— vistos desde Ajustes: si están, si tienen
3
+ * sesión iniciada y si contestan. Puro: lo que toca la máquina vive en
4
+ * `agent/motores/motoresLocales.ts`.
5
+ *
6
+ * Existe porque un subagente con `motor: claude-code` corre el producto de la máquina con SU
7
+ * login, y hasta ahora nada decía si ese login estaba: `disponible()` solo comprobaba que el SDK
8
+ * se importa, y un motor sin sesión fallaba a mitad de un encargo. La guía que circulaba entre
9
+ * usuarios —PowerShell como administrador, la REPL, `/login`, «deja la consola abierta»— tenía
10
+ * dos cosas de más, medidas: el SDK trae su PROPIO binario (no hace falta instalar Claude Code) y
11
+ * la credencial queda en disco (no hace falta dejar nada abierto).
12
+ */
13
+ import type { MotorExterno } from "./ports.js";
14
+ /** Los tres, en el orden de las pestañas: Claude Code primero, que es el que más se usa. */
15
+ export declare const MOTORES_LOCALES: readonly MotorExterno[];
16
+ export declare function esMotorLocal(valor: unknown): valor is MotorExterno;
17
+ /**
18
+ * Por qué ENTORNO se prueba. Un subagente de Claude Code SIN `ejecucion` no recibe `env` y hereda
19
+ * el del proceso —donde `guardarCredencial` deja a propósito la `ANTHROPIC_API_KEY` de
20
+ * xonecode—, y uno CON `ejecucion` recibe el de nuestra shell, sin claves. Medido: con la clave
21
+ * en el entorno, `auth status` contesta `apiKeySource: "ANTHROPIC_API_KEY"` y factura a la clave
22
+ * aunque haya login. Así que con clave son DOS caminos, y se prueban los dos; sin ella, uno.
23
+ */
24
+ export type CaminoDePrueba = "unico" | "sin-ejecucion" | "con-ejecucion";
25
+ export interface PruebaDeMotorLocal {
26
+ camino: CaminoDePrueba;
27
+ ok: boolean;
28
+ /** La respuesta recortada, o el motivo del fallo en una línea. Sin rutas ni URL. */
29
+ detalle: string;
30
+ ms: number;
31
+ medido: string;
32
+ }
33
+ export interface LoginDeMotorLocal {
34
+ fase: "esperando" | "hecho" | "fallo" | "cancelado";
35
+ /** El binario dijo «Paste code here if prompted»: se puede pegar el código de la web. */
36
+ pideCodigo?: true;
37
+ detalle?: string;
38
+ desde: string;
39
+ }
40
+ /**
41
+ * La foto de un motor. Cada campo ausente es «no consta», nunca «no»: un `conSesion` que falta
42
+ * es que no se supo preguntar (OpenCode no tiene una salida de estado que se pueda leer sin
43
+ * adivinar), y entonces la tarjeta no afirma nada y lo dice la prueba.
44
+ */
45
+ export interface EstadoDeMotorLocal {
46
+ motor: MotorExterno;
47
+ instalado: "ok" | "no-encontrado" | "fallo";
48
+ version?: string;
49
+ /** Por qué no está o por qué falló, en una línea. */
50
+ detalle?: string;
51
+ conSesion?: boolean;
52
+ /** La sesión en palabras: «Cuenta de Claude · Team · XOne». El CORREO no cruza nunca. */
53
+ sesion?: string;
54
+ /** Claude Code: sin ejecución, el SDK usaría la clave de API de xonecode y no el login. */
55
+ conClave?: true;
56
+ pruebas?: PruebaDeMotorLocal[];
57
+ probando?: true;
58
+ login?: LoginDeMotorLocal;
59
+ /** Esta ejecución puede iniciar sesión desde el botón (hoy, solo Claude Code). */
60
+ admiteLogin?: true;
61
+ /** Y abrir una consola del sistema con el comando ya escrito, como respaldo. */
62
+ admiteConsola?: true;
63
+ /**
64
+ * Este motor necesita un modelo elegido aquí (hoy, solo OpenCode): sin uno, con nuestra
65
+ * configuración cerrada elige solo un modelo de su tier gratuito, que no contesta fuera de su
66
+ * propia consola (medido). Lo usan la prueba y todo subagente sin `modelo:` en su `.md`.
67
+ */
68
+ admiteModelo?: true;
69
+ /** El elegido, `proveedor/modelo`. Ausente es que no hay ninguno. */
70
+ modelo?: string;
71
+ medido: string;
72
+ }
73
+ /** Los motores a los que se les elige el modelo en Ajustes. */
74
+ export declare const MOTORES_CON_MODELO: readonly MotorExterno[];
75
+ /**
76
+ * Un modelo de OpenCode tal como lo lista `opencode models`: `proveedor/modelo`. Es la regla del
77
+ * SERVIDOR al guardarlo y al leerlo de `settings.json`; lo que no la cumpla no se escribe en la
78
+ * configuración del hijo, donde un valor raro sería un error de arranque y no un «no vale».
79
+ */
80
+ export declare function motivoDeModeloDeMotorInaceptable(modelo: string): string | undefined;
81
+ /** Lo que interesa de `claude auth status --json`. */
82
+ export interface SesionDeClaude {
83
+ iniciada: boolean;
84
+ /** La clave de una variable de entorno manda sobre el login (medido). */
85
+ porClave: boolean;
86
+ metodo?: string;
87
+ organizacion?: string;
88
+ plan?: string;
89
+ }
90
+ /**
91
+ * Lee la salida de `claude auth status --json`. Solo se queda con método, organización, plan y
92
+ * de dónde sale la clave: **el correo y el id de organización no salen de aquí**, la misma regla
93
+ * que `nombreDelAsignado` aplica al asignado de Jira. Lo que no es un JSON con `loggedIn`
94
+ * booleano no es una respuesta, y se devuelve `undefined` en vez de adivinar.
95
+ */
96
+ export declare function interpretarAuthStatusDeClaude(salida: string): SesionDeClaude | undefined;
97
+ /** La sesión de Claude en una línea, para la tarjeta. */
98
+ export declare function lineaDeSesionDeClaude(s: SesionDeClaude): string;
99
+ /** De `claude --version` («2.1.263 (Claude Code)») o `codex-cli 0.1.0`, el número. */
100
+ export declare function versionDeSalida(salida: string): string | undefined;
101
+ /** Una URL no cruza el cable: la de autorización lleva el `state` y el reto de PKCE. */
102
+ export declare function sinUrls(texto: string): string;
103
+ export declare function urlDeAutorizacion(salida: string): string | undefined;
104
+ /** El binario de Claude pide el código cuando el navegador no pudo volver solo (medido sin TTY). */
105
+ export declare function pideCodigo(salida: string): boolean;
106
+ /** La última línea con algo, sin URL y acotada: es lo que se cuenta de un login que falló. */
107
+ export declare function ultimaLinea(salida: string): string | undefined;
108
+ export declare function recortar(texto: string, tope?: number): string;
109
+ /** Lo que se le pide al motor para probarlo. Corto a propósito: se paga en cada prueba. */
110
+ export declare const TAREA_DE_PRUEBA = "Responde exactamente con la palabra OK y nada m\u00E1s.";
111
+ export declare const INSTRUCCIONES_DE_PRUEBA = "Esto es una prueba de conexi\u00F3n de XOneCode. No uses ninguna herramienta: contesta solo con lo que se te pide.";
112
+ /** Contestó y dijo lo que se le pidió. Que conteste otra cosa también es un fallo que contar. */
113
+ export declare function respuestaDePruebaValida(texto: string): boolean;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * El literal que vivía en MEDIO del reparto: `<base>/<entorno>/workspace/<proyecto>`.
3
+ *
4
+ * Vive aquí y no en `settings.ts` a propósito: `rutaDeWorkspace` ya no lo compone, y
5
+ * dejarlo allí sería una constante de producción que solo usa la mudanza. Cuando no quede
6
+ * nadie con el reparto viejo en disco, este fichero entero se va de una pieza.
7
+ */
8
+ export declare const CARPETA_DEL_REPARTO_VIEJO = "workspace";
9
+ /** Una copia local que está en el reparto viejo, y adónde va en el de ahora. */
10
+ export interface Mudanza {
11
+ entorno: string;
12
+ proyecto: string;
13
+ desde: string;
14
+ hacia: string;
15
+ }
16
+ /**
17
+ * Lo que la parte pura necesita saber del disco, y nada más.
18
+ *
19
+ * `listar` devuelve las CARPETAS que cuelgan de una ruta —no los ficheros—: quien la
20
+ * implementa filtra por tipo de entrada, porque un `.DS_Store` es un nombre de segmento
21
+ * perfectamente válido y aquí no habría forma de distinguirlo de un proyecto.
22
+ */
23
+ export interface FotoDelLegado {
24
+ existe: (ruta: string) => boolean;
25
+ listar: (ruta: string) => readonly string[];
26
+ }
27
+ /**
28
+ * Qué copias locales siguen en el reparto viejo y adónde van.
29
+ *
30
+ * **Por PROYECTO y no por entorno.** Mover la carpeta `<entorno>/workspace` entera parece
31
+ * más barato, pero no vale en el caso de quien ya tenía `settings.workspace` configurado:
32
+ * ahí el destino (`<workspace>/<entorno>`) es el PADRE del origen, y la mudanza de una
33
+ * pieza sería mover una carpeta encima de sí misma. Proyecto a proyecto funciona en los
34
+ * dos casos con un solo camino.
35
+ *
36
+ * **Un destino que ya existe NUNCA se pisa**, y se cuenta aparte en `chocadas` en vez de
37
+ * callarse: en esa carpeta hay una historia de git, unas sesiones y un checkpoint, y dos
38
+ * copias del mismo proyecto sin que nadie lo diga son peor que una mudanza que no se hizo.
39
+ *
40
+ * Nada de esto toca el disco: quien llama decide, mueve y lo cuenta.
41
+ */
42
+ export declare function mudanzasPendientes(opciones: {
43
+ /** La base con el reparto VIEJO: `settings.workspace` si estaba puesto, o `~/.xonecode`. */
44
+ legado: string;
45
+ /** El workspace de ahora: `settings.workspace` si está puesto, o `~/.xonecode/workspace`. */
46
+ workspace: string;
47
+ entornos: readonly string[];
48
+ } & FotoDelLegado): {
49
+ mudanzas: Mudanza[];
50
+ chocadas: Mudanza[];
51
+ };
52
+ /**
53
+ * Una ruta absoluta ya grabada en disco, traducida al reparto de ahora — o AUSENTE si esta
54
+ * mudanza no la toca.
55
+ *
56
+ * Existe por el almacén que tiene raíces absolutas escritas: `proyecto.raiz` del índice de
57
+ * tareas (`~/.xonecode/tareas/indice.json`). Sin reescribirlas, una tarea pendiente abriría
58
+ * una carpeta que ya no está.
59
+ *
60
+ * Fueron DOS: las claves de `settings.sinAprobacion` también eran rutas, y perderlas dejaba
61
+ * sin aplicar una autorización que el usuario dio por puesta. Ese ajuste se retiró cuando el
62
+ * modo de escritura pasó a vivir en la SESIÓN (`core/modoDeEscritura.ts`) y con él se fue su
63
+ * mudanza; esta función sigue siendo general porque el problema no era suyo.
64
+ *
65
+ * Se compara por SEGMENTOS y no por prefijo de texto, la misma trampa que `dentroDelWorkspace`:
66
+ * `…/AppDemoViejo` empieza por `…/AppDemo` y no tiene nada que ver. Y ausente significa «esto
67
+ * no lo mudé yo», que es distinto de «no cambia»: quien llama necesita saber si tocó la
68
+ * entrada para decidir si reescribe el fichero.
69
+ */
70
+ export declare function rutaMudada(ruta: string, mudanzas: readonly Mudanza[]): string | undefined;
71
+ /**
72
+ * Una ruta traducida a través de VARIAS mudanzas, en el orden en que ocurrieron: cada tanda
73
+ * es el plan de un cambio de base, y la salida de una es la entrada de la siguiente.
74
+ *
75
+ * Existe porque `rutaMudada` coge la PRIMERA coincidencia, que dentro de UN plan es correcto
76
+ * (sus orígenes no se solapan) y entre varios no: con ir de A a B y volver a A, una lista plana
77
+ * traducía `A/…` a `B/…` —la ida— aunque la vuelta ya había vaciado `B`, y abrir el proyecto
78
+ * abría una carpeta que no existe. Encadenadas, `A/…` va a `B/…` y vuelve a `A/…`.
79
+ */
80
+ export declare function rutaTrasLasMudanzas(ruta: string, tandas: readonly (readonly Mudanza[])[]): string;
81
+ /** Lo que el plan de un cambio de base necesita saber del disco. `listar` son CARPETAS. */
82
+ export interface FotoDeLaBase {
83
+ existe: (ruta: string) => boolean;
84
+ listar: (ruta: string) => readonly string[];
85
+ }
86
+ /**
87
+ * Qué copias hay que MUDAR al cambiar el workspace de `desde` a `hacia`, o por qué no se
88
+ * puede — antes de tocar nada.
89
+ *
90
+ * **Se listan las carpetas REALES** `<desde>/<entorno>/<proyecto>`, no los entornos
91
+ * registrados: quitar un entorno de Ajustes no borra sus copias, y una mudanza que solo mirara
92
+ * la lista las dejaría huérfanas en la base vieja. Lo OCULTO no es un proyecto —las lápidas
93
+ * `.<proyecto>.borrando-…` que un borrado a medias deja (`borrarCopiaDeProyecto`) y las
94
+ * carpetas temporales de una mudanza cortada—, y se queda fuera.
95
+ *
96
+ * Tres noes, y todos antes de copiar un byte:
97
+ * - **una base cuelga de la otra** (o son la misma): copiar una carpeta dentro de sí misma no
98
+ * termina, y al revés la base vieja pasaría a parecer un entorno de la nueva;
99
+ * - **dentro de la casa de xonecode** (`~/.xonecode`), salvo su `workspace` de omisión: ahí
100
+ * viven `tareas/`, `agentes/` y `auth.json`, y un entorno llamado igual se mezclaría con
101
+ * ellos;
102
+ * - **un destino que ya existe**: se NIEGA ENTERO, nunca se pisa. En esa carpeta puede haber
103
+ * otra historia de git y otro checkpoint, y mudar la mitad dejaría el workspace partido.
104
+ */
105
+ export declare function planDeCambioDeBase(opciones: {
106
+ desde: string;
107
+ hacia: string;
108
+ casaXonecode: string;
109
+ } & FotoDeLaBase): {
110
+ mudanzas: Mudanza[];
111
+ motivo?: string;
112
+ };
@@ -0,0 +1,172 @@
1
+ /**
2
+ * El índice de navegación XOne: qué hay en el proyecto y qué apunta a qué.
3
+ *
4
+ * **Este módulo es PURO**, y esa es la mitad del diseño. Quién lee el disco y quién entiende
5
+ * el XML es `agent/navegacion/` apoyándose en `xone-linter`; aquí solo vive la forma de las
6
+ * respuestas y cómo se consultan. Así la regla se prueba sin un proyecto delante, y el día
7
+ * que la fuente del modelo cambie no cambia nada de esto.
8
+ *
9
+ * **Por qué existe.** Medido sobre un proyecto real (AppDemo, 41 `.xne`): contestar «¿qué
10
+ * colecciones tiene el proyecto?» leyendo ficheros cuesta unos 18.000 tokens —son todos los
11
+ * `.xne`—, y contestarla desde el modelo cuesta 141. La pregunta cara no es leer un fichero
12
+ * (un `.xne` son un par de kilobytes): es **no saber cuál de los cuarenta y uno leer**. Eso
13
+ * es lo que esto contesta, y por eso la primera versión va POR NOMBRE y no por posición.
14
+ *
15
+ * **Por qué no por posición todavía.** Un editor pregunta «¿qué hay bajo el cursor?»; un
16
+ * agente no tiene cursor, tiene nombres. Y saber la posición exacta de un atributo exige
17
+ * conservar su rango al parsear, que hoy `xone-linter` no hace (su `loc()` devuelve solo el
18
+ * fichero). Lo caro está justo en la mitad que no hace falta para lo que se ha medido.
19
+ *
20
+ * **Las rutas que entran aquí son VIRTUALES** (`/Clientes.xne`), nunca de la máquina. Quien
21
+ * traduce es el adaptador, y no es higiene: esto viaja al modelo y de ahí al cable.
22
+ */
23
+ /** Qué clase de cosa es un símbolo. Dos, porque son las dos que el modelo nombra. */
24
+ export type ClaseDeSimbolo = "coleccion" | "campo";
25
+ /** Dónde se declara algo. Sin línea: hoy no la hay, y ausente ≠ «línea 1». */
26
+ export interface Declaracion {
27
+ nombre: string;
28
+ clase: ClaseDeSimbolo;
29
+ /** Ruta VIRTUAL. La real no sale nunca de `agent/`. */
30
+ fichero: string;
31
+ /** Solo en un campo: la colección que lo declara. */
32
+ coleccion?: string;
33
+ /** El tipo declarado de un campo (`T`, `N`, `D`…). Ausente si el `.xne` no lo dice. */
34
+ tipo?: string;
35
+ }
36
+ /** Quién apunta a quién, y por qué atributo. El atributo importa: no es lo mismo un
37
+ * `mapcol` que un `inherits`, y el que pregunta suele querer justo esa diferencia. */
38
+ export interface Referencia {
39
+ /** Quién referencia: `Citas.CLIENTE`, o `ConsolaReplica` si es la coll entera. */
40
+ desde: string;
41
+ /** El atributo que lo hace: `mapcol`, `mapfld`, `linkedfield`, `contents`, `inherits`. */
42
+ por: string;
43
+ /** A qué apunta: `Clientes` o `Clientes.NOMBRE`. */
44
+ hacia: string;
45
+ /** Ruta VIRTUAL del fichero que contiene la referencia. */
46
+ fichero: string;
47
+ }
48
+ /**
49
+ * El modelo mínimo del que sale el índice.
50
+ *
51
+ * Es NUESTRO y no el de `xone-linter` a propósito: el suyo trae el proyecto entero —runtime,
52
+ * estilos, conexiones, imágenes— y atarnos a su forma haría que un cambio suyo se propagara
53
+ * hasta aquí. El adaptador se queda con lo que estas consultas necesitan y nada más, que es
54
+ * además la lista de lo que puede viajar.
55
+ */
56
+ export interface ModeloDeNavegacion {
57
+ colecciones: readonly ColeccionDeNavegacion[];
58
+ app: AppDeNavegacion;
59
+ /**
60
+ * Las referencias que salen de un SCRIPT y no de un atributo XML.
61
+ *
62
+ * Van aparte porque no son de una colección: una puede vivir en un `.js` suelto. Y existen
63
+ * porque **así es como navega una app XOne de verdad** — medido sobre un proyecto real: los
64
+ * botones del menú abren colecciones con
65
+ * `onclick="javascript:appData.getCollection('Deportes')…"`, no con `mapcol`. Sin ellas, «¿quién
66
+ * usa Deportes?» contestaba «nadie» teniendo dos botones delante.
67
+ */
68
+ referenciasDeScript: readonly Referencia[];
69
+ }
70
+ export interface ColeccionDeNavegacion {
71
+ nombre: string;
72
+ /** Ruta VIRTUAL. */
73
+ fichero: string;
74
+ campos: readonly {
75
+ nombre: string;
76
+ tipo?: string;
77
+ }[];
78
+ /** Lo que esta colección apunta hacia fuera, ya resuelto por el adaptador. */
79
+ referencias: readonly Omit<Referencia, "fichero">[];
80
+ /**
81
+ * Los eventos declarados, por nombre. Un `onchange` lleva el campo que lo dispara entre
82
+ * paréntesis, porque sin él no se sabe a qué reacciona — y eso es justo lo que hace falta
83
+ * antes de tocarlo.
84
+ */
85
+ eventos: readonly string[];
86
+ /** Los nodos personalizados, por nombre. */
87
+ nodos: readonly string[];
88
+ /** Las conexiones propias de la colección, por nombre. */
89
+ conexiones: readonly string[];
90
+ }
91
+ /** Lo que `app.xml` declara del conjunto. Contesta «¿por dónde arranca esto?». */
92
+ export interface AppDeNavegacion {
93
+ /** Las colecciones de entrada. Vacío = no consta, que no es «no hay». */
94
+ entrada: readonly string[];
95
+ /** Las colecciones de login, si el proyecto tiene. */
96
+ login: readonly string[];
97
+ /** Las hojas de estilo declaradas, por URL. */
98
+ estilos: readonly string[];
99
+ /** Las conexiones declaradas a nivel de aplicación. */
100
+ conexiones: readonly string[];
101
+ }
102
+ /** Todo lo que se sabe de UNA colección, para la pregunta «háblame de Clientes». */
103
+ export interface DetalleDeColeccion {
104
+ nombre: string;
105
+ fichero: string;
106
+ campos: readonly Declaracion[];
107
+ eventos: readonly string[];
108
+ nodos: readonly string[];
109
+ conexiones: readonly string[];
110
+ /** Lo que ELLA apunta hacia fuera. Lo que apunta hacia ella es `referencias`. */
111
+ apuntaA: readonly Referencia[];
112
+ }
113
+ /**
114
+ * Lo que no cuadra en el proyecto, cruzando referencias con inventario.
115
+ *
116
+ * **Esto NO convierte el índice en un validador**, y la diferencia importa: el linter valida
117
+ * —tiene reglas, severidades y un informe— y esto solo cruza dos listas que ya tiene. Lo que
118
+ * contesta es la pregunta de orientación «¿hay algo roto por aquí?», que hoy no se puede hacer
119
+ * sin saber ya el nombre que falta.
120
+ */
121
+ export interface ProblemasDelProyecto {
122
+ /** Referencias a una colección que no existe. */
123
+ rotas: readonly Referencia[];
124
+ }
125
+ /**
126
+ * **Por qué NO hay «colecciones huérfanas», y está medido.**
127
+ *
128
+ * Se implementó y se tiró. Sobre un proyecto real de 42 colecciones daba 33 huérfanas; con las
129
+ * referencias de script dentro bajaba a 22 — la mitad del proyecto. Una lista donde el 50 % son
130
+ * falsos positivos no es un hallazgo, es ruido con autoridad: quien la lea o la ignora o borra
131
+ * código vivo. El motivo es que en XOne se llega a una colección por caminos que este índice no
132
+ * modela (menús, `ExecuteNode`, nombres compuestos en tiempo de ejecución), y un aviso al pie no
133
+ * arregla una señal equivocada. Vuelve el día que se pueda acotar el falso positivo, no antes.
134
+ */
135
+ /** Lo que el índice sabe contestar. Cuatro preguntas, que son las que se han medido. */
136
+ export interface IndiceDeNavegacion {
137
+ /** Todas las colecciones, por nombre. La pregunta de los 18.000 tokens. */
138
+ inventario(): readonly Declaracion[];
139
+ /** Dónde se declara algo. `Clientes` o `Clientes.NOMBRE`. Varias si está duplicado. */
140
+ definicion(nombre: string): readonly Declaracion[];
141
+ /** Quién apunta a ello. Acepta la coll (`Clientes`) o el campo (`Clientes.NOMBRE`). */
142
+ referencias(nombre: string): readonly Referencia[];
143
+ /** Los campos de una colección, con su tipo. Vacío si la colección no existe. */
144
+ campos(coleccion: string): readonly Declaracion[];
145
+ /** Lo que declara `app.xml`: por dónde arranca, login, estilos y conexiones. */
146
+ app(): AppDeNavegacion;
147
+ /** Todo lo de UNA colección. `undefined` si no existe — que no es lo mismo que vacía. */
148
+ detalle(coleccion: string): DetalleDeColeccion | undefined;
149
+ /** Lo que no cuadra: referencias a lo que no existe. Y SOLO eso: qué colecciones no usa nadie
150
+ * no se mide (ver «Por qué NO hay colecciones huérfanas», más arriba). */
151
+ problemas(): ProblemasDelProyecto;
152
+ }
153
+ /** Parte `Coll.CAMPO` en sus dos mitades. Sin punto, es una colección a secas. */
154
+ export declare function partirNombre(nombre: string): {
155
+ coleccion: string;
156
+ campo?: string;
157
+ };
158
+ /**
159
+ * Construye el índice. Puro: el modelo entra ya resuelto y traducido.
160
+ *
161
+ * **No cachea, y quien lo llama tampoco debería.** Construirlo sobre un proyecto real cuesta
162
+ * unas decenas de milisegundos —medido— contra los segundos de una llamada al modelo, así
163
+ * que rehacerlo en cada consulta sale gratis y quita de en medio la pregunta de cuándo
164
+ * invalidarlo. Un índice viejo que dice que un campo existe cuando el agente acaba de
165
+ * borrarlo es peor que no tener índice: es una respuesta con autoridad y equivocada.
166
+ *
167
+ * **La comparación de nombres NO distingue mayúsculas.** En XOne se escribe `NOMBRE` en la
168
+ * declaración y `Nombre` en un `mapfld` con la misma intención, y un índice que conteste «no
169
+ * existe» por la caja manda a buscar un fallo que no está. Lo que se DEVUELVE es siempre el
170
+ * nombre tal como está declarado, no el que se preguntó.
171
+ */
172
+ export declare function construirIndice(modelo: ModeloDeNavegacion): IndiceDeNavegacion;