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
@@ -1,37 +1,17 @@
1
+ /**
2
+ * Los PERMISOS de un especialista, con tools de FICHERO (la v1 no usa MCP).
3
+ *
4
+ * Este fichero ya no tiene la lista de especialistas: los cuatro que vivían aquí a fuego
5
+ * son ahora ficheros `.md` (`core/agentes.ts`, `agent/agentesEnDisco.ts`), sembrados la
6
+ * primera vez y editables por el usuario. Lo que se queda es lo que NO puede salir de un
7
+ * fichero: qué se le deniega a todo el mundo, qué tools le tocan a quien escribe y cómo se
8
+ * monta su aprobación humana. Un `.md` puede cambiar el prompt de un agente; no puede
9
+ * concederle leer `/.env`.
10
+ */
11
+ import { artefactoFueraDeSitio } from "../core/artefactos.js";
1
12
  /** Las tools de fichero que monta deepagents sobre el backend. */
2
13
  export const TOOLS_LECTURA = ["ls", "read_file", "glob", "grep"];
3
14
  export const TOOLS_ESCRITURA = ["write_file", "edit_file"];
4
- export const PERFILES = {
5
- docs: {
6
- nombre: "docs",
7
- descripcion: "Responde preguntas técnicas de la plataforma XOne (XML/.xne, JavaScript, CSS, " +
8
- "eventos, patrones). Puede leer el proyecto para no contradecir el código real. " +
9
- "No modifica nada.",
10
- soloLectura: true,
11
- skills: ["xone-development"],
12
- },
13
- planner: {
14
- nombre: "planner",
15
- descripcion: "Inspecciona el proyecto real para anclar planes y diagnósticos: estructura, " +
16
- "colecciones y búsqueda de código. No modifica nada.",
17
- soloLectura: true,
18
- skills: ["xone-spec-builder", "xone-plan-builder"],
19
- },
20
- dev: {
21
- nombre: "dev",
22
- descripcion: "Desarrolla: crea y modifica colecciones, escribe scripts y edita ficheros. " +
23
- "Las modificaciones requieren aprobación humana.",
24
- soloLectura: false,
25
- skills: ["xone-development", "xone-debugging"],
26
- },
27
- mockup: {
28
- nombre: "mockup",
29
- descripcion: "Trabajo visual: layouts, CSS y recursos. Las modificaciones requieren " +
30
- "aprobación humana.",
31
- soloLectura: false,
32
- skills: ["xone-development"],
33
- },
34
- };
35
15
  /** Lo que estructuralmente da igual quién seas: nunca se lee ni se escribe. */
36
16
  export const DENEGADO_SIEMPRE = [
37
17
  {
@@ -39,6 +19,28 @@ export const DENEGADO_SIEMPRE = [
39
19
  paths: ["/.env", "/.env.*", "/.git", "/.git/**", "/.xonecode", "/.xonecode/**"],
40
20
  mode: "deny",
41
21
  },
22
+ // Las skills son instrucciones del harness, nunca ficheros que el agente pueda alterar.
23
+ { operations: ["write"], paths: ["/skills", "/skills/**"], mode: "deny" },
24
+ /**
25
+ * Los ADJUNTOS de una tarea (`core/adjuntos.ts`), de solo lectura por lo mismo que las
26
+ * skills: son material de ENTRADA —los documentos que anexó la persona que creó la
27
+ * tarea—, no ficheros que reescribir. Leerlos es justamente su razón de ser, así que la
28
+ * denegación es solo de `write`.
29
+ *
30
+ * **Y es incondicional, no «solo si están montados».** Medido contra deepagents 1.13.2:
31
+ * sin esta fila, un `write_file` a `/adjuntos/x.txt` en una consola donde la carpeta NO
32
+ * está montada escribe `<raiz>/adjuntos/x.txt` — o sea un fichero del proyecto, con un
33
+ * nombre que la interfaz presenta como «lo que te adjuntaron». Con la fila puesta, las dos
34
+ * situaciones contestan «permission denied» y el disco no se toca (también medido).
35
+ *
36
+ * Esta lista alcanza también al ORQUESTADOR desde el 9-09-2026, y antes no: su
37
+ * `createFilesystemMiddleware` se montaba sin `permissions`, así que las tres denegaciones
38
+ * de aquí eran decorativas para él y su `write_file` contestaba «Successfully wrote» a
39
+ * `/adjuntos/pwn.txt`, a `/skills/pwn.txt` y a `/.env`. Hoy recibe
40
+ * `permisosDe(PERFIL_DEL_ORQUESTADOR)`, que es de solo lectura; lo mide
41
+ * `xoneAgent.orquestador.test.ts`.
42
+ */
43
+ { operations: ["write"], paths: ["/adjuntos", "/adjuntos/**"], mode: "deny" },
42
44
  ];
43
45
  /**
44
46
  * Los permisos de un perfil. **Nunca los escribas a mano.**
@@ -52,8 +54,36 @@ export function permisosDe(perfil) {
52
54
  const base = [...DENEGADO_SIEMPRE];
53
55
  if (!perfil.soloLectura)
54
56
  return base;
57
+ // OJO para cuando el `xone-device-tester` sepa hablar con el móvil: este `/**` también deniega
58
+ // `/artefactos/**`, así que un agente de SOLO LECTURA no puede dejar una captura. Hoy no
59
+ // hay ningún productor de solo lectura, así que no se abre un hueco por si acaso — pero
60
+ // el día que lo haya, la excepción va aquí y antes hay que medir el orden de reglas de
61
+ // deepagents (¿gana la primera que casa, o gana la denegación?), porque de eso depende que
62
+ // un `allow` sobre `/artefactos/**` haga algo o sea decorativo.
55
63
  return [...base, { operations: ["write"], paths: ["/**"], mode: "deny" }];
56
64
  }
65
+ /**
66
+ * Barrera de lectura para tools propias.
67
+ *
68
+ * `FilesystemMiddleware` aplica `permisosDe()` a sus seis herramientas, pero
69
+ * una tool de LangChain añadida por xonecode no pasa por ese middleware. Las
70
+ * rutas protegidas se concentran aquí para que esas tools no abran por accidente
71
+ * `.env`, `.git` ni la carpeta interna del proyecto.
72
+ */
73
+ export function puedeLeerRuta(ruta) {
74
+ return !(ruta === "/.env" ||
75
+ ruta.startsWith("/.env.") ||
76
+ // También `.env` como CARPETA (`/.env/algo`), que no es lo mismo que `/.env.algo` y se
77
+ // caía por el hueco entre los dos: el punto y la barra son caracteres distintos. Salió de
78
+ // atar esta función con `DENEGADO_SIEMPRE` en `escrituraExterna.test.ts`. Raro, sí — pero
79
+ // de esta función depende también que `busquedaRegex` no lea ahí dentro, y denegar una
80
+ // carpeta que nadie tiene no cuesta nada.
81
+ ruta.startsWith("/.env/") ||
82
+ ruta === "/.git" ||
83
+ ruta.startsWith("/.git/") ||
84
+ ruta === "/.xonecode" ||
85
+ ruta.startsWith("/.xonecode/"));
86
+ }
57
87
  /**
58
88
  * Las tools de fichero que le corresponden a un perfil.
59
89
  *
@@ -96,8 +126,39 @@ export function hitlDe(perfil) {
96
126
  // El nombre del perfil va DENTRO de la descripción por necesidad: el interrupt que
97
127
  // llega al runner no dice de qué subagente viene, y `dev` y `mockup` comparten tools.
98
128
  description: `[${perfil.nombre}] quiere ${TEXTO_HITL[tool] ?? tool}`,
129
+ when: seDetieneEn,
99
130
  };
100
131
  }
101
132
  return salida;
102
133
  }
134
+ /**
135
+ * ¿Se para el turno a preguntar por ESTA escritura?
136
+ *
137
+ * El predicado `when` de `InterruptOnConfig` (leído en `langchain/agents/middleware/hitl`:
138
+ * «Returns `true` to interrupt or `false` to auto-approve the tool call»), y aquí existe
139
+ * para una sola cosa: **una escritura que el backend va a rechazar de todas formas no puede
140
+ * sacar un modal de aprobación.** Pasaba, y medido: pedir un artefacto en `/artifacts/`
141
+ * enseñaba el diff entero con Aprobar y Rechazar, y aprobarlo no escribía nada —
142
+ * `sinArtefactosEnElProyecto` lo rechaza después—. Un modal cuyo único final posible es un
143
+ * rechazo enseña a aprobar sin mirar, que es exactamente cómo se rompe la aprobación el día
144
+ * que importa.
145
+ *
146
+ * **Esto NO relaja la aprobación, y esa es la parte delicada.** No se salta la pregunta para
147
+ * escribir: se salta para NO escribir. La condición es la MISMA función que usa la guarda del
148
+ * backend —`artefactoFueraDeSitio`, sobre la misma cadena—, así que las dos no pueden
149
+ * discrepar; si discreparan, una escritura al proyecto pasaría sin que nadie la aprobara, que
150
+ * es el único fallo abierto posible por aquí. `perfiles.test.ts` lo ata: para cada ruta,
151
+ * saltarse la pregunta implica que la guarda la rechaza.
152
+ *
153
+ * Lo que pasa después es lo que se busca: la tool corre, el backend devuelve su `{error}` con
154
+ * la ruta buena, y el modelo reintenta en `/artefactos/`.
155
+ */
156
+ export function seDetieneEn(peticion) {
157
+ const args = peticion?.toolCall?.args;
158
+ const ruta = args?.["file_path"];
159
+ if (typeof ruta !== "string")
160
+ return true;
161
+ // Ante la duda, se PREGUNTA: es la dirección conservadora de siempre.
162
+ return artefactoFueraDeSitio(ruta) === undefined;
163
+ }
103
164
  //# sourceMappingURL=perfiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"perfiles.js","sourceRoot":"","sources":["../../src/agent/perfiles.ts"],"names":[],"mappings":"AAQA,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,WAAW,CAAU,CAAC;AAWpE,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM;QACd,WAAW,EACT,gFAAgF;YAChF,iFAAiF;YACjF,mBAAmB;QACrB,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,CAAC,kBAAkB,CAAC;KAC7B;IACD,OAAO,EAAE;QACP,MAAM,EAAE,SAAS;QACjB,WAAW,EACT,8EAA8E;YAC9E,qDAAqD;QACvD,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;KACnD;IACD,GAAG,EAAE;QACH,MAAM,EAAE,KAAK;QACb,WAAW,EACT,6EAA6E;YAC7E,iDAAiD;QACnD,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;KAC/C;IACD,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;QAChB,WAAW,EACT,wEAAwE;YACxE,oBAAoB;QACtB,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,CAAC,kBAAkB,CAAC;KAC7B;CACF,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B;QACE,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAU;QACtC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC;QAC/E,IAAI,EAAE,MAAe;KACtB;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,IAAI,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAU,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,WAAW;QACvB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QACpB,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,CAAC;AAC7C,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,GAA2B;IACzC,UAAU,EAAE,kCAAkC;IAC9C,SAAS,EAAE,mCAAmC;CAC/C,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,MAAM,GAAwE,EAAE,CAAC;IACvF,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,gBAAgB,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;YACvC,mFAAmF;YACnF,sFAAsF;YACtF,WAAW,EAAE,IAAI,MAAM,CAAC,MAAM,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;SACrE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"perfiles.js","sourceRoot":"","sources":["../../src/agent/perfiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * El nombre de quien programa, SOLO para el saludo del primer arranque
3
+ * (`apps/web/src/componentes/Bienvenida.tsx`). No es un dato de CloudStudio ni de la
4
+ * sesión: se resuelve en local, ANTES de que exista ninguna cuenta ni ningún login, y
5
+ * nunca viaja más allá de ese saludo — no entra en un acto, no se persiste en
6
+ * `.xonecode/sesiones/` ni en `config.json`, y `web/servidor/arranque.ts` lo manda
7
+ * suelto en el mensaje de alta, no dentro de nada que la sesión guarde.
8
+ *
9
+ * Orden de preferencia: `git config user.name` (el efectivo — repo si lo hay, si no
10
+ * global —, igual que `agent/gitSync.ts#valorDeConfig` resuelve la config de sincronía)
11
+ * y, si no hay, el usuario del sistema (`os.userInfo()`). Sin ninguno de los dos,
12
+ * `undefined` — nunca un nombre inventado como «usuario»: un saludo sin nombre es
13
+ * neutro, uno con un nombre que no es el tuyo parece un error.
14
+ */
15
+ import { execFileSync } from "node:child_process";
16
+ import { userInfo } from "node:os";
17
+ export function nombreDePersona(cwd) {
18
+ try {
19
+ const salida = execFileSync("git", ["config", "--get", "user.name"], {
20
+ cwd,
21
+ encoding: "utf8",
22
+ stdio: ["ignore", "pipe", "ignore"],
23
+ }).trim();
24
+ if (salida !== "")
25
+ return salida;
26
+ }
27
+ catch {
28
+ // Sin git en el PATH, sin ninguna config, o `user.name` sin poner: se cae al
29
+ // siguiente candidato en vez de propagar el fallo — esto es un saludo, no un dato
30
+ // del que dependa nada más.
31
+ }
32
+ try {
33
+ const nombre = userInfo().username.trim();
34
+ return nombre === "" ? undefined : nombre;
35
+ }
36
+ catch {
37
+ return undefined;
38
+ }
39
+ }
40
+ //# sourceMappingURL=persona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/agent/persona.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;YACnE,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;QAC7E,kFAAkF;QAClF,4BAA4B;IAC9B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * EL EJECUTOR DE PROCESOS DE LA MÁQUINA: lanzar, contar lo que dice, y saber en qué acabó.
3
+ *
4
+ * Existe por una duplicación MEDIDA y no por una intuición: `instalacionEnMaquina.ts` y
5
+ * `lanzamientoEnMaquina.ts` tenían este mismo ejecutor escrito dos veces —el `kill` del grupo
6
+ * con su caída al hijo, los dos topes, el troceado por líneas y la decisión de qué es
7
+ * «colgada»—, y ya habían empezado a divergir: la frase de `ECONNREFUSED` estaba en una y no
8
+ * en la otra, y el motivo del cuelgue lo distinguía una y la otra no. Un segundo sitio donde
9
+ * se decide CUÁNDO se mata a un proceso es un segundo sitio donde esa decisión puede dejar de
10
+ * estar, y ese es el patrón de fallo de esta casa.
11
+ *
12
+ * **Lo que NO unifica, y es a propósito: las FRASES.** De aquí sale la CAUSA del cuelgue
13
+ * —`silencio` o `total`— y cada módulo escribe la suya, porque no dicen lo mismo: «no dijo
14
+ * nada en N min» es un proceso esperando a alguien que no está, y «no terminó en N min» es uno
15
+ * que habla y da vueltas. Aplanarlas perdería justo el dato que se mira para saber qué pasó.
16
+ * El motivo de un código distinto de cero sí es el mismo en los dos, y vive aquí.
17
+ *
18
+ * **Todos los efectos entran por parámetro.** `npm test` no lanza un proceso: `lanzar` y
19
+ * `matarGrupo` son puertos, y sus valores POR OMISIÓN —los únicos de verdad, y los mismos para
20
+ * los dos módulos— son los que nadie pasa cuando esto corre sobre una máquina.
21
+ */
22
+ import { spawn } from "node:child_process";
23
+ /**
24
+ * Cuánto se aguanta SIN una sola línea de salida antes de darlo por colgado.
25
+ *
26
+ * No es un tope de duración: `sdkmanager` habla mientras descarga (porcentajes) y `adb`
27
+ * contesta en milisegundos, así que mientras diga algo se le espera lo que haga falta — una
28
+ * descarga de 3 GB por una línea lenta puede tardar media hora, y matarla por ser lenta sería
29
+ * peor que esperarla. Lo que no es normal es el SILENCIO: eso es un prompt esperando a alguien
30
+ * que no está.
31
+ */
32
+ export const TOPE_SIN_SALIDA_MS = 5 * 60_000;
33
+ /** Y un tope total, para que un proceso que habla sin avanzar no se quede para siempre. */
34
+ export const TOPE_DE_TRABAJO_MS = 60 * 60_000;
35
+ /** Un ejecutor con los efectos que le pasen. Sin nada, los de verdad. */
36
+ export function crearEjecutor(deps = {}) {
37
+ const lanzar = deps.lanzar ?? lanzarReal;
38
+ const matarGrupo = deps.matarGrupo ?? ((pid, senal) => void process.kill(-pid, senal));
39
+ const entorno = deps.entorno ?? process.env;
40
+ let cancelado = false;
41
+ /** El que esté VIVO ahora. Se limpia al cerrarse: matar a un muerto no arregla nada. */
42
+ let matarAlVivo;
43
+ /**
44
+ * **NO es `async`, y es deliberado.** Devuelve la promesa que resuelve el CIERRE, tal cual:
45
+ * un envoltorio `async` —o un `.then()` de más— mete un tick de microtarea entre el `close`
46
+ * de un proceso y lo que quien llama hace después, y hay un paso de la receta que son dos
47
+ * procesos encadenados, donde ese tick es la diferencia entre seguir en el mismo turno o
48
+ * dejar un hueco.
49
+ */
50
+ const correr = (binario, args, opciones = {}) => {
51
+ // Cancelado antes de arrancar: no se lanza nada, que es lo que se pidió. Un proceso que
52
+ // nace muerto gasta un `spawn` y ensucia el log de la ventana con una línea que no es.
53
+ if (cancelado)
54
+ return Promise.resolve({ estado: "cancelada" });
55
+ const alSalirLinea = opciones.alSalirLinea;
56
+ const env = opciones.env ?? entorno;
57
+ const teclear = opciones.teclear ?? [];
58
+ return new Promise((resolver) => {
59
+ let hijo;
60
+ try {
61
+ hijo = lanzar(binario, args, { env });
62
+ }
63
+ catch (error) {
64
+ resolver({ estado: "fallo", motivo: unaLinea(error) });
65
+ return;
66
+ }
67
+ /**
68
+ * Matar el GRUPO y no solo al hijo. Medido: `brew` lanza `curl` y `sdkmanager` lanza
69
+ * `java`, y con `child.kill()` el nieto seguía vivo descargando después de cancelar.
70
+ * Sin pid —los dobles de los tests no lo tienen— se cae a matar al hijo, que es lo que
71
+ * esto hacía siempre.
72
+ */
73
+ const matarArbol = (senal) => {
74
+ const pid = hijo.pid;
75
+ if (pid !== undefined) {
76
+ try {
77
+ matarGrupo(pid, senal);
78
+ return;
79
+ }
80
+ catch {
81
+ // El grupo ya no está o el sistema no deja: se intenta con el hijo.
82
+ }
83
+ }
84
+ hijo.kill(senal);
85
+ };
86
+ let cuelgue;
87
+ let sinSalida;
88
+ const rearmar = () => {
89
+ clearTimeout(sinSalida);
90
+ sinSalida = setTimeout(() => {
91
+ cuelgue = "silencio";
92
+ matarArbol("SIGKILL");
93
+ }, TOPE_SIN_SALIDA_MS);
94
+ };
95
+ const total = setTimeout(() => {
96
+ cuelgue = "total";
97
+ matarArbol("SIGKILL");
98
+ }, TOPE_DE_TRABAJO_MS);
99
+ rearmar();
100
+ matarAlVivo = () => matarArbol("SIGTERM");
101
+ if (cancelado)
102
+ matarAlVivo();
103
+ // Las líneas se parten aquí: un `data` no es una línea —puede traer media o tres—, y
104
+ // emitir trozos dejaría el log cortado por la mitad en la ventana.
105
+ let resto = "";
106
+ let ultima = "";
107
+ const trocear = (dato) => {
108
+ rearmar();
109
+ resto += String(dato);
110
+ const partes = resto.split(/\r?\n/);
111
+ resto = partes.pop() ?? "";
112
+ for (const linea of partes) {
113
+ const limpia = linea.trimEnd();
114
+ if (limpia === "")
115
+ continue;
116
+ ultima = limpia;
117
+ alSalirLinea?.(limpia);
118
+ }
119
+ };
120
+ hijo.stdout.on("data", trocear);
121
+ hijo.stderr.on("data", trocear);
122
+ // Lo que hay que teclear, de una vez: el prompt puede aparecer antes de que nadie mire.
123
+ // El lazo corre al menos una vez aunque no haya nada que teclear: el `stdin` se cierra
124
+ // igual, que es lo que hace un proceso sin entrada.
125
+ for (let i = 0; i < Math.max(1, opciones.repetir ?? 1); i++) {
126
+ for (const t of teclear)
127
+ hijo.stdin.write(t);
128
+ }
129
+ hijo.stdin.end();
130
+ hijo.on("error", ((error) => {
131
+ clearTimeout(sinSalida);
132
+ clearTimeout(total);
133
+ matarAlVivo = undefined;
134
+ resolver({ estado: "fallo", motivo: unaLinea(error) });
135
+ }));
136
+ hijo.on("close", ((codigo) => {
137
+ clearTimeout(sinSalida);
138
+ clearTimeout(total);
139
+ matarAlVivo = undefined;
140
+ // El cuelgue manda sobre el código: a un proceso al que se le mandó SIGKILL se le
141
+ // ocurre salir con cualquier cosa, y eso no es lo que pasó.
142
+ if (cuelgue !== undefined) {
143
+ resolver({ estado: "colgada", cuelgue });
144
+ return;
145
+ }
146
+ if (cancelado) {
147
+ resolver({ estado: "cancelada" });
148
+ return;
149
+ }
150
+ if (codigo === 0) {
151
+ resolver({ estado: "ok" });
152
+ return;
153
+ }
154
+ resolver({ estado: "fallo", motivo: motivoDelCodigo(codigo, ultima) });
155
+ }));
156
+ });
157
+ };
158
+ return {
159
+ correr,
160
+ cancelar: () => {
161
+ cancelado = true;
162
+ matarAlVivo?.();
163
+ },
164
+ };
165
+ }
166
+ /**
167
+ * Una línea, nunca la salida entera ni una traza con rutas.
168
+ *
169
+ * Es la de un proceso: `ENOENT` tiene frase propia porque «el ejecutable no existe» es lo que
170
+ * hay que leer, y el resto se corta en la primera línea. Un canal de RED pone su caso encima y
171
+ * cae aquí para lo demás (`lanzamientoEnMaquina.ts`), que es como se evita tener dos copias
172
+ * que ya divergieron una vez.
173
+ */
174
+ export function unaLinea(error) {
175
+ const e = error;
176
+ if (e !== null && typeof e === "object" && e.code === "ENOENT")
177
+ return "el ejecutable no existe";
178
+ const mensaje = e !== null && typeof e === "object" && typeof e.message === "string" ? e.message : String(error);
179
+ return mensaje.split(/\r?\n/)[0].slice(0, 160);
180
+ }
181
+ /**
182
+ * El motivo de un código distinto de cero. La última línea si dijo algo, y si no el código
183
+ * — que es todo lo que hay.
184
+ */
185
+ export function motivoDelCodigo(codigo, ultima) {
186
+ return ultima === "" ? `terminó con código ${codigo}` : ultima;
187
+ }
188
+ /**
189
+ * El hijo de verdad. Dos decisiones, las dos medidas:
190
+ *
191
+ * - **`detached: true`**, para que sea líder de su grupo y `kill(-pid)` se lleve también a
192
+ * los nietos: sin ello, cancelar dejaba el `curl` de `brew` descargando.
193
+ * - **`stdio[0]` sigue siendo un `pipe`**, porque `sdkmanager` necesita que se le teclee.
194
+ * Lo que hace que un `sudo` de dentro no cuelgue no es cerrar `stdin`: es no tener
195
+ * terminal de CONTROL, que es de donde `sudo` lee la contraseña — y con `detached` no lo
196
+ * tiene ni por herencia.
197
+ *
198
+ * Es el valor POR OMISIÓN de `crearEjecutor`, y el único `spawn` de los dos módulos: la receta
199
+ * de instalación y el `adb` del lanzamiento necesitan exactamente estas dos cosas por los
200
+ * mismos motivos, y un segundo `spawn` sería un segundo sitio donde el `detached` puede dejar
201
+ * de estar —y ese día el `kill(-pid)` de un sitio mataría a un grupo que no existe—.
202
+ */
203
+ export const lanzarReal = (binario, args, opciones) => spawn(binario, args, { env: opciones.env, stdio: ["pipe", "pipe", "pipe"], detached: true });
204
+ //# sourceMappingURL=procesosEnMaquina.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procesosEnMaquina.js","sourceRoot":"","sources":["../../src/agent/procesosEnMaquina.ts"],"names":[],"mappings":"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"}