xonecode 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/README.md +49 -7
  2. package/THIRD_PARTY_NOTICES.md +128 -0
  3. package/apps/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/apps/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/apps/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/apps/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/apps/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/apps/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/apps/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/apps/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/apps/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/apps/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/apps/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/apps/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/apps/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/apps/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/apps/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/apps/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/apps/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/apps/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/apps/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/apps/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/apps/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/apps/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/apps/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/apps/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/apps/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/apps/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/apps/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/apps/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/apps/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/apps/web/dist/assets/c-BIGW1oBm.js +1 -0
  63. package/apps/web/dist/assets/cpp-DddhVWhK.js +1 -0
  64. package/apps/web/dist/assets/csharp-DSvCPggb.js +1 -0
  65. package/apps/web/dist/assets/css-CLj8gQPS.js +1 -0
  66. package/apps/web/dist/assets/go-C27-OAKa.js +1 -0
  67. package/apps/web/dist/assets/html-CfGypltT.js +1 -0
  68. package/apps/web/dist/assets/index-BB3SamhR.css +1 -0
  69. package/apps/web/dist/assets/index-CFYAoHdw.js +477 -0
  70. package/apps/web/dist/assets/ini-BEwlwnbL.js +1 -0
  71. package/apps/web/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  72. package/apps/web/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  73. package/apps/web/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  74. package/apps/web/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  75. package/apps/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  76. package/apps/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  77. package/apps/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  78. package/apps/web/dist/assets/java-CylS5w8V.js +1 -0
  79. package/apps/web/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  80. package/apps/web/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  81. package/apps/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  82. package/apps/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  83. package/apps/web/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  84. package/apps/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  85. package/apps/web/dist/assets/less-B1dDrJ26.js +1 -0
  86. package/apps/web/dist/assets/lua-BaeVxFsk.js +1 -0
  87. package/apps/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  88. package/apps/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  89. package/apps/web/dist/assets/php-D_2--9WK.js +1 -0
  90. package/apps/web/dist/assets/python-B6aJPvgy.js +1 -0
  91. package/apps/web/dist/assets/ruby-DSHSDbk1.js +1 -0
  92. package/apps/web/dist/assets/rust-B1yitclQ.js +1 -0
  93. package/apps/web/dist/assets/scss-D5BDwBP9.js +1 -0
  94. package/apps/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  95. package/apps/web/dist/assets/swift-C2oV4EkX.js +1 -0
  96. package/apps/web/dist/assets/toml-vGWfd6FD.js +1 -0
  97. package/apps/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  98. package/apps/web/dist/assets/yaml-Buea-lGh.js +1 -0
  99. package/apps/web/dist/iconos/xonecode.png +0 -0
  100. package/apps/web/dist/index.html +20 -0
  101. package/dist/agent/agentesEnDisco.js +539 -0
  102. package/dist/agent/agentesEnDisco.js.map +1 -0
  103. package/dist/agent/arbolDeProyecto.js +245 -0
  104. package/dist/agent/arbolDeProyecto.js.map +1 -0
  105. package/dist/agent/artefactosEnDisco.js +139 -0
  106. package/dist/agent/artefactosEnDisco.js.map +1 -0
  107. package/dist/agent/aumentador.js +175 -0
  108. package/dist/agent/aumentador.js.map +1 -0
  109. package/dist/agent/authEnDisco.js +76 -1
  110. package/dist/agent/authEnDisco.js.map +1 -1
  111. package/dist/agent/busquedaRegex.js +92 -0
  112. package/dist/agent/busquedaRegex.js.map +1 -0
  113. package/dist/agent/catalogoModelos.js +345 -0
  114. package/dist/agent/catalogoModelos.js.map +1 -0
  115. package/dist/agent/checkpointer.js +127 -0
  116. package/dist/agent/checkpointer.js.map +1 -0
  117. package/dist/agent/cloudstudioClient.js +194 -0
  118. package/dist/agent/cloudstudioClient.js.map +1 -0
  119. package/dist/agent/cloudstudioMcp.js +722 -0
  120. package/dist/agent/cloudstudioMcp.js.map +1 -0
  121. package/dist/agent/configEnDisco.js +309 -11
  122. package/dist/agent/configEnDisco.js.map +1 -1
  123. package/dist/agent/consumoExterno.js +99 -0
  124. package/dist/agent/consumoExterno.js.map +1 -0
  125. package/dist/agent/descarga.js +149 -0
  126. package/dist/agent/descarga.js.map +1 -0
  127. package/dist/agent/diagnosticoDeTools.js +51 -0
  128. package/dist/agent/diagnosticoDeTools.js.map +1 -0
  129. package/dist/agent/dispositivosEnMaquina.js +596 -0
  130. package/dist/agent/dispositivosEnMaquina.js.map +1 -0
  131. package/dist/agent/escrituraDeCodex.js +134 -0
  132. package/dist/agent/escrituraDeCodex.js.map +1 -0
  133. package/dist/agent/escrituraDeOpencode.js +80 -0
  134. package/dist/agent/escrituraDeOpencode.js.map +1 -0
  135. package/dist/agent/escrituraExterna.js +742 -0
  136. package/dist/agent/escrituraExterna.js.map +1 -0
  137. package/dist/agent/gemini.js +81 -0
  138. package/dist/agent/gemini.js.map +1 -0
  139. package/dist/agent/git.js +83 -0
  140. package/dist/agent/git.js.map +1 -0
  141. package/dist/agent/gitSync.js +441 -0
  142. package/dist/agent/gitSync.js.map +1 -0
  143. package/dist/agent/hotswap.js +448 -0
  144. package/dist/agent/hotswap.js.map +1 -0
  145. package/dist/agent/instalacionEnMaquina.js +252 -0
  146. package/dist/agent/instalacionEnMaquina.js.map +1 -0
  147. package/dist/agent/instantanea.js +7 -10
  148. package/dist/agent/instantanea.js.map +1 -1
  149. package/dist/agent/interrupts.js +11 -2
  150. package/dist/agent/interrupts.js.map +1 -1
  151. package/dist/agent/juezDeTarea.js +345 -0
  152. package/dist/agent/juezDeTarea.js.map +1 -0
  153. package/dist/agent/lanzamientoEnMaquina.js +377 -0
  154. package/dist/agent/lanzamientoEnMaquina.js.map +1 -0
  155. package/dist/agent/manifiesto.js +59 -0
  156. package/dist/agent/manifiesto.js.map +1 -0
  157. package/dist/agent/memoriaDeProyecto.js +60 -0
  158. package/dist/agent/memoriaDeProyecto.js.map +1 -0
  159. package/dist/agent/modelos.js +105 -17
  160. package/dist/agent/modelos.js.map +1 -1
  161. package/dist/agent/modelosDeMotor.js +204 -0
  162. package/dist/agent/modelosDeMotor.js.map +1 -0
  163. package/dist/agent/paqueteDelProyecto.js +181 -0
  164. package/dist/agent/paqueteDelProyecto.js.map +1 -0
  165. package/dist/agent/perfiles.js +92 -31
  166. package/dist/agent/perfiles.js.map +1 -1
  167. package/dist/agent/persona.js +40 -0
  168. package/dist/agent/persona.js.map +1 -0
  169. package/dist/agent/procesosEnMaquina.js +204 -0
  170. package/dist/agent/procesosEnMaquina.js.map +1 -0
  171. package/dist/agent/proyecto.js +311 -13
  172. package/dist/agent/proyecto.js.map +1 -1
  173. package/dist/agent/puente.js +63 -6
  174. package/dist/agent/puente.js.map +1 -1
  175. package/dist/agent/resumenDeContexto.js +30 -0
  176. package/dist/agent/resumenDeContexto.js.map +1 -0
  177. package/dist/agent/resumenDeTool.js +64 -18
  178. package/dist/agent/resumenDeTool.js.map +1 -1
  179. package/dist/agent/sesionGit.js +481 -0
  180. package/dist/agent/sesionGit.js.map +1 -0
  181. package/dist/agent/settingsEnDisco.js +189 -0
  182. package/dist/agent/settingsEnDisco.js.map +1 -0
  183. package/dist/agent/subagenteCodex.js +368 -0
  184. package/dist/agent/subagenteCodex.js.map +1 -0
  185. package/dist/agent/subagenteExterno.js +423 -0
  186. package/dist/agent/subagenteExterno.js.map +1 -0
  187. package/dist/agent/subagenteOpencode.js +389 -0
  188. package/dist/agent/subagenteOpencode.js.map +1 -0
  189. package/dist/agent/subida.js +202 -0
  190. package/dist/agent/subida.js.map +1 -0
  191. package/dist/agent/tareasEnDisco.js +466 -0
  192. package/dist/agent/tareasEnDisco.js.map +1 -0
  193. package/dist/agent/turnoReal.js +663 -50
  194. package/dist/agent/turnoReal.js.map +1 -1
  195. package/dist/agent/versionEnDisco.js +48 -0
  196. package/dist/agent/versionEnDisco.js.map +1 -0
  197. package/dist/agent/xoneAgent.js +290 -49
  198. package/dist/agent/xoneAgent.js.map +1 -1
  199. package/dist/agent/zip.js +52 -0
  200. package/dist/agent/zip.js.map +1 -0
  201. package/dist/cli/acuseDeModelo.js +30 -0
  202. package/dist/cli/acuseDeModelo.js.map +1 -0
  203. package/dist/cli/aprobar.js +55 -2
  204. package/dist/cli/aprobar.js.map +1 -1
  205. package/dist/cli/config.js +9 -13
  206. package/dist/cli/config.js.map +1 -1
  207. package/dist/cli/consola.js +750 -19
  208. package/dist/cli/consola.js.map +1 -1
  209. package/dist/cli/main.js +740 -81
  210. package/dist/cli/main.js.map +1 -1
  211. package/dist/cli/markdown.js +188 -2
  212. package/dist/cli/markdown.js.map +1 -1
  213. package/dist/cli/run.js +32 -4
  214. package/dist/cli/run.js.map +1 -1
  215. package/dist/cli/stdio.js +46 -19
  216. package/dist/cli/stdio.js.map +1 -1
  217. package/dist/cli/tema.js +96 -8
  218. package/dist/cli/tema.js.map +1 -1
  219. package/dist/cli/tokens.js +29 -0
  220. package/dist/cli/tokens.js.map +1 -0
  221. package/dist/cli/tui/app.js +171 -0
  222. package/dist/cli/tui/app.js.map +1 -0
  223. package/dist/cli/tui/aprobarTui.js +80 -0
  224. package/dist/cli/tui/aprobarTui.js.map +1 -0
  225. package/dist/cli/tui/barra.js +37 -0
  226. package/dist/cli/tui/barra.js.map +1 -0
  227. package/dist/cli/tui/correrTui.js +478 -0
  228. package/dist/cli/tui/correrTui.js.map +1 -0
  229. package/dist/cli/tui/entrada.js +166 -0
  230. package/dist/cli/tui/entrada.js.map +1 -0
  231. package/dist/cli/tui/filas.js +24 -0
  232. package/dist/cli/tui/filas.js.map +1 -0
  233. package/dist/cli/tui/logo.js +49 -0
  234. package/dist/cli/tui/logo.js.map +1 -0
  235. package/dist/cli/tui/pielTui.js +14 -0
  236. package/dist/cli/tui/pielTui.js.map +1 -0
  237. package/dist/cli/tui/raton.js +126 -0
  238. package/dist/cli/tui/raton.js.map +1 -0
  239. package/dist/cli/tui/sidebar.js +86 -0
  240. package/dist/cli/tui/sidebar.js.map +1 -0
  241. package/dist/cli/tui/store.js +143 -0
  242. package/dist/cli/tui/store.js.map +1 -0
  243. package/dist/cli/tui/tarjeta.js +19 -0
  244. package/dist/cli/tui/tarjeta.js.map +1 -0
  245. package/dist/cli/tui/temaInk.js +114 -0
  246. package/dist/cli/tui/temaInk.js.map +1 -0
  247. package/dist/cli/tui/transcript.js +254 -0
  248. package/dist/cli/tui/transcript.js.map +1 -0
  249. package/dist/cli/wizardInicial.js +240 -0
  250. package/dist/cli/wizardInicial.js.map +1 -0
  251. package/dist/core/actos.js +113 -0
  252. package/dist/core/actos.js.map +1 -0
  253. package/dist/core/adjuntos.js +97 -0
  254. package/dist/core/adjuntos.js.map +1 -0
  255. package/dist/core/agentes.js +227 -0
  256. package/dist/core/agentes.js.map +1 -0
  257. package/dist/core/artefactos.js +149 -0
  258. package/dist/core/artefactos.js.map +1 -0
  259. package/dist/core/cloudstudio.js +7 -0
  260. package/dist/core/cloudstudio.js.map +1 -0
  261. package/dist/core/config.js +212 -5
  262. package/dist/core/config.js.map +1 -1
  263. package/dist/core/contextos.js +53 -1
  264. package/dist/core/contextos.js.map +1 -1
  265. package/dist/core/descargas.js +106 -0
  266. package/dist/core/descargas.js.map +1 -0
  267. package/dist/core/descriptoresDeApp.js +279 -0
  268. package/dist/core/descriptoresDeApp.js.map +1 -0
  269. package/dist/core/dispositivos.js +466 -0
  270. package/dist/core/dispositivos.js.map +1 -0
  271. package/dist/core/entrega.js +141 -0
  272. package/dist/core/entrega.js.map +1 -0
  273. package/dist/core/entrelazar.js +90 -0
  274. package/dist/core/entrelazar.js.map +1 -0
  275. package/dist/core/esqueleto.js +10 -0
  276. package/dist/core/esqueleto.js.map +1 -1
  277. package/dist/core/modelos.js +235 -3
  278. package/dist/core/modelos.js.map +1 -1
  279. package/dist/core/notify.js +27 -9
  280. package/dist/core/notify.js.map +1 -1
  281. package/dist/core/planDeSubida.js +127 -0
  282. package/dist/core/planDeSubida.js.map +1 -0
  283. package/dist/core/ports.js +189 -1
  284. package/dist/core/ports.js.map +1 -1
  285. package/dist/core/puedeLanzarse.js +239 -0
  286. package/dist/core/puedeLanzarse.js.map +1 -0
  287. package/dist/core/rutaVirtual.js +42 -0
  288. package/dist/core/rutaVirtual.js.map +1 -0
  289. package/dist/core/settings.js +246 -0
  290. package/dist/core/settings.js.map +1 -0
  291. package/dist/core/tareas.js +230 -0
  292. package/dist/core/tareas.js.map +1 -0
  293. package/dist/core/textos.js +36 -0
  294. package/dist/core/textos.js.map +1 -0
  295. package/dist/core/turno.js +56 -8
  296. package/dist/core/turno.js.map +1 -1
  297. package/dist/core/version.js +31 -0
  298. package/dist/core/version.js.map +1 -0
  299. package/dist/vendor/tokenTracking.js +22 -1
  300. package/dist/vendor/tokenTracking.js.map +1 -1
  301. package/dist/web/servidor/arranque.js +3964 -0
  302. package/dist/web/servidor/arranque.js.map +1 -0
  303. package/dist/web/servidor/consolaDeTarea.js +161 -0
  304. package/dist/web/servidor/consolaDeTarea.js.map +1 -0
  305. package/dist/web/servidor/consolaWeb.js +389 -0
  306. package/dist/web/servidor/consolaWeb.js.map +1 -0
  307. package/dist/web/servidor/corredorDeTareas.js +1119 -0
  308. package/dist/web/servidor/corredorDeTareas.js.map +1 -0
  309. package/dist/web/servidor/pielWeb.js +269 -0
  310. package/dist/web/servidor/pielWeb.js.map +1 -0
  311. package/dist/web/servidor/servidor.js +257 -0
  312. package/dist/web/servidor/servidor.js.map +1 -0
  313. package/dist/web/servidor/sesiones.js +440 -0
  314. package/dist/web/servidor/sesiones.js.map +1 -0
  315. package/dist/web/servidor/transporte.js +169 -0
  316. package/dist/web/servidor/transporte.js.map +1 -0
  317. package/dist/web/servidor/vestibulo.js +1276 -0
  318. package/dist/web/servidor/vestibulo.js.map +1 -0
  319. package/package.json +30 -8
  320. package/skills/archify/LICENSE +22 -0
  321. package/skills/archify/SKILL.md +109 -0
  322. package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
  323. package/skills/archify/assets/template.html +14787 -0
  324. package/skills/archify/bin/archify.mjs +1990 -0
  325. package/skills/archify/bin/open-artifact.mjs +86 -0
  326. package/skills/archify/bin/preview.mjs +648 -0
  327. package/skills/archify/bin/visual-check.mjs +829 -0
  328. package/skills/archify/brand-marks/README.md +31 -0
  329. package/skills/archify/brand-marks/catalog.json +131 -0
  330. package/skills/archify/delta/architecture-delta.mjs +1214 -0
  331. package/skills/archify/examples/agent-run.lifecycle.json +71 -0
  332. package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
  333. package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
  334. package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
  335. package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
  336. package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
  337. package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
  338. package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
  339. package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
  340. package/skills/archify/examples/event-stream.dataflow.json +57 -0
  341. package/skills/archify/examples/incident-response.workflow.json +64 -0
  342. package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
  343. package/skills/archify/examples/product-analytics.dataflow.json +76 -0
  344. package/skills/archify/examples/production-deployment.architecture.json +71 -0
  345. package/skills/archify/examples/release-delivery.workflow.json +62 -0
  346. package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
  347. package/skills/archify/examples/web-app-rendered.html +14862 -0
  348. package/skills/archify/examples/web-app.architecture.json +46 -0
  349. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
  350. package/skills/archify/migrations/workflow-v2.mjs +279 -0
  351. package/skills/archify/package.json +17 -0
  352. package/skills/archify/recipes/scenarios.mjs +391 -0
  353. package/skills/archify/references/authoring-contract.md +198 -0
  354. package/skills/archify/references/brand-marks.md +69 -0
  355. package/skills/archify/references/delivery-contract.md +116 -0
  356. package/skills/archify/references/viewer-runtime.md +45 -0
  357. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  358. package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
  359. package/skills/archify/renderers/dataflow/README.md +104 -0
  360. package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  361. package/skills/archify/renderers/lifecycle/README.md +115 -0
  362. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  363. package/skills/archify/renderers/sequence/README.md +114 -0
  364. package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
  365. package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
  366. package/skills/archify/renderers/shared/cli.mjs +218 -0
  367. package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
  368. package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
  369. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  370. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  371. package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
  372. package/skills/archify/renderers/shared/geometry.mjs +1423 -0
  373. package/skills/archify/renderers/shared/i18n.mjs +594 -0
  374. package/skills/archify/renderers/shared/layout-report.mjs +40 -0
  375. package/skills/archify/renderers/shared/legend.mjs +217 -0
  376. package/skills/archify/renderers/shared/output-path.mjs +321 -0
  377. package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
  378. package/skills/archify/renderers/shared/text-fit.mjs +49 -0
  379. package/skills/archify/renderers/shared/utils.mjs +232 -0
  380. package/skills/archify/renderers/shared/validator.mjs +86 -0
  381. package/skills/archify/renderers/workflow/README.md +223 -0
  382. package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
  383. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  384. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  385. package/skills/archify/schemas/README.md +211 -0
  386. package/skills/archify/schemas/architecture.schema.json +176 -0
  387. package/skills/archify/schemas/common.schema.json +115 -0
  388. package/skills/archify/schemas/dataflow.schema.json +243 -0
  389. package/skills/archify/schemas/lifecycle.schema.json +266 -0
  390. package/skills/archify/schemas/sequence.schema.json +223 -0
  391. package/skills/archify/schemas/workflow.schema.json +428 -0
  392. package/skills/archify/scripts/check-render-output.mjs +835 -0
  393. package/skills/archify/scripts/check-update.mjs +1667 -0
  394. package/skills/archify/scripts/render-examples.mjs +26 -0
  395. package/skills/archify/scripts/update-contract.mjs +182 -0
  396. package/skills/archify/skill-release.json +10 -0
  397. package/skills/artifacts-builder/SKILL.md +120 -0
  398. package/skills/artifacts-builder/reference/diagramas.md +123 -0
  399. package/skills/artifacts-builder/reference/estilo.md +123 -0
  400. package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
  401. package/skills/artifacts-builder/reference/graficas.md +22 -0
  402. package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
  403. package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
  404. package/skills/xone-hotswap/SKILL.md +185 -0
  405. package/skills/xone-hotswap/references/comandos.md +706 -0
  406. package/skills/xone-hotswap/references/conexion-y-despliegue.md +226 -0
@@ -0,0 +1,189 @@
1
+ /**
2
+ * El ESCRITOR de `~/.xonecode/settings.json` (el lector puro está en `core/settings.ts`).
3
+ *
4
+ * Misma disciplina que `authEnDisco.ts`: una escritura nunca destruye lo que ya había,
5
+ * así que la base de la fusión es el objeto CRUDO tal cual (no el resultado de
6
+ * `validarSettings`, que descarta en silencio entradas raras) y ante un JSON roto se
7
+ * PARA sin escribir, en vez de recuperar el fichero por su cuenta. La mecánica de
8
+ * escritura —temporal + `renameSync`— es la de `agent/cloudstudioMcp.ts#guardarEstado`:
9
+ * un `writeFileSync` a medias dejaría un `settings.json` truncado si el proceso muere a
10
+ * mitad de escritura, y el rename es atómico.
11
+ */
12
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
13
+ import { randomUUID } from "node:crypto";
14
+ import { homedir } from "node:os";
15
+ import { dirname, join } from "node:path";
16
+ import { TOPE_DE_CONCURRENCIA_DE_TAREAS, validarSettings, } from "../core/settings.js";
17
+ const NOMBRE_CARPETA = ".xonecode";
18
+ /** Un `settings.json` existente que no se puede fusionar: no se escribe nada encima. */
19
+ export class SettingsRotosEnDisco extends Error {
20
+ }
21
+ /** Misma regla que en core/config.ts y core/settings.ts: un JSON-array no es una raíz de fusionado. */
22
+ function esObjeto(v) {
23
+ return typeof v === "object" && v !== null && !Array.isArray(v);
24
+ }
25
+ /**
26
+ * `casa` es inyectable (por omisión `homedir()`) porque los tests no pueden tocar el
27
+ * `~/.xonecode` real — se resuelve en cada llamada, nunca se cachea, por la misma razón
28
+ * que `configEnDisco.ts#rutaConfigGlobal`: un test que cambia la home después del import
29
+ * vería si no la ruta vieja.
30
+ */
31
+ export function rutaSettings(casa = homedir()) {
32
+ return join(casa, NOMBRE_CARPETA, "settings.json");
33
+ }
34
+ /**
35
+ * Sin fichero, settings vacíos y sin avisos: no hay nada que crear solo por leer.
36
+ *
37
+ * Igual que `cargar()` en `configEnDisco.ts`, devuelve `{ settings, avisos }` — el JSON
38
+ * roto y la credencial colada NO lanzan, se cuentan como aviso: un fallo del área de
39
+ * CloudStudio no puede tumbar el arranque de la consola (invariante de `CLAUDE.md`), y
40
+ * `validarSettings` ya no lanza para una credencial, solo para JSON-que-no-parsea, que
41
+ * aquí se atrapa igual que en `configEnDisco.ts`.
42
+ */
43
+ export function cargarSettings(casa = homedir()) {
44
+ const ruta = rutaSettings(casa);
45
+ if (!existsSync(ruta))
46
+ return { settings: { entornos: [] }, avisos: [] };
47
+ let bruto;
48
+ try {
49
+ bruto = JSON.parse(readFileSync(ruta, "utf8"));
50
+ }
51
+ catch {
52
+ return {
53
+ settings: { entornos: [] },
54
+ avisos: [{ texto: `«${ruta}»: el JSON es inválido; se ignora el fichero.`, severidad: "aviso" }],
55
+ };
56
+ }
57
+ return validarSettings(bruto);
58
+ }
59
+ function leerCrudoOAbortar(ruta) {
60
+ if (!existsSync(ruta))
61
+ return {};
62
+ let bruto;
63
+ try {
64
+ bruto = JSON.parse(readFileSync(ruta, "utf8"));
65
+ }
66
+ catch {
67
+ // El mensaje solo nombra la ruta, nunca el contenido: eso acaba en logs y capturas.
68
+ throw new SettingsRotosEnDisco(`«${ruta}»: el JSON es inválido; no se sobrescribe. Edita el fichero a mano.`);
69
+ }
70
+ if (!esObjeto(bruto)) {
71
+ throw new SettingsRotosEnDisco(`«${ruta}»: el JSON raíz debe ser un objeto; no se sobrescribe. Edita el fichero a mano.`);
72
+ }
73
+ // Fusionar desde validarSettings BORRARÍA del fichero del usuario todo lo que la
74
+ // validación descarta (entornos rotos, campos desconocidos). La base es el objeto crudo.
75
+ return { ...bruto };
76
+ }
77
+ function escribirAtomico(ruta, contenido) {
78
+ const directorio = dirname(ruta);
79
+ // 0700 en la misma llamada que crea la carpeta: un mkdir + chmod posterior dejaría una
80
+ // ventana con la carpeta legible de más.
81
+ mkdirSync(directorio, { recursive: true, mode: 0o700 });
82
+ const temporal = join(directorio, `.settings.json.${randomUUID()}.tmp`);
83
+ let descriptor;
84
+ try {
85
+ descriptor = openSync(temporal, "wx", 0o600);
86
+ writeFileSync(descriptor, contenido, "utf8");
87
+ closeSync(descriptor);
88
+ descriptor = undefined;
89
+ renameSync(temporal, ruta);
90
+ }
91
+ catch (error) {
92
+ if (descriptor !== undefined) {
93
+ try {
94
+ closeSync(descriptor);
95
+ }
96
+ catch {
97
+ // Un fallo al cerrar durante la recuperación no puede impedir borrar el temporal.
98
+ }
99
+ }
100
+ try {
101
+ unlinkSync(temporal);
102
+ }
103
+ catch {
104
+ // Si no llegó a crearse, no hay nada que limpiar.
105
+ }
106
+ throw error;
107
+ }
108
+ }
109
+ /** Registra o sustituye un entorno por `id`, sin tocar los demás ni el resto del fichero. */
110
+ export function guardarEntorno(casa, entorno) {
111
+ const ruta = rutaSettings(casa ?? homedir());
112
+ const base = leerCrudoOAbortar(ruta);
113
+ const listaBruta = Array.isArray(base.entornos) ? base.entornos : [];
114
+ const otros = listaBruta.filter((e) => !(esObjeto(e) && e.id === entorno.id));
115
+ const fusionado = { ...base, entornos: [...otros, { ...entorno }] };
116
+ escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
117
+ return { ruta };
118
+ }
119
+ /**
120
+ * Guarda qué destinos se miran, sin tocar nada más del fichero.
121
+ *
122
+ * Se escribe el objeto ENTERO y no una fusión campo a campo: son cuatro interruptores que
123
+ * la ventana manda juntos, y fusionar dejaría vivo un `ios: false` de una versión anterior
124
+ * que la persona acaba de apagar en la interfaz sin saber que seguía ahí. Un objeto sin
125
+ * ningún campo se guarda como ausencia —`{}` y «no lo he dicho» significan lo mismo: mirar
126
+ * todo— para no dejar basura en el fichero.
127
+ */
128
+ export function guardarDispositivos(casa, ajustes) {
129
+ const ruta = rutaSettings(casa ?? homedir());
130
+ const crudo = leerCrudoOAbortar(ruta);
131
+ const limpio = Object.fromEntries(Object.entries(ajustes).filter(([, v]) => typeof v === "boolean"));
132
+ const fusionado = Object.keys(limpio).length === 0
133
+ ? Object.fromEntries(Object.entries(crudo).filter(([k]) => k !== "dispositivos"))
134
+ : { ...crudo, dispositivos: limpio };
135
+ escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
136
+ return { ruta };
137
+ }
138
+ /**
139
+ * Pone o quita la marca de «sin aprobación» de UN proyecto, por su ruta absoluta.
140
+ *
141
+ * Se fusiona campo a campo, al revés que `guardarDispositivos`: ahí son cuatro
142
+ * interruptores que la ventana manda juntos, y aquí cada entrada es un proyecto distinto
143
+ * que se decidió en otro momento — escribir el objeto entero borraría la decisión de los
144
+ * demás. Quitar la marca BORRA la entrada en vez de dejar un `false`: `false` y «no está»
145
+ * significan lo mismo (pedir aprobación) y dos formas de decirlo es una de más.
146
+ */
147
+ export function guardarSinAprobacion(casa, raiz, sinAprobacion) {
148
+ const ruta = rutaSettings(casa ?? homedir());
149
+ const crudo = leerCrudoOAbortar(ruta);
150
+ const previo = typeof crudo.sinAprobacion === "object" && crudo.sinAprobacion !== null
151
+ ? crudo.sinAprobacion
152
+ : {};
153
+ const siguiente = sinAprobacion
154
+ ? { ...previo, [raiz]: true }
155
+ : Object.fromEntries(Object.entries(previo).filter(([k]) => k !== raiz));
156
+ const fusionado = Object.keys(siguiente).length === 0
157
+ ? Object.fromEntries(Object.entries(crudo).filter(([k]) => k !== "sinAprobacion"))
158
+ : { ...crudo, sinAprobacion: siguiente };
159
+ escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
160
+ return { ruta };
161
+ }
162
+ /**
163
+ * Guarda el tope de concurrencia de la cola de tareas, sin tocar nada más del fichero.
164
+ *
165
+ * Se acota a `0..TOPE_DE_CONCURRENCIA_DE_TAREAS` aquí y no solo en el cliente: el selector
166
+ * de Ajustes ya lo acota antes de mandarlo, pero `settings.json` no se fía de quien
167
+ * escribe — es el mismo criterio que `validarConcurrenciaDeTareas` aplica al LEER, aplicado
168
+ * ahora al escribir. Trunca en vez de rechazar: un decimal o un valor fuera de rango es un
169
+ * fallo de quien llama y no una razón para dejar el fichero como estaba, al contrario que
170
+ * `guardarSinAprobacion` (ahí una clave mal formada se descarta entera porque hay más de
171
+ * una y una escribe sola no puede aplastar a las demás; aquí solo hay un valor).
172
+ */
173
+ export function guardarConcurrenciaDeTareas(casa, concurrencia) {
174
+ const ruta = rutaSettings(casa ?? homedir());
175
+ const crudo = leerCrudoOAbortar(ruta);
176
+ const acotado = Math.max(0, Math.min(TOPE_DE_CONCURRENCIA_DE_TAREAS, Math.trunc(concurrencia)));
177
+ const fusionado = { ...crudo, concurrenciaDeTareas: acotado };
178
+ escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
179
+ return { ruta };
180
+ }
181
+ /** Guarda solo la base del workspace, sin tocar la lista de entornos. */
182
+ export function guardarWorkspace(casa, base) {
183
+ const ruta = rutaSettings(casa ?? homedir());
184
+ const crudo = leerCrudoOAbortar(ruta);
185
+ const fusionado = { ...crudo, workspace: base };
186
+ escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
187
+ return { ruta };
188
+ }
189
+ //# sourceMappingURL=settingsEnDisco.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsEnDisco.js","sourceRoot":"","sources":["../../src/agent/settingsEnDisco.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Codex como subagente: un turno contra `codex app-server --stdio`.
3
+ *
4
+ * **Todo lo que hay aquí está MEDIDO contra el binario real (0.152.1), no deducido de una
5
+ * documentación.** El encuadre es JSON por línea sin campo `jsonrpc`; `initialize` contesta
6
+ * con el `userAgent` y el `codexHome`; `thread/start` acepta `{cwd, ephemeral, approvalPolicy,
7
+ * sandbox}` y devuelve `{thread:{id}}`; `turn/start` toma
8
+ * `{threadId, input:[{type:"text", text, text_elements:[]}]}`; y la respuesta final llega en
9
+ * un `item/completed` cuyo `item.type` es `agentMessage` con `phase: "final_answer"`. Los
10
+ * valores de sandbox son exactamente tres, y los enumeró el propio servidor al rechazar uno
11
+ * mal escrito: `read-only`, `workspace-write` y `danger-full-access`.
12
+ *
13
+ * **Se usa el `codex` del PATH, no un paquete npm.** El harness de deepseek se trae
14
+ * `@openai/codex` para no depender del PATH; aquí se prefiere el que el usuario ya tiene
15
+ * instalado y autenticado, porque ese paquete son ~100 MB de binario por plataforma y
16
+ * traerlo obligaría a todo el mundo a bajarlo para una capacidad opcional. `CODEX_BIN`
17
+ * permite apuntar a otro.
18
+ *
19
+ * **El sandbox es `read-only` SIEMPRE, y lo que abre la escritura es el `approvalPolicy`.**
20
+ * Esa es la decisión central y está medida (11-09-2026, tres ejecuciones): con
21
+ * `sandbox: "workspace-write"` las escrituras dentro del cwd ocurren solas y no vuelven a
22
+ * xonecode, o sea que ninguna de sus guardas de ruta las vería. Con `read-only` la caja del
23
+ * sistema operativo sigue siendo la denegación —no depende de que el modelo colabore— y
24
+ * `approvalPolicy: "on-request"` convierte cada escritura en una PETICIÓN que contestamos
25
+ * nosotros: el mismo papel que el `ask` del hook `PreToolUse` en Claude Code. Medido:
26
+ * contestando `accept` el fichero se escribe, y contestando `decline` no queda fichero, el
27
+ * item queda `declined` y el turno SIGUE, así que el agente puede contarlo. Sin escritura
28
+ * concedida se manda `never`, que evita que el hijo se quede esperando a alguien.
29
+ *
30
+ * **Lo que se decide y lo que se pregunta llegan en mensajes DISTINTOS.** La petición
31
+ * (`item/fileChange/requestApproval`) trae solo un `itemId`; los ficheros vinieron antes, en
32
+ * el `item/started` de ese id. De ahí el registro de items de aquí abajo: sin él no hay diff
33
+ * que enseñar, y sin diff no hay decisión que tomar. La traducción de esos cambios a lo que
34
+ * las pieles pintan, y las guardas de ruta reaplicadas, viven en `escrituraDeCodex.ts`.
35
+ *
36
+ * **Lo que no se sabe decir que no, se ABORTA.** Se contestan las peticiones cuyo «no» está
37
+ * en su esquema (`{decision:"decline"}` para fichero, comando y permisos;
38
+ * `{action:"decline"}` para una elicitación de MCP). `item/tool/requestUserInput` no tiene
39
+ * «no» —su respuesta es `{answers:{…}}` y nada más—, así que ahí se aborta, igual que ante
40
+ * cualquier petición que no esté nombrada. Lo que NUNCA se puede hacer es dejarla sin
41
+ * contestar: eso deja a codex bloqueado hasta que el tope lo mate.
42
+ *
43
+ * Y una consecuencia que hay que saber: el hijo es el Codex DEL USUARIO, con su
44
+ * configuración —sus MCP, sus plugins, sus hooks y sus skills—. Medido: al abrir el hilo
45
+ * arrancan los servidores MCP que tenga puestos. xonecode no los filtra ni los toca.
46
+ */
47
+ import { spawn } from "node:child_process";
48
+ import { consumoDeCodex } from "./consumoExterno.js";
49
+ import { decisionDeEscrituraDeCodex } from "./escrituraDeCodex.js";
50
+ /** El binario. `CODEX_BIN` gana, para poder apuntar a una versión concreta o a un envoltorio. */
51
+ export function binarioDeCodex() {
52
+ const puesto = process.env["CODEX_BIN"];
53
+ return puesto !== undefined && puesto.trim() !== "" ? puesto : "codex";
54
+ }
55
+ /**
56
+ * Cuánto se espera a que el turno termine.
57
+ *
58
+ * Existe porque un hijo colgado colgaría el turno de xonecode para siempre, y el usuario
59
+ * vería el compositor apagado sin nada que lo explique. Diez minutos es holgado para una
60
+ * revisión de código y corto comparado con «nunca».
61
+ */
62
+ const TOPE_MS = 10 * 60 * 1000;
63
+ /** Los eventos de ruido: llegan a docenas y no dicen nada del resultado. */
64
+ const RUIDO = new Set([
65
+ "remoteControl/status/changed",
66
+ "mcpServer/startupStatus/updated",
67
+ "account/rateLimits/updated",
68
+ "hook/started",
69
+ "hook/completed",
70
+ "item/agentMessage/delta",
71
+ "thread/status/changed",
72
+ ]);
73
+ /** ¿Está el binario? Se pregunta lanzándolo, que es la única respuesta que no miente. */
74
+ export async function codexDisponible() {
75
+ return new Promise((resolver) => {
76
+ let hijo;
77
+ try {
78
+ hijo = spawn(binarioDeCodex(), ["--version"], { stdio: ["ignore", "pipe", "pipe"] });
79
+ }
80
+ catch {
81
+ resolver(false);
82
+ return;
83
+ }
84
+ // El `error` del spawn hay que escucharlo: sin escucha, un binario que no existe emite
85
+ // ese evento y se lleva el proceso por delante — la misma trampa que `abrirEnSistema`
86
+ // documenta con `xdg-open`.
87
+ hijo.on("error", () => resolver(false));
88
+ hijo.on("close", (codigo) => resolver(codigo === 0));
89
+ });
90
+ }
91
+ export async function correrCodex(peticion, opciones = {}) {
92
+ const { alConsumir } = opciones;
93
+ const hijo = spawn(binarioDeCodex(), ["app-server", "--stdio"], {
94
+ stdio: ["pipe", "pipe", "pipe"],
95
+ cwd: peticion.cwd,
96
+ });
97
+ return new Promise((cumplir, fallar) => {
98
+ let buffer = "";
99
+ let hilo;
100
+ let respuesta;
101
+ let terminado = false;
102
+ /** El último `tokenUsage.total` visto: es acumulado, así que el último es el bueno. */
103
+ let consumo;
104
+ /**
105
+ * Los cambios de cada item de fichero, por su id.
106
+ *
107
+ * Existe porque `item/fileChange/requestApproval` trae un `itemId` y NADA más: las rutas
108
+ * y los diffs llegaron antes, en el `item/started` de ese id. Un id del que no consta
109
+ * item es un `decline`: decidir a ciegas sobre una escritura es justo lo que este camino
110
+ * existe para impedir.
111
+ */
112
+ const cambiosPorItem = new Map();
113
+ /**
114
+ * Cuántas aprobaciones están ahora mismo delante de alguien.
115
+ *
116
+ * **Con una pendiente el reloj se PARA**, y no es un detalle: el tope mide «codex no
117
+ * contesta», y el tiempo que tarda una persona en mirar un diff no es eso. Sin esto, un
118
+ * humano que se levanta a por un café vuelve a un «codex no terminó en 10 minutos» y a
119
+ * un modal huérfano cuyo turno ya está muerto.
120
+ */
121
+ let aprobando = 0;
122
+ let reloj;
123
+ const pararReloj = () => {
124
+ if (reloj !== undefined)
125
+ clearTimeout(reloj);
126
+ reloj = undefined;
127
+ };
128
+ const armarReloj = () => {
129
+ if (terminado || aprobando > 0)
130
+ return;
131
+ pararReloj();
132
+ reloj = setTimeout(() => acabar(new Error(`codex no terminó en ${Math.round(TOPE_MS / 60000)} minutos`)), TOPE_MS);
133
+ };
134
+ const acabar = (error, texto) => {
135
+ if (terminado)
136
+ return;
137
+ terminado = true;
138
+ pararReloj();
139
+ hijo.kill();
140
+ // El consumo se dice SIEMPRE que se sepa, también cuando el turno acaba en error o se
141
+ // agota el tope: esos tokens se gastaron igual, y contar solo los éxitos haría que la
142
+ // cifra bajara justo en los turnos que más cuestan.
143
+ if (consumo !== undefined)
144
+ alConsumir?.(consumo);
145
+ if (error !== undefined)
146
+ fallar(error);
147
+ else
148
+ cumplir(texto ?? "");
149
+ };
150
+ armarReloj();
151
+ const mandar = (objeto) => {
152
+ if (!terminado)
153
+ hijo.stdin.write(`${JSON.stringify(objeto)}\n`);
154
+ };
155
+ hijo.on("error", (e) => acabar(new Error(`no se pudo lanzar codex: ${e.message}`)));
156
+ hijo.on("close", () => {
157
+ // Si el proceso muere sin habernos dado la respuesta, es un fallo: devolver cadena
158
+ // vacía la haría pasar por «el especialista no tenía nada que decir».
159
+ if (!terminado)
160
+ acabar(new Error("codex terminó sin devolver ninguna respuesta"));
161
+ });
162
+ hijo.stdout.on("data", (trozo) => {
163
+ buffer += trozo.toString();
164
+ let corte;
165
+ while ((corte = buffer.indexOf("\n")) >= 0) {
166
+ const linea = buffer.slice(0, corte);
167
+ buffer = buffer.slice(corte + 1);
168
+ if (linea.trim() === "")
169
+ continue;
170
+ let m;
171
+ try {
172
+ m = JSON.parse(linea);
173
+ }
174
+ catch {
175
+ // Una línea que no es JSON no tumba el turno: el app-server mezcla trazas suyas
176
+ // por stdout en algunas versiones y descartarla es lo que hace el cliente oficial.
177
+ continue;
178
+ }
179
+ atender(m);
180
+ }
181
+ });
182
+ /**
183
+ * Una petición del SERVIDOR: lleva `id` **y** `method`, y hay que contestarla.
184
+ *
185
+ * **Va antes que todo lo demás, y eso importa**: medido, los ids del servidor empiezan
186
+ * en 0 y viven en el mismo espacio de números que los nuestros, así que una petición con
187
+ * `id: 1` caería en la rama del `initialize` si esto se mirara después. Nuestras
188
+ * respuestas llevan `id` y NO llevan `method`; esa es la única diferencia fiable.
189
+ */
190
+ const atenderPeticion = (id, metodo, params) => {
191
+ if (metodo === "item/fileChange/requestApproval") {
192
+ const itemId = params?.["itemId"];
193
+ const cambios = typeof itemId === "string" ? cambiosPorItem.get(itemId) : undefined;
194
+ if (cambios === undefined) {
195
+ // Un id del que no consta item: no hay diff que enseñar, así que no hay decisión
196
+ // que tomar y la respuesta es NO.
197
+ mandar({ id, result: { decision: "decline" } });
198
+ return;
199
+ }
200
+ aprobando += 1;
201
+ pararReloj();
202
+ void decisionDeEscrituraDeCodex({
203
+ cwd: peticion.cwd,
204
+ agente: peticion.agente,
205
+ cambios,
206
+ ficheros: opciones.ficheros?.() ?? new Set(),
207
+ ...(opciones.real === undefined ? {} : { real: opciones.real }),
208
+ // La primera puerta es el papel del `.md`: a un agente de solo lectura no se le
209
+ // pregunta a nadie, se le dice que no.
210
+ ...(peticion.permitirEscritura && opciones.aprobar !== undefined ? { aprobar: opciones.aprobar } : {}),
211
+ })
212
+ .then(({ concedida }) => mandar({ id, result: { decision: concedida ? "accept" : "decline" } }),
213
+ // `decisionDeEscrituraDeCodex` no lanza, pero si algún día lo hiciera, dejar la
214
+ // petición sin contestar colgaría a codex hasta el tope: el «no» es la
215
+ // respuesta, nunca el silencio.
216
+ () => mandar({ id, result: { decision: "decline" } }))
217
+ .finally(() => {
218
+ aprobando -= 1;
219
+ armarReloj();
220
+ });
221
+ return;
222
+ }
223
+ /**
224
+ * El análogo de `Bash`, y por eso se deniega siempre: un `cat > fichero` escribe el
225
+ * proyecto entero y no hay diff que componer con el que decidir. Es la misma razón por
226
+ * la que `Bash` está en las tools DENEGADAS del otro motor.
227
+ *
228
+ * Nunca `acceptForSession` ni `grantRoot`: los dos son una pre-aprobación de sesión, y
229
+ * lo que aquí se autoriza es una escritura concreta con su diff delante.
230
+ */
231
+ if (metodo === "item/commandExecution/requestApproval") {
232
+ mandar({ id, result: { decision: "decline" } });
233
+ return;
234
+ }
235
+ // Una elicitación de un MCP del usuario: su esquema sí tiene un «no» limpio.
236
+ if (metodo === "mcpServer/elicitation/request") {
237
+ mandar({ id, result: { action: "decline" } });
238
+ return;
239
+ }
240
+ /**
241
+ * Lo que no se sabe decir que no, se ABORTA con su motivo — y lo que no está nombrado
242
+ * arriba entra aquí. `item/tool/requestUserInput` no tiene «no» en su esquema (su
243
+ * respuesta es `{answers:{…}}` y nada más) y `item/permissions/requestApproval` tampoco
244
+ * (`{permissions, scope, strictAutoReview}`), así que contestarles exigiría inventarse
245
+ * una forma que nadie ha medido. Abortar es la denegación honesta: el proceso muere y
246
+ * no se ha concedido nada.
247
+ */
248
+ acabar(new Error(`codex pidió algo que xonecode no sabe denegar sin inventarse la respuesta: ${metodo}`));
249
+ };
250
+ const atender = (m) => {
251
+ if (m.error !== undefined) {
252
+ acabar(new Error(`codex: ${m.error.message ?? "error sin mensaje"}`));
253
+ return;
254
+ }
255
+ if (m.id !== undefined && m.method !== undefined) {
256
+ atenderPeticion(m.id, m.method, m.params);
257
+ return;
258
+ }
259
+ // Respuesta del `initialize`: se confirma y se abre el hilo.
260
+ if (m.id === 1) {
261
+ mandar({ method: "initialized" });
262
+ mandar({
263
+ id: 2,
264
+ method: "thread/start",
265
+ params: {
266
+ cwd: peticion.cwd,
267
+ // Efímero: no queda una conversación suelta en el historial de Codex del
268
+ // usuario por cada delegación que haga el orquestador.
269
+ ephemeral: true,
270
+ /**
271
+ * **La palanca de la escritura es ESTA, no el sandbox.** Con `on-request` cada
272
+ * escritura llega como una petición que contestamos; con `never` el hijo no
273
+ * pide nada y el sandbox se lo deniega sin que nadie espere a nadie.
274
+ */
275
+ approvalPolicy: peticion.permitirEscritura ? "on-request" : "never",
276
+ /**
277
+ * **`read-only` SIEMPRE**, también con la escritura concedida. Es la caja del
278
+ * sistema operativo, y dejarla en `workspace-write` haría que las escrituras de
279
+ * dentro del cwd ocurrieran solas: sin petición, sin diff y sin pasar por
280
+ * ninguna guarda de ruta de xonecode. Medido: con `read-only` y un `accept`, el
281
+ * fichero se escribe igual.
282
+ */
283
+ sandbox: "read-only",
284
+ // El modelo, si el `.md` lo pide. `ThreadStartParams.model` existe —comprobado
285
+ // contra el esquema que el propio binario genera (`app-server
286
+ // generate-json-schema`)—, y sus valores son los que devuelve `model/list`.
287
+ ...(peticion.modelo === undefined ? {} : { model: peticion.modelo }),
288
+ },
289
+ });
290
+ return;
291
+ }
292
+ // Respuesta del `thread/start`: se manda el turno.
293
+ if (m.id === 2) {
294
+ const r = m.result;
295
+ hilo = r?.thread?.id;
296
+ if (hilo === undefined) {
297
+ acabar(new Error("codex abrió el hilo sin devolver su id"));
298
+ return;
299
+ }
300
+ mandar({
301
+ id: 3,
302
+ method: "turn/start",
303
+ params: {
304
+ threadId: hilo,
305
+ // Las instrucciones van DELANTE de la tarea, en el mismo turno: el app-server
306
+ // no expone un prompt de sistema por hilo, así que el papel del subagente y las
307
+ // reglas de XOne entran como el primer bloque de texto de la petición.
308
+ input: [
309
+ { type: "text", text: peticion.instrucciones, text_elements: [] },
310
+ { type: "text", text: peticion.tarea, text_elements: [] },
311
+ ],
312
+ },
313
+ });
314
+ return;
315
+ }
316
+ /**
317
+ * El consumo del hilo. **Estaba en la lista de RUIDO**, o sea que este dato llevaba
318
+ * llegando desde el primer día y se tiraba. Se guarda el ÚLTIMO y no se suman: por el
319
+ * esquema del propio binario, `tokenUsage.total` es acumulado del hilo.
320
+ */
321
+ if (m.method === "thread/tokenUsage/updated") {
322
+ const c = consumoDeCodex(m.params);
323
+ if (c !== undefined)
324
+ consumo = c;
325
+ return;
326
+ }
327
+ if (m.method === undefined || RUIDO.has(m.method))
328
+ return;
329
+ /**
330
+ * El registro de items de fichero. Se apunta en los TRES flancos y no solo en
331
+ * `item/started`: el que trae los cambios es ése —llega antes que la petición—, pero
332
+ * un `item/updated` puede corregirlos y quedarse con el último es lo correcto.
333
+ */
334
+ if (m.method === "item/started" || m.method === "item/updated" || m.method === "item/completed") {
335
+ const item = m.params?.item;
336
+ if (item?.type === "fileChange" && typeof item.id === "string" && Array.isArray(item.changes)) {
337
+ cambiosPorItem.set(item.id, item.changes);
338
+ }
339
+ }
340
+ if (m.method === "item/completed") {
341
+ const item = m.params?.item;
342
+ // La respuesta es el `agentMessage` de fase `final_answer`. Los otros items del turno
343
+ // —el mensaje del usuario, el razonamiento, las lecturas— no son la contestación, y
344
+ // quedarse con el último de todos devolvería cualquier cosa.
345
+ if (item?.type === "agentMessage" && item.phase === "final_answer" && typeof item.text === "string") {
346
+ respuesta = item.text;
347
+ }
348
+ return;
349
+ }
350
+ if (m.method === "turn/completed") {
351
+ if (respuesta === undefined) {
352
+ acabar(new Error("codex terminó el turno sin dar una respuesta final"));
353
+ return;
354
+ }
355
+ acabar(undefined, respuesta);
356
+ }
357
+ };
358
+ mandar({
359
+ id: 1,
360
+ method: "initialize",
361
+ params: {
362
+ clientInfo: { name: "xonecode", title: "xonecode", version: "0.5.0" },
363
+ capabilities: { experimentalApi: false, requestAttestation: false },
364
+ },
365
+ });
366
+ });
367
+ }
368
+ //# sourceMappingURL=subagenteCodex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagenteCodex.js","sourceRoot":"","sources":["../../src/agent/subagenteCodex.ts"],"names":[],"mappings":"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"}