xonecode 0.2.0 → 0.5.0

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 (406) hide show
  1. package/README.md +49 -7
  2. package/THIRD_PARTY_NOTICES.md +128 -0
  3. package/apps/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/apps/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/apps/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/apps/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/apps/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/apps/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/apps/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/apps/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/apps/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/apps/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/apps/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/apps/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/apps/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/apps/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/apps/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/apps/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/apps/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/apps/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/apps/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/apps/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/apps/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/apps/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/apps/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/apps/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/apps/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/apps/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/apps/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/apps/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/apps/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/apps/web/dist/assets/c-BIGW1oBm.js +1 -0
  63. package/apps/web/dist/assets/cpp-DddhVWhK.js +1 -0
  64. package/apps/web/dist/assets/csharp-DSvCPggb.js +1 -0
  65. package/apps/web/dist/assets/css-CLj8gQPS.js +1 -0
  66. package/apps/web/dist/assets/go-C27-OAKa.js +1 -0
  67. package/apps/web/dist/assets/html-CfGypltT.js +1 -0
  68. package/apps/web/dist/assets/index-BB3SamhR.css +1 -0
  69. package/apps/web/dist/assets/index-CFYAoHdw.js +477 -0
  70. package/apps/web/dist/assets/ini-BEwlwnbL.js +1 -0
  71. package/apps/web/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  72. package/apps/web/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  73. package/apps/web/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  74. package/apps/web/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  75. package/apps/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  76. package/apps/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  77. package/apps/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  78. package/apps/web/dist/assets/java-CylS5w8V.js +1 -0
  79. package/apps/web/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  80. package/apps/web/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  81. package/apps/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  82. package/apps/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  83. package/apps/web/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  84. package/apps/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  85. package/apps/web/dist/assets/less-B1dDrJ26.js +1 -0
  86. package/apps/web/dist/assets/lua-BaeVxFsk.js +1 -0
  87. package/apps/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  88. package/apps/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  89. package/apps/web/dist/assets/php-D_2--9WK.js +1 -0
  90. package/apps/web/dist/assets/python-B6aJPvgy.js +1 -0
  91. package/apps/web/dist/assets/ruby-DSHSDbk1.js +1 -0
  92. package/apps/web/dist/assets/rust-B1yitclQ.js +1 -0
  93. package/apps/web/dist/assets/scss-D5BDwBP9.js +1 -0
  94. package/apps/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  95. package/apps/web/dist/assets/swift-C2oV4EkX.js +1 -0
  96. package/apps/web/dist/assets/toml-vGWfd6FD.js +1 -0
  97. package/apps/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  98. package/apps/web/dist/assets/yaml-Buea-lGh.js +1 -0
  99. package/apps/web/dist/iconos/xonecode.png +0 -0
  100. package/apps/web/dist/index.html +20 -0
  101. package/dist/agent/agentesEnDisco.js +539 -0
  102. package/dist/agent/agentesEnDisco.js.map +1 -0
  103. package/dist/agent/arbolDeProyecto.js +245 -0
  104. package/dist/agent/arbolDeProyecto.js.map +1 -0
  105. package/dist/agent/artefactosEnDisco.js +139 -0
  106. package/dist/agent/artefactosEnDisco.js.map +1 -0
  107. package/dist/agent/aumentador.js +175 -0
  108. package/dist/agent/aumentador.js.map +1 -0
  109. package/dist/agent/authEnDisco.js +76 -1
  110. package/dist/agent/authEnDisco.js.map +1 -1
  111. package/dist/agent/busquedaRegex.js +92 -0
  112. package/dist/agent/busquedaRegex.js.map +1 -0
  113. package/dist/agent/catalogoModelos.js +345 -0
  114. package/dist/agent/catalogoModelos.js.map +1 -0
  115. package/dist/agent/checkpointer.js +127 -0
  116. package/dist/agent/checkpointer.js.map +1 -0
  117. package/dist/agent/cloudstudioClient.js +194 -0
  118. package/dist/agent/cloudstudioClient.js.map +1 -0
  119. package/dist/agent/cloudstudioMcp.js +722 -0
  120. package/dist/agent/cloudstudioMcp.js.map +1 -0
  121. package/dist/agent/configEnDisco.js +309 -11
  122. package/dist/agent/configEnDisco.js.map +1 -1
  123. package/dist/agent/consumoExterno.js +99 -0
  124. package/dist/agent/consumoExterno.js.map +1 -0
  125. package/dist/agent/descarga.js +149 -0
  126. package/dist/agent/descarga.js.map +1 -0
  127. package/dist/agent/diagnosticoDeTools.js +51 -0
  128. package/dist/agent/diagnosticoDeTools.js.map +1 -0
  129. package/dist/agent/dispositivosEnMaquina.js +596 -0
  130. package/dist/agent/dispositivosEnMaquina.js.map +1 -0
  131. package/dist/agent/escrituraDeCodex.js +134 -0
  132. package/dist/agent/escrituraDeCodex.js.map +1 -0
  133. package/dist/agent/escrituraDeOpencode.js +80 -0
  134. package/dist/agent/escrituraDeOpencode.js.map +1 -0
  135. package/dist/agent/escrituraExterna.js +742 -0
  136. package/dist/agent/escrituraExterna.js.map +1 -0
  137. package/dist/agent/gemini.js +81 -0
  138. package/dist/agent/gemini.js.map +1 -0
  139. package/dist/agent/git.js +83 -0
  140. package/dist/agent/git.js.map +1 -0
  141. package/dist/agent/gitSync.js +441 -0
  142. package/dist/agent/gitSync.js.map +1 -0
  143. package/dist/agent/hotswap.js +448 -0
  144. package/dist/agent/hotswap.js.map +1 -0
  145. package/dist/agent/instalacionEnMaquina.js +252 -0
  146. package/dist/agent/instalacionEnMaquina.js.map +1 -0
  147. package/dist/agent/instantanea.js +7 -10
  148. package/dist/agent/instantanea.js.map +1 -1
  149. package/dist/agent/interrupts.js +11 -2
  150. package/dist/agent/interrupts.js.map +1 -1
  151. package/dist/agent/juezDeTarea.js +345 -0
  152. package/dist/agent/juezDeTarea.js.map +1 -0
  153. package/dist/agent/lanzamientoEnMaquina.js +377 -0
  154. package/dist/agent/lanzamientoEnMaquina.js.map +1 -0
  155. package/dist/agent/manifiesto.js +59 -0
  156. package/dist/agent/manifiesto.js.map +1 -0
  157. package/dist/agent/memoriaDeProyecto.js +60 -0
  158. package/dist/agent/memoriaDeProyecto.js.map +1 -0
  159. package/dist/agent/modelos.js +105 -17
  160. package/dist/agent/modelos.js.map +1 -1
  161. package/dist/agent/modelosDeMotor.js +204 -0
  162. package/dist/agent/modelosDeMotor.js.map +1 -0
  163. package/dist/agent/paqueteDelProyecto.js +181 -0
  164. package/dist/agent/paqueteDelProyecto.js.map +1 -0
  165. package/dist/agent/perfiles.js +92 -31
  166. package/dist/agent/perfiles.js.map +1 -1
  167. package/dist/agent/persona.js +40 -0
  168. package/dist/agent/persona.js.map +1 -0
  169. package/dist/agent/procesosEnMaquina.js +204 -0
  170. package/dist/agent/procesosEnMaquina.js.map +1 -0
  171. package/dist/agent/proyecto.js +311 -13
  172. package/dist/agent/proyecto.js.map +1 -1
  173. package/dist/agent/puente.js +63 -6
  174. package/dist/agent/puente.js.map +1 -1
  175. package/dist/agent/resumenDeContexto.js +30 -0
  176. package/dist/agent/resumenDeContexto.js.map +1 -0
  177. package/dist/agent/resumenDeTool.js +64 -18
  178. package/dist/agent/resumenDeTool.js.map +1 -1
  179. package/dist/agent/sesionGit.js +481 -0
  180. package/dist/agent/sesionGit.js.map +1 -0
  181. package/dist/agent/settingsEnDisco.js +189 -0
  182. package/dist/agent/settingsEnDisco.js.map +1 -0
  183. package/dist/agent/subagenteCodex.js +368 -0
  184. package/dist/agent/subagenteCodex.js.map +1 -0
  185. package/dist/agent/subagenteExterno.js +423 -0
  186. package/dist/agent/subagenteExterno.js.map +1 -0
  187. package/dist/agent/subagenteOpencode.js +389 -0
  188. package/dist/agent/subagenteOpencode.js.map +1 -0
  189. package/dist/agent/subida.js +202 -0
  190. package/dist/agent/subida.js.map +1 -0
  191. package/dist/agent/tareasEnDisco.js +466 -0
  192. package/dist/agent/tareasEnDisco.js.map +1 -0
  193. package/dist/agent/turnoReal.js +663 -50
  194. package/dist/agent/turnoReal.js.map +1 -1
  195. package/dist/agent/versionEnDisco.js +48 -0
  196. package/dist/agent/versionEnDisco.js.map +1 -0
  197. package/dist/agent/xoneAgent.js +290 -49
  198. package/dist/agent/xoneAgent.js.map +1 -1
  199. package/dist/agent/zip.js +52 -0
  200. package/dist/agent/zip.js.map +1 -0
  201. package/dist/cli/acuseDeModelo.js +30 -0
  202. package/dist/cli/acuseDeModelo.js.map +1 -0
  203. package/dist/cli/aprobar.js +55 -2
  204. package/dist/cli/aprobar.js.map +1 -1
  205. package/dist/cli/config.js +9 -13
  206. package/dist/cli/config.js.map +1 -1
  207. package/dist/cli/consola.js +750 -19
  208. package/dist/cli/consola.js.map +1 -1
  209. package/dist/cli/main.js +740 -81
  210. package/dist/cli/main.js.map +1 -1
  211. package/dist/cli/markdown.js +188 -2
  212. package/dist/cli/markdown.js.map +1 -1
  213. package/dist/cli/run.js +32 -4
  214. package/dist/cli/run.js.map +1 -1
  215. package/dist/cli/stdio.js +46 -19
  216. package/dist/cli/stdio.js.map +1 -1
  217. package/dist/cli/tema.js +96 -8
  218. package/dist/cli/tema.js.map +1 -1
  219. package/dist/cli/tokens.js +29 -0
  220. package/dist/cli/tokens.js.map +1 -0
  221. package/dist/cli/tui/app.js +171 -0
  222. package/dist/cli/tui/app.js.map +1 -0
  223. package/dist/cli/tui/aprobarTui.js +80 -0
  224. package/dist/cli/tui/aprobarTui.js.map +1 -0
  225. package/dist/cli/tui/barra.js +37 -0
  226. package/dist/cli/tui/barra.js.map +1 -0
  227. package/dist/cli/tui/correrTui.js +478 -0
  228. package/dist/cli/tui/correrTui.js.map +1 -0
  229. package/dist/cli/tui/entrada.js +166 -0
  230. package/dist/cli/tui/entrada.js.map +1 -0
  231. package/dist/cli/tui/filas.js +24 -0
  232. package/dist/cli/tui/filas.js.map +1 -0
  233. package/dist/cli/tui/logo.js +49 -0
  234. package/dist/cli/tui/logo.js.map +1 -0
  235. package/dist/cli/tui/pielTui.js +14 -0
  236. package/dist/cli/tui/pielTui.js.map +1 -0
  237. package/dist/cli/tui/raton.js +126 -0
  238. package/dist/cli/tui/raton.js.map +1 -0
  239. package/dist/cli/tui/sidebar.js +86 -0
  240. package/dist/cli/tui/sidebar.js.map +1 -0
  241. package/dist/cli/tui/store.js +143 -0
  242. package/dist/cli/tui/store.js.map +1 -0
  243. package/dist/cli/tui/tarjeta.js +19 -0
  244. package/dist/cli/tui/tarjeta.js.map +1 -0
  245. package/dist/cli/tui/temaInk.js +114 -0
  246. package/dist/cli/tui/temaInk.js.map +1 -0
  247. package/dist/cli/tui/transcript.js +254 -0
  248. package/dist/cli/tui/transcript.js.map +1 -0
  249. package/dist/cli/wizardInicial.js +240 -0
  250. package/dist/cli/wizardInicial.js.map +1 -0
  251. package/dist/core/actos.js +113 -0
  252. package/dist/core/actos.js.map +1 -0
  253. package/dist/core/adjuntos.js +97 -0
  254. package/dist/core/adjuntos.js.map +1 -0
  255. package/dist/core/agentes.js +227 -0
  256. package/dist/core/agentes.js.map +1 -0
  257. package/dist/core/artefactos.js +149 -0
  258. package/dist/core/artefactos.js.map +1 -0
  259. package/dist/core/cloudstudio.js +7 -0
  260. package/dist/core/cloudstudio.js.map +1 -0
  261. package/dist/core/config.js +212 -5
  262. package/dist/core/config.js.map +1 -1
  263. package/dist/core/contextos.js +53 -1
  264. package/dist/core/contextos.js.map +1 -1
  265. package/dist/core/descargas.js +106 -0
  266. package/dist/core/descargas.js.map +1 -0
  267. package/dist/core/descriptoresDeApp.js +279 -0
  268. package/dist/core/descriptoresDeApp.js.map +1 -0
  269. package/dist/core/dispositivos.js +466 -0
  270. package/dist/core/dispositivos.js.map +1 -0
  271. package/dist/core/entrega.js +141 -0
  272. package/dist/core/entrega.js.map +1 -0
  273. package/dist/core/entrelazar.js +90 -0
  274. package/dist/core/entrelazar.js.map +1 -0
  275. package/dist/core/esqueleto.js +10 -0
  276. package/dist/core/esqueleto.js.map +1 -1
  277. package/dist/core/modelos.js +235 -3
  278. package/dist/core/modelos.js.map +1 -1
  279. package/dist/core/notify.js +27 -9
  280. package/dist/core/notify.js.map +1 -1
  281. package/dist/core/planDeSubida.js +127 -0
  282. package/dist/core/planDeSubida.js.map +1 -0
  283. package/dist/core/ports.js +189 -1
  284. package/dist/core/ports.js.map +1 -1
  285. package/dist/core/puedeLanzarse.js +239 -0
  286. package/dist/core/puedeLanzarse.js.map +1 -0
  287. package/dist/core/rutaVirtual.js +42 -0
  288. package/dist/core/rutaVirtual.js.map +1 -0
  289. package/dist/core/settings.js +246 -0
  290. package/dist/core/settings.js.map +1 -0
  291. package/dist/core/tareas.js +230 -0
  292. package/dist/core/tareas.js.map +1 -0
  293. package/dist/core/textos.js +36 -0
  294. package/dist/core/textos.js.map +1 -0
  295. package/dist/core/turno.js +70 -10
  296. package/dist/core/turno.js.map +1 -1
  297. package/dist/core/version.js +31 -0
  298. package/dist/core/version.js.map +1 -0
  299. package/dist/vendor/tokenTracking.js +22 -1
  300. package/dist/vendor/tokenTracking.js.map +1 -1
  301. package/dist/web/servidor/arranque.js +3964 -0
  302. package/dist/web/servidor/arranque.js.map +1 -0
  303. package/dist/web/servidor/consolaDeTarea.js +161 -0
  304. package/dist/web/servidor/consolaDeTarea.js.map +1 -0
  305. package/dist/web/servidor/consolaWeb.js +389 -0
  306. package/dist/web/servidor/consolaWeb.js.map +1 -0
  307. package/dist/web/servidor/corredorDeTareas.js +1119 -0
  308. package/dist/web/servidor/corredorDeTareas.js.map +1 -0
  309. package/dist/web/servidor/pielWeb.js +269 -0
  310. package/dist/web/servidor/pielWeb.js.map +1 -0
  311. package/dist/web/servidor/servidor.js +257 -0
  312. package/dist/web/servidor/servidor.js.map +1 -0
  313. package/dist/web/servidor/sesiones.js +440 -0
  314. package/dist/web/servidor/sesiones.js.map +1 -0
  315. package/dist/web/servidor/transporte.js +169 -0
  316. package/dist/web/servidor/transporte.js.map +1 -0
  317. package/dist/web/servidor/vestibulo.js +1276 -0
  318. package/dist/web/servidor/vestibulo.js.map +1 -0
  319. package/package.json +30 -8
  320. package/skills/archify/LICENSE +22 -0
  321. package/skills/archify/SKILL.md +109 -0
  322. package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
  323. package/skills/archify/assets/template.html +14787 -0
  324. package/skills/archify/bin/archify.mjs +1990 -0
  325. package/skills/archify/bin/open-artifact.mjs +86 -0
  326. package/skills/archify/bin/preview.mjs +648 -0
  327. package/skills/archify/bin/visual-check.mjs +829 -0
  328. package/skills/archify/brand-marks/README.md +31 -0
  329. package/skills/archify/brand-marks/catalog.json +131 -0
  330. package/skills/archify/delta/architecture-delta.mjs +1214 -0
  331. package/skills/archify/examples/agent-run.lifecycle.json +71 -0
  332. package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
  333. package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
  334. package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
  335. package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
  336. package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
  337. package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
  338. package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
  339. package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
  340. package/skills/archify/examples/event-stream.dataflow.json +57 -0
  341. package/skills/archify/examples/incident-response.workflow.json +64 -0
  342. package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
  343. package/skills/archify/examples/product-analytics.dataflow.json +76 -0
  344. package/skills/archify/examples/production-deployment.architecture.json +71 -0
  345. package/skills/archify/examples/release-delivery.workflow.json +62 -0
  346. package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
  347. package/skills/archify/examples/web-app-rendered.html +14862 -0
  348. package/skills/archify/examples/web-app.architecture.json +46 -0
  349. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
  350. package/skills/archify/migrations/workflow-v2.mjs +279 -0
  351. package/skills/archify/package.json +17 -0
  352. package/skills/archify/recipes/scenarios.mjs +391 -0
  353. package/skills/archify/references/authoring-contract.md +198 -0
  354. package/skills/archify/references/brand-marks.md +69 -0
  355. package/skills/archify/references/delivery-contract.md +116 -0
  356. package/skills/archify/references/viewer-runtime.md +45 -0
  357. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  358. package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
  359. package/skills/archify/renderers/dataflow/README.md +104 -0
  360. package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  361. package/skills/archify/renderers/lifecycle/README.md +115 -0
  362. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  363. package/skills/archify/renderers/sequence/README.md +114 -0
  364. package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
  365. package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
  366. package/skills/archify/renderers/shared/cli.mjs +218 -0
  367. package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
  368. package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
  369. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  370. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  371. package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
  372. package/skills/archify/renderers/shared/geometry.mjs +1423 -0
  373. package/skills/archify/renderers/shared/i18n.mjs +594 -0
  374. package/skills/archify/renderers/shared/layout-report.mjs +40 -0
  375. package/skills/archify/renderers/shared/legend.mjs +217 -0
  376. package/skills/archify/renderers/shared/output-path.mjs +321 -0
  377. package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
  378. package/skills/archify/renderers/shared/text-fit.mjs +49 -0
  379. package/skills/archify/renderers/shared/utils.mjs +232 -0
  380. package/skills/archify/renderers/shared/validator.mjs +86 -0
  381. package/skills/archify/renderers/workflow/README.md +223 -0
  382. package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
  383. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  384. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  385. package/skills/archify/schemas/README.md +211 -0
  386. package/skills/archify/schemas/architecture.schema.json +176 -0
  387. package/skills/archify/schemas/common.schema.json +115 -0
  388. package/skills/archify/schemas/dataflow.schema.json +243 -0
  389. package/skills/archify/schemas/lifecycle.schema.json +266 -0
  390. package/skills/archify/schemas/sequence.schema.json +223 -0
  391. package/skills/archify/schemas/workflow.schema.json +428 -0
  392. package/skills/archify/scripts/check-render-output.mjs +835 -0
  393. package/skills/archify/scripts/check-update.mjs +1667 -0
  394. package/skills/archify/scripts/render-examples.mjs +26 -0
  395. package/skills/archify/scripts/update-contract.mjs +182 -0
  396. package/skills/archify/skill-release.json +10 -0
  397. package/skills/artifacts-builder/SKILL.md +120 -0
  398. package/skills/artifacts-builder/reference/diagramas.md +123 -0
  399. package/skills/artifacts-builder/reference/estilo.md +123 -0
  400. package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
  401. package/skills/artifacts-builder/reference/graficas.md +22 -0
  402. package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
  403. package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
  404. package/skills/xone-hotswap/SKILL.md +185 -0
  405. package/skills/xone-hotswap/references/comandos.md +706 -0
  406. package/skills/xone-hotswap/references/conexion-y-despliegue.md +226 -0
@@ -0,0 +1,596 @@
1
+ /**
2
+ * Detecta en la MÁQUINA lo que `core/dispositivos.ts` describe: el sistema, las
3
+ * herramientas de Android e iOS que hay, y a qué dispositivos y simuladores se llega.
4
+ *
5
+ * Todo lo que toca el sistema —`process.platform`, el entorno, el PATH, si existe un
6
+ * fichero, lanzar un proceso— entra por `DependenciasDeDeteccion`, con las reales por
7
+ * omisión. Es lo que permite que su test recorra los tres sistemas y los casos de fallo sin
8
+ * lanzar ni un adb: `npm test` no puede necesitar un SDK de Android ni Xcode.
9
+ *
10
+ * Reglas medidas o deliberadas:
11
+ * - **En macOS se comprueba `xcode-select -p` ANTES de llamar a `xcrun`.** Un `xcrun` sin
12
+ * herramientas de desarrollo instaladas levanta el diálogo de «instalar las command line
13
+ * tools» encima de lo que haya en pantalla; `xcode-select -p` falla sin diálogo.
14
+ * - **iOS fuera de macOS es «no aplica», no «no hay»**: la máquina no puede saberlo.
15
+ * - **Cada proceso lleva timeout** y un cuelgue se dice como «no respondió», nunca se queda
16
+ * el panel en «consultando…». El de adb es más largo porque `adb devices` ARRANCA el
17
+ * demonio si no corre (y ese demonio se queda vivo: es un efecto que el escritorio dice).
18
+ * - **adb y emulator se buscan en el PATH y luego en el SDK**: `ANDROID_HOME`,
19
+ * `ANDROID_SDK_ROOT` y la carpeta por omisión de cada sistema. En Windows los binarios
20
+ * llevan `.exe`.
21
+ * - Del error de una herramienta viaja UNA línea recortada, no la salida entera.
22
+ * - **Un destino APAGADO en Ajustes no se consulta**, y ahí está el sentido del ajuste:
23
+ * medir cuesta procesos en el equipo del usuario —`adb devices` arranca el demonio de adb
24
+ * y lo deja vivo, `xcrun` tarda segundos—, así que apagarlo tiene que dejar de lanzarlos
25
+ * de verdad, no solo esconder filas. Su herramienta se declara «desactivada»; y las que
26
+ * sirven a DOS destinos solo se apagan si los dos lo están: `adb devices` lista a la vez
27
+ * los Android físicos y los emuladores arrancados, así que con emuladores encendidos adb
28
+ * se sigue llamando y lo que se filtra es la lista.
29
+ */
30
+ import { execFile } from "node:child_process";
31
+ import { existsSync } from "node:fs";
32
+ import { readFile, rm } from "node:fs/promises";
33
+ import { homedir, tmpdir } from "node:os";
34
+ import { delimiter, join } from "node:path";
35
+ import { promisify } from "node:util";
36
+ import { seMira } from "../core/settings.js";
37
+ import { recetaDeEmuladorAndroid, recetaDeSimuladorIos, parsearRuntimesDeIos, parsearAdbDevices, parsearAvds, parsearDevicectl, parsearSimctl, motivoDeSimctl, plataformaDe, sistemaDe, } from "../core/dispositivos.js";
38
+ const ejecutarReal = promisify(execFile);
39
+ /** Cuánto se espera a cada herramienta antes de darla por colgada. */
40
+ export const TOPES_MS = {
41
+ /** `adb devices` arranca el demonio si hace falta y eso tarda segundos en frío. */
42
+ adb: 15_000,
43
+ emulator: 10_000,
44
+ xcrun: 20_000,
45
+ };
46
+ /**
47
+ * Dónde vive el SDK cuando nadie ha dicho dónde.
48
+ *
49
+ * En macOS hay DOS sitios y no uno: la carpeta de Android Studio (`~/Library/Android/sdk`) y
50
+ * la que deja `brew install --cask android-commandlinetools`, que es
51
+ * `<prefijo>/share/android-commandlinetools`. Los dos prefijos de Homebrew se prueban
52
+ * —`/opt/homebrew` en Apple Silicon, `/usr/local` en Intel— porque `existe()` filtra y
53
+ * preguntárselo a `brew --prefix` costaría lanzar un proceso en cada medida.
54
+ *
55
+ * Sin la de Homebrew, seguir los pasos de instalación al pie de la letra dejaba el panel
56
+ * diciendo «emulator no está instalado»: la consola exigiendo un cambio en la shell del
57
+ * usuario para ver algo que ya estaba en el disco.
58
+ */
59
+ const RAICES_DE_SDK_POR_OMISION = {
60
+ darwin: (home) => [
61
+ join(home, "Library", "Android", "sdk"),
62
+ "/opt/homebrew/share/android-commandlinetools",
63
+ "/usr/local/share/android-commandlinetools",
64
+ ],
65
+ win32: (_home, entorno) => (entorno.LOCALAPPDATA === undefined ? [] : [join(entorno.LOCALAPPDATA, "Android", "Sdk")]),
66
+ linux: (home) => [join(home, "Android", "Sdk")],
67
+ };
68
+ /**
69
+ * Dónde están las cosas de Android en esta máquina: las raíces del SDK y cómo buscar en el
70
+ * PATH.
71
+ *
72
+ * Se extrajo de `detectarDispositivos` cuando el EJECUTOR de la receta
73
+ * (`agent/instalacionEnMaquina.ts`) necesitó lo mismo: lanzar `sdkmanager` pide saber dónde
74
+ * está el SDK y qué JDK usar, y una segunda copia de esta búsqueda habría divergido el
75
+ * primer día — con el síntoma peor posible, que el panel encontrara el SDK y el botón no.
76
+ *
77
+ * En Windows los binarios llevan `.exe`. `existe` entra por parámetro porque `npm test` no
78
+ * puede depender del disco de quien lo corre.
79
+ */
80
+ export function localizadorDeAndroid(deps) {
81
+ const ext = deps.plataforma === "win32" ? ".exe" : "";
82
+ const raicesDeSdk = [
83
+ deps.entorno.ANDROID_HOME,
84
+ deps.entorno.ANDROID_SDK_ROOT,
85
+ ...(RAICES_DE_SDK_POR_OMISION[deps.plataforma]?.(deps.home, deps.entorno) ?? []),
86
+ ].filter((r) => r !== undefined && r !== "");
87
+ const enPath = (nombre) => {
88
+ for (const carpeta of (deps.entorno.PATH ?? deps.entorno.Path ?? "").split(delimiter)) {
89
+ if (carpeta === "")
90
+ continue;
91
+ const candidato = join(carpeta, nombre + ext);
92
+ if (deps.existe(candidato))
93
+ return candidato;
94
+ }
95
+ return undefined;
96
+ };
97
+ const enSdk = (nombre, subcarpeta) => {
98
+ const delPath = enPath(nombre);
99
+ if (delPath !== undefined)
100
+ return delPath;
101
+ for (const raiz of raicesDeSdk) {
102
+ const candidato = join(raiz, subcarpeta, nombre + ext);
103
+ if (deps.existe(candidato))
104
+ return candidato;
105
+ }
106
+ return undefined;
107
+ };
108
+ return { raicesDeSdk, enPath, enSdk };
109
+ }
110
+ /**
111
+ * El JDK con el que corre `sdkmanager`, que es un programa Java.
112
+ *
113
+ * `JAVA_HOME` si el usuario la puso; si no, el `openjdk@17` de Homebrew en los dos prefijos
114
+ * —igual que las raíces del SDK, y por lo mismo: preguntárselo a `brew --prefix` costaría un
115
+ * proceso en cada medida—. Lo usan el detector, para decir si el paso 3 se puede lanzar, y
116
+ * el ejecutor, para ponérselo al hijo: una segunda copia habría divergido con el síntoma
117
+ * peor, que el botón se ofreciera y luego no encontrara el JDK.
118
+ */
119
+ export function jdkDeLaMaquina(entorno, existe) {
120
+ const puesta = entorno.JAVA_HOME ?? "";
121
+ if (puesta !== "" && existe(puesta))
122
+ return puesta;
123
+ for (const prefijo of ["/opt/homebrew", "/usr/local"]) {
124
+ const candidato = join(prefijo, "opt", "openjdk@17");
125
+ if (existe(candidato))
126
+ return candidato;
127
+ }
128
+ return undefined;
129
+ }
130
+ export async function detectarDispositivos(deps = {},
131
+ /** Qué destinos se miran. Ausente = todos (`core/settings.ts#seMira`). */
132
+ ajustes = {}) {
133
+ const plataforma = deps.plataforma ?? process.platform;
134
+ const entorno = deps.entorno ?? process.env;
135
+ const home = deps.home ?? homedir();
136
+ const existe = deps.existe ?? existsSync;
137
+ const ejecutar = deps.ejecutar ?? ejecutarConTexto;
138
+ const leer = deps.leer ?? ((ruta) => readFile(ruta, "utf8"));
139
+ const borrar = deps.borrar ?? ((ruta) => rm(ruta, { force: true }).catch(() => undefined));
140
+ const ficheroTemporal = deps.ficheroTemporal ?? (() => join(tmpdir(), `xonecode-devicectl-${process.pid}-${Date.now()}.json`));
141
+ const ahora = deps.ahora ?? (() => new Date());
142
+ // Sin `plataforma`: se la pone `plataformaDe` al devolver el informe, una vez y por nombre.
143
+ // Así cada fila de aquí sigue diciendo solo lo que MIDIÓ, y no hay catorce sitios donde
144
+ // escribir de quién es la herramienta y uno donde olvidarlo.
145
+ const herramientas = [];
146
+ const dispositivos = [];
147
+ let avds = [];
148
+ /**
149
+ * Lo que la receta del simulador de iOS necesita saber, rellenado por la rama de macOS de
150
+ * abajo. Vive aquí y no ahí porque la receta se compone al final, con todo medido.
151
+ */
152
+ let xcodeCompleto = false;
153
+ let licenciaDeXcode = false;
154
+ let runtimesDeIos = [];
155
+ const miraAndroid = seMira(ajustes, "android");
156
+ const miraAndroidEmulador = seMira(ajustes, "androidEmulador");
157
+ const miraIos = seMira(ajustes, "ios");
158
+ const miraIosSimulador = seMira(ajustes, "iosSimulador");
159
+ const APAGADO = "no se mira: está desactivado en Ajustes";
160
+ // --- Android: adb y emulator, en cualquier sistema.
161
+ const { enPath, enSdk: localizar } = localizadorDeAndroid({ plataforma, entorno, home, existe });
162
+ // adb sirve a los DOS destinos de Android, así que solo se salta si los dos están
163
+ // apagados: con los emuladores encendidos hay que llamarlo igual, porque un emulador
164
+ // arrancado aparece en `adb devices` y en ningún otro sitio.
165
+ /**
166
+ * Cómo se instala lo que falta, y solo con comandos que se resuelven por el PATH: el
167
+ * comando se pinta en Ajustes y viaja por el cable, así que no puede llevar una ruta del
168
+ * home del usuario (la misma razón por la que `ruta` se queda en el host).
169
+ *
170
+ * `sdkmanager` primero cuando está: es la herramienta oficial del SDK y no instala nada
171
+ * fuera de él. Homebrew después, y solo para `platform-tools`: el emulador viene con
172
+ * Android Studio, y proponer un cask que no existe sería peor que no proponer nada.
173
+ */
174
+ const comoInstalar = (nombre) => {
175
+ if (nombre === "xcrun" || nombre === "devicectl") {
176
+ // Solo en macOS, y es el único que xonecode lanza él: devuelve en el acto y abre el
177
+ // diálogo de Apple, sin instalar nada a espaldas de nadie.
178
+ return plataforma === "darwin" ? { comando: "xcode-select --install", automatico: true } : undefined;
179
+ }
180
+ const paquete = nombre === "adb" ? "platform-tools" : "emulator";
181
+ if (enPath("sdkmanager") !== undefined)
182
+ return { comando: `sdkmanager --install "${paquete}"`, automatico: false };
183
+ if (nombre === "adb" && enPath("brew") !== undefined) {
184
+ return { comando: "brew install --cask android-platform-tools", automatico: false };
185
+ }
186
+ return undefined;
187
+ };
188
+ const adb = miraAndroid || miraAndroidEmulador ? localizar("adb", "platform-tools") : undefined;
189
+ if (!miraAndroid && !miraAndroidEmulador) {
190
+ herramientas.push({ nombre: "adb", estado: "desactivada", detalle: APAGADO });
191
+ }
192
+ else if (adb === undefined) {
193
+ const instalar = comoInstalar("adb");
194
+ herramientas.push({
195
+ nombre: "adb",
196
+ estado: "no-encontrada",
197
+ detalle: "ni en el PATH ni en platform-tools del SDK de Android",
198
+ ...(instalar === undefined ? {} : { instalar }),
199
+ });
200
+ }
201
+ else {
202
+ try {
203
+ const { stdout } = await ejecutar(adb, ["devices", "-l"], { timeout: TOPES_MS.adb });
204
+ dispositivos.push(...parsearAdbDevices(stdout));
205
+ herramientas.push({ nombre: "adb", estado: "ok", ruta: adb });
206
+ }
207
+ catch (error) {
208
+ herramientas.push({ nombre: "adb", estado: "fallo", ruta: adb, detalle: describirFallo(error, TOPES_MS.adb) });
209
+ }
210
+ }
211
+ const emulator = miraAndroidEmulador ? localizar("emulator", "emulator") : undefined;
212
+ if (!miraAndroidEmulador) {
213
+ herramientas.push({ nombre: "emulator", estado: "desactivada", detalle: APAGADO });
214
+ }
215
+ else if (emulator === undefined) {
216
+ const instalar = comoInstalar("emulator");
217
+ herramientas.push({
218
+ nombre: "emulator",
219
+ estado: "no-encontrada",
220
+ detalle: "ni en el PATH ni en la carpeta emulator del SDK de Android; viene con Android Studio",
221
+ ...(instalar === undefined ? {} : { instalar }),
222
+ });
223
+ }
224
+ else {
225
+ try {
226
+ const { stdout } = await ejecutar(emulator, ["-list-avds"], { timeout: TOPES_MS.emulator });
227
+ avds = parsearAvds(stdout);
228
+ herramientas.push({ nombre: "emulator", estado: "ok", ruta: emulator });
229
+ }
230
+ catch (error) {
231
+ herramientas.push({ nombre: "emulator", estado: "fallo", ruta: emulator, detalle: describirFallo(error, TOPES_MS.emulator) });
232
+ }
233
+ }
234
+ // --- iOS: solo en macOS, y solo con herramientas de desarrollo instaladas.
235
+ if (!miraIos && !miraIosSimulador) {
236
+ // Ni `xcode-select -p`: apagar los dos destinos de iOS tiene que ahorrar TODOS los
237
+ // procesos, no solo los dos `xcrun` de después.
238
+ herramientas.push({ nombre: "xcrun", estado: "desactivada", detalle: APAGADO }, { nombre: "devicectl", estado: "desactivada", detalle: APAGADO });
239
+ }
240
+ else if (plataforma !== "darwin") {
241
+ const detalle = "los simuladores y dispositivos iOS solo se detectan en macOS";
242
+ herramientas.push({ nombre: "xcrun", estado: "no-aplica", detalle }, { nombre: "devicectl", estado: "no-aplica", detalle });
243
+ }
244
+ else {
245
+ let xcode;
246
+ try {
247
+ xcode = (await ejecutar("xcode-select", ["-p"], { timeout: TOPES_MS.xcrun })).stdout.trim();
248
+ }
249
+ catch {
250
+ xcode = undefined;
251
+ }
252
+ if (xcode === undefined || xcode === "") {
253
+ const detalle = "no hay herramientas de desarrollo de Xcode (xcode-select -p no devuelve ninguna ruta)";
254
+ const instalar = comoInstalar("xcrun");
255
+ herramientas.push({ nombre: "xcrun", estado: "no-encontrada", detalle, ...(instalar === undefined ? {} : { instalar }) }, { nombre: "devicectl", estado: "no-encontrada", detalle, ...(instalar === undefined ? {} : { instalar }) });
256
+ }
257
+ else {
258
+ /**
259
+ * **Xcode COMPLETO no es lo mismo que las herramientas de línea de comandos**, y esa
260
+ * distinción es la mitad de la receta de iOS: las CLT traen `xcrun` y `simctl` —así que
261
+ * todo lo de arriba contesta— y **no traen ni un simulador**. Se distinguen por dónde
262
+ * apunta `xcode-select -p`: dentro de un `Xcode.app` o en `CommandLineTools`.
263
+ *
264
+ * La licencia se pregunta con `xcodebuild -version`, que es quien falla si no está
265
+ * aceptada, y SOLO con Xcode completo delante: sin él no hay nada que aceptar y sería
266
+ * un proceso gastado en cada medida. Es la misma economía que `xcode-select -p` antes
267
+ * de cualquier `xcrun`.
268
+ */
269
+ xcodeCompleto = /Xcode[^/]*\.app\//.test(`${xcode}/`);
270
+ if (xcodeCompleto && miraIosSimulador) {
271
+ try {
272
+ await ejecutar("xcodebuild", ["-version"], { timeout: TOPES_MS.xcrun });
273
+ licenciaDeXcode = true;
274
+ }
275
+ catch {
276
+ // No se distingue «licencia sin aceptar» de «xcodebuild roto»: para la receta las
277
+ // dos son el mismo paso pendiente, y su comando arregla las dos.
278
+ licenciaDeXcode = false;
279
+ }
280
+ }
281
+ if (!miraIosSimulador) {
282
+ herramientas.push({ nombre: "xcrun", estado: "desactivada", detalle: APAGADO });
283
+ }
284
+ else {
285
+ try {
286
+ // `runtimes` además de `devices`: la misma llamada trae las dos cosas (medido), y
287
+ // así saber si falta el runtime del simulador no cuesta ni un proceso más.
288
+ const { stdout } = await ejecutar("xcrun", ["simctl", "list", "-j", "runtimes", "devices", "available"], {
289
+ timeout: TOPES_MS.xcrun,
290
+ });
291
+ dispositivos.push(...parsearSimctl(stdout));
292
+ runtimesDeIos = parsearRuntimesDeIos(stdout);
293
+ herramientas.push({ nombre: "xcrun", estado: "ok", ruta: xcode });
294
+ }
295
+ catch (error) {
296
+ herramientas.push({ nombre: "xcrun", estado: "fallo", ruta: xcode, detalle: describirFallo(error, TOPES_MS.xcrun) });
297
+ }
298
+ }
299
+ // `devicectl` no imprime el JSON por stdout: solo lo escribe en el fichero que se le
300
+ // pide. Y es de Xcode 15 en adelante: en uno anterior el `xcrun` falla y se dice.
301
+ if (!miraIos) {
302
+ herramientas.push({ nombre: "devicectl", estado: "desactivada", detalle: APAGADO });
303
+ }
304
+ else {
305
+ const fichero = ficheroTemporal();
306
+ try {
307
+ await ejecutar("xcrun", ["devicectl", "list", "devices", "--json-output", fichero], { timeout: TOPES_MS.xcrun });
308
+ dispositivos.push(...parsearDevicectl(await leer(fichero)));
309
+ herramientas.push({ nombre: "devicectl", estado: "ok", ruta: xcode });
310
+ }
311
+ catch (error) {
312
+ herramientas.push({ nombre: "devicectl", estado: "fallo", ruta: xcode, detalle: describirFallo(error, TOPES_MS.xcrun) });
313
+ }
314
+ finally {
315
+ await borrar(fichero);
316
+ }
317
+ }
318
+ }
319
+ }
320
+ // El último filtro, y hace falta aunque cada herramienta lleve su interruptor: `adb
321
+ // devices` no distingue —trae los físicos y los emuladores en la misma lista—, así que
322
+ // con «Android físico» apagado y emuladores encendidos hay que quitarlos aquí. Es filtrar
323
+ // lo que YA se midió, no medir de menos: lo segundo lo hacen las guardas de arriba.
324
+ const visibles = dispositivos.filter((d) => {
325
+ if (d.plataforma === "android")
326
+ return d.clase === "emulador" ? miraAndroidEmulador : miraAndroid;
327
+ return d.clase === "simulador" ? miraIosSimulador : miraIos;
328
+ });
329
+ /**
330
+ * La RECETA de lo que a esta máquina le falta, con cada paso marcado por lo MEDIDO.
331
+ *
332
+ * El texto es datos puros y vive en `core/`; aquí solo se le pasa lo que se ha visto. Un
333
+ * paso «hecho» que saliera de recordar un clic seguiría diciendo que sí después de que el
334
+ * usuario desinstalara el SDK, que es justo cuando hay que decirle que falta.
335
+ *
336
+ * `sdkmanager` se busca en el PATH y también dentro del SDK: Homebrew lo enlaza en su
337
+ * `bin`, pero un xonecode lanzado con un PATH escueto no lo vería, y el paso saldría
338
+ * pendiente teniendo el SDK instalado delante.
339
+ */
340
+ const recetaAndroid = recetaDeEmuladorAndroid(plataforma, {
341
+ brew: enPath("brew") !== undefined,
342
+ sdkmanager: enPath("sdkmanager") !== undefined ||
343
+ localizar("sdkmanager", join("cmdline-tools", "latest", "bin")) !== undefined,
344
+ emulator: emulator !== undefined,
345
+ // El JDK con el que corre `sdkmanager`: sin él, el botón de ejecutar no se ofrece.
346
+ jdk: jdkDeLaMaquina(entorno, existe) !== undefined,
347
+ avds,
348
+ });
349
+ /**
350
+ * Y la del SIMULADOR de iOS, solo si ese destino está encendido.
351
+ *
352
+ * No es simetría con la de Android: la de Android se compone de lo que ya se sabía (mirar
353
+ * el PATH no lanza nada), y esta necesita haber medido con `xcrun`. Con el destino apagado
354
+ * no se ha medido, así que no hay con qué marcar ningún paso — y una receta con los tres
355
+ * pasos «pendientes» en una máquina que los tiene hechos es peor que ninguna. Lo que el
356
+ * panel dice entonces es lo que es: «iOS no se mira: está desactivado en Ajustes».
357
+ */
358
+ const recetaIos = miraIosSimulador
359
+ ? recetaDeSimuladorIos(plataforma, {
360
+ xcode: xcodeCompleto,
361
+ licencia: licenciaDeXcode,
362
+ runtimes: runtimesDeIos,
363
+ })
364
+ : undefined;
365
+ const recetas = [];
366
+ if (recetaAndroid !== undefined)
367
+ recetas.push(recetaAndroid);
368
+ if (recetaIos !== undefined)
369
+ recetas.push(recetaIos);
370
+ return {
371
+ sistema: sistemaDe(plataforma),
372
+ herramientas: herramientas.map((h) => ({ ...h, plataforma: plataformaDe(h.nombre) })),
373
+ dispositivos: visibles,
374
+ avds: miraAndroidEmulador ? avds : [],
375
+ recetas,
376
+ medido: ahora().toISOString(),
377
+ };
378
+ }
379
+ /**
380
+ * Los instaladores que xonecode lanza ÉL. Tabla CERRADA y de UNA entrada.
381
+ *
382
+ * `xcode-select --install` está aquí porque cumple las tres condiciones: no instala nada por
383
+ * su cuenta —abre el diálogo de Apple y devuelve en el acto—, no necesita contraseña de
384
+ * administrador en el proceso hijo, y se resuelve por el PATH del sistema.
385
+ *
386
+ * Lo demás NO se lanza desde aquí y se ofrece para copiar (`instalar.automatico: false`), y
387
+ * **el motivo dejó de ser la contraseña de administrador**: está desmentido —medido, `sudo`
388
+ * sin terminal de control falla en 26 ms en vez de colgarse, y por eso los `brew` de la
389
+ * receta SÍ se lanzan (`agent/instalacionEnMaquina.ts`)—. El motivo es que aquí no hay canal
390
+ * de progreso: se lanza con `execFile` y un tope de un minuto, sin log en vivo. `brew
391
+ * install --cask` tarda minutos, así que por este camino sería un botón mudo que se lee como
392
+ * un cuelgue y encima moriría en el tope. Instalar con log es lo que hace la fase de la
393
+ * receta, y ahí es donde está ese botón.
394
+ */
395
+ const INSTALADORES = {
396
+ xcrun: { binario: "xcode-select", args: ["--install"], plataforma: "darwin" },
397
+ devicectl: { binario: "xcode-select", args: ["--install"], plataforma: "darwin" },
398
+ };
399
+ /** Cuánto se espera al instalador antes de darlo por colgado. */
400
+ export const TOPE_DE_INSTALACION_MS = 60_000;
401
+ /**
402
+ * Lanza el instalador de una herramienta, si hay uno para ella en esta plataforma.
403
+ *
404
+ * **Un código de salida distinto de cero NO siempre es un fallo aquí**: `xcode-select
405
+ * --install` sale con error cuando las herramientas YA están instaladas, y eso no es nada
406
+ * que contar. Lo que se propaga es lo que impide seguir —que no exista el binario, o que se
407
+ * cuelgue—; del resto se encarga la medida de después, que es la que dice la verdad sobre si
408
+ * la herramienta está.
409
+ */
410
+ export async function instalarHerramientaDeDispositivos(herramienta, deps = {}) {
411
+ const plataforma = deps.plataforma ?? process.platform;
412
+ const ejecutar = deps.ejecutar ?? ejecutarConTexto;
413
+ const instalador = INSTALADORES[herramienta];
414
+ if (instalador === undefined || instalador.plataforma !== plataforma)
415
+ return;
416
+ try {
417
+ await ejecutar(instalador.binario, instalador.args, { timeout: TOPE_DE_INSTALACION_MS });
418
+ }
419
+ catch (error) {
420
+ const e = error;
421
+ // Un `code` numérico es el instalador diciendo algo (p. ej. «ya están instaladas»); un
422
+ // cuelgue o un binario que no existe sí son fallos que hay que contar.
423
+ if (e !== null && typeof e === "object" && typeof e.code === "number" && e.killed !== true)
424
+ return;
425
+ throw error;
426
+ }
427
+ }
428
+ export async function verificarDispositivo(dispositivo, deps = {}) {
429
+ const plataforma = deps.plataforma ?? process.platform;
430
+ const entorno = deps.entorno ?? process.env;
431
+ const home = deps.home ?? homedir();
432
+ const existe = deps.existe ?? existsSync;
433
+ const ejecutar = deps.ejecutar ?? ejecutarConTexto;
434
+ if (dispositivo.plataforma === "android") {
435
+ const { enSdk } = localizadorDeAndroid({ plataforma, entorno, home, existe });
436
+ const adb = enSdk("adb", "platform-tools");
437
+ if (adb === undefined) {
438
+ return { ok: false, detalle: "no está adb: sin él no se puede hablar con un dispositivo Android" };
439
+ }
440
+ try {
441
+ const { stdout } = await ejecutar(adb, ["-s", dispositivo.id, "shell", "getprop", "ro.product.model"], {
442
+ timeout: TOPES_MS.adb,
443
+ });
444
+ const modelo = stdout.trim().split(/\r?\n/)[0]?.trim() ?? "";
445
+ // Contestar sin decir el modelo sigue siendo contestar: la shell está viva, que es lo
446
+ // que se preguntaba. Afirmar un modelo vacío sería inventarlo.
447
+ return { ok: true, detalle: modelo === "" ? "responde a la shell" : `responde: ${recortar(modelo)}` };
448
+ }
449
+ catch (error) {
450
+ return { ok: false, detalle: describirFallo(error, TOPES_MS.adb) };
451
+ }
452
+ }
453
+ if (plataforma !== "darwin") {
454
+ return { ok: false, detalle: "los dispositivos iOS solo se verifican en macOS" };
455
+ }
456
+ if (dispositivo.clase === "simulador") {
457
+ try {
458
+ await ejecutar("xcrun", ["simctl", "spawn", dispositivo.id, "/usr/bin/uname", "-r"], {
459
+ timeout: TOPES_MS.xcrun,
460
+ });
461
+ return { ok: true, detalle: "responde: ejecuta procesos dentro" };
462
+ }
463
+ catch (error) {
464
+ return { ok: false, detalle: motivoDeFalloDeSimctl(error, TOPES_MS.xcrun) };
465
+ }
466
+ }
467
+ const leer = deps.leer ?? ((ruta) => readFile(ruta, "utf8"));
468
+ const borrar = deps.borrar ?? ((ruta) => rm(ruta, { force: true }).catch(() => undefined));
469
+ const ficheroTemporal = deps.ficheroTemporal ?? (() => join(tmpdir(), `xonecode-devicectl-${process.pid}-${Date.now()}.json`));
470
+ // El borrado va en un `finally` que ENVUELVE a los dos pasos: leer después de borrar era
471
+ // el orden equivocado, y el temporal tiene que irse pase lo que pase.
472
+ const fichero = ficheroTemporal();
473
+ try {
474
+ try {
475
+ await ejecutar("xcrun", ["devicectl", "device", "info", "details", "--device", dispositivo.id, "--json-output", fichero], {
476
+ timeout: TOPES_MS.xcrun,
477
+ });
478
+ }
479
+ catch (error) {
480
+ return { ok: false, detalle: motivoDeFalloDeSimctl(error, TOPES_MS.xcrun) };
481
+ }
482
+ try {
483
+ // Se LEE el fichero para no afirmar sobre lo que no se ha visto: `devicectl` no
484
+ // imprime el JSON por stdout, así que un código 0 sin fichero legible no es una
485
+ // respuesta.
486
+ await leer(fichero);
487
+ }
488
+ catch {
489
+ // Y este fallo tiene su propia frase: pasarlo por `describirFallo` decía «el
490
+ // ejecutable no existe» ante un `ENOENT` que es del FICHERO y no del binario, que
491
+ // acaba de ejecutarse bien. Un motivo falso es peor que uno vago.
492
+ return { ok: false, detalle: "devicectl no dejó su respuesta donde se le pidió" };
493
+ }
494
+ return { ok: true, detalle: "responde a devicectl" };
495
+ }
496
+ finally {
497
+ await borrar(fichero);
498
+ }
499
+ }
500
+ /**
501
+ * Los dos nombres que puede tener el framework de XOne en un Android, EN ORDEN DE PREFERENCIA.
502
+ *
503
+ * Son dos flavors del MISMO producto: `com.xone.android.framework` es el standalone —el
504
+ * medido, `5.0.2.2dev`— y `com.xone.android.developer.framework` el que va a Play Store. Con
505
+ * los dos instalados gana el primero, y por eso esto es una lista y no un `if` de dos ramas:
506
+ * así el orden ES la regla, y no hay dos sitios donde pueda cambiar.
507
+ */
508
+ const PAQUETES_DEL_FRAMEWORK = ["com.xone.android.framework", "com.xone.android.developer.framework"];
509
+ export async function frameworkEnDispositivo(dispositivo, deps = {}) {
510
+ const plataforma = deps.plataforma ?? process.platform;
511
+ const entorno = deps.entorno ?? process.env;
512
+ const home = deps.home ?? homedir();
513
+ const existe = deps.existe ?? existsSync;
514
+ const ejecutar = deps.ejecutar ?? ejecutarConTexto;
515
+ // Lo PRIMERO, para que un iPhone no cueste ni una búsqueda en el PATH.
516
+ if (dispositivo.plataforma !== "android") {
517
+ return { instalado: false, detalle: "iOS todavía no" };
518
+ }
519
+ const { enSdk } = localizadorDeAndroid({ plataforma, entorno, home, existe });
520
+ const adb = enSdk("adb", "platform-tools");
521
+ if (adb === undefined) {
522
+ return { instalado: false, detalle: "no está adb: sin él no se puede mirar qué paquetes tiene" };
523
+ }
524
+ try {
525
+ const { stdout } = await ejecutar(adb, ["-s", dispositivo.id, "shell", "pm", "list", "packages", "com.xone.android"], {
526
+ timeout: TOPES_MS.adb,
527
+ });
528
+ // El formato de `pm list packages` es una línea por paquete, cada una con su prefijo.
529
+ // Se compara contra el nombre pelado porque el prefijo es sintaxis de la herramienta.
530
+ const nombres = new Set(stdout
531
+ .split(/\r?\n/)
532
+ .map((linea) => linea.trim())
533
+ .filter((linea) => linea.startsWith("package:"))
534
+ .map((linea) => linea.slice("package:".length)));
535
+ const paquete = PAQUETES_DEL_FRAMEWORK.find((nombre) => nombres.has(nombre));
536
+ if (paquete === undefined) {
537
+ return { instalado: false, detalle: "no aparece ni el standalone ni el de Play Store: no está instalado" };
538
+ }
539
+ return { instalado: true, paquete, detalle: `framework instalado: ${paquete}` };
540
+ }
541
+ catch (error) {
542
+ return { instalado: false, detalle: describirFallo(error, TOPES_MS.adb) };
543
+ }
544
+ }
545
+ /**
546
+ * El motivo de un fallo de `xcrun`, con la línea de `simctl` que sí explica algo.
547
+ *
548
+ * `describirFallo` se queda con la primera línea de stderr, y en `simctl` esa es papeleo
549
+ * (`An error was encountered … code=405`). Se prueba primero la que `motivoDeSimctl`
550
+ * encuentra y se cae a la de siempre: un cuelgue o un binario que no existe los describe
551
+ * mejor ella.
552
+ */
553
+ function motivoDeFalloDeSimctl(error, topeMs) {
554
+ const e = error;
555
+ if (e !== null && typeof e === "object" && e.killed !== true && typeof e.stderr === "string") {
556
+ const linea = motivoDeSimctl(e.stderr);
557
+ if (linea !== undefined)
558
+ return recortar(linea);
559
+ }
560
+ return describirFallo(error, topeMs);
561
+ }
562
+ /** Una línea acotada: por el cable no viaja la salida de una herramienta. */
563
+ function recortar(texto) {
564
+ return texto.length > 160 ? `${texto.slice(0, 159)}…` : texto;
565
+ }
566
+ async function ejecutarConTexto(binario, args, opciones) {
567
+ const { stdout, stderr } = await ejecutarReal(binario, args, { timeout: opciones.timeout, encoding: "utf8", windowsHide: true });
568
+ return { stdout: String(stdout), stderr: String(stderr) };
569
+ }
570
+ /**
571
+ * Una línea sobre por qué falló, sin la salida entera. Un proceso que `execFile` mató por
572
+ * el timeout llega con `killed: true`; lo demás es la primera línea útil de stderr o del
573
+ * mensaje, recortada.
574
+ */
575
+ export function describirFallo(error, topeMs) {
576
+ const e = error;
577
+ if (e !== null && typeof e === "object" && (e.killed === true || e.code === "ETIMEDOUT")) {
578
+ return `no respondió en ${Math.round(topeMs / 1000)} s`;
579
+ }
580
+ if (e !== null && typeof e === "object" && e.code === "ENOENT")
581
+ return "el ejecutable no existe";
582
+ const stderr = e !== null && typeof e === "object" && typeof e.stderr === "string" ? e.stderr : "";
583
+ const mensaje = e !== null && typeof e === "object" && typeof e.message === "string" ? e.message : String(error);
584
+ const linea = stderr
585
+ .split(/\r?\n/)
586
+ .map((l) => l.trim())
587
+ .find((l) => l !== "") ??
588
+ mensaje
589
+ .split(/\r?\n/)
590
+ .map((l) => l.trim())
591
+ .find((l) => l !== "" && !l.startsWith("Command failed")) ??
592
+ mensaje.split(/\r?\n/)[0] ??
593
+ "fallo desconocido";
594
+ return linea.length > 160 ? `${linea.slice(0, 159)}…` : linea;
595
+ }
596
+ //# sourceMappingURL=dispositivosEnMaquina.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispositivosEnMaquina.js","sourceRoot":"","sources":["../../src/agent/dispositivosEnMaquina.ts"],"names":[],"mappings":"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"}