xonecode 0.3.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 +56 -8
  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 @@
1
+ {"version":3,"file":"gitSync.js","sourceRoot":"","sources":["../../src/agent/gitSync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,448 @@
1
+ /**
2
+ * El canal de comandos del servidor hotswap: un WebSocket en `/hotswap`.
3
+ *
4
+ * Es la mitad que LANZA y MIDE sobre el dispositivo: abrir el canal, pedir que la app arranque
5
+ * y luego PREGUNTAR si está viva. Subir ficheros, la base de datos y las capturas van por el
6
+ * HTTP del mismo servidor y por otro camino.
7
+ *
8
+ * **Medido el 16-sep-2026 contra `com.xone.android.framework` 5.0.2.2dev** (flavor standalone,
9
+ * emulador Android 15, `adb forward tcp:8443`) — el detalle entero, en la skill `xone-hotswap`:
10
+ *
11
+ * - **La ruta es `/hotswap`**, y no una parecida: `/`, `/ws`, `/websocket`, `/command` y `/api`
12
+ * contestan `400`.
13
+ * - **El servidor habla primero.** Al abrir manda `{"command":"server_hello","protocol_version":2}`.
14
+ * Mandar un comando antes de recibirlo es inventarse un protocolo que no es el que hay, y por
15
+ * eso esto ESPERA el saludo con tope en vez de saludar él.
16
+ * - **Y tras un reinicio hay que REINTENTAR la conexión, no solo esperar el saludo.** Medido en
17
+ * el emulador: el `am start` que reinicia el framework devuelve **antes** de que el servidor
18
+ * escuche, y como el `adb forward` ya tiene el LISTEN en el lado del host, la conexión TCP se
19
+ * ACEPTA y se resetea — el cliente ve `Client network socket disconnected before secure TLS
20
+ * connection was established` en cuanto intenta el handshake. `TOPE_DE_SALUDO_MS` no cubre eso:
21
+ * mide un socket ABIERTO que se queda callado, y aquí el socket no llega a abrirse. De ahí
22
+ * `abrirConReintento` y su `TOPE_DE_APERTURA_MS`: el mismo minuto que la espera de la app,
23
+ * porque es la misma pregunta —cuánto tarda el aparato en llegar— sobre otro momento.
24
+ * - **El nombre de un comando es EXACTO.** `launchapplication` en minúscula contesta
25
+ * `Unknown command: launchapplication`. No hay alias insensible a mayúsculas: la grafía es
26
+ * parte del contrato, y hay un test que la fija byte a byte sobre lo que sale por el socket.
27
+ * - **El `{"result":true}` de `launchApplication` es un ACUSE, no una medida.** El framework
28
+ * acusa el lanzamiento y no espera a que la app cargue: medido, a un proyecto al que le
29
+ * faltaba el fichero que declara su `connstring` le contestó `true` y la app murió detrás en
30
+ * un diálogo de error. Lo que dice si está VIVA es un comando de LECTURA, y eso es
31
+ * `lanzarYComprobar`: lanzar, y luego leer hasta que conteste un árbol. Es la misma regla que
32
+ * ««Terminó bien» y «ya está» son dos cosas», ahora sobre un dispositivo.
33
+ * - `getCurrentScreen` y `status`/`state` **no existen** en esta versión (`Unknown command`),
34
+ * aunque la tabla de la skill los dé por disponibles. Y `POST /command` da `404`: los
35
+ * comandos van por aquí.
36
+ *
37
+ * **Y la lectura es `getAllElements`, no `waitForElement`.** `waitForElement` pide el nombre de
38
+ * un control, y de una app cualquiera no sabemos ninguno: inventarse uno es justo lo que la
39
+ * skill prohíbe. `getAllElements` no necesita saber nada de la app —contesta su árbol de
40
+ * controles o contesta que no hay app—, y esa es toda la pregunta que hay que hacer.
41
+ *
42
+ * **`ws` es dependencia DIRECTA, y el porqué.** `engines` dice `node >= 20` y el `WebSocket`
43
+ * global no existe hasta Node 22: confiar en el global deja el CLI roto en una versión de Node
44
+ * que este paquete declara soportar, mientras `npm test` sigue verde en la máquina de quien
45
+ * escribe (v22). `ws` es JS puro —misma forma que `fflate`—, ya estaba en disco como
46
+ * transitiva de ink y jsdom (8.21.3), y da `rejectUnauthorized` en las opciones, que es lo que
47
+ * hace falta para el certificado autofirmado del dispositivo.
48
+ *
49
+ * **El constructor del socket entra por `deps`.** Es un puerto como cualquier otro de este
50
+ * repo: `npm test` no puede abrir un socket —ni contra un puerto que quizá no exista, ni
51
+ * contra el emulador que alguien tenga corriendo en su máquina—, así que el doble se pasa por
52
+ * parámetro y el `ws` de verdad solo se usa cuando nadie lo pasa.
53
+ */
54
+ import WebSocket from "ws";
55
+ /** La URL por omisión: el puerto de fábrica, con el `adb forward` hecho. */
56
+ export const DESTINO_POR_OMISION = "wss://127.0.0.1:8443/hotswap";
57
+ /**
58
+ * Cuánto se espera al saludo antes de dar el canal por muerto.
59
+ *
60
+ * No es un plazo para la app: es para el SERVIDOR, que está dentro del proceso host y saluda en
61
+ * cuanto acepta el socket. Quince segundos es de sobra para un túnel de `adb` en loopback, y
62
+ * seguir esperando deja el turno parado sin nada que lo explique.
63
+ */
64
+ export const TOPE_DE_SALUDO_MS = 15_000;
65
+ /**
66
+ * Y hasta cuándo se sigue INTENTANDO abrir el canal, contando desde el primer intento.
67
+ *
68
+ * **No es lo mismo que `TOPE_DE_SALUDO_MS`, y por eso hay dos.** Aquél mide un socket ABIERTO que
69
+ * no saluda; éste, un socket que no llega a abrirse — que es lo que se mide tras reiniciar el
70
+ * framework (ver la cabecera del módulo). Confundirlos deja el lanzamiento muriendo con la línea
71
+ * de TLS mientras el framework arranca detrás.
72
+ *
73
+ * El mismo minuto que la espera de la app: las dos preguntan lo mismo —cuánto tarda el aparato en
74
+ * llegar— sobre dos momentos distintos, y sesenta segundos son de sobra para una pantalla que
75
+ * arranca. El tope es del BUCLE y no de cada intento, así que uno que se quede esperando el saludo
76
+ * puede añadir su `TOPE_DE_SALUDO_MS` por encima.
77
+ */
78
+ export const TOPE_DE_APERTURA_MS = 60_000;
79
+ /**
80
+ * Cada cuánto se vuelve a preguntar: por el canal que aún no abre, y por la app que aún no está
81
+ * en pie.
82
+ *
83
+ * Un solo número para las dos esperas porque son la misma idea —volver a preguntar en vez de
84
+ * dormir un rato fijo— y porque miden lo mismo: unos segundos de un aparato arrancando.
85
+ */
86
+ export const INTERVALO_DE_SONDEO_MS = 1_000;
87
+ /**
88
+ * Y hasta cuándo, después de lanzarla.
89
+ *
90
+ * Se sondea con intervalo en vez de dormir un rato fijo por dos motivos, y son las dos caras
91
+ * del mismo error: un temporizador fijo o MIENTE por corto —diciendo que no arrancó algo que
92
+ * estaba arrancando— o hace perder un minuto entero en cada despliegue que va bien. Lo que
93
+ * decide es la medida, y en cuanto llega se para.
94
+ */
95
+ export const TOPE_DE_ARRANQUE_MS = 60_000;
96
+ /**
97
+ * Cada cuánto se le VUELVE A PEDIR el lanzamiento mientras la lectura diga que la app no está.
98
+ *
99
+ * Existe por una medida, y es la que hacía fallar la pestaña entera: **el primer
100
+ * `launchApplication` que llega con el framework recién reiniciado se acepta con
101
+ * `{"result":true}` y no arranca nada.** Medido con los MISMOS bytes de ZIP en las dos
102
+ * direcciones: mandándolo una sola vez, doce lecturas seguidas dicen `App is not running` durante
103
+ * los 60 s del tope; volviéndolo a pedir cada 5 s, hay árbol a los dos o tres segundos del
104
+ * segundo o tercer envío. Las cuatro tiradas buenas de esa sesión se pusieron vivas **justo
105
+ * detrás de un reenvío**, y ninguna se puso viva sin él.
106
+ *
107
+ * **Solo se reenvía con la lectura DICIENDO que no está**, y eso no es prudencia: reenviar sobre
108
+ * una app viva la TUMBA —`MainEntry.finishApp()` → `closeApplication` → `Terminating and
109
+ * disposing appData`—, medido como un ciclo de viva/muerta cada 5 s. El bucle de abajo solo llega
110
+ * a esta línea cuando la lectura acaba de decir que no hay app, así que la propiedad se sostiene
111
+ * por construcción y no por un `if` que alguien pueda quitar.
112
+ *
113
+ * Cinco segundos y no uno: es el intervalo con el que se midió, y preguntar más a menudo no
114
+ * adelanta nada —lo que arranca la app es un envío POSTERIOR, no la prisa—.
115
+ */
116
+ export const INTERVALO_DE_REENVIO_MS = 5_000;
117
+ /**
118
+ * La versión del protocolo con la que esto está medido.
119
+ *
120
+ * Otra NO se rechaza: no se rechaza lo que no se ha medido como incompatible. Se cuenta en el
121
+ * log y se sigue — un `protocol_version` distinto dice que el otro lado puede hablar otro
122
+ * idioma, y quien lo demuestra o lo desmiente es el primer comando.
123
+ */
124
+ const PROTOCOL_VERSION = 2;
125
+ /** El formato del volcado: `xone` da los controles con su nombre, que es por el que se pulsa. */
126
+ const FORMATO = "xone";
127
+ /** Las dos frases con las que el framework dice que todavía no hay app delante. */
128
+ const FRASE_SIN_APP = "App is not running";
129
+ const FRASE_SIN_PANTALLA = "No activity is visible";
130
+ /**
131
+ * Abre el canal y devuelve el cliente.
132
+ *
133
+ * No es `async` a propósito: quien la llama quiere el cliente para poder REGISTRAR su log
134
+ * antes de que llegue nada, y el saludo —que sí es asíncrono— se espera dentro de `comando`.
135
+ */
136
+ export function abrirHotswap(destino, deps = {}) {
137
+ const abrirSocket = deps.abrirSocket ?? abrirSocketReal;
138
+ const escuchas = [];
139
+ /**
140
+ * Las respuestas que se esperan, en orden de llegada.
141
+ *
142
+ * **Se emparejan por ORDEN porque no hay otra correspondencia posible.** El protocolo medido
143
+ * no manda ninguna: sale `{"command":…}` y vuelve `{"result":…,"status":…}`, sin eco del
144
+ * comando y sin número de petición. Es decir que dos comandos en vuelo a la vez se
145
+ * contestarían cruzados — por eso `comando` se espera antes de mandar el siguiente, y por eso
146
+ * este módulo no ofrece un `mandar` que no espera.
147
+ */
148
+ const pendientes = [];
149
+ let cerrado = false;
150
+ let responderSaludo;
151
+ let fallarSaludo;
152
+ const saludo = new Promise((cumplir, fallar) => {
153
+ responderSaludo = cumplir;
154
+ fallarSaludo = fallar;
155
+ });
156
+ const decir = (linea) => {
157
+ deps.alLinea?.(linea);
158
+ for (const escucha of escuchas)
159
+ escucha(linea);
160
+ };
161
+ const cerrar = (motivo = "el canal se cerró antes de contestar") => {
162
+ if (cerrado)
163
+ return;
164
+ cerrado = true;
165
+ clearTimeout(relojDeSaludo);
166
+ try {
167
+ socket.close();
168
+ }
169
+ catch {
170
+ // Un socket que nunca llegó a abrir puede quejarse al cerrarse. No hay nada que hacer
171
+ // con eso, y tirarlo aquí se llevaría por delante al que SÍ estaba esperando.
172
+ }
173
+ for (const pendiente of pendientes.splice(0))
174
+ pendiente.fallar(new Error(motivo));
175
+ // Resolver el saludo con un error es lo que desbloquea un `comando` que aún esperaba: sin
176
+ // esto, el que llama se queda esperando a un servidor que ya no está.
177
+ fallarSaludo?.(new Error(motivo));
178
+ };
179
+ const socket = abrirSocket(destino);
180
+ // El tope del saludo se arma al ABRIR, no al mandar: mide «no saludó», y el rato que alguien
181
+ // tarde en decidir qué comando mandar no es eso.
182
+ const relojDeSaludo = setTimeout(() => {
183
+ const motivo = `el servidor de ${destino} no saludó en ${Math.round(TOPE_DE_SALUDO_MS / 1000)} s`;
184
+ decir(motivo);
185
+ fallarSaludo?.(new Error(motivo));
186
+ cerrar(motivo);
187
+ }, TOPE_DE_SALUDO_MS);
188
+ socket.on("message", ((dato) => {
189
+ // Un evento `message` de `ws` ya es un mensaje ENTERO, no un trozo de flujo: el troceado
190
+ // que sí hace falta leyendo un stdio (ver `subagenteCodex.ts`) aquí sobra.
191
+ const linea = String(dato);
192
+ decir(linea);
193
+ let mensaje;
194
+ try {
195
+ mensaje = JSON.parse(linea);
196
+ }
197
+ catch {
198
+ // Una línea que no es JSON no tumba nada: se queda en el log, que es para lo que está.
199
+ return;
200
+ }
201
+ if (mensaje["command"] === "server_hello") {
202
+ const version = mensaje["protocol_version"];
203
+ if (version !== PROTOCOL_VERSION) {
204
+ // No se rechaza lo que no se ha medido como incompatible: se CUENTA y se sigue.
205
+ decir(`el servidor saluda con protocol_version ${String(version)}, y esto está medido con la ${PROTOCOL_VERSION}`);
206
+ }
207
+ clearTimeout(relojDeSaludo);
208
+ responderSaludo?.();
209
+ return;
210
+ }
211
+ const pendiente = pendientes.shift();
212
+ // Una respuesta que nadie pidió se queda en el log y no se le da a ningún comando: dársela
213
+ // al siguiente en la cola sería contestar una pregunta con la respuesta de otra.
214
+ pendiente?.cumplir(mensaje);
215
+ }));
216
+ socket.on("error", ((error) => {
217
+ // El motivo se DICE por el log y se convierte en el fallo del que esperaba: un socket que
218
+ // revienta no puede dejar a nadie esperando su respuesta.
219
+ const motivo = unaLinea(error);
220
+ decir(motivo);
221
+ cerrar(motivo);
222
+ }));
223
+ socket.on("close", (() => cerrar()));
224
+ return {
225
+ comando(nombre, extra = {}) {
226
+ if (cerrado)
227
+ return Promise.reject(new Error("el canal se cerró antes de mandar el comando"));
228
+ // El saludo, PRIMERO. Además de no inventarse el protocolo, es lo que garantiza que el
229
+ // socket está abierto cuando se escribe: `ws` no deja mandar en un socket que aún no ha
230
+ // abierto, y quien avisa de que está abierto es el propio servidor al saludar.
231
+ return saludo.then(() => new Promise((cumplir, fallar) => {
232
+ const pendiente = { cumplir, fallar };
233
+ pendientes.push(pendiente);
234
+ try {
235
+ // `command` el primero y `extra` detrás, para que lo que sale por el socket sea
236
+ // exactamente `{"command":"launchApplication","appName":"…"}`.
237
+ socket.send(JSON.stringify({ command: nombre, ...extra }));
238
+ }
239
+ catch (error) {
240
+ const i = pendientes.indexOf(pendiente);
241
+ if (i >= 0)
242
+ pendientes.splice(i, 1);
243
+ fallar(new Error(unaLinea(error)));
244
+ }
245
+ }));
246
+ },
247
+ cerrar,
248
+ esperarSaludo() {
249
+ return saludo;
250
+ },
251
+ alLinea(escucha) {
252
+ escuchas.push(escucha);
253
+ },
254
+ };
255
+ }
256
+ /**
257
+ * Abre el canal REINTENTANDO mientras el framework arranca, y devuelve el cliente ya saludado.
258
+ *
259
+ * Existe por una medida, no por prudencia: tras el `am start` que reinicia el framework, el
260
+ * servidor todavía no escucha, y el `adb forward` —que ya tiene el LISTEN en el lado del host—
261
+ * acepta la conexión para resetearla en cuanto el cliente intenta el handshake. Eso **no** lo
262
+ * cubre el tope del saludo, que mide un socket abierto que se queda callado, y sin reintento un
263
+ * lanzamiento que iba bien muere con la línea de TLS.
264
+ *
265
+ * **Aquí se reintenta la CONEXIÓN y nada más.** En cuanto hay saludo, el cliente sale de aquí con
266
+ * el canal abierto, y el reintento del LANZAMIENTO es otra cosa y vive en `lanzarYComprobar`, que
267
+ * es quien puede mirar si la app está viva antes de volver a pedirla. Este comentario decía
268
+ * —hasta que se midió— que reintentar un `launchApplication` ya mandado «sería lanzar la app dos
269
+ * veces por un motivo que no se ha medido». El motivo apareció, y era el contrario:
270
+ * `INTERVALO_DE_REENVIO_MS`.
271
+ *
272
+ * **Y se dice UNA vez, la primera.** El motivo del primer intento es el que explica qué pasó
273
+ * —todos los intentos de este caso dan el mismo—, y el mismo renglón repetido cada segundo
274
+ * llenaría la cola del log, que es corta, y taparía las líneas del recorrido.
275
+ *
276
+ * La cuenta es del número de intentos y no del reloj (`lanzarYComprobar` sondea igual), con la
277
+ * hora como segunda condición: así el tope no depende de que el reloj avance, que es lo que
278
+ * convierte un bucle de estos en una suite colgada.
279
+ */
280
+ async function abrirConReintento(destino, deps) {
281
+ const desde = Date.now();
282
+ const intentos = Math.ceil(TOPE_DE_APERTURA_MS / INTERVALO_DE_SONDEO_MS) + 1;
283
+ let ultimo = "";
284
+ for (let intento = 1; intento <= intentos; intento++) {
285
+ const cliente = abrirHotswap(destino, deps);
286
+ // El saludo se pide ANTES de soltar el hilo, y no es un detalle: así la promesa queda con su
287
+ // manejador puesto desde el primer instante, y un canal que se cae en el acto no deja un
288
+ // rechazo sin dueño.
289
+ const saludo = cliente.esperarSaludo();
290
+ try {
291
+ await saludo;
292
+ if (intento > 1)
293
+ deps.alLinea?.(`el canal con ${destino} abrió en el intento ${intento}`);
294
+ return cliente;
295
+ }
296
+ catch (error) {
297
+ // Un intento que no abrió no puede dejar su socket por ahí: es la misma fuga que la de
298
+ // `lanzarYComprobar`, y contra un emulador se acumula sin dar ningún síntoma.
299
+ cliente.cerrar();
300
+ ultimo = unaLinea(error);
301
+ if (intento === 1)
302
+ deps.alLinea?.(`se reintenta el canal con ${destino}: ${ultimo}`);
303
+ if (intento === intentos || Date.now() - desde >= TOPE_DE_APERTURA_MS)
304
+ break;
305
+ await dormir(INTERVALO_DE_SONDEO_MS);
306
+ }
307
+ }
308
+ // El ÚLTIMO motivo y no el primero: es el que dice cómo estaba el aparato al darse por vencido.
309
+ throw new Error(`no se pudo abrir el canal con ${destino} en ${Math.round(TOPE_DE_APERTURA_MS / 1000)} s: ${ultimo}`);
310
+ }
311
+ /**
312
+ * Lanza la app y COMPRUEBA que está viva.
313
+ *
314
+ * Las dos partes están separadas a propósito porque son dos hechos distintos: el acuse de
315
+ * `launchApplication` dice que el framework aceptó el encargo, y el árbol de `getAllElements`
316
+ * dice que hay una app delante. Medido: lo primero es `true` aunque lo segundo no llegue nunca.
317
+ *
318
+ * **La conexión se reintenta** (`abrirConReintento`) porque un socket que no abre no es un
319
+ * veredicto sobre la app: recién reiniciado el framework, el canal tarda unos segundos en
320
+ * existir.
321
+ *
322
+ * **Y el lanzamiento se VUELVE A PEDIR** mientras la lectura diga que no está
323
+ * (`INTERVALO_DE_REENVIO_MS`): el primer envío tras un reinicio en frío se acepta y no arranca
324
+ * nada, así que mandarlo una sola vez y esperar sesenta segundos es esperar a un encargo que el
325
+ * framework ya tiró. La regla que lo hace seguro es que solo se reenvía detrás de una lectura que
326
+ * dice «no está»: sobre una app viva, un segundo `launchApplication` la tumba.
327
+ *
328
+ * **Nunca lanza**: todo —el saludo que no llega, el socket que revienta, un `Unknown command`—
329
+ * vuelve como `{viva, motivo}` de una línea. Quien la llama está atendiendo algo que puede
330
+ * contar en una pantalla, y un fallo del dispositivo no es una excepción del programa.
331
+ *
332
+ * Y `cerrar()` va en un `finally`, también en el camino de fallo: un socket vivo contra un
333
+ * emulador que se queda abierto en cada intento es una fuga que no da ningún síntoma hasta que
334
+ * se acumula.
335
+ */
336
+ export async function lanzarYComprobar(app, deps = {}) {
337
+ // Abrir va DENTRO del `try` porque abrir también puede fallar: `ws` lanza si la URL está mal
338
+ // escrita, y una URL mal escrita no puede salir de aquí como una excepción.
339
+ let cliente;
340
+ try {
341
+ cliente = await abrirConReintento(deps.destino ?? DESTINO_POR_OMISION, deps);
342
+ const acuse = await cliente.comando("launchApplication", { appName: app });
343
+ if (acuse.result !== true) {
344
+ // La frase es el `status` LITERAL: es lo único que dice QUÉ pasó, y traducirlo a una
345
+ // frase nuestra perdería justo el dato que hace falta para diagnosticar.
346
+ return { viva: false, motivo: decirDe(acuse), respuesta: acuse };
347
+ }
348
+ // Se sondea hasta que la respuesta sea un árbol, con el tope como única salida. El sondeo
349
+ // es a los 0 s, 1 s, … y el ÚLTIMO a los 60 s: de ahí el `+ 1` — con la cuenta corta, el
350
+ // tope se agotaría un segundo antes de haber preguntado al final.
351
+ //
352
+ // Y dentro del bucle se VUELVE A PEDIR el lanzamiento cada `INTERVALO_DE_REENVIO_MS`: el
353
+ // primer envío de un framework recién reiniciado se acepta y no arranca nada. Se llega a esas
354
+ // dos líneas solo cuando la lectura acaba de decir que la app NO está, que es la única
355
+ // situación en la que volver a pedirla no la tumba.
356
+ const veces = TOPE_DE_ARRANQUE_MS / INTERVALO_DE_SONDEO_MS + 1;
357
+ let ultima = acuse;
358
+ let envio = Date.now();
359
+ for (let intento = 0; intento < veces; intento++) {
360
+ if (intento > 0)
361
+ await dormir(INTERVALO_DE_SONDEO_MS);
362
+ ultima = await cliente.comando("getAllElements", { format: FORMATO });
363
+ if (estaViva(ultima))
364
+ return { viva: true, respuesta: ultima };
365
+ if (Date.now() - envio >= INTERVALO_DE_REENVIO_MS) {
366
+ envio = Date.now();
367
+ deps.alLinea?.("el framework aceptó el lanzamiento y la app no arrancó: se le vuelve a pedir");
368
+ const otro = await cliente.comando("launchApplication", { appName: app });
369
+ // La misma regla que el primero, y por el mismo motivo: un `result` que no es `true` es
370
+ // el framework diciendo que no, y eso no se arregla insistiendo.
371
+ if (otro.result !== true)
372
+ return { viva: false, motivo: decirDe(otro), respuesta: otro };
373
+ // `ultima` NO se toca: es la última respuesta que dice cómo está la APP, y el acuse de un
374
+ // lanzamiento no dice nada de eso. Pisarlo dejaría el motivo del tope agotado en `""` —el
375
+ // `status` de un acuse— en vez de en la frase del framework, que es lo único que explica
376
+ // qué pasó.
377
+ }
378
+ }
379
+ // Se agotó el tope, y el motivo es la última respuesta tal cual: «no arrancó en 60 s» a
380
+ // secas tiraría lo único que el framework dijo sobre por qué.
381
+ return { viva: false, motivo: decirDe(ultima), respuesta: ultima };
382
+ }
383
+ catch (error) {
384
+ return { viva: false, motivo: unaLinea(error) };
385
+ }
386
+ finally {
387
+ cliente?.cerrar();
388
+ }
389
+ }
390
+ /**
391
+ * El veredicto de vida, en UN sitio.
392
+ *
393
+ * Vale si el framework no ha dicho que no, si no ha dicho ninguna de las dos frases con las que
394
+ * dice que todavía no hay app delante, y si lo que trae es de verdad un ÁRBOL.
395
+ *
396
+ * Lo del árbol no es un adorno, es la parte que impide el falso positivo: `getAllElements` mete
397
+ * su payload —el array de descriptores— como JSON dentro de `status`, así que cualquier otra
398
+ * cosa que llegue por ahí (otro error, una cadena vacía, un objeto suelto) NO es una app viva.
399
+ * Conformarse con «hay algo en `status`» convertiría un error desconocido en un visto bueno,
400
+ * que es el diagnóstico falso más caro de todos porque no da ningún síntoma.
401
+ *
402
+ * Y un árbol VACÍO sí está vivo: el `[]` lo contesta una pantalla con un diálogo modal delante
403
+ * —lo de debajo está tapado y no se publica—, que es una app en pie, no una app muerta.
404
+ */
405
+ export function estaViva(respuesta) {
406
+ if (respuesta.result === false)
407
+ return false;
408
+ const status = typeof respuesta.status === "string" ? respuesta.status : "";
409
+ if (status.includes(FRASE_SIN_APP))
410
+ return false;
411
+ if (status.includes(FRASE_SIN_PANTALLA))
412
+ return false;
413
+ try {
414
+ return Array.isArray(JSON.parse(status));
415
+ }
416
+ catch {
417
+ return false;
418
+ }
419
+ }
420
+ /** El motivo, con la respuesta LITERAL y sin traducir. «No funciona» no es un hallazgo. */
421
+ function decirDe(respuesta) {
422
+ const status = typeof respuesta.status === "string" ? respuesta.status.trim() : "";
423
+ return status === "" ? JSON.stringify(respuesta) : status;
424
+ }
425
+ /** La espera entre sondeos. `setTimeout` pelado, para que el test pueda adelantar el reloj. */
426
+ function dormir(ms) {
427
+ return new Promise((resolver) => setTimeout(resolver, ms));
428
+ }
429
+ /** Una línea, nunca la traza entera ni una ruta de la máquina. */
430
+ function unaLinea(error) {
431
+ const e = error;
432
+ // El fallo más probable con diferencia, y el que peor se lee en crudo: el servidor vive
433
+ // DENTRO del proceso de la app, así que un puerto que no contesta es que la app no está viva.
434
+ if (e !== null && typeof e === "object" && e.code === "ECONNREFUSED") {
435
+ return "no hay nadie escuchando ahí: el servidor vive dentro de la app, y sin app no hay servidor";
436
+ }
437
+ const mensaje = e !== null && typeof e === "object" && typeof e.message === "string" ? e.message : String(error);
438
+ return mensaje.split(/\r?\n/)[0].slice(0, 160);
439
+ }
440
+ /**
441
+ * El socket de verdad. **`rejectUnauthorized: false` no es un descuido**: el certificado del
442
+ * dispositivo es autofirmado en las dos plataformas —la skill lo dice y por eso todos sus
443
+ * ejemplos van con `curl -k`—, así que con la comprobación puesta no se conectaría con nada.
444
+ * El destino es un túnel de `adb` en loopback o la IP de la LAN que enseña la propia app, y
445
+ * quien pueda escribir en esa conexión ya está en la máquina.
446
+ */
447
+ const abrirSocketReal = (url) => new WebSocket(url, { rejectUnauthorized: false });
448
+ //# sourceMappingURL=hotswap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotswap.js","sourceRoot":"","sources":["../../src/agent/hotswap.ts"],"names":[],"mappings":"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"}