xonecode 0.3.0 → 0.5.1

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 (408) hide show
  1. package/README.md +50 -8
  2. package/THIRD_PARTY_NOTICES.md +160 -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/sqliteSaver.js +389 -0
  300. package/dist/vendor/sqliteSaver.js.map +1 -0
  301. package/dist/vendor/tokenTracking.js +22 -1
  302. package/dist/vendor/tokenTracking.js.map +1 -1
  303. package/dist/web/servidor/arranque.js +3964 -0
  304. package/dist/web/servidor/arranque.js.map +1 -0
  305. package/dist/web/servidor/consolaDeTarea.js +161 -0
  306. package/dist/web/servidor/consolaDeTarea.js.map +1 -0
  307. package/dist/web/servidor/consolaWeb.js +389 -0
  308. package/dist/web/servidor/consolaWeb.js.map +1 -0
  309. package/dist/web/servidor/corredorDeTareas.js +1119 -0
  310. package/dist/web/servidor/corredorDeTareas.js.map +1 -0
  311. package/dist/web/servidor/pielWeb.js +269 -0
  312. package/dist/web/servidor/pielWeb.js.map +1 -0
  313. package/dist/web/servidor/servidor.js +257 -0
  314. package/dist/web/servidor/servidor.js.map +1 -0
  315. package/dist/web/servidor/sesiones.js +440 -0
  316. package/dist/web/servidor/sesiones.js.map +1 -0
  317. package/dist/web/servidor/transporte.js +169 -0
  318. package/dist/web/servidor/transporte.js.map +1 -0
  319. package/dist/web/servidor/vestibulo.js +1276 -0
  320. package/dist/web/servidor/vestibulo.js.map +1 -0
  321. package/package.json +33 -9
  322. package/skills/archify/LICENSE +22 -0
  323. package/skills/archify/SKILL.md +109 -0
  324. package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
  325. package/skills/archify/assets/template.html +14787 -0
  326. package/skills/archify/bin/archify.mjs +1990 -0
  327. package/skills/archify/bin/open-artifact.mjs +86 -0
  328. package/skills/archify/bin/preview.mjs +648 -0
  329. package/skills/archify/bin/visual-check.mjs +829 -0
  330. package/skills/archify/brand-marks/README.md +31 -0
  331. package/skills/archify/brand-marks/catalog.json +131 -0
  332. package/skills/archify/delta/architecture-delta.mjs +1214 -0
  333. package/skills/archify/examples/agent-run.lifecycle.json +71 -0
  334. package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
  335. package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
  336. package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
  337. package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
  338. package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
  339. package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
  340. package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
  341. package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
  342. package/skills/archify/examples/event-stream.dataflow.json +57 -0
  343. package/skills/archify/examples/incident-response.workflow.json +64 -0
  344. package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
  345. package/skills/archify/examples/product-analytics.dataflow.json +76 -0
  346. package/skills/archify/examples/production-deployment.architecture.json +71 -0
  347. package/skills/archify/examples/release-delivery.workflow.json +62 -0
  348. package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
  349. package/skills/archify/examples/web-app-rendered.html +14862 -0
  350. package/skills/archify/examples/web-app.architecture.json +46 -0
  351. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
  352. package/skills/archify/migrations/workflow-v2.mjs +279 -0
  353. package/skills/archify/package.json +17 -0
  354. package/skills/archify/recipes/scenarios.mjs +391 -0
  355. package/skills/archify/references/authoring-contract.md +198 -0
  356. package/skills/archify/references/brand-marks.md +69 -0
  357. package/skills/archify/references/delivery-contract.md +116 -0
  358. package/skills/archify/references/viewer-runtime.md +45 -0
  359. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  360. package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
  361. package/skills/archify/renderers/dataflow/README.md +104 -0
  362. package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  363. package/skills/archify/renderers/lifecycle/README.md +115 -0
  364. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  365. package/skills/archify/renderers/sequence/README.md +114 -0
  366. package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
  367. package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
  368. package/skills/archify/renderers/shared/cli.mjs +218 -0
  369. package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
  370. package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
  371. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  372. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  373. package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
  374. package/skills/archify/renderers/shared/geometry.mjs +1423 -0
  375. package/skills/archify/renderers/shared/i18n.mjs +594 -0
  376. package/skills/archify/renderers/shared/layout-report.mjs +40 -0
  377. package/skills/archify/renderers/shared/legend.mjs +217 -0
  378. package/skills/archify/renderers/shared/output-path.mjs +321 -0
  379. package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
  380. package/skills/archify/renderers/shared/text-fit.mjs +49 -0
  381. package/skills/archify/renderers/shared/utils.mjs +232 -0
  382. package/skills/archify/renderers/shared/validator.mjs +86 -0
  383. package/skills/archify/renderers/workflow/README.md +223 -0
  384. package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
  385. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  386. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  387. package/skills/archify/schemas/README.md +211 -0
  388. package/skills/archify/schemas/architecture.schema.json +176 -0
  389. package/skills/archify/schemas/common.schema.json +115 -0
  390. package/skills/archify/schemas/dataflow.schema.json +243 -0
  391. package/skills/archify/schemas/lifecycle.schema.json +266 -0
  392. package/skills/archify/schemas/sequence.schema.json +223 -0
  393. package/skills/archify/schemas/workflow.schema.json +428 -0
  394. package/skills/archify/scripts/check-render-output.mjs +835 -0
  395. package/skills/archify/scripts/check-update.mjs +1667 -0
  396. package/skills/archify/scripts/render-examples.mjs +26 -0
  397. package/skills/archify/scripts/update-contract.mjs +182 -0
  398. package/skills/archify/skill-release.json +10 -0
  399. package/skills/artifacts-builder/SKILL.md +120 -0
  400. package/skills/artifacts-builder/reference/diagramas.md +123 -0
  401. package/skills/artifacts-builder/reference/estilo.md +123 -0
  402. package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
  403. package/skills/artifacts-builder/reference/graficas.md +22 -0
  404. package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
  405. package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
  406. package/skills/xone-hotswap/SKILL.md +185 -0
  407. package/skills/xone-hotswap/references/comandos.md +706 -0
  408. package/skills/xone-hotswap/references/conexion-y-despliegue.md +226 -0
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Poner una app en el dispositivo y dejarla ARRANCADA: el recorrido entero, fase a fase.
3
+ *
4
+ * Es la mitad que EJECUTA lo que decide la pestaña «Ejecutar»: el túnel de `adb`, el ZIP del
5
+ * proyecto, la subida, el reinicio del framework y —por el canal de `/hotswap`— el lanzamiento
6
+ * con la lectura que dice si de verdad está viva.
7
+ *
8
+ * **Las fases, y por qué ese orden** (el de arriba abajo es el del código, y no es casual):
9
+ *
10
+ * 1. **`comprobando`.** El túnel PRIMERO, porque sin él `127.0.0.1:8443` no lleva a ninguna
11
+ * parte: el servidor escucha en el `localhost` del aparato, y quien lo trae aquí es
12
+ * `adb forward`. **Se aplica siempre y NO se quita al terminar**: se reaplica tras cada
13
+ * reconexión del cable, así que quitarlo dejaría el SIGUIENTE lanzamiento hablando con
14
+ * nadie. Y va antes de la comprobación del framework porque un aparato al que no se llega
15
+ * falla aquí con la línea de `adb`, que es justo el diagnóstico de ese caso.
16
+ * 2. **`empaquetando`.** El ZIP, porque subir es lo que pone los ficheros nuevos en el
17
+ * aparato. Es síncrono y en memoria: no hay fichero temporal.
18
+ * 3. **`subiendo`.** **Subir NO aplica**: el proceso del framework tiene cargado lo de antes,
19
+ * y el ZIP no limpia el destino —añade y sobrescribe, así que los `-wal` de una base vieja
20
+ * se quedan ahí—. Por eso no viaja `bd/`, y por eso esto no es el final del recorrido.
21
+ * 4. **`reiniciando`.** Es lo ÚNICO que aplica lo subido. Y es `SetupActivity`, **nunca
22
+ * `.mainEntry`**: medido, `.mainEntry` no levanta el servidor.
23
+ * 5. **`lanzando`.** El lanzamiento por el WebSocket, esperando el saludo del servidor. Entra
24
+ * por `deps.abrirSocket`, que es el CONSTRUCTOR del socket —así se llama en el módulo al que
25
+ * alimenta—: el cliente de `/hotswap` ya está escrito y medido en `agent/hotswap.ts`, y `ws`
26
+ * no se importa aquí.
27
+ * 6. **`comprobando-arranque`.** La LECTURA, porque `{"result":true}` de `launchApplication`
28
+ * significa «aceptado», no «arrancó»: lo que dice si está viva es el árbol de controles.
29
+ *
30
+ * **El efecto de la subida va por `node:https`, y el porqué.** Ni `fetch` con un `dispatcher`
31
+ * de `undici` —`undici` no es dependencia de este repo— ni `NODE_TLS_REJECT_UNAUTHORIZED=0`,
32
+ * que desactivaría la confianza **para todo el proceso**, proveedores de modelo y CloudStudio
33
+ * incluidos: una variable de entorno no distingue a quién le estás hablando. `node:https` deja
34
+ * el `rejectUnauthorized` en ESTA petición (el certificado del aparato es autofirmado), deja
35
+ * poner `Content-Length` y manda el ZIP desde memoria, sin fichero temporal.
36
+ *
37
+ * **El silencio es el síntoma, no la lentitud** (`TOPE_SIN_SALIDA_MS`): `adb` contesta en
38
+ * milisegundos, y lo que no es normal es que se quede callado minutos. Con `TOPE_DE_TRABAJO_MS`
39
+ * por encima, para que un proceso que habla sin avanzar no se quede para siempre.
40
+ *
41
+ * **Se mata el GRUPO y no el hijo** (`detached: true` + `kill(-pid)`): medido, un nieto
42
+ * sobrevive a `child.kill()`.
43
+ *
44
+ * **Todos los efectos entran por `deps`.** `npm test` no lanza un `adb`, ni abre un socket, ni
45
+ * toca la red: el ZIP, la subida, el framework y el canal de `/hotswap` son puertos, y sus
46
+ * dobles viven en el test. El único `node:https` de verdad es el que se usa cuando nadie pasa
47
+ * un doble.
48
+ *
49
+ * **Y el puerto 8443 es el de FÁBRICA, no una garantía**: si el del aparato está ocupado, el
50
+ * servidor coge el siguiente libre y el real se ve en la pantalla del framework. Esto se
51
+ * implementa contra 8443 y se anota; leer el puerto real no está implementado.
52
+ */
53
+ import { request } from "node:https";
54
+ import { existsSync } from "node:fs";
55
+ import { homedir } from "node:os";
56
+ import { frameworkEnDispositivo, localizadorDeAndroid, } from "./dispositivosEnMaquina.js";
57
+ import { lanzarYComprobar } from "./hotswap.js";
58
+ import { crearEjecutor, TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS, unaLinea, } from "./procesosEnMaquina.js";
59
+ import { empaquetarProyecto, enMegas } from "./paqueteDelProyecto.js";
60
+ /**
61
+ * Los dos topes son los MISMOS de la instalación, y se reexportan desde aquí para que no haya
62
+ * una segunda copia de los números: son la misma regla —el silencio es el síntoma— sobre el
63
+ * mismo tipo de proceso. Viven con el ejecutor que los arma (`procesosEnMaquina.ts`), que es el
64
+ * que usan los dos módulos.
65
+ */
66
+ export { TOPE_DE_TRABAJO_MS, TOPE_SIN_SALIDA_MS };
67
+ /**
68
+ * El puerto del servidor del framework. El de fábrica: ver el docstring del módulo.
69
+ *
70
+ * El mismo número para el `adb forward` y para la subida, y no dos constantes: son las dos
71
+ * puntas del MISMO túnel, y escribirlas por separado dejaría un lanzamiento hablando por un
72
+ * agujero y subiendo por otro.
73
+ */
74
+ const PUERTO_DEL_SERVIDOR = 8443;
75
+ /**
76
+ * El nombre EXACTO del ZIP. La extracción automática se dispara **solo** con este nombre, y con
77
+ * él `appName` pasa a ser obligatorio (sin él: `400`). Se extrae en `app_<appName-en-minúsculas>`.
78
+ */
79
+ const NOMBRE_DEL_ZIP = "debug_app_update.zip";
80
+ /**
81
+ * La actividad que LEVANTA el servidor del framework. **`.mainEntry` no sirve**: medido, no
82
+ * levanta el servidor, y con él el `/hotswap` no existe y el lanzamiento se queda sin canal.
83
+ */
84
+ const ACTIVIDAD_DEL_SERVIDOR = "com.xone.android.hotswap.activities.SetupActivity";
85
+ export const FASES_DE_LANZAMIENTO = [
86
+ "comprobando",
87
+ "empaquetando",
88
+ "subiendo",
89
+ "reiniciando",
90
+ "lanzando",
91
+ "comprobando-arranque",
92
+ ];
93
+ /**
94
+ * Los motivos de la tabla medida (`skills/xone-hotswap/references/conexion-y-despliegue.md` §7),
95
+ * uno por código. **Ninguna frase lleva el cuerpo de la respuesta**, y ninguna dice «error»:
96
+ * cada una dice qué pasó y de quién es el problema.
97
+ */
98
+ const MOTIVO_POR_CODIGO = {
99
+ 400: "el servidor rechazó la subida: falta el nombre de la app o el tamaño no cuadra",
100
+ 403: "el servidor rechazó el nombre de la app o la ruta",
101
+ 405: "el servidor no acepta POST en esa ruta",
102
+ 409: "en el dispositivo hay un directorio donde iba la app",
103
+ 411: "el servidor pidió el tamaño del cuerpo y no se lo mandamos",
104
+ 413: "el ZIP pasa de 512 MiB",
105
+ 500: "el dispositivo no pudo crear el directorio, extraer o mover el fichero",
106
+ };
107
+ /** El `200` es el único que no es un rechazo. Y un código que no está en la tabla se CUENTA. */
108
+ export function motivoDeSubida(codigo) {
109
+ if (codigo === 200)
110
+ return undefined;
111
+ return MOTIVO_POR_CODIGO[codigo] ?? `subida rechazada (${codigo})`;
112
+ }
113
+ /**
114
+ * La ruta de la subida, con la query. `appName` va escapado: un nombre con un espacio, un `&`
115
+ * o un `#` partiría la query y el servidor leería otro nombre —o ninguno— sin decir nada.
116
+ */
117
+ export function rutaDeSubida(app) {
118
+ return `/file_upload?file=${NOMBRE_DEL_ZIP}&appName=${encodeURIComponent(app)}`;
119
+ }
120
+ /**
121
+ * Las cabeceras de la subida. `Content-Length` es obligatoria (sin ella: `411`).
122
+ *
123
+ * Y el `Content-Type` **está medido**, no supuesto: el comando que se midió funcionando la primera
124
+ * vez era un `curl --data-binary`, cuyo `Content-Type` por omisión es
125
+ * `application/x-www-form-urlencoded`, así que durante una pasada esto se declaró sin afirmarse.
126
+ * Ya se subió de verdad con `application/octet-stream` y el servidor contestó `200` **con los bytes
127
+ * enteros** — el `md5` de `LoginColl.xne` y de `app.xml` en el aparato coincide con el del proyecto
128
+ * en disco, y con eso subido la app arranca—, así que el cuerpo no se interpreta como formulario.
129
+ * Es lo correcto para bytes y es lo que vale; la medida entera está en `docs/DECISIONES.md`.
130
+ */
131
+ export function cabecerasDeSubida(bytes) {
132
+ return {
133
+ "Content-Length": String(bytes.length),
134
+ "Content-Type": "application/octet-stream",
135
+ };
136
+ }
137
+ /**
138
+ * Las opciones de la petición, en UNA función que se puede mirar sin abrir nada.
139
+ *
140
+ * Existe para que la decisión de TLS y de método sea comprobable: `rejectUnauthorized: false`
141
+ * es el certificado autofirmado del aparato, y el destino es un túnel de `adb` en loopback.
142
+ * Un test que hablara con un servidor de verdad para comprobarlo necesitaría red y un
143
+ * certificado; esto se lee.
144
+ */
145
+ export function opcionesDeSubida(peticion, senal) {
146
+ return {
147
+ host: peticion.host,
148
+ port: peticion.puerto,
149
+ path: peticion.ruta,
150
+ method: peticion.metodo,
151
+ headers: peticion.cabeceras,
152
+ timeout: TOPE_DE_TRABAJO_MS,
153
+ signal: senal,
154
+ rejectUnauthorized: false,
155
+ };
156
+ }
157
+ /**
158
+ * El recorrido entero, lanzado. Devuelve el trabajo en curso: se puede cancelar mientras corre.
159
+ *
160
+ * **Nunca lanza.** Todo lo que puede ir mal —no hay `adb`, no hay framework, el paquete no se
161
+ * puede montar, el servidor contesta un código, el proceso se queda callado— vuelve como un
162
+ * `ResultadoDeLanzamiento` con su fase y su línea de motivo: quien llama está atendiendo una
163
+ * petición del navegador y un aparato que no contesta no es una excepción del programa.
164
+ */
165
+ export function lanzarEnDispositivo(peticion, deps = {}) {
166
+ const plataforma = deps.plataforma ?? process.platform;
167
+ const entorno = deps.entorno ?? process.env;
168
+ const home = deps.home ?? homedir();
169
+ const existe = deps.existe ?? existsSync;
170
+ const marco = deps.frameworkEnDispositivo ?? frameworkEnDispositivo;
171
+ const empaquetar = deps.empaquetarProyecto ?? empaquetarProyecto;
172
+ const subir = deps.subir ?? subirReal;
173
+ const ahora = deps.ahora ?? (() => Date.now());
174
+ const t0 = ahora();
175
+ // El ejecutor de procesos es el MISMO de la receta de instalación (`procesosEnMaquina.ts`):
176
+ // los `adb` de aquí necesitan exactamente los topes, el troceado por líneas y el `kill` del
177
+ // grupo que ya estaban escritos allí. `lanzar` y `matarGrupo` siguen siendo puertos de este
178
+ // módulo, y entran por aquí.
179
+ const ejecutor = crearEjecutor({ lanzar: deps.lanzar, matarGrupo: deps.matarGrupo, entorno });
180
+ const decir = (fase, linea) => deps.alFase?.(fase, linea);
181
+ const acabar = (fase, desenlace) => {
182
+ // El motivo ES una línea que merece contarse: el log de la pestaña acabaría sin decir por
183
+ // qué, y un recorrido que se para en silencio se lee como que se ha colgado.
184
+ const motivo = desenlace.estado === "fallo" || desenlace.estado === "colgada" ? desenlace.motivo : undefined;
185
+ if (motivo !== undefined)
186
+ decir(fase, motivo);
187
+ return { estado: desenlace.estado, fase, ...(motivo === undefined ? {} : { motivo }), ms: ahora() - t0 };
188
+ };
189
+ let cancelado = false;
190
+ /** La subida en vuelo, para poder abortarla. */
191
+ let abortar;
192
+ /**
193
+ * El aviso de cancelación, y el porqué: `lanzarYComprobar` es dueño de su socket y no acepta
194
+ * una cancelación, así que sin esto un «Cancelar» durante el sondeo esperaría hasta 60 s. Y lo
195
+ * mismo vale para el reintento con que abre el canal —el que espera a que el framework
196
+ * reiniciado escuche—, que se rige por su propio tope.
197
+ * El precio, declarado: el canal se cierra con SU tope, no con el nuestro.
198
+ */
199
+ let avisarCancelacion;
200
+ const cancelacion = new Promise((cumplir) => {
201
+ avisarCancelacion = cumplir;
202
+ });
203
+ const terminado = (async () => {
204
+ // ---- 1. comprobando: el túnel, y luego el framework --------------------------------
205
+ const adb = localizadorDeAndroid({ plataforma, entorno, home, existe }).enSdk("adb", "platform-tools");
206
+ if (adb === undefined) {
207
+ return acabar("comprobando", { estado: "fallo", motivo: "no está adb: sin él no se llega al dispositivo" });
208
+ }
209
+ const serial = peticion.dispositivo.id;
210
+ const tunel = await unProceso("comprobando", adb, [
211
+ "-s",
212
+ serial,
213
+ "forward",
214
+ `tcp:${PUERTO_DEL_SERVIDOR}`,
215
+ `tcp:${PUERTO_DEL_SERVIDOR}`,
216
+ ]);
217
+ if (tunel.estado !== "ok")
218
+ return acabar("comprobando", tunel);
219
+ decir("comprobando", `túnel aplicado: 127.0.0.1:${PUERTO_DEL_SERVIDOR} es el aparato ${serial}`);
220
+ const instalado = await marco(peticion.dispositivo, { plataforma, entorno, home, existe });
221
+ if (!instalado.instalado || instalado.paquete === undefined) {
222
+ // El `detalle` es una línea que ya existe y dice qué se buscó y qué se encontró.
223
+ return acabar("comprobando", { estado: "fallo", motivo: instalado.detalle });
224
+ }
225
+ // El paquete del framework es lo que reinicia, y sale de la MEDIDA de este aparato: los dos
226
+ // flavors tienen nombres distintos y un valor a fuego lanzaría el de otro.
227
+ const delFramework = instalado.paquete;
228
+ decir("comprobando", instalado.detalle);
229
+ // ---- 2. empaquetando ----------------------------------------------------------------
230
+ let paquete;
231
+ try {
232
+ paquete = empaquetar(peticion.raiz);
233
+ }
234
+ catch (error) {
235
+ return acabar("empaquetando", { estado: "fallo", motivo: unaLineaDeLaSubida(error) });
236
+ }
237
+ if (cancelado)
238
+ return acabar("empaquetando", { estado: "cancelada" });
239
+ decir("empaquetando", `el paquete son ${enMegas(paquete.total)} en ${paquete.ficheros.length} ficheros`);
240
+ // ---- 3. subiendo --------------------------------------------------------------------
241
+ const bytes = paquete.bytes;
242
+ decir("subiendo", `subiendo ${NOMBRE_DEL_ZIP} (${enMegas(bytes.length)}) a 127.0.0.1:${PUERTO_DEL_SERVIDOR}`);
243
+ abortar = new AbortController();
244
+ let respuesta;
245
+ try {
246
+ respuesta = await subir({
247
+ host: "127.0.0.1",
248
+ puerto: PUERTO_DEL_SERVIDOR,
249
+ ruta: rutaDeSubida(peticion.app),
250
+ metodo: "POST",
251
+ cabeceras: cabecerasDeSubida(bytes),
252
+ cuerpo: bytes,
253
+ }, abortar.signal);
254
+ }
255
+ catch (error) {
256
+ if (cancelado)
257
+ return acabar("subiendo", { estado: "cancelada" });
258
+ return acabar("subiendo", { estado: "fallo", motivo: unaLineaDeLaSubida(error) });
259
+ }
260
+ finally {
261
+ abortar = undefined;
262
+ }
263
+ if (cancelado)
264
+ return acabar("subiendo", { estado: "cancelada" });
265
+ const rechazo = motivoDeSubida(respuesta.codigo);
266
+ if (rechazo !== undefined)
267
+ return acabar("subiendo", { estado: "fallo", motivo: rechazo });
268
+ decir("subiendo", "el servidor aceptó la subida: los ficheros están en el aparato, sin aplicar");
269
+ // ---- 4. reiniciando: lo único que APLICA lo subido ----------------------------------
270
+ decir("reiniciando", `parando ${delFramework}`);
271
+ const parada = await unProceso("reiniciando", adb, ["-s", serial, "shell", "am", "force-stop", delFramework]);
272
+ if (parada.estado !== "ok")
273
+ return acabar("reiniciando", parada);
274
+ decir("reiniciando", "arrancando la pantalla del servidor de hotswap, que levanta el canal");
275
+ const arranqueDeLaPantalla = await unProceso("reiniciando", adb, [
276
+ "-s",
277
+ serial,
278
+ "shell",
279
+ "am",
280
+ "start",
281
+ "-n",
282
+ `${delFramework}/${ACTIVIDAD_DEL_SERVIDOR}`,
283
+ ]);
284
+ if (arranqueDeLaPantalla.estado !== "ok")
285
+ return acabar("reiniciando", arranqueDeLaPantalla);
286
+ // ---- 5 y 6. lanzando, y la LECTURA que decide ---------------------------------------
287
+ decir("lanzando", `lanzando ${peticion.app} por el canal /hotswap`);
288
+ const veredicto = await Promise.race([
289
+ lanzarYComprobar(peticion.app, {
290
+ abrirSocket: deps.abrirSocket,
291
+ // Las líneas del canal se cuelgan de la fase del lanzamiento: son suyas, y el saludo
292
+ // del servidor con su `protocol_version` es parte de lo que hay que poder leer.
293
+ alLinea: (linea) => decir("lanzando", linea),
294
+ }),
295
+ cancelacion.then(() => undefined),
296
+ ]);
297
+ if (veredicto === undefined || cancelado)
298
+ return acabar("lanzando", { estado: "cancelada" });
299
+ if (!veredicto.viva) {
300
+ // El motivo es la frase LITERAL del framework, sin traducir: es lo único que dice QUÉ
301
+ // pasó, y traducirla perdería justo el dato que hace falta para diagnosticar.
302
+ return acabar("comprobando-arranque", { estado: "fallo", motivo: veredicto.motivo ?? "no arrancó" });
303
+ }
304
+ decir("comprobando-arranque", "la app está viva: el framework contestó su árbol de controles");
305
+ return acabar("comprobando-arranque", { estado: "ok" });
306
+ })();
307
+ /**
308
+ * Un `adb` y su salida en vivo, por el ejecutor COMPARTIDO (`procesosEnMaquina.ts`): los
309
+ * topes, el troceado por líneas y el `kill` del GRUPO son los mismos que los de la receta, y
310
+ * por los mismos motivos. Aquí solo se le dice a qué fase pertenecen sus líneas y se traduce
311
+ * su desenlace; el que esté en vuelo lo cancela el propio ejecutor.
312
+ */
313
+ function unProceso(fase, bin, args) {
314
+ return ejecutor.correr(bin, args, { alSalirLinea: (linea) => decir(fase, linea) }).then(desenlaceDe);
315
+ }
316
+ return {
317
+ cancelar: () => {
318
+ cancelado = true;
319
+ avisarCancelacion?.();
320
+ abortar?.abort();
321
+ ejecutor.cancelar();
322
+ },
323
+ terminado,
324
+ };
325
+ }
326
+ /**
327
+ * La subida de verdad, en una petición y sin fichero temporal. El cuerpo NO se lee —solo el
328
+ * código—, y por eso no hay nada que pueda acabar en una frase de log.
329
+ */
330
+ const subirReal = (peticion, senal) => new Promise((resolver, fallar) => {
331
+ const peticionHttp = request(opcionesDeSubida(peticion, senal), (respuesta) => {
332
+ // Se drena la respuesta para que el socket se cierre: dejarla a medias mantiene la
333
+ // conexión abierta y el servidor esperando.
334
+ respuesta.resume();
335
+ resolver({ codigo: respuesta.statusCode ?? 0 });
336
+ });
337
+ peticionHttp.on("error", fallar);
338
+ peticionHttp.on("timeout", () => {
339
+ peticionHttp.destroy(new Error(`no respondió en ${Math.round(TOPE_DE_TRABAJO_MS / 60_000)} min`));
340
+ });
341
+ peticionHttp.end(peticion.cuerpo);
342
+ });
343
+ /**
344
+ * Una línea, con la frase que solo tiene sentido en ESTE canal encima de la genérica.
345
+ *
346
+ * El caso de `ECONNREFUSED` —el servidor vive dentro de la app, y sin app no hay servidor— es
347
+ * la MISMA frase, palabra por palabra, que la de `hotswap.ts`. Y es a propósito: es el mismo
348
+ * hecho, y leerlo de dos formas distintas según en qué fase se descubriera haría pensar que son
349
+ * dos fallos. `hotswap.ts` conserva la suya —su socket no es un proceso y allí se lee entera—
350
+ * y esta envuelve a la del ejecutor (`procesosEnMaquina.ts`) en vez de repetirla, que es como
351
+ * estas dos frases dejaron de ser dos copias que divergen.
352
+ */
353
+ function unaLineaDeLaSubida(error) {
354
+ const e = error;
355
+ if (e !== null && typeof e === "object" && e.code === "ECONNREFUSED") {
356
+ return "no hay nadie escuchando ahí: el servidor vive dentro de la app, y sin app no hay servidor";
357
+ }
358
+ return unaLinea(error);
359
+ }
360
+ /**
361
+ * La frase de un cuelgue. **No es lo mismo callarse que dar vueltas**: un proceso que no dice
362
+ * nada está esperando a alguien que no está —un prompt, un permiso—, y uno que habla y no
363
+ * acaba está dando vueltas. La causa la devuelve el ejecutor y la frase se escribe aquí, que es
364
+ * de quien es el diagnóstico.
365
+ */
366
+ function motivoDelCuelgue(causa) {
367
+ return causa === "silencio"
368
+ ? `no dijo nada en ${Math.round(TOPE_SIN_SALIDA_MS / 60_000)} min`
369
+ : `no terminó en ${Math.round(TOPE_DE_TRABAJO_MS / 60_000)} min`;
370
+ }
371
+ /** Lo que dijo el ejecutor, en el vocabulario de este recorrido. La fase la pone quien llama. */
372
+ function desenlaceDe(fin) {
373
+ if (fin.estado === "colgada")
374
+ return { estado: "colgada", motivo: motivoDelCuelgue(fin.cuelgue) };
375
+ return fin;
376
+ }
377
+ //# sourceMappingURL=lanzamientoEnMaquina.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lanzamientoEnMaquina.js","sourceRoot":"","sources":["../../src/agent/lanzamientoEnMaquina.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Todos los directorios antepasados de una ruta, del más profundo al más superficial.
3
+ *
4
+ * No basta con el padre inmediato: si el truncado esconde un directorio HERMANO del que
5
+ * sí sobrevivió (p. ej. "a/d/" cuando solo asomó "a/b/c.txt"), solo pedir "a/b" nunca
6
+ * llega a pedir "a", y "a/d/e.txt" se queda sin enumerar. Encolar la cadena entera de
7
+ * ancestros es lo que recupera esos hermanos.
8
+ */
9
+ const ancestrosDe = (ruta) => {
10
+ const partes = ruta.split("/");
11
+ const ancestros = [];
12
+ for (let i = partes.length - 1; i > 0; i--) {
13
+ ancestros.push(partes.slice(0, i).join("/"));
14
+ }
15
+ return ancestros;
16
+ };
17
+ export async function enumerarRemoto(puerto) {
18
+ const vistas = new Map();
19
+ const noEnumerados = [];
20
+ const pendientes = [""];
21
+ const visitados = new Set();
22
+ let raizTruncada = false;
23
+ while (pendientes.length > 0) {
24
+ const directorio = pendientes.shift();
25
+ if (visitados.has(directorio))
26
+ continue;
27
+ visitados.add(directorio);
28
+ let respuesta;
29
+ try {
30
+ respuesta = await puerto.estructura(directorio === "" ? undefined : directorio);
31
+ }
32
+ catch {
33
+ // El motivo no se propaga al mensaje: puede traer rutas del servidor. Basta con
34
+ // saber QUÉ no se enumeró, que es lo que condiciona el candado.
35
+ noEnumerados.push(directorio);
36
+ continue;
37
+ }
38
+ // Solo la raíz importa aquí: un directorio truncado cualquiera lo sortea el propio
39
+ // recorrido pidiendo sus ancestros, pero un hermano de primer nivel que la raíz deja
40
+ // fuera y que ningún fichero visto menciona nunca llega a pedirse.
41
+ if (directorio === "" && respuesta.truncado)
42
+ raizTruncada = true;
43
+ for (const entrada of respuesta.entradas) {
44
+ vistas.set(entrada.ruta, entrada.bytes);
45
+ // Cada directorio antepasado se vuelve a pedir por su cuenta: si esta respuesta
46
+ // venía truncada, el recorrido por subdirectorios recupera lo que faltó — incluidos
47
+ // hermanos que no llegaron a asomar en absoluto en la respuesta truncada.
48
+ for (const ancestro of ancestrosDe(entrada.ruta)) {
49
+ if (!visitados.has(ancestro))
50
+ pendientes.push(ancestro);
51
+ }
52
+ }
53
+ }
54
+ const manifiesto = [...vistas.entries()]
55
+ .map(([ruta, bytes]) => ({ ruta, bytes }))
56
+ .sort((a, b) => a.ruta.localeCompare(b.ruta));
57
+ return { manifiesto, noEnumerados, raizTruncada };
58
+ }
59
+ //# sourceMappingURL=manifiesto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifiesto.js","sourceRoot":"","sources":["../../src/agent/manifiesto.ts"],"names":[],"mappings":"AA0BA;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,CAAC,IAAY,EAAY,EAAE;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,GAAa,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAG,CAAC;QACvC,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QACxC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE1B,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,gFAAgF;YAChF,gEAAgE;YAChE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,mFAAmF;QACnF,qFAAqF;QACrF,mEAAmE;QACnE,IAAI,UAAU,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ;YAAE,YAAY,GAAG,IAAI,CAAC;QAEjE,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,gFAAgF;YAChF,oFAAoF;YACpF,0EAA0E;YAC1E,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * La memoria que pertenece al proyecto, no a una sesión ni a la cuenta del usuario.
3
+ *
4
+ * Se guarda en `.xonecode/memoria.md` para viajar con el proyecto si el usuario quiere
5
+ * versionarla, pero el agente la conoce mediante una sola ruta virtual segura. Ni
6
+ * `config.json` ni otros ficheros internos quedan expuestos por esta costura.
7
+ */
8
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { NOMBRE_CARPETA } from "./configEnDisco.js";
11
+ export const NOMBRE_ARCHIVO_MEMORIA = "memoria.md";
12
+ /** Ruta que ve el agente dentro de su backend virtual. */
13
+ export const RUTA_MEMORIA_VIRTUAL = "/MEMORIA_PROYECTO.md";
14
+ /** Ruta real dentro del backend virtual; nunca se enseña al agente. */
15
+ export const RUTA_MEMORIA_INTERNA = `/${NOMBRE_CARPETA}/${NOMBRE_ARCHIVO_MEMORIA}`;
16
+ /** Almacén interno de los historiales que DeepAgents ya ha resumido. */
17
+ export const RUTA_HISTORIAL_RESUMIDO = `/${NOMBRE_CARPETA}/conversation_history`;
18
+ export function rutaMemoriaDeProyecto(raiz) {
19
+ return join(raiz, NOMBRE_CARPETA, NOMBRE_ARCHIVO_MEMORIA);
20
+ }
21
+ export const PLANTILLA_MEMORIA = `# Memoria del proyecto
22
+
23
+ Esta memoria recoge solo hechos confirmados, decisiones acordadas y riesgos que ayudan a
24
+ continuar el trabajo. No es un transcript ni guarda secretos, credenciales o contenido de
25
+ ficheros completos.
26
+
27
+ ## Decisiones
28
+
29
+ - Aún no hay decisiones registradas.
30
+
31
+ ## Estado y convenciones
32
+
33
+ - Aún no hay estado persistente registrado.
34
+
35
+ ## Riesgos y pendientes
36
+
37
+ - Aún no hay riesgos o pendientes registrados.
38
+ `;
39
+ /**
40
+ * Crea la memoria inicial una sola vez. `flag: wx` es la barrera contra pisar una
41
+ * memoria existente, incluso si dos sesiones arrancan a la vez.
42
+ */
43
+ export function asegurarMemoriaDeProyecto(raiz) {
44
+ const ruta = rutaMemoriaDeProyecto(raiz);
45
+ if (existsSync(ruta))
46
+ return false;
47
+ mkdirSync(join(raiz, NOMBRE_CARPETA), { recursive: true });
48
+ try {
49
+ writeFileSync(ruta, PLANTILLA_MEMORIA, { encoding: "utf8", flag: "wx" });
50
+ return true;
51
+ }
52
+ catch (error) {
53
+ // Otra sesión pudo ganarnos entre existsSync y writeFileSync: su memoria es la que
54
+ // manda. Cualquier otro fallo (permiso, ruta inválida) debe llegar al llamador.
55
+ if (error && typeof error === "object" && "code" in error && error.code === "EEXIST")
56
+ return false;
57
+ throw error;
58
+ }
59
+ }
60
+ //# sourceMappingURL=memoriaDeProyecto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoriaDeProyecto.js","sourceRoot":"","sources":["../../src/agent/memoriaDeProyecto.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AACnD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,cAAc,IAAI,sBAAsB,EAAE,CAAC;AACnF,wEAAwE;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,cAAc,uBAAuB,CAAC;AAEjF,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,sBAAsB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;CAiBhC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,mFAAmF;QACnF,gFAAgF;QAChF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnG,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}