xonecode 0.3.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/README.md +50 -8
  2. package/THIRD_PARTY_NOTICES.md +160 -0
  3. package/apps/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/apps/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/apps/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/apps/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/apps/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/apps/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/apps/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/apps/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/apps/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/apps/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/apps/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/apps/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/apps/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/apps/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/apps/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/apps/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/apps/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/apps/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/apps/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/apps/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/apps/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/apps/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/apps/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/apps/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/apps/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/apps/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/apps/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/apps/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/apps/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/apps/web/dist/assets/c-BIGW1oBm.js +1 -0
  63. package/apps/web/dist/assets/cpp-DddhVWhK.js +1 -0
  64. package/apps/web/dist/assets/csharp-DSvCPggb.js +1 -0
  65. package/apps/web/dist/assets/css-CLj8gQPS.js +1 -0
  66. package/apps/web/dist/assets/go-C27-OAKa.js +1 -0
  67. package/apps/web/dist/assets/html-CfGypltT.js +1 -0
  68. package/apps/web/dist/assets/index-BB3SamhR.css +1 -0
  69. package/apps/web/dist/assets/index-CFYAoHdw.js +477 -0
  70. package/apps/web/dist/assets/ini-BEwlwnbL.js +1 -0
  71. package/apps/web/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  72. package/apps/web/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  73. package/apps/web/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  74. package/apps/web/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  75. package/apps/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  76. package/apps/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  77. package/apps/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  78. package/apps/web/dist/assets/java-CylS5w8V.js +1 -0
  79. package/apps/web/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  80. package/apps/web/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  81. package/apps/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  82. package/apps/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  83. package/apps/web/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  84. package/apps/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  85. package/apps/web/dist/assets/less-B1dDrJ26.js +1 -0
  86. package/apps/web/dist/assets/lua-BaeVxFsk.js +1 -0
  87. package/apps/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  88. package/apps/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  89. package/apps/web/dist/assets/php-D_2--9WK.js +1 -0
  90. package/apps/web/dist/assets/python-B6aJPvgy.js +1 -0
  91. package/apps/web/dist/assets/ruby-DSHSDbk1.js +1 -0
  92. package/apps/web/dist/assets/rust-B1yitclQ.js +1 -0
  93. package/apps/web/dist/assets/scss-D5BDwBP9.js +1 -0
  94. package/apps/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  95. package/apps/web/dist/assets/swift-C2oV4EkX.js +1 -0
  96. package/apps/web/dist/assets/toml-vGWfd6FD.js +1 -0
  97. package/apps/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  98. package/apps/web/dist/assets/yaml-Buea-lGh.js +1 -0
  99. package/apps/web/dist/iconos/xonecode.png +0 -0
  100. package/apps/web/dist/index.html +20 -0
  101. package/dist/agent/agentesEnDisco.js +539 -0
  102. package/dist/agent/agentesEnDisco.js.map +1 -0
  103. package/dist/agent/arbolDeProyecto.js +245 -0
  104. package/dist/agent/arbolDeProyecto.js.map +1 -0
  105. package/dist/agent/artefactosEnDisco.js +139 -0
  106. package/dist/agent/artefactosEnDisco.js.map +1 -0
  107. package/dist/agent/aumentador.js +175 -0
  108. package/dist/agent/aumentador.js.map +1 -0
  109. package/dist/agent/authEnDisco.js +76 -1
  110. package/dist/agent/authEnDisco.js.map +1 -1
  111. package/dist/agent/busquedaRegex.js +92 -0
  112. package/dist/agent/busquedaRegex.js.map +1 -0
  113. package/dist/agent/catalogoModelos.js +345 -0
  114. package/dist/agent/catalogoModelos.js.map +1 -0
  115. package/dist/agent/checkpointer.js +127 -0
  116. package/dist/agent/checkpointer.js.map +1 -0
  117. package/dist/agent/cloudstudioClient.js +194 -0
  118. package/dist/agent/cloudstudioClient.js.map +1 -0
  119. package/dist/agent/cloudstudioMcp.js +722 -0
  120. package/dist/agent/cloudstudioMcp.js.map +1 -0
  121. package/dist/agent/configEnDisco.js +309 -11
  122. package/dist/agent/configEnDisco.js.map +1 -1
  123. package/dist/agent/consumoExterno.js +99 -0
  124. package/dist/agent/consumoExterno.js.map +1 -0
  125. package/dist/agent/descarga.js +149 -0
  126. package/dist/agent/descarga.js.map +1 -0
  127. package/dist/agent/diagnosticoDeTools.js +51 -0
  128. package/dist/agent/diagnosticoDeTools.js.map +1 -0
  129. package/dist/agent/dispositivosEnMaquina.js +596 -0
  130. package/dist/agent/dispositivosEnMaquina.js.map +1 -0
  131. package/dist/agent/escrituraDeCodex.js +134 -0
  132. package/dist/agent/escrituraDeCodex.js.map +1 -0
  133. package/dist/agent/escrituraDeOpencode.js +80 -0
  134. package/dist/agent/escrituraDeOpencode.js.map +1 -0
  135. package/dist/agent/escrituraExterna.js +742 -0
  136. package/dist/agent/escrituraExterna.js.map +1 -0
  137. package/dist/agent/gemini.js +81 -0
  138. package/dist/agent/gemini.js.map +1 -0
  139. package/dist/agent/git.js +83 -0
  140. package/dist/agent/git.js.map +1 -0
  141. package/dist/agent/gitSync.js +441 -0
  142. package/dist/agent/gitSync.js.map +1 -0
  143. package/dist/agent/hotswap.js +448 -0
  144. package/dist/agent/hotswap.js.map +1 -0
  145. package/dist/agent/instalacionEnMaquina.js +252 -0
  146. package/dist/agent/instalacionEnMaquina.js.map +1 -0
  147. package/dist/agent/instantanea.js +7 -10
  148. package/dist/agent/instantanea.js.map +1 -1
  149. package/dist/agent/interrupts.js +11 -2
  150. package/dist/agent/interrupts.js.map +1 -1
  151. package/dist/agent/juezDeTarea.js +345 -0
  152. package/dist/agent/juezDeTarea.js.map +1 -0
  153. package/dist/agent/lanzamientoEnMaquina.js +377 -0
  154. package/dist/agent/lanzamientoEnMaquina.js.map +1 -0
  155. package/dist/agent/manifiesto.js +59 -0
  156. package/dist/agent/manifiesto.js.map +1 -0
  157. package/dist/agent/memoriaDeProyecto.js +60 -0
  158. package/dist/agent/memoriaDeProyecto.js.map +1 -0
  159. package/dist/agent/modelos.js +105 -17
  160. package/dist/agent/modelos.js.map +1 -1
  161. package/dist/agent/modelosDeMotor.js +204 -0
  162. package/dist/agent/modelosDeMotor.js.map +1 -0
  163. package/dist/agent/paqueteDelProyecto.js +181 -0
  164. package/dist/agent/paqueteDelProyecto.js.map +1 -0
  165. package/dist/agent/perfiles.js +92 -31
  166. package/dist/agent/perfiles.js.map +1 -1
  167. package/dist/agent/persona.js +40 -0
  168. package/dist/agent/persona.js.map +1 -0
  169. package/dist/agent/procesosEnMaquina.js +204 -0
  170. package/dist/agent/procesosEnMaquina.js.map +1 -0
  171. package/dist/agent/proyecto.js +311 -13
  172. package/dist/agent/proyecto.js.map +1 -1
  173. package/dist/agent/puente.js +63 -6
  174. package/dist/agent/puente.js.map +1 -1
  175. package/dist/agent/resumenDeContexto.js +30 -0
  176. package/dist/agent/resumenDeContexto.js.map +1 -0
  177. package/dist/agent/resumenDeTool.js +64 -18
  178. package/dist/agent/resumenDeTool.js.map +1 -1
  179. package/dist/agent/sesionGit.js +481 -0
  180. package/dist/agent/sesionGit.js.map +1 -0
  181. package/dist/agent/settingsEnDisco.js +189 -0
  182. package/dist/agent/settingsEnDisco.js.map +1 -0
  183. package/dist/agent/subagenteCodex.js +368 -0
  184. package/dist/agent/subagenteCodex.js.map +1 -0
  185. package/dist/agent/subagenteExterno.js +423 -0
  186. package/dist/agent/subagenteExterno.js.map +1 -0
  187. package/dist/agent/subagenteOpencode.js +389 -0
  188. package/dist/agent/subagenteOpencode.js.map +1 -0
  189. package/dist/agent/subida.js +202 -0
  190. package/dist/agent/subida.js.map +1 -0
  191. package/dist/agent/tareasEnDisco.js +466 -0
  192. package/dist/agent/tareasEnDisco.js.map +1 -0
  193. package/dist/agent/turnoReal.js +663 -50
  194. package/dist/agent/turnoReal.js.map +1 -1
  195. package/dist/agent/versionEnDisco.js +48 -0
  196. package/dist/agent/versionEnDisco.js.map +1 -0
  197. package/dist/agent/xoneAgent.js +290 -49
  198. package/dist/agent/xoneAgent.js.map +1 -1
  199. package/dist/agent/zip.js +52 -0
  200. package/dist/agent/zip.js.map +1 -0
  201. package/dist/cli/acuseDeModelo.js +30 -0
  202. package/dist/cli/acuseDeModelo.js.map +1 -0
  203. package/dist/cli/aprobar.js +55 -2
  204. package/dist/cli/aprobar.js.map +1 -1
  205. package/dist/cli/config.js +9 -13
  206. package/dist/cli/config.js.map +1 -1
  207. package/dist/cli/consola.js +750 -19
  208. package/dist/cli/consola.js.map +1 -1
  209. package/dist/cli/main.js +740 -81
  210. package/dist/cli/main.js.map +1 -1
  211. package/dist/cli/markdown.js +188 -2
  212. package/dist/cli/markdown.js.map +1 -1
  213. package/dist/cli/run.js +32 -4
  214. package/dist/cli/run.js.map +1 -1
  215. package/dist/cli/stdio.js +46 -19
  216. package/dist/cli/stdio.js.map +1 -1
  217. package/dist/cli/tema.js +96 -8
  218. package/dist/cli/tema.js.map +1 -1
  219. package/dist/cli/tokens.js +29 -0
  220. package/dist/cli/tokens.js.map +1 -0
  221. package/dist/cli/tui/app.js +171 -0
  222. package/dist/cli/tui/app.js.map +1 -0
  223. package/dist/cli/tui/aprobarTui.js +80 -0
  224. package/dist/cli/tui/aprobarTui.js.map +1 -0
  225. package/dist/cli/tui/barra.js +37 -0
  226. package/dist/cli/tui/barra.js.map +1 -0
  227. package/dist/cli/tui/correrTui.js +478 -0
  228. package/dist/cli/tui/correrTui.js.map +1 -0
  229. package/dist/cli/tui/entrada.js +166 -0
  230. package/dist/cli/tui/entrada.js.map +1 -0
  231. package/dist/cli/tui/filas.js +24 -0
  232. package/dist/cli/tui/filas.js.map +1 -0
  233. package/dist/cli/tui/logo.js +49 -0
  234. package/dist/cli/tui/logo.js.map +1 -0
  235. package/dist/cli/tui/pielTui.js +14 -0
  236. package/dist/cli/tui/pielTui.js.map +1 -0
  237. package/dist/cli/tui/raton.js +126 -0
  238. package/dist/cli/tui/raton.js.map +1 -0
  239. package/dist/cli/tui/sidebar.js +86 -0
  240. package/dist/cli/tui/sidebar.js.map +1 -0
  241. package/dist/cli/tui/store.js +143 -0
  242. package/dist/cli/tui/store.js.map +1 -0
  243. package/dist/cli/tui/tarjeta.js +19 -0
  244. package/dist/cli/tui/tarjeta.js.map +1 -0
  245. package/dist/cli/tui/temaInk.js +114 -0
  246. package/dist/cli/tui/temaInk.js.map +1 -0
  247. package/dist/cli/tui/transcript.js +254 -0
  248. package/dist/cli/tui/transcript.js.map +1 -0
  249. package/dist/cli/wizardInicial.js +240 -0
  250. package/dist/cli/wizardInicial.js.map +1 -0
  251. package/dist/core/actos.js +113 -0
  252. package/dist/core/actos.js.map +1 -0
  253. package/dist/core/adjuntos.js +97 -0
  254. package/dist/core/adjuntos.js.map +1 -0
  255. package/dist/core/agentes.js +227 -0
  256. package/dist/core/agentes.js.map +1 -0
  257. package/dist/core/artefactos.js +149 -0
  258. package/dist/core/artefactos.js.map +1 -0
  259. package/dist/core/cloudstudio.js +7 -0
  260. package/dist/core/cloudstudio.js.map +1 -0
  261. package/dist/core/config.js +212 -5
  262. package/dist/core/config.js.map +1 -1
  263. package/dist/core/contextos.js +53 -1
  264. package/dist/core/contextos.js.map +1 -1
  265. package/dist/core/descargas.js +106 -0
  266. package/dist/core/descargas.js.map +1 -0
  267. package/dist/core/descriptoresDeApp.js +279 -0
  268. package/dist/core/descriptoresDeApp.js.map +1 -0
  269. package/dist/core/dispositivos.js +466 -0
  270. package/dist/core/dispositivos.js.map +1 -0
  271. package/dist/core/entrega.js +141 -0
  272. package/dist/core/entrega.js.map +1 -0
  273. package/dist/core/entrelazar.js +90 -0
  274. package/dist/core/entrelazar.js.map +1 -0
  275. package/dist/core/esqueleto.js +10 -0
  276. package/dist/core/esqueleto.js.map +1 -1
  277. package/dist/core/modelos.js +235 -3
  278. package/dist/core/modelos.js.map +1 -1
  279. package/dist/core/notify.js +27 -9
  280. package/dist/core/notify.js.map +1 -1
  281. package/dist/core/planDeSubida.js +127 -0
  282. package/dist/core/planDeSubida.js.map +1 -0
  283. package/dist/core/ports.js +189 -1
  284. package/dist/core/ports.js.map +1 -1
  285. package/dist/core/puedeLanzarse.js +239 -0
  286. package/dist/core/puedeLanzarse.js.map +1 -0
  287. package/dist/core/rutaVirtual.js +42 -0
  288. package/dist/core/rutaVirtual.js.map +1 -0
  289. package/dist/core/settings.js +246 -0
  290. package/dist/core/settings.js.map +1 -0
  291. package/dist/core/tareas.js +230 -0
  292. package/dist/core/tareas.js.map +1 -0
  293. package/dist/core/textos.js +36 -0
  294. package/dist/core/textos.js.map +1 -0
  295. package/dist/core/turno.js +56 -8
  296. package/dist/core/turno.js.map +1 -1
  297. package/dist/core/version.js +31 -0
  298. package/dist/core/version.js.map +1 -0
  299. package/dist/vendor/sqliteSaver.js +389 -0
  300. package/dist/vendor/sqliteSaver.js.map +1 -0
  301. package/dist/vendor/tokenTracking.js +22 -1
  302. package/dist/vendor/tokenTracking.js.map +1 -1
  303. package/dist/web/servidor/arranque.js +3964 -0
  304. package/dist/web/servidor/arranque.js.map +1 -0
  305. package/dist/web/servidor/consolaDeTarea.js +161 -0
  306. package/dist/web/servidor/consolaDeTarea.js.map +1 -0
  307. package/dist/web/servidor/consolaWeb.js +389 -0
  308. package/dist/web/servidor/consolaWeb.js.map +1 -0
  309. package/dist/web/servidor/corredorDeTareas.js +1119 -0
  310. package/dist/web/servidor/corredorDeTareas.js.map +1 -0
  311. package/dist/web/servidor/pielWeb.js +269 -0
  312. package/dist/web/servidor/pielWeb.js.map +1 -0
  313. package/dist/web/servidor/servidor.js +257 -0
  314. package/dist/web/servidor/servidor.js.map +1 -0
  315. package/dist/web/servidor/sesiones.js +440 -0
  316. package/dist/web/servidor/sesiones.js.map +1 -0
  317. package/dist/web/servidor/transporte.js +169 -0
  318. package/dist/web/servidor/transporte.js.map +1 -0
  319. package/dist/web/servidor/vestibulo.js +1276 -0
  320. package/dist/web/servidor/vestibulo.js.map +1 -0
  321. package/package.json +33 -9
  322. package/skills/archify/LICENSE +22 -0
  323. package/skills/archify/SKILL.md +109 -0
  324. package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
  325. package/skills/archify/assets/template.html +14787 -0
  326. package/skills/archify/bin/archify.mjs +1990 -0
  327. package/skills/archify/bin/open-artifact.mjs +86 -0
  328. package/skills/archify/bin/preview.mjs +648 -0
  329. package/skills/archify/bin/visual-check.mjs +829 -0
  330. package/skills/archify/brand-marks/README.md +31 -0
  331. package/skills/archify/brand-marks/catalog.json +131 -0
  332. package/skills/archify/delta/architecture-delta.mjs +1214 -0
  333. package/skills/archify/examples/agent-run.lifecycle.json +71 -0
  334. package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
  335. package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
  336. package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
  337. package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
  338. package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
  339. package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
  340. package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
  341. package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
  342. package/skills/archify/examples/event-stream.dataflow.json +57 -0
  343. package/skills/archify/examples/incident-response.workflow.json +64 -0
  344. package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
  345. package/skills/archify/examples/product-analytics.dataflow.json +76 -0
  346. package/skills/archify/examples/production-deployment.architecture.json +71 -0
  347. package/skills/archify/examples/release-delivery.workflow.json +62 -0
  348. package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
  349. package/skills/archify/examples/web-app-rendered.html +14862 -0
  350. package/skills/archify/examples/web-app.architecture.json +46 -0
  351. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
  352. package/skills/archify/migrations/workflow-v2.mjs +279 -0
  353. package/skills/archify/package.json +17 -0
  354. package/skills/archify/recipes/scenarios.mjs +391 -0
  355. package/skills/archify/references/authoring-contract.md +198 -0
  356. package/skills/archify/references/brand-marks.md +69 -0
  357. package/skills/archify/references/delivery-contract.md +116 -0
  358. package/skills/archify/references/viewer-runtime.md +45 -0
  359. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  360. package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
  361. package/skills/archify/renderers/dataflow/README.md +104 -0
  362. package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  363. package/skills/archify/renderers/lifecycle/README.md +115 -0
  364. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  365. package/skills/archify/renderers/sequence/README.md +114 -0
  366. package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
  367. package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
  368. package/skills/archify/renderers/shared/cli.mjs +218 -0
  369. package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
  370. package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
  371. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  372. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  373. package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
  374. package/skills/archify/renderers/shared/geometry.mjs +1423 -0
  375. package/skills/archify/renderers/shared/i18n.mjs +594 -0
  376. package/skills/archify/renderers/shared/layout-report.mjs +40 -0
  377. package/skills/archify/renderers/shared/legend.mjs +217 -0
  378. package/skills/archify/renderers/shared/output-path.mjs +321 -0
  379. package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
  380. package/skills/archify/renderers/shared/text-fit.mjs +49 -0
  381. package/skills/archify/renderers/shared/utils.mjs +232 -0
  382. package/skills/archify/renderers/shared/validator.mjs +86 -0
  383. package/skills/archify/renderers/workflow/README.md +223 -0
  384. package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
  385. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  386. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  387. package/skills/archify/schemas/README.md +211 -0
  388. package/skills/archify/schemas/architecture.schema.json +176 -0
  389. package/skills/archify/schemas/common.schema.json +115 -0
  390. package/skills/archify/schemas/dataflow.schema.json +243 -0
  391. package/skills/archify/schemas/lifecycle.schema.json +266 -0
  392. package/skills/archify/schemas/sequence.schema.json +223 -0
  393. package/skills/archify/schemas/workflow.schema.json +428 -0
  394. package/skills/archify/scripts/check-render-output.mjs +835 -0
  395. package/skills/archify/scripts/check-update.mjs +1667 -0
  396. package/skills/archify/scripts/render-examples.mjs +26 -0
  397. package/skills/archify/scripts/update-contract.mjs +182 -0
  398. package/skills/archify/skill-release.json +10 -0
  399. package/skills/artifacts-builder/SKILL.md +120 -0
  400. package/skills/artifacts-builder/reference/diagramas.md +123 -0
  401. package/skills/artifacts-builder/reference/estilo.md +123 -0
  402. package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
  403. package/skills/artifacts-builder/reference/graficas.md +22 -0
  404. package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
  405. package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
  406. package/skills/xone-hotswap/SKILL.md +185 -0
  407. package/skills/xone-hotswap/references/comandos.md +706 -0
  408. package/skills/xone-hotswap/references/conexion-y-despliegue.md +226 -0
@@ -0,0 +1,423 @@
1
+ /**
2
+ * El adaptador que lanza un agente de OTRO producto sobre la carpeta del proyecto.
3
+ *
4
+ * Dos motores, y cada uno por su camino porque no se parecen en nada. **Claude Code** va
5
+ * por su SDK oficial (`@anthropic-ai/claude-agent-sdk`) y se le deniegan las escrituras con
6
+ * `canUseTool`, un callback nuestro. **Codex** va por su `app-server --stdio`
7
+ * (`subagenteCodex.ts`), y ahí la denegación la hace el SANDBOX del sistema operativo
8
+ * (`sandbox: "read-only"`) — que es más fuerte, porque no depende de que el modelo colabore.
9
+ * En los dos casos entra una tarea autocontenida y sale la respuesta final, y el hijo es una
10
+ * sesión del producto de verdad: su autenticación, sus ajustes y su modelo.
11
+ *
12
+ * **La escritura se CONCEDE por escritura, una por una.** El SDK trae `canUseTool`, un
13
+ * callback que recibe cada tool con su entrada entera y contesta permitir o denegar. Es
14
+ * asíncrono y corre en NUESTRO proceso, así que se puede esperar ahí a que alguien decida
15
+ * mientras el hijo sigue vivo — y eso es lo que hace innecesario el `interrupt()` de
16
+ * LangGraph, cuyo reanudado reejecuta el nodo y relanzaría el proceso hijo.
17
+ *
18
+ * Tres listas y no dos (`escrituraExterna.ts`): lectura, escritura y denegadas, con lo que
19
+ * no se reconoce denegado igual. Antes era `permitirEscritura || esDeLectura(nombre)`, o sea
20
+ * que el día que se concediera la escritura se concedía TODO — y `Bash` sola basta para
21
+ * escribir el proyecto entero saltándose la política, el diff y las guardas de ruta.
22
+ *
23
+ * El import del SDK es DINÁMICO a propósito: así `npm test` no lo carga nunca —los tests
24
+ * usan el doble del puerto— y una instalación sin el paquete sigue arrancando, con
25
+ * `disponible` contestando que no en vez de reventar al importar.
26
+ */
27
+ import { codexDisponible, correrCodex } from "./subagenteCodex.js";
28
+ import { correrOpencode, opencodeDisponible } from "./subagenteOpencode.js";
29
+ import { consumoDeClaude } from "./consumoExterno.js";
30
+ import { claseDeToolExterna, decisionDePreToolUse, diffDeEscrituraExterna, eventoDeToolExterna, veredictoDeLectura, motivoDeToolDenegada, veredictoDeRuta, MOTIVO_DE_ESCRITURA_RECHAZADA, MOTIVO_DE_ESCRITURA_ABORTADA, } from "./escrituraExterna.js";
31
+ /**
32
+ * La decisión sobre una tool del hijo. **Exportada para poder probarla**: es la regla de
33
+ * seguridad de toda esta integración, y probarla llamando al SDK exigiría lanzar un Claude
34
+ * Code de verdad en `npm test` — que es justo lo que este repo no consiente. Lo único que no
35
+ * es puro son el `realpath` y la lectura del disco, y los dos entran por parámetro.
36
+ *
37
+ * El orden importa y es el conservador:
38
+ * 1. **La clase de la tool** (`claseDeToolExterna`). Lo que no está en las dos listas
39
+ * blancas se deniega, `Bash` y `WebFetch` incluidos y con escritura concedida.
40
+ * 2. **El papel.** Un agente de solo lectura no llega a la política: no hay nada que
41
+ * preguntar sobre una escritura que su `.md` no autoriza.
42
+ * 3. **Las guardas de RUTA del proyecto** (`veredictoDeRuta`), y van ANTES de preguntar:
43
+ * un modal cuyo único final posible es un rechazo enseña a aprobar sin mirar, que es la
44
+ * misma razón por la que `seDetieneEn` no pregunta por un artefacto mal puesto.
45
+ * 4. **La política**, con el diff delante. Y sin política no hay escritura: fail-closed por
46
+ * tipo, el patrón de `core/cloudstudio.ts#PoliticaDeAprobacion`.
47
+ *
48
+ * **Nada de aquí puede lanzar hacia el SDK.** El envoltorio de `correr` atrapa lo que
49
+ * escape y deniega: el comportamiento del SDK ante un `canUseTool` que revienta no está
50
+ * medido, y «no medido» no es una barrera.
51
+ */
52
+ export async function decisionDeTool(opciones) {
53
+ const { nombre, entrada, peticion, ficheros, politica, signal } = opciones;
54
+ // Abortado antes de empezar: no se pregunta a nadie por una escritura que ya no va a
55
+ // ocurrir. Sacar un modal para eso enseña a aprobar sin mirar.
56
+ if (signal?.aborted === true)
57
+ return { behavior: "deny", message: MOTIVO_DE_ESCRITURA_ABORTADA };
58
+ const clase = claseDeToolExterna(nombre);
59
+ if (clase === "lectura") {
60
+ /**
61
+ * Leer también lleva guarda de ruta. Medido corriéndolo, y dicho por el propio hijo:
62
+ * «`.env` — sí pude leerlo». La lista blanca permitía `Read` a secas, sin mirar dónde —
63
+ * desde el primer día, o sea que este agujero no lo abrió la escritura: ya estaba.
64
+ */
65
+ const v = veredictoDeLectura({
66
+ cwd: peticion.cwd,
67
+ nombre,
68
+ entrada,
69
+ ficheros,
70
+ ...(opciones.real === undefined ? {} : { real: opciones.real }),
71
+ });
72
+ return v.admitida ? { behavior: "allow" } : { behavior: "deny", message: v.motivo };
73
+ }
74
+ if (clase !== "escritura") {
75
+ return { behavior: "deny", message: motivoDeToolDenegada(nombre, clase) };
76
+ }
77
+ if (!peticion.permitirEscritura) {
78
+ return { behavior: "deny", message: motivoDeToolDenegada(nombre, clase) };
79
+ }
80
+ if (politica === undefined) {
81
+ // Sin política no hay a quién preguntar, y «no hay a quién preguntar» nunca es «sí».
82
+ // Se dice con palabras porque el modo de fallo es que el hijo no pueda escribir: quien
83
+ // lo lea tiene que poder distinguirlo de un rechazo.
84
+ return {
85
+ behavior: "deny",
86
+ message: "xonecode no tiene a quién pedir la autorización de esta escritura en esta sesión, así que no se concede. " +
87
+ "Explica qué querías cambiar.",
88
+ };
89
+ }
90
+ const veredicto = veredictoDeRuta({
91
+ cwd: peticion.cwd,
92
+ ruta: entrada["file_path"],
93
+ ficheros,
94
+ ...(opciones.real === undefined ? {} : { real: opciones.real }),
95
+ });
96
+ if (!veredicto.admitida)
97
+ return { behavior: "deny", message: veredicto.motivo };
98
+ const lineas = diffDeEscrituraExterna(nombre, entrada, veredicto.ruta, ...(opciones.leer === undefined ? [] : [opciones.leer]));
99
+ /**
100
+ * **El `catch` va AQUÍ y no solo en el envoltorio de `correr`.** El de allá vive en un
101
+ * cierre que ningún test puede alcanzar sin lanzar un Claude Code de verdad, o sea que
102
+ * sería la regla escrita y no probada — el patrón de fallo que este repo lleva medido
103
+ * siete veces. Aquí sí se prueba: una política que revienta es un NO.
104
+ *
105
+ * Y reventar es alcanzable de verdad, no hipotético: el «sin humano» de `cli/run.ts`
106
+ * corta LANZANDO desde `pedirAprobacion`.
107
+ */
108
+ let concedida = false;
109
+ // Se apunta aparte: después de la guarda de arriba TypeScript ya sabe que `aborted` era
110
+ // falso, así que releerlo al final no distingue «me dijeron que no» de «se canceló».
111
+ let abortada = false;
112
+ try {
113
+ concedida = await (signal === undefined
114
+ ? politica([{ agente: peticion.agente, ruta: veredicto.ruta, lineas }])
115
+ : // Se corre contra el `signal`, y gana el primero. `pedirAprobacion` no tiene
116
+ // cancelación, así que lo que NO se puede hacer todavía es cerrar el modal que se
117
+ // queda huérfano: sigue delante hasta que alguien lo conteste o venza su plazo, y
118
+ // su respuesta no autoriza nada. Deuda declarada; cerrarlo exige un canal nuevo
119
+ // hacia las tres pieles.
120
+ Promise.race([
121
+ politica([{ agente: peticion.agente, ruta: veredicto.ruta, lineas }]),
122
+ new Promise((resuelto) => {
123
+ // Se relee AQUÍ, y no es redundante con la guarda de arriba: medido con un test
124
+ // que se colgaba cinco segundos, un `signal` que aborta entre las dos líneas
125
+ // —o durante el propio `politica(...)`, que corre ANTES de que esta promesa se
126
+ // construya— nunca dispara su evento, porque `addEventListener("abort")` sobre
127
+ // uno ya abortado no llama a nadie. Sin esta línea la carrera no resolvía nunca
128
+ // y el turno se quedaba colgado esperando a un hijo muerto.
129
+ if (signal.aborted) {
130
+ abortada = true;
131
+ resuelto(false);
132
+ return;
133
+ }
134
+ signal.addEventListener("abort", () => {
135
+ abortada = true;
136
+ resuelto(false);
137
+ }, { once: true });
138
+ }),
139
+ ]));
140
+ }
141
+ catch {
142
+ concedida = false;
143
+ }
144
+ if (!concedida) {
145
+ return {
146
+ behavior: "deny",
147
+ message: abortada ? MOTIVO_DE_ESCRITURA_ABORTADA : MOTIVO_DE_ESCRITURA_RECHAZADA,
148
+ };
149
+ }
150
+ // `updatedInput` se OMITE a propósito: por el TIPO del SDK es opcional y ausente
151
+ // significa «no toco la entrada», que es exactamente lo que queremos. Antes se mandaba
152
+ // `{}`, que por ese mismo tipo se lee como «la entrada es este objeto vacío». Qué hacía
153
+ // el SDK con aquello **no está medido** —nunca se ha lanzado un hijo de Claude Code desde
154
+ // este repo—, así que no se afirma que lo ignorara: se manda la forma que su contrato
155
+ // declara para «sin cambios».
156
+ return { behavior: "allow" };
157
+ }
158
+ /** Si el motor se puede usar de verdad. Sin cachear: el que cachea es quien lo llama. */
159
+ async function medirDisponible(motor) {
160
+ if (motor === "codex")
161
+ return codexDisponible();
162
+ if (motor === "opencode")
163
+ return opencodeDisponible();
164
+ try {
165
+ await import("@anthropic-ai/claude-agent-sdk");
166
+ return true;
167
+ }
168
+ catch {
169
+ // Sin el paquete no hay motor. No se lanza: quien pregunta está decidiendo si monta el
170
+ // especialista, y una excepción ahí tumbaría la construcción del agente entera por una
171
+ // capacidad opcional.
172
+ return false;
173
+ }
174
+ }
175
+ /**
176
+ * El adaptador real, con quien autoriza dentro.
177
+ *
178
+ * **Las opciones son obligatorias aunque sus campos no lo sean**, y eso es deliberado: pedir
179
+ * el objeto obliga a pasar por cada llamador el día que esto cambie, y un campo ausente
180
+ * falla CERRADO —sin política no se escribe— en vez de abrir una puerta en silencio. Es la
181
+ * única dirección aceptable para el patrón de fallo que este repo ya ha medido siete veces:
182
+ * una composición que vive en un cierre que los tests doblan.
183
+ */
184
+ export function crearSubagenteExterno(opciones) {
185
+ const cache = new Map();
186
+ return {
187
+ async disponible(motor) {
188
+ // Se cachea por proceso: `disponible` se pregunta una vez por agente y por
189
+ // construcción del grafo, y comprobar Codex cuesta un `spawn`. La respuesta no cambia
190
+ // a mitad de una sesión salvo que alguien instale el binario con la consola abierta,
191
+ // que es un caso que se arregla reiniciando.
192
+ const visto = cache.get(motor);
193
+ if (visto !== undefined)
194
+ return visto;
195
+ const hay = await medirDisponible(motor);
196
+ cache.set(motor, hay);
197
+ return hay;
198
+ },
199
+ async correr(peticion) {
200
+ if (peticion.motor === "codex") {
201
+ /**
202
+ * **Las cuatro costuras van aquí, y este es exactamente el sitio donde este repo ha
203
+ * fallado nueve veces**: una regla de producción compuesta dentro de algo que todos
204
+ * los tests doblan. `aprobar` y `ficheros` son opcionales, así que olvidarlos deja
205
+ * los dos `tsc` limpios y el agente sin poder escribir NADA —o, peor, escribiendo
206
+ * sin que las guardas de ruta lo vean—. Por eso la decisión entera vive extraída en
207
+ * `escrituraDeCodex.ts#decisionDeEscrituraDeCodex` y aquí solo queda el cableado,
208
+ * que tiene un test por argumento.
209
+ */
210
+ return correrCodex(peticion, {
211
+ ...(opciones.alConsumir === undefined
212
+ ? {}
213
+ : { alConsumir: (c) => opciones.alConsumir?.({ motor: "codex", ...c }) }),
214
+ ...(opciones.aprobarEscritura === undefined ? {} : { aprobar: opciones.aprobarEscritura }),
215
+ // `real` no se pasa: aquí no hay ninguno que inyectar y el de omisión es
216
+ // `realpathSync`, que es el de producción. Quien lo dobla es el test de
217
+ // `decisionDeEscrituraDeCodex`, que es donde vive la guarda.
218
+ ficheros: () => opciones.ficherosDelProyecto?.() ?? new Set(),
219
+ });
220
+ }
221
+ if (peticion.motor === "opencode") {
222
+ /**
223
+ * Las mismas costuras que Codex, y el mismo motivo para que estén aquí y probadas una
224
+ * por una: son opcionales, así que olvidar una deja los dos `tsc` limpios. La de
225
+ * `vistasAplanadas` es la peligrosa — sin ella el hijo puede LEER un `.xml` generado y
226
+ * editar el fichero equivocado.
227
+ */
228
+ return correrOpencode(peticion, {
229
+ ...(opciones.alConsumir === undefined
230
+ ? {}
231
+ : { alConsumir: (c) => opciones.alConsumir?.({ motor: "opencode", ...c }) }),
232
+ ...(opciones.aprobarEscritura === undefined ? {} : { aprobar: opciones.aprobarEscritura }),
233
+ ficheros: () => opciones.ficherosDelProyecto?.() ?? new Set(),
234
+ vistasAplanadas: () => vistasAplanadasDe(opciones.ficherosDelProyecto?.() ?? new Set()),
235
+ ...(opciones.alUsarTool === undefined ? {} : { alUsarTool: opciones.alUsarTool }),
236
+ });
237
+ }
238
+ const { query } = await import("@anthropic-ai/claude-agent-sdk");
239
+ const respuesta = query({
240
+ prompt: peticion.tarea,
241
+ options: {
242
+ // La carpeta del proyecto y ninguna otra. El hijo lee de aquí sus propios ajustes
243
+ // (`CLAUDE.md`, `.claude/`) si los hay; xonecode no se los escribe ni se los filtra.
244
+ cwd: peticion.cwd,
245
+ // Sus instrucciones se AÑADEN al preset de Claude Code en vez de sustituirlo: lo
246
+ // que sabe hacer como producto —leer código, buscar, razonar sobre un repo— es la
247
+ // razón de llamarlo, y reemplazar su prompt entero lo dejaría sin ello. Lo que
248
+ // añadimos son las reglas de XOne y su papel, que es lo que no puede saber.
249
+ systemPrompt: { type: "preset", preset: "claude_code", append: peticion.instrucciones },
250
+ // Doble llave. `permissionMode` es la política del propio hijo y `canUseTool` es
251
+ // la nuestra: la primera puede cambiar de significado con una versión del SDK, la
252
+ // segunda la decidimos aquí y es la que manda.
253
+ /**
254
+ * **`"default"` y no `"dontAsk"`, y el motivo es que ninguno de los dos es seguro
255
+ * por suposición.** Leídas sus descripciones en el SDK: `dontAsk` es «deny if not
256
+ * pre-approved», así que podría denegar la escritura ANTES de consultar nuestro
257
+ * callback y dejar toda esta función muerta con los tests en verde; `default` es
258
+ * «prompts for dangerous operations», así que podría aprobar una tool «no
259
+ * peligrosa» —`WebSearch`, que saca el proyecto de la máquina— sin consultarnos.
260
+ * El primero falla cerrado y el segundo abierto.
261
+ *
262
+ * Lo que resuelve la elección es que ya no depende del modo: el hook `PreToolUse`
263
+ * de abajo contesta las tres clases explícitamente, así que no queda ninguna tool
264
+ * para que la decida el modo. Con eso se elige `default`, que es el modo donde la
265
+ * decisión `ask` del hook SÍ llega a `canUseTool` («the 'ask' path surfaces via a
266
+ * can_use_tool control_request»), que es donde se puede esperar a una persona.
267
+ */
268
+ permissionMode: "default",
269
+ /**
270
+ * **La denegación de verdad vive aquí**, no en `canUseTool`: una regla `allow` de
271
+ * un `settings.json` puede ensombrecer el callback, y un deny del hook «resuelve
272
+ * antes de que `canUseTool` corra». Las dos citas son del propio SDK.
273
+ *
274
+ * Y las dos llaves siguen puestas, que es lo que hace que esto sea robusto en vez
275
+ * de listo: si el hook no llegara a correr, `canUseTool` aplica las MISMAS tres
276
+ * listas (es la misma función); si `canUseTool` se ensombreciera, el hook ya negó
277
+ * lo que no toca y una escritura quedaría en `ask` sin nadie que la conceda.
278
+ */
279
+ hooks: {
280
+ PreToolUse: [
281
+ {
282
+ hooks: [
283
+ // El tipo del callback es la unión de TODOS los eventos de hook, así que
284
+ // el nombre de la tool se lee con cuidado en vez de afirmarlo: por aquí
285
+ // solo llegan `PreToolUse`, pero una entrada sin `tool_name` no puede
286
+ // decidir nada — y ante la duda, denegar (cadena vacía no está en ninguna
287
+ // lista blanca, así que `decisionDePreToolUse` contesta «deny»).
288
+ async (entrada) => {
289
+ const nombre = "tool_name" in entrada ? entrada.tool_name : "";
290
+ const cruda = "tool_input" in entrada ? entrada.tool_input : undefined;
291
+ const args = typeof cruda === "object" && cruda !== null
292
+ ? cruda
293
+ : {};
294
+ const decision = decisionDePreToolUse({
295
+ nombre,
296
+ entrada: args,
297
+ cwd: peticion.cwd,
298
+ ficheros: opciones.ficherosDelProyecto?.() ?? new Set(),
299
+ });
300
+ /**
301
+ * **Solo se cuenta lo que va a ocurrir.** Una tool DENEGADA no se
302
+ * anuncia: la línea diría que el hijo hizo algo que no hizo, y este
303
+ * repo no tiene ningún sitio donde eso sea aceptable. `ask` sí se
304
+ * cuenta —es una escritura propuesta—, que es exactamente lo que el
305
+ * flujo del grafo ya hace con un `write_file` antes de su aprobación.
306
+ */
307
+ if (decision.permissionDecision !== "deny") {
308
+ opciones.alUsarTool?.(eventoDeToolExterna(nombre, args, peticion.cwd));
309
+ }
310
+ return { hookSpecificOutput: decision };
311
+ },
312
+ ],
313
+ },
314
+ ],
315
+ },
316
+ /**
317
+ * **Los ajustes del PROYECTO no se cargan, y esto cierra un agujero que ya estaba
318
+ * abierto.** Medido en el propio SDK (`sdk.mjs`, el aviso
319
+ * `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`): «Allow rules from settings files can also
320
+ * shadow the callback». O sea que una regla `allow` en un `settings.json` hace que
321
+ * `canUseTool` **no se invoque** — y por omisión el SDK carga las tres fuentes,
322
+ * incluida `.claude/settings.json` de dentro del `cwd`. Ese fichero viene de
323
+ * CloudStudio con el proyecto, o sea de fuera: es exactamente el argumento por el
324
+ * que `seAplicaSinAprobacion` vive en `settings.json` y no en el `config.json` del
325
+ * proyecto. Con las tres fuentes cargadas, quien te pasa un proyecto decidía si
326
+ * tus barreras se aplican.
327
+ *
328
+ * Se queda `"user"`: son los ajustes del dueño de la máquina —su autenticación,
329
+ * sus MCP, su modelo—, que es la misma confianza que ya se declara para Codex («el
330
+ * hijo es el Codex DEL USUARIO, con sus MCP, sus plugins y sus hooks»). Lo que se
331
+ * va es lo que puede venir en un zip.
332
+ *
333
+ * Coste dicho: sin `"project"` el hijo tampoco carga el `CLAUDE.md` del proyecto
334
+ * (lo dice su propia documentación de esta opción). No se pierde el papel: sus
335
+ * instrucciones y las reglas de XOne van por `systemPrompt.append`, que es de
336
+ * donde salen de verdad.
337
+ *
338
+ * Y queda DECLARADO lo que esto no cierra: un `allow` en los ajustes GLOBALES del
339
+ * usuario sigue pudiendo ensombrecer el callback. El cierre robusto que el propio
340
+ * SDK nombra es un hook `PreToolUse`, que no se ensombrece; no está puesto todavía.
341
+ */
342
+ settingSources: ["user"],
343
+ // El modelo del PRODUCTO, si el `.md` lo pide. Ausente = el que Claude Code use
344
+ // por su cuenta, que es lo que hacía siempre. Los alias (`opus`, `sonnet`…) son
345
+ // los que su propio SDK documenta, y se prefieren a un id pinchado: sobreviven a
346
+ // la siguiente versión, que es justo para lo que el producto los ofrece.
347
+ ...(peticion.modelo === undefined ? {} : { model: peticion.modelo }),
348
+ /**
349
+ * El envoltorio es el fail-closed llevado al final: **nada de aquí dentro puede
350
+ * lanzar hacia el SDK**. Si la política revienta, si el disco contesta un EACCES
351
+ * al canonicalizar o si alguien introduce un fallo en las guardas, la respuesta es
352
+ * DENEGAR — nunca una excepción, cuyo tratamiento en la máquina de permisos del
353
+ * SDK no está medido, y nunca un permiso.
354
+ */
355
+ canUseTool: async (nombre, entrada, contexto) => {
356
+ try {
357
+ return await decisionDeTool({
358
+ nombre,
359
+ entrada,
360
+ peticion,
361
+ signal: contexto.signal,
362
+ ficheros: opciones.ficherosDelProyecto?.() ?? new Set(),
363
+ ...(opciones.aprobarEscritura === undefined
364
+ ? {}
365
+ : { politica: opciones.aprobarEscritura }),
366
+ });
367
+ }
368
+ catch {
369
+ return {
370
+ behavior: "deny",
371
+ message: "xonecode no pudo decidir sobre esa llamada, así que no se concede. Explica qué querías hacer.",
372
+ };
373
+ }
374
+ },
375
+ },
376
+ });
377
+ // Se recorre hasta el `result`, que es el cierre del turno. El texto final está ahí y
378
+ // no en el último `assistant`: un turno puede terminar por error y entonces el último
379
+ // mensaje del modelo no es la respuesta.
380
+ for await (const mensaje of respuesta) {
381
+ if (mensaje.type !== "result")
382
+ continue;
383
+ if (mensaje.subtype !== "success") {
384
+ opciones.alConsumir?.({ motor: "claude-code", ...consumoDeClaude(mensaje) });
385
+ throw new Error(`${peticion.motor} terminó sin respuesta (${mensaje.subtype})`);
386
+ }
387
+ // `is_error` con subtype «success» significa que el turno acabó en un error de API y
388
+ // el texto ES el error. Devolverlo como si fuera la respuesta del especialista
389
+ // haría que el orquestador se lo creyera.
390
+ // El consumo se apunta ANTES de contestar, y también cuando el turno acabó en
391
+ // error: esos tokens se gastaron igual. Contar solo los éxitos haría que la cifra
392
+ // bajara justo en los turnos que más cuestan.
393
+ opciones.alConsumir?.({ motor: "claude-code", ...consumoDeClaude(mensaje) });
394
+ if (mensaje.is_error)
395
+ throw new Error(`${peticion.motor}: ${mensaje.result}`);
396
+ return mensaje.result;
397
+ }
398
+ throw new Error(`${peticion.motor} no devolvió ningún resultado`);
399
+ },
400
+ };
401
+ }
402
+ /** Los que están cableados de verdad. Los tres, desde que OpenCode habla por ACP. */
403
+ export const MOTORES_CABLEADOS = new Set([
404
+ "claude-code",
405
+ "codex",
406
+ "opencode",
407
+ ]);
408
+ /**
409
+ * Las vistas aplanadas del proyecto: cada `X.xml` que tiene un `X.xne` al lado.
410
+ *
411
+ * Existe porque OpenCode guarda la LECTURA por PATRÓN y no por código —su permiso de lectura
412
+ * llega sin ruta—, y «un `.xml` con un `.xne` al lado» no es un patrón que se pueda escribir:
413
+ * hay que enumerarlas. En los otros dos motores esto lo decide `esVistaAplanada` en el momento.
414
+ */
415
+ export function vistasAplanadasDe(ficheros) {
416
+ const salida = [];
417
+ for (const ruta of ficheros) {
418
+ if (ruta.endsWith(".xml") && ficheros.has(`${ruta.slice(0, -4)}.xne`))
419
+ salida.push(ruta);
420
+ }
421
+ return salida.sort();
422
+ }
423
+ //# sourceMappingURL=subagenteExterno.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagenteExterno.js","sourceRoot":"","sources":["../../src/agent/subagenteExterno.ts"],"names":[],"mappings":"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"}