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,227 @@
1
+ /**
2
+ * Los subagentes como DATOS: qué es uno, cómo se lee de un fichero y cómo se compone su
3
+ * prompt. TypeScript puro — leer el disco es cosa de `agent/agentesEnDisco.ts`.
4
+ *
5
+ * Hasta ahora los cuatro especialistas (`agent/perfiles.ts`) vivían a fuego en un
6
+ * `Record`, y su prompt lo componía `xoneAgent.ts#promptDe` con un `nombre === "planner"`
7
+ * dentro. Eso ya estaba señalado como provisional ahí mismo («los prompts pasan a ficheros
8
+ * `.md` en la fase 9»); esto es esa fase, y con ella los cuatro dejan de ser un caso
9
+ * especial: son los mismos ficheros que puede escribir el usuario, sembrados la primera vez.
10
+ *
11
+ * **Lo que NO sale del fichero, y es deliberado.** Las reglas de XOne se anteponen SIEMPRE,
12
+ * desde código, a todo subagente venga de donde venga (`REGLAS_XONE`). Un subagente que no
13
+ * sepa que XOne ignora en silencio lo desconocido escribirá un atributo inventado y no dará
14
+ * error — dará un bug mudo, que es la razón de ser de este producto. Poder borrarlas
15
+ * editando un `.md` convertiría el invariante en una preferencia; es el mismo principio por
16
+ * el que los avisos de honestidad son código y no prompt (`core/bitacora.ts`).
17
+ */
18
+ export const MOTORES = ["modelo", "claude-code", "codex", "opencode"];
19
+ /**
20
+ * Las reglas del dominio, iguales para todos y NO editables desde el fichero.
21
+ *
22
+ * Están aquí y no repetidas en cada `.md` sembrado por lo mismo que `marca.css` tiene los
23
+ * colores en un solo sitio: cuatro copias de esto es como se acaba con una que se queda
24
+ * vieja. Y un agente que el usuario escriba mañana las hereda sin tener que copiarlas.
25
+ */
26
+ export const REGLAS_XONE = [
27
+ "REGLAS DE XONE, no negociables:",
28
+ "- No es desarrollo web: no existen DOM, React, Vue, ni `async/await` en el runtime.",
29
+ "- La fuente de una colección es su `.xne`. Los `.xml` los genera Studio y no se tocan.",
30
+ "- No inventes atributos XML, funciones ni propiedades CSS: XOne ignora lo desconocido",
31
+ " en silencio, así que un invento no da error — da un bug mudo.",
32
+ ].join("\n");
33
+ /**
34
+ * El prompt completo de un subagente: sus reglas, su descripción y sus instrucciones.
35
+ *
36
+ * Las reglas van PRIMERO y las instrucciones al final, en ese orden a propósito: lo último
37
+ * que lee el modelo es lo que más pesa, y lo que el usuario escribió es lo específico de la
38
+ * tarea. Las reglas no se pueden perder por ir arriba — son cinco líneas, no un preámbulo
39
+ * largo del que el modelo se despiste.
40
+ */
41
+ export function promptDeAgente(agente, skills) {
42
+ return [
43
+ REGLAS_XONE,
44
+ "",
45
+ agente.descripcion,
46
+ ...(agente.instrucciones.trim() === "" ? [] : ["", agente.instrucciones.trim()]),
47
+ "",
48
+ // Las skills que tiene, y las que NO. El aviso es la misma disciplina de siempre: un
49
+ // doble nunca se disfraza, y una skill declarada en el `.md` que no está en el catálogo
50
+ // haría que el modelo intentara cargarla y fallara sin saber por qué. Se dice.
51
+ ...(skills === undefined || skills.suyas.length === 0
52
+ ? []
53
+ : [`Tus skills: ${skills.suyas.join(", ")}. Cárgalas antes de responder.`]),
54
+ ...(skills === undefined || skills.faltan.length === 0
55
+ ? []
56
+ : [`AVISO: te faltan estas skills y no las tienes: ${skills.faltan.join(", ")}.`]),
57
+ // La línea de escritura es ESTRUCTURAL y va aquí, no en el cuerpo del fichero: no
58
+ // depende de lo que el usuario escriba, sino de `soloLectura`, y un agente que escribe
59
+ // sin saber que sus escrituras se aprueban insistiría al ver un rechazo.
60
+ agente.soloLectura
61
+ ? "No modificas nada."
62
+ : "Tus escrituras requieren aprobación humana. Si te la rechazan, no insistas: explica qué pretendías y por qué.",
63
+ /**
64
+ * **Un agente EXTERNO no ve el backend virtual: ve el disco.** Y eso cambia lo que
65
+ * significa una ruta, que es el detalle que más fácil se cuela — un `.md` que diga
66
+ * «guarda en /doc» describe la carpeta `doc` del PROYECTO si el motor es `modelo` (ahí
67
+ * `/` es la raíz montada) y la carpeta `/doc` del SISTEMA si es Claude Code, que es
68
+ * fuera del proyecto y se deniega. El usuario que lo escribe no tiene por qué saber de
69
+ * qué lado cae, así que se dice desde código en vez de esperar a que lo aprenda por un
70
+ * rechazo: es la misma disciplina que la línea de las escrituras y la de las skills.
71
+ *
72
+ * Va con `relativas` y no reescribiendo la ruta: adivinar que un `/doc` «quería decir»
73
+ * `doc/` sería inventar la intención de una escritura, que es justo lo que ninguna
74
+ * guarda de este repo hace.
75
+ */
76
+ ...(agente.motor === "modelo"
77
+ ? []
78
+ : [
79
+ "RUTAS: trabajas sobre la carpeta del proyecto directamente, así que una ruta que " +
80
+ "empiece por «/» es la raíz del SISTEMA y está fuera del proyecto. Escribe las rutas " +
81
+ "relativas a la carpeta del proyecto («doc/GUIA.md»), nunca «/doc/GUIA.md».",
82
+ ]),
83
+ ]
84
+ .join("\n")
85
+ // Los huecos que dejan las partes ausentes (sin instrucciones, sin skills) se colapsan
86
+ // a una línea en blanco: tres saltos seguidos en un prompt no separan nada, solo gastan
87
+ // tokens y hacen que el texto se lea como si faltara algo.
88
+ .replace(/\n{3,}/g, "\n\n");
89
+ }
90
+ /** Reparte las skills declaradas entre las que hay y las que no. Puro: el catálogo entra. */
91
+ export function repartirSkills(agente, disponibles) {
92
+ return {
93
+ suyas: agente.skills.filter((s) => disponibles.has(s)),
94
+ faltan: agente.skills.filter((s) => !disponibles.has(s)),
95
+ };
96
+ }
97
+ function esMotor(v) {
98
+ return MOTORES.includes(v);
99
+ }
100
+ /**
101
+ * El frontmatter, en el subconjunto que hace falta: `clave: valor` y listas en línea
102
+ * (`skills: [a, b]`). No se trae un parser de YAML entero por dos motivos: la superficie
103
+ * que aceptamos es la de arriba y nada más —cuanto menos acepte, menos formas hay de
104
+ * escribir algo que parezca válido y no lo sea—, y una dependencia nueva en `core/` hay
105
+ * que justificarla contra la frontera que `imports.test.ts` vigila.
106
+ *
107
+ * Comillas fuera si las hay: `descripcion: "algo"` y `descripcion: algo` son lo mismo, que
108
+ * es lo que espera quien escribe el fichero a mano.
109
+ */
110
+ function leerFrontmatter(texto) {
111
+ const campos = {};
112
+ for (const linea of texto.split("\n")) {
113
+ const corte = linea.indexOf(":");
114
+ if (corte <= 0)
115
+ continue;
116
+ const clave = linea.slice(0, corte).trim();
117
+ let valor = linea.slice(corte + 1).trim();
118
+ if ((valor.startsWith('"') && valor.endsWith('"') && valor.length >= 2) ||
119
+ (valor.startsWith("'") && valor.endsWith("'") && valor.length >= 2)) {
120
+ valor = valor.slice(1, -1);
121
+ }
122
+ campos[clave] = valor;
123
+ }
124
+ return campos;
125
+ }
126
+ /** `[a, b]` o `a, b` — las dos formas, porque las dos se escriben. Vacío da lista vacía. */
127
+ function leerLista(valor) {
128
+ if (valor === undefined)
129
+ return [];
130
+ const dentro = valor.trim().replace(/^\[/, "").replace(/\]$/, "");
131
+ return dentro
132
+ .split(",")
133
+ .map((s) => s.trim().replace(/^["']|["']$/g, ""))
134
+ .filter((s) => s !== "");
135
+ }
136
+ /**
137
+ * Un `.md` con frontmatter, a `Agente`. Devuelve el motivo en vez de lanzar: un fichero
138
+ * roto no puede tumbar el arranque de la consola — se salta, se dice cuál y por qué, y los
139
+ * demás siguen. Es la misma postura que `sesiones.ts` con una línea corrupta del `.jsonl`.
140
+ */
141
+ export function leerAgente(nombre, contenido, origen) {
142
+ const m = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/.exec(contenido);
143
+ if (m === null)
144
+ return { error: "no tiene frontmatter: hace falta un bloque «---» al principio" };
145
+ const campos = leerFrontmatter(m[1]);
146
+ const instrucciones = m[2] ?? "";
147
+ const descripcion = (campos["descripcion"] ?? "").trim();
148
+ // Sin descripción NO se carga, y no se le inventa una por el nombre: es lo que el
149
+ // orquestador lee para decidir cuándo delegar, así que un agente sin ella o no se usaría
150
+ // nunca o se usaría para todo. Las dos cosas son peores que no tenerlo.
151
+ if (descripcion === "")
152
+ return { error: "le falta «descripcion», que es lo que el orquestador lee para elegirlo" };
153
+ const motorCrudo = (campos["motor"] ?? "modelo").trim();
154
+ if (!esMotor(motorCrudo)) {
155
+ return { error: `«motor: ${motorCrudo}» no existe. Los que hay: ${MOTORES.join(", ")}` };
156
+ }
157
+ const modelo = (campos["modelo"] ?? "").trim();
158
+ // Cualquier cosa que no sea exactamente «true» es false — ver abajo.
159
+ const soloLectura = (campos["soloLectura"] ?? "").trim() === "true";
160
+ /**
161
+ * **Un agente EXTERNO ya puede pedir escribir, y esta guarda se levantó CON el cableado y
162
+ * no antes.** Existía porque sus escrituras se denegaban siempre, así que dejar pasar un
163
+ * `soloLectura: false` le prometía a quien escribió el `.md` una capacidad que no iba a
164
+ * tener — y lo habría descubierto cuando el agente le contestara que no pudo tocar nada.
165
+ *
166
+ * El orden importaba en la otra dirección también: levantarla antes de que
167
+ * `PoliticaDeEscrituraExterna` estuviera montada de punta a punta habría creado justo el
168
+ * caso que la guarda existía para evitar. Hoy las dos puertas están puestas —el papel del
169
+ * `.md` y la autorización por escritura, con las guardas de ruta delante— así que la
170
+ * promesa se cumple.
171
+ *
172
+ * Lo que NO cambia: `soloLectura` sigue siendo cierto solo con exactamente «true» (la
173
+ * trampa del `"false"` de CloudStudio).
174
+ *
175
+ * **Codex también escribe ya, y su guarda se levantó igual: CON el cableado, no antes.**
176
+ * Estuvo cerrada mientras el argumento fue cierto —que su escritura la bloqueaba el
177
+ * sandbox del sistema operativo, y que abrirla exigía `sandbox: "workspace-write"`, con lo
178
+ * que las guardas de ruta de xonecode no verían ni una—. Lo que la medida contra el
179
+ * binario real (0.152.1, 11-09-2026) enseñó es que esa disyuntiva era falsa: la palanca no
180
+ * es el sandbox, es el `approvalPolicy`. Con `read-only` + `on-request` el sandbox sigue
181
+ * siendo la denegación del sistema operativo y cada escritura llega como una petición que
182
+ * xonecode contesta, con las mismas guardas de ruta y la misma
183
+ * `PoliticaDeEscrituraExterna` que el otro motor (`agent/escrituraDeCodex.ts`).
184
+ */
185
+ return {
186
+ agente: {
187
+ nombre,
188
+ descripcion,
189
+ motor: motorCrudo,
190
+ ...(modelo === "" ? {} : { modelo }),
191
+ // Cualquier cosa que no sea exactamente «true» es false: un `soloLectura: quizá` no
192
+ // puede acabar concediendo escritura por ser una cadena verdadera en JavaScript —
193
+ // es la misma trampa que `compartido` con el `"false"` de CloudStudio.
194
+ soloLectura,
195
+ skills: leerLista(campos["skills"]),
196
+ instrucciones,
197
+ origen,
198
+ },
199
+ };
200
+ }
201
+ /**
202
+ * Junta las dos carpetas: el de PROYECTO gana sobre el global con el mismo nombre.
203
+ *
204
+ * Misma precedencia que los modelos (`core/modelos.ts`), y por lo mismo: un «revisor de
205
+ * XOne» se quiere en todos los proyectos, y un «experto en esta app» solo en uno — y el
206
+ * segundo tiene que poder pisar al primero sin borrarlo.
207
+ */
208
+ export function fusionarAgentes(global, proyecto) {
209
+ const porNombre = new Map();
210
+ for (const a of global)
211
+ porNombre.set(a.nombre, a);
212
+ for (const a of proyecto)
213
+ porNombre.set(a.nombre, a);
214
+ return [...porNombre.values()].sort((a, b) => a.nombre.localeCompare(b.nombre));
215
+ }
216
+ /** El `.md` de un agente, para escribirlo. Lo inverso de `leerAgente`. */
217
+ export function escribirAgente(agente) {
218
+ const campos = [
219
+ `descripcion: ${agente.descripcion}`,
220
+ `motor: ${agente.motor}`,
221
+ ...(agente.modelo === undefined ? [] : [`modelo: ${agente.modelo}`]),
222
+ `soloLectura: ${agente.soloLectura}`,
223
+ `skills: [${agente.skills.join(", ")}]`,
224
+ ];
225
+ return `---\n${campos.join("\n")}\n---\n${agente.instrucciones}`;
226
+ }
227
+ //# sourceMappingURL=agentes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentes.js","sourceRoot":"","sources":["../../src/core/agentes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Los ARTEFACTOS de una sesión: lo que el agente produce y **no es del proyecto**.
3
+ *
4
+ * Un diagrama de `archify`, un panel de `artifacts-builder`, la captura que el
5
+ * `xone-device-tester`
6
+ * traerá del móvil el día que hable con él. Son salidas de la conversación, no código de la
7
+ * app: nacen de una pregunta, se miran una vez y no tienen por qué sobrevivir al proyecto.
8
+ *
9
+ * **Hasta ahora acababan DENTRO de la app XOne, y eso era un fallo de verdad.** Las dos
10
+ * skills visuales reparten su entrega entre dos tools —`renderizar_diagrama` y
11
+ * `publish_artifact`— y en xonecode no existe ninguna de las dos (cero apariciones en
12
+ * `src/`), así que el `mockup` caía siempre en el camino de reserva, que dice literalmente
13
+ * «con `write_file`, entrega el HTML autocontenido» en `/artifacts/<nombre>.html`. O sea: la
14
+ * raíz del proyecto. Pasaba por la aprobación humana, entraba en git y, en un proyecto
15
+ * cloud, **subía a CloudStudio**. Un diagrama dentro de la app del cliente.
16
+ *
17
+ * La carpeta virtual `/artefactos/` lo corta de raíz, y es la misma pieza que ya monta
18
+ * `/skills/`: otra raíz colgada del `CompositeBackend` (`agent/proyecto.ts`). Cuatro cosas
19
+ * salen de ahí sin escribir una línea de más, porque cuelga de `.xonecode/`: no entra en el
20
+ * árbol del proyecto, no sube a CloudStudio, no aparece en Revisión y no engorda
21
+ * `.git/objects` (`sacarXonecodeDelIndice`).
22
+ *
23
+ * Este módulo es `core/`: datos puros, una barrera y la regla de dónde va la carpeta. Quién
24
+ * la monta en el backend es de `agent/`.
25
+ */
26
+ import { join } from "node:path";
27
+ import { segmentoSeguro } from "./settings.js";
28
+ /**
29
+ * Dónde caen en DISCO los artefactos de una sesión: `.xonecode/sesiones/<id>/artefactos/`.
30
+ *
31
+ * Vive en `core/` y no en `web/servidor/sesiones.ts` porque lo necesitan los dos lados —el
32
+ * que borra la sesión y el que monta el backend—, y `cli/` no puede importar de `web/`. Es
33
+ * lo que ya son las rutas de `core/settings.ts`: una regla de dónde va cada cosa.
34
+ *
35
+ * Pasa por `segmentoSeguro` por lo mismo que el `.jsonl`: el id llega del cliente por HTTP,
36
+ * y sin esa guarda un `"../../.env"` compondría una ruta fuera de `sesiones/`.
37
+ *
38
+ * Convive con `<id>.jsonl` sin chocar —uno es fichero con extensión, otra es carpeta—, así
39
+ * que no hay nada que mover. Meter el transcript dentro (`<id>/sesion.jsonl`) es una mudanza
40
+ * aparte, con su respaldo de lectura para las sesiones que ya existen.
41
+ */
42
+ export function carpetaDeArtefactosDeSesion(raiz, id) {
43
+ return join(raiz, ".xonecode", "sesiones", segmentoSeguro(id, "id de sesión"), "artefactos");
44
+ }
45
+ /** El prefijo virtual. Con barra final: `CompositeBackend` la exige para no reconstruir
46
+ * `//nombre` fuera de la raíz montada — la misma trampa medida con `/skills/`. */
47
+ export const RUTA_ARTEFACTOS = "/artefactos/";
48
+ /**
49
+ * ¿Es esta ruta la de un artefacto, sin lugar a dudas?
50
+ *
51
+ * Se usa para DOS cosas y una de ellas es una decisión de seguridad: una escritura aquí no
52
+ * pide aprobación humana (ver `agent/turnoReal.ts`), así que esto no puede ser un
53
+ * `startsWith` a secas. Un `/artefactos/../app.xml` que colara por aquí sería una escritura
54
+ * al proyecto aprobada sola.
55
+ *
56
+ * Por eso es una lista blanca de forma y no una lista negra de trampas: cada segmento tiene
57
+ * que ser texto llano (letras, cifras, punto, guion y guion bajo), lo que deja fuera `..`,
58
+ * `.`, los segmentos vacíos de un `//`, la barra invertida de Windows, el NUL y cualquier
59
+ * `%2e%2e` sin decodificar. Lo que no case se trata como una ruta normal, o sea que pasa por
60
+ * la aprobación de siempre — el lado conservador.
61
+ *
62
+ * Medido contra deepagents: un `write` de `/artefactos/../pwn.html` NO llega al proyecto (el
63
+ * `virtualMode` de la raíz montada lo sujeta), pero devuelve OK sin escribir en ninguna
64
+ * parte. Que la barrera esté aquí no depende de eso: depende de que el día que alguien
65
+ * cambie el montaje, el permiso siga siendo del segmento y no del prefijo.
66
+ */
67
+ const SEGMENTO = /^[A-Za-z0-9._-]+$/;
68
+ export function esRutaDeArtefacto(ruta) {
69
+ if (ruta === undefined || !ruta.startsWith(RUTA_ARTEFACTOS))
70
+ return false;
71
+ const segmentos = ruta.slice(RUTA_ARTEFACTOS.length).split("/");
72
+ if (segmentos.length === 0)
73
+ return false;
74
+ return segmentos.every((s) => SEGMENTO.test(s) && s !== "." && s !== "..");
75
+ }
76
+ /**
77
+ * ¿Es esta ruta un artefacto escrito en el SITIO EQUIVOCADO? Y si lo es, dónde iba.
78
+ *
79
+ * **Esto existe porque el prompt se agotó.** La carpeta buena la nombran los cuatro sitios
80
+ * que el modelo puede leer —las instrucciones del `mockup`, la skill `artifacts-builder`,
81
+ * `archify` y la descripción de `write_file`—, y aun así, medido el 2026-09-07 en dos
82
+ * delegaciones CONSECUTIVAS del mismo proyecto: la primera escribió
83
+ * `/artifacts/login_flow.html` y la segunda, un minuto después, `/artefactos/diagrama.html`.
84
+ * No falta ninguna instrucción: es deriva del modelo. Y el fallo no es cosmético — ahí el
85
+ * diagrama pasa por la aprobación humana, entra en git y **sube a CloudStudio, dentro de la
86
+ * app del cliente**.
87
+ *
88
+ * Es la misma clase de regla que las vistas aplanadas: se aplica en el BACKEND
89
+ * (`agent/proyecto.ts#sinArtefactosEnElProyecto`) y no en un prompt, porque un permiso solo
90
+ * protege a quien lo choca. Aquí vive solo la regla, que es datos puros.
91
+ *
92
+ * **Se mira el PRIMER segmento y nada más**, y eso acota el falso positivo a propósito: un
93
+ * `/src/artifacts.js` o un `/scripts/artifacts/util.js` del proyecto pasan sin enterarse.
94
+ * Lo que se deniega es la carpeta de la raíz que XOne no tiene y que ninguna convención de
95
+ * la plataforma usa. El precio, dicho: un proyecto que de verdad tuviera un `artifacts/` en
96
+ * su raíz no podría escribir ahí con el agente. Se acepta, porque el otro lado del error es
97
+ * un diagrama subido a la app del cliente sin que nadie se entere.
98
+ *
99
+ * Sin distinguir mayúsculas, que es la lección de APFS: `/Artifacts/` abre el mismo sitio.
100
+ */
101
+ const CARPETAS_EQUIVOCADAS = new Set(["artifacts", "artifact"]);
102
+ /** El fichero suelto que nombra el contrato de `publish_artifact` (`path="/artifact.html"`). */
103
+ const FICHERO_EQUIVOCADO = "artifact.html";
104
+ export function artefactoFueraDeSitio(ruta) {
105
+ const segmentos = ruta.split(/[\\/]+/).filter((s) => s.length > 0);
106
+ if (segmentos.length === 0)
107
+ return undefined;
108
+ const primero = segmentos[0].toLowerCase();
109
+ const esCarpeta = CARPETAS_EQUIVOCADAS.has(primero) && segmentos.length > 1;
110
+ const esFichero = primero === FICHERO_EQUIVOCADO && segmentos.length === 1;
111
+ if (!esCarpeta && !esFichero)
112
+ return undefined;
113
+ // La carpeta de la sesión es PLANA hacia fuera: de `/artifacts/sub/x.html` se propone
114
+ // `x.html`, no `sub/x.html`. Un artefacto es una salida, no un árbol.
115
+ return `${RUTA_ARTEFACTOS}${segmentos[segmentos.length - 1]}`;
116
+ }
117
+ /** El nombre que se le enseña a una persona: el último segmento y nada más. */
118
+ export function nombreDeArtefacto(ruta) {
119
+ return ruta.slice(ruta.lastIndexOf("/") + 1);
120
+ }
121
+ /**
122
+ * De qué es este artefacto, por su EXTENSIÓN.
123
+ *
124
+ * Tabla cerrada y por extensión, igual que el visor de Ficheros: olfatear los bytes no vale
125
+ * —un PNG lleva ceros en su cabecera y caería por el camino del texto— y aquí además el
126
+ * fichero lo acaba de escribir el agente, así que su nombre es lo que él eligió decir que
127
+ * es. Lo que no esté en la tabla no se afirma: `undefined` es «no lo sé», que es distinto de
128
+ * «es binario».
129
+ */
130
+ const MIMES = {
131
+ html: "text/html",
132
+ svg: "image/svg+xml",
133
+ png: "image/png",
134
+ jpg: "image/jpeg",
135
+ jpeg: "image/jpeg",
136
+ webp: "image/webp",
137
+ gif: "image/gif",
138
+ md: "text/markdown",
139
+ txt: "text/plain",
140
+ json: "application/json",
141
+ csv: "text/csv",
142
+ };
143
+ export function mimeDeArtefacto(nombre) {
144
+ const punto = nombre.lastIndexOf(".");
145
+ if (punto <= 0)
146
+ return undefined;
147
+ return MIMES[nombre.slice(punto + 1).toLowerCase()];
148
+ }
149
+ //# sourceMappingURL=artefactos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artefactos.js","sourceRoot":"","sources":["../../src/core/artefactos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Los tipos que cruzan la frontera CloudStudio ↔ xonecode.
3
+ *
4
+ * Viven en `core/` a propósito: son datos, no transporte. El SDK MCP se queda en `agent/`.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cloudstudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudstudio.js","sourceRoot":"","sources":["../../src/core/cloudstudio.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}