xonecode 0.2.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/README.md +49 -7
  2. package/THIRD_PARTY_NOTICES.md +128 -0
  3. package/apps/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/apps/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/apps/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/apps/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/apps/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/apps/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/apps/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/apps/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/apps/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/apps/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/apps/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/apps/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/apps/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/apps/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/apps/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/apps/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/apps/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/apps/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/apps/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/apps/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/apps/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/apps/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/apps/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/apps/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/apps/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/apps/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/apps/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/apps/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/apps/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/apps/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/apps/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/apps/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/apps/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/apps/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/apps/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/apps/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/apps/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/apps/web/dist/assets/c-BIGW1oBm.js +1 -0
  63. package/apps/web/dist/assets/cpp-DddhVWhK.js +1 -0
  64. package/apps/web/dist/assets/csharp-DSvCPggb.js +1 -0
  65. package/apps/web/dist/assets/css-CLj8gQPS.js +1 -0
  66. package/apps/web/dist/assets/go-C27-OAKa.js +1 -0
  67. package/apps/web/dist/assets/html-CfGypltT.js +1 -0
  68. package/apps/web/dist/assets/index-BB3SamhR.css +1 -0
  69. package/apps/web/dist/assets/index-CFYAoHdw.js +477 -0
  70. package/apps/web/dist/assets/ini-BEwlwnbL.js +1 -0
  71. package/apps/web/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  72. package/apps/web/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  73. package/apps/web/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  74. package/apps/web/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  75. package/apps/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  76. package/apps/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  77. package/apps/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  78. package/apps/web/dist/assets/java-CylS5w8V.js +1 -0
  79. package/apps/web/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  80. package/apps/web/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  81. package/apps/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  82. package/apps/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  83. package/apps/web/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  84. package/apps/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  85. package/apps/web/dist/assets/less-B1dDrJ26.js +1 -0
  86. package/apps/web/dist/assets/lua-BaeVxFsk.js +1 -0
  87. package/apps/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  88. package/apps/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  89. package/apps/web/dist/assets/php-D_2--9WK.js +1 -0
  90. package/apps/web/dist/assets/python-B6aJPvgy.js +1 -0
  91. package/apps/web/dist/assets/ruby-DSHSDbk1.js +1 -0
  92. package/apps/web/dist/assets/rust-B1yitclQ.js +1 -0
  93. package/apps/web/dist/assets/scss-D5BDwBP9.js +1 -0
  94. package/apps/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  95. package/apps/web/dist/assets/swift-C2oV4EkX.js +1 -0
  96. package/apps/web/dist/assets/toml-vGWfd6FD.js +1 -0
  97. package/apps/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  98. package/apps/web/dist/assets/yaml-Buea-lGh.js +1 -0
  99. package/apps/web/dist/iconos/xonecode.png +0 -0
  100. package/apps/web/dist/index.html +20 -0
  101. package/dist/agent/agentesEnDisco.js +539 -0
  102. package/dist/agent/agentesEnDisco.js.map +1 -0
  103. package/dist/agent/arbolDeProyecto.js +245 -0
  104. package/dist/agent/arbolDeProyecto.js.map +1 -0
  105. package/dist/agent/artefactosEnDisco.js +139 -0
  106. package/dist/agent/artefactosEnDisco.js.map +1 -0
  107. package/dist/agent/aumentador.js +175 -0
  108. package/dist/agent/aumentador.js.map +1 -0
  109. package/dist/agent/authEnDisco.js +76 -1
  110. package/dist/agent/authEnDisco.js.map +1 -1
  111. package/dist/agent/busquedaRegex.js +92 -0
  112. package/dist/agent/busquedaRegex.js.map +1 -0
  113. package/dist/agent/catalogoModelos.js +345 -0
  114. package/dist/agent/catalogoModelos.js.map +1 -0
  115. package/dist/agent/checkpointer.js +127 -0
  116. package/dist/agent/checkpointer.js.map +1 -0
  117. package/dist/agent/cloudstudioClient.js +194 -0
  118. package/dist/agent/cloudstudioClient.js.map +1 -0
  119. package/dist/agent/cloudstudioMcp.js +722 -0
  120. package/dist/agent/cloudstudioMcp.js.map +1 -0
  121. package/dist/agent/configEnDisco.js +309 -11
  122. package/dist/agent/configEnDisco.js.map +1 -1
  123. package/dist/agent/consumoExterno.js +99 -0
  124. package/dist/agent/consumoExterno.js.map +1 -0
  125. package/dist/agent/descarga.js +149 -0
  126. package/dist/agent/descarga.js.map +1 -0
  127. package/dist/agent/diagnosticoDeTools.js +51 -0
  128. package/dist/agent/diagnosticoDeTools.js.map +1 -0
  129. package/dist/agent/dispositivosEnMaquina.js +596 -0
  130. package/dist/agent/dispositivosEnMaquina.js.map +1 -0
  131. package/dist/agent/escrituraDeCodex.js +134 -0
  132. package/dist/agent/escrituraDeCodex.js.map +1 -0
  133. package/dist/agent/escrituraDeOpencode.js +80 -0
  134. package/dist/agent/escrituraDeOpencode.js.map +1 -0
  135. package/dist/agent/escrituraExterna.js +742 -0
  136. package/dist/agent/escrituraExterna.js.map +1 -0
  137. package/dist/agent/gemini.js +81 -0
  138. package/dist/agent/gemini.js.map +1 -0
  139. package/dist/agent/git.js +83 -0
  140. package/dist/agent/git.js.map +1 -0
  141. package/dist/agent/gitSync.js +441 -0
  142. package/dist/agent/gitSync.js.map +1 -0
  143. package/dist/agent/hotswap.js +448 -0
  144. package/dist/agent/hotswap.js.map +1 -0
  145. package/dist/agent/instalacionEnMaquina.js +252 -0
  146. package/dist/agent/instalacionEnMaquina.js.map +1 -0
  147. package/dist/agent/instantanea.js +7 -10
  148. package/dist/agent/instantanea.js.map +1 -1
  149. package/dist/agent/interrupts.js +11 -2
  150. package/dist/agent/interrupts.js.map +1 -1
  151. package/dist/agent/juezDeTarea.js +345 -0
  152. package/dist/agent/juezDeTarea.js.map +1 -0
  153. package/dist/agent/lanzamientoEnMaquina.js +377 -0
  154. package/dist/agent/lanzamientoEnMaquina.js.map +1 -0
  155. package/dist/agent/manifiesto.js +59 -0
  156. package/dist/agent/manifiesto.js.map +1 -0
  157. package/dist/agent/memoriaDeProyecto.js +60 -0
  158. package/dist/agent/memoriaDeProyecto.js.map +1 -0
  159. package/dist/agent/modelos.js +105 -17
  160. package/dist/agent/modelos.js.map +1 -1
  161. package/dist/agent/modelosDeMotor.js +204 -0
  162. package/dist/agent/modelosDeMotor.js.map +1 -0
  163. package/dist/agent/paqueteDelProyecto.js +181 -0
  164. package/dist/agent/paqueteDelProyecto.js.map +1 -0
  165. package/dist/agent/perfiles.js +92 -31
  166. package/dist/agent/perfiles.js.map +1 -1
  167. package/dist/agent/persona.js +40 -0
  168. package/dist/agent/persona.js.map +1 -0
  169. package/dist/agent/procesosEnMaquina.js +204 -0
  170. package/dist/agent/procesosEnMaquina.js.map +1 -0
  171. package/dist/agent/proyecto.js +311 -13
  172. package/dist/agent/proyecto.js.map +1 -1
  173. package/dist/agent/puente.js +63 -6
  174. package/dist/agent/puente.js.map +1 -1
  175. package/dist/agent/resumenDeContexto.js +30 -0
  176. package/dist/agent/resumenDeContexto.js.map +1 -0
  177. package/dist/agent/resumenDeTool.js +64 -18
  178. package/dist/agent/resumenDeTool.js.map +1 -1
  179. package/dist/agent/sesionGit.js +481 -0
  180. package/dist/agent/sesionGit.js.map +1 -0
  181. package/dist/agent/settingsEnDisco.js +189 -0
  182. package/dist/agent/settingsEnDisco.js.map +1 -0
  183. package/dist/agent/subagenteCodex.js +368 -0
  184. package/dist/agent/subagenteCodex.js.map +1 -0
  185. package/dist/agent/subagenteExterno.js +423 -0
  186. package/dist/agent/subagenteExterno.js.map +1 -0
  187. package/dist/agent/subagenteOpencode.js +389 -0
  188. package/dist/agent/subagenteOpencode.js.map +1 -0
  189. package/dist/agent/subida.js +202 -0
  190. package/dist/agent/subida.js.map +1 -0
  191. package/dist/agent/tareasEnDisco.js +466 -0
  192. package/dist/agent/tareasEnDisco.js.map +1 -0
  193. package/dist/agent/turnoReal.js +663 -50
  194. package/dist/agent/turnoReal.js.map +1 -1
  195. package/dist/agent/versionEnDisco.js +48 -0
  196. package/dist/agent/versionEnDisco.js.map +1 -0
  197. package/dist/agent/xoneAgent.js +290 -49
  198. package/dist/agent/xoneAgent.js.map +1 -1
  199. package/dist/agent/zip.js +52 -0
  200. package/dist/agent/zip.js.map +1 -0
  201. package/dist/cli/acuseDeModelo.js +30 -0
  202. package/dist/cli/acuseDeModelo.js.map +1 -0
  203. package/dist/cli/aprobar.js +55 -2
  204. package/dist/cli/aprobar.js.map +1 -1
  205. package/dist/cli/config.js +9 -13
  206. package/dist/cli/config.js.map +1 -1
  207. package/dist/cli/consola.js +750 -19
  208. package/dist/cli/consola.js.map +1 -1
  209. package/dist/cli/main.js +740 -81
  210. package/dist/cli/main.js.map +1 -1
  211. package/dist/cli/markdown.js +188 -2
  212. package/dist/cli/markdown.js.map +1 -1
  213. package/dist/cli/run.js +32 -4
  214. package/dist/cli/run.js.map +1 -1
  215. package/dist/cli/stdio.js +46 -19
  216. package/dist/cli/stdio.js.map +1 -1
  217. package/dist/cli/tema.js +96 -8
  218. package/dist/cli/tema.js.map +1 -1
  219. package/dist/cli/tokens.js +29 -0
  220. package/dist/cli/tokens.js.map +1 -0
  221. package/dist/cli/tui/app.js +171 -0
  222. package/dist/cli/tui/app.js.map +1 -0
  223. package/dist/cli/tui/aprobarTui.js +80 -0
  224. package/dist/cli/tui/aprobarTui.js.map +1 -0
  225. package/dist/cli/tui/barra.js +37 -0
  226. package/dist/cli/tui/barra.js.map +1 -0
  227. package/dist/cli/tui/correrTui.js +478 -0
  228. package/dist/cli/tui/correrTui.js.map +1 -0
  229. package/dist/cli/tui/entrada.js +166 -0
  230. package/dist/cli/tui/entrada.js.map +1 -0
  231. package/dist/cli/tui/filas.js +24 -0
  232. package/dist/cli/tui/filas.js.map +1 -0
  233. package/dist/cli/tui/logo.js +49 -0
  234. package/dist/cli/tui/logo.js.map +1 -0
  235. package/dist/cli/tui/pielTui.js +14 -0
  236. package/dist/cli/tui/pielTui.js.map +1 -0
  237. package/dist/cli/tui/raton.js +126 -0
  238. package/dist/cli/tui/raton.js.map +1 -0
  239. package/dist/cli/tui/sidebar.js +86 -0
  240. package/dist/cli/tui/sidebar.js.map +1 -0
  241. package/dist/cli/tui/store.js +143 -0
  242. package/dist/cli/tui/store.js.map +1 -0
  243. package/dist/cli/tui/tarjeta.js +19 -0
  244. package/dist/cli/tui/tarjeta.js.map +1 -0
  245. package/dist/cli/tui/temaInk.js +114 -0
  246. package/dist/cli/tui/temaInk.js.map +1 -0
  247. package/dist/cli/tui/transcript.js +254 -0
  248. package/dist/cli/tui/transcript.js.map +1 -0
  249. package/dist/cli/wizardInicial.js +240 -0
  250. package/dist/cli/wizardInicial.js.map +1 -0
  251. package/dist/core/actos.js +113 -0
  252. package/dist/core/actos.js.map +1 -0
  253. package/dist/core/adjuntos.js +97 -0
  254. package/dist/core/adjuntos.js.map +1 -0
  255. package/dist/core/agentes.js +227 -0
  256. package/dist/core/agentes.js.map +1 -0
  257. package/dist/core/artefactos.js +149 -0
  258. package/dist/core/artefactos.js.map +1 -0
  259. package/dist/core/cloudstudio.js +7 -0
  260. package/dist/core/cloudstudio.js.map +1 -0
  261. package/dist/core/config.js +212 -5
  262. package/dist/core/config.js.map +1 -1
  263. package/dist/core/contextos.js +53 -1
  264. package/dist/core/contextos.js.map +1 -1
  265. package/dist/core/descargas.js +106 -0
  266. package/dist/core/descargas.js.map +1 -0
  267. package/dist/core/descriptoresDeApp.js +279 -0
  268. package/dist/core/descriptoresDeApp.js.map +1 -0
  269. package/dist/core/dispositivos.js +466 -0
  270. package/dist/core/dispositivos.js.map +1 -0
  271. package/dist/core/entrega.js +141 -0
  272. package/dist/core/entrega.js.map +1 -0
  273. package/dist/core/entrelazar.js +90 -0
  274. package/dist/core/entrelazar.js.map +1 -0
  275. package/dist/core/esqueleto.js +10 -0
  276. package/dist/core/esqueleto.js.map +1 -1
  277. package/dist/core/modelos.js +235 -3
  278. package/dist/core/modelos.js.map +1 -1
  279. package/dist/core/notify.js +27 -9
  280. package/dist/core/notify.js.map +1 -1
  281. package/dist/core/planDeSubida.js +127 -0
  282. package/dist/core/planDeSubida.js.map +1 -0
  283. package/dist/core/ports.js +189 -1
  284. package/dist/core/ports.js.map +1 -1
  285. package/dist/core/puedeLanzarse.js +239 -0
  286. package/dist/core/puedeLanzarse.js.map +1 -0
  287. package/dist/core/rutaVirtual.js +42 -0
  288. package/dist/core/rutaVirtual.js.map +1 -0
  289. package/dist/core/settings.js +246 -0
  290. package/dist/core/settings.js.map +1 -0
  291. package/dist/core/tareas.js +230 -0
  292. package/dist/core/tareas.js.map +1 -0
  293. package/dist/core/textos.js +36 -0
  294. package/dist/core/textos.js.map +1 -0
  295. package/dist/core/turno.js +70 -10
  296. package/dist/core/turno.js.map +1 -1
  297. package/dist/core/version.js +31 -0
  298. package/dist/core/version.js.map +1 -0
  299. package/dist/vendor/tokenTracking.js +22 -1
  300. package/dist/vendor/tokenTracking.js.map +1 -1
  301. package/dist/web/servidor/arranque.js +3964 -0
  302. package/dist/web/servidor/arranque.js.map +1 -0
  303. package/dist/web/servidor/consolaDeTarea.js +161 -0
  304. package/dist/web/servidor/consolaDeTarea.js.map +1 -0
  305. package/dist/web/servidor/consolaWeb.js +389 -0
  306. package/dist/web/servidor/consolaWeb.js.map +1 -0
  307. package/dist/web/servidor/corredorDeTareas.js +1119 -0
  308. package/dist/web/servidor/corredorDeTareas.js.map +1 -0
  309. package/dist/web/servidor/pielWeb.js +269 -0
  310. package/dist/web/servidor/pielWeb.js.map +1 -0
  311. package/dist/web/servidor/servidor.js +257 -0
  312. package/dist/web/servidor/servidor.js.map +1 -0
  313. package/dist/web/servidor/sesiones.js +440 -0
  314. package/dist/web/servidor/sesiones.js.map +1 -0
  315. package/dist/web/servidor/transporte.js +169 -0
  316. package/dist/web/servidor/transporte.js.map +1 -0
  317. package/dist/web/servidor/vestibulo.js +1276 -0
  318. package/dist/web/servidor/vestibulo.js.map +1 -0
  319. package/package.json +30 -8
  320. package/skills/archify/LICENSE +22 -0
  321. package/skills/archify/SKILL.md +109 -0
  322. package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
  323. package/skills/archify/assets/template.html +14787 -0
  324. package/skills/archify/bin/archify.mjs +1990 -0
  325. package/skills/archify/bin/open-artifact.mjs +86 -0
  326. package/skills/archify/bin/preview.mjs +648 -0
  327. package/skills/archify/bin/visual-check.mjs +829 -0
  328. package/skills/archify/brand-marks/README.md +31 -0
  329. package/skills/archify/brand-marks/catalog.json +131 -0
  330. package/skills/archify/delta/architecture-delta.mjs +1214 -0
  331. package/skills/archify/examples/agent-run.lifecycle.json +71 -0
  332. package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
  333. package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
  334. package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
  335. package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
  336. package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
  337. package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
  338. package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
  339. package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
  340. package/skills/archify/examples/event-stream.dataflow.json +57 -0
  341. package/skills/archify/examples/incident-response.workflow.json +64 -0
  342. package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
  343. package/skills/archify/examples/product-analytics.dataflow.json +76 -0
  344. package/skills/archify/examples/production-deployment.architecture.json +71 -0
  345. package/skills/archify/examples/release-delivery.workflow.json +62 -0
  346. package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
  347. package/skills/archify/examples/web-app-rendered.html +14862 -0
  348. package/skills/archify/examples/web-app.architecture.json +46 -0
  349. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
  350. package/skills/archify/migrations/workflow-v2.mjs +279 -0
  351. package/skills/archify/package.json +17 -0
  352. package/skills/archify/recipes/scenarios.mjs +391 -0
  353. package/skills/archify/references/authoring-contract.md +198 -0
  354. package/skills/archify/references/brand-marks.md +69 -0
  355. package/skills/archify/references/delivery-contract.md +116 -0
  356. package/skills/archify/references/viewer-runtime.md +45 -0
  357. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  358. package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
  359. package/skills/archify/renderers/dataflow/README.md +104 -0
  360. package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
  361. package/skills/archify/renderers/lifecycle/README.md +115 -0
  362. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
  363. package/skills/archify/renderers/sequence/README.md +114 -0
  364. package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
  365. package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
  366. package/skills/archify/renderers/shared/cli.mjs +218 -0
  367. package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
  368. package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
  369. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  370. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  371. package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
  372. package/skills/archify/renderers/shared/geometry.mjs +1423 -0
  373. package/skills/archify/renderers/shared/i18n.mjs +594 -0
  374. package/skills/archify/renderers/shared/layout-report.mjs +40 -0
  375. package/skills/archify/renderers/shared/legend.mjs +217 -0
  376. package/skills/archify/renderers/shared/output-path.mjs +321 -0
  377. package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
  378. package/skills/archify/renderers/shared/text-fit.mjs +49 -0
  379. package/skills/archify/renderers/shared/utils.mjs +232 -0
  380. package/skills/archify/renderers/shared/validator.mjs +86 -0
  381. package/skills/archify/renderers/workflow/README.md +223 -0
  382. package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
  383. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
  384. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  385. package/skills/archify/schemas/README.md +211 -0
  386. package/skills/archify/schemas/architecture.schema.json +176 -0
  387. package/skills/archify/schemas/common.schema.json +115 -0
  388. package/skills/archify/schemas/dataflow.schema.json +243 -0
  389. package/skills/archify/schemas/lifecycle.schema.json +266 -0
  390. package/skills/archify/schemas/sequence.schema.json +223 -0
  391. package/skills/archify/schemas/workflow.schema.json +428 -0
  392. package/skills/archify/scripts/check-render-output.mjs +835 -0
  393. package/skills/archify/scripts/check-update.mjs +1667 -0
  394. package/skills/archify/scripts/render-examples.mjs +26 -0
  395. package/skills/archify/scripts/update-contract.mjs +182 -0
  396. package/skills/archify/skill-release.json +10 -0
  397. package/skills/artifacts-builder/SKILL.md +120 -0
  398. package/skills/artifacts-builder/reference/diagramas.md +123 -0
  399. package/skills/artifacts-builder/reference/estilo.md +123 -0
  400. package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
  401. package/skills/artifacts-builder/reference/graficas.md +22 -0
  402. package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
  403. package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
  404. package/skills/xone-hotswap/SKILL.md +185 -0
  405. package/skills/xone-hotswap/references/comandos.md +706 -0
  406. package/skills/xone-hotswap/references/conexion-y-despliegue.md +226 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corredorDeTareas.js","sourceRoot":"","sources":["../../../src/web/servidor/corredorDeTareas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EACL,cAAc,EACd,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAGhB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAwBjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,cAAc,CAC5B,eAGyF;IAEzF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,KAAK,gBAAgB;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC3F;;;;;;WAMG;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,uFAAuF;IACvF,6CAA6C,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAClC,wFAAwF;IACxF,oFAAoF;IACpF,iBAAiB,CAAC;AAEpB,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAAqB,EAAU,EAAE,CACnE,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,0FAA0F;IAC1F,uFAAuF;IACvF,wBAAwB,CAAC;AAE3B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAE,KAAa,EAAE,UAAmB,EAAU,EAAE,CAChG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,yBAAyB,0BAA0B,OAAO,kBAAkB,KAAK,EAAE,CAAC;AAE9G;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,iFAAiF;AACjF,MAAM,sBAAsB,GAAG,CAAC,GAAuB,EAAE,YAAqB,EAAU,EAAE;IACxF,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACtE,CAAC,CAAC;AAkHF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;YAClD,oFAAoF;YACpF,yCAAyC;YACzC,MAAM,OAAO,GAAY;gBACvB,GAAG,mBAAmB,CAAC;oBACvB,OAAO;oBACP,iFAAiF;oBACjF,kFAAkF;oBAClF,mDAAmD;oBACnD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;oBACnD,yDAAyD;oBACzD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC3C,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtE,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;iBAChD,CAAC;gBACF;;;;;;;;;;;mBAWG;gBACH,kBAAkB,EAAE,uBAAuB;aAC5C,CAAC;YACF,oFAAoF;YACpF,sFAAsF;YACtF,+EAA+E;YAC/E,OAAO,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE;QAC9B,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE;QAC1C,sFAAsF;QACtF,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAChD,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAkGrC;IACC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,yFAAyF;IACzF,IAAI,YAAiC,CAAC;IACtC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAoEtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE3C;;;;;;;;;;;OAWG;IACH,MAAM,4BAA4B,GAAG,CACnC,EAAU,EACV,SAA+C,EACtC,EAAE;QACX,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrG,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACvD,CAAC,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE,CAC1C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAErG;;;;;;;;;;;;;;OAcG;IACH,MAAM,uBAAuB,GAAG,KAAK,EAAE,IAAY,EAAE,MAA0B,EAAoB,EAAE;QACnG,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC/E,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,sFAAsF;YACtF,sEAAsE;YACtE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,wFAAwF;QACxF,yFAAyF;QACzF,mEAAmE;QACnE,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,wDAAwD;IACxD,MAAM,SAAS,GAAG,CAAC,KAAY,EAAS,EAAE;QACxC,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,sBAAsB,GAAG,KAAK,EAClC,KAAY,EACZ,MAAc;IACd,8EAA8E;IAC9E,WAA+B;IAC/B,6EAA6E;IAC7E,SAA4B,EACb,EAAE;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnF,wFAAwF;QACxF,mFAAmF;QACnF,MAAM,aAAa,GAAG,CAAC,CAAQ,EAAS,EAAE,CACxC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,aAAa,GAAG,CAAC,KAAc,EAAU,EAAE,CAC/C,KAAK,YAAY,mBAAmB;QAClC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjB,CAAC,CAAC,uCAAuC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAEhE;;;;;;;;;;;;;;;OAeG;IACH,MAAM,eAAe,GAAG,KAAK,EAC3B,KAAY,EACZ,MAAc,EACd,OAAgB,EAChB,SAAuC;IACvC,kFAAkF;IAClF,YAAkC,EAChB,EAAE;QACpB;;;;;;;;;WASG;QACH,MAAM,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,GAAqB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,8EAA8E;YAC9E,sFAAsF;YACtF,QAAQ,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QACD;;;;;WAKG;QACH,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC;QAChD;;;;;;;;;WASG;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,MAAM,EACJ,oFAAoF;oBACpF,mDAAmD;aACtD,CAAC;QACJ,CAAC;QACD,IAAI,SAAuC,CAAC;QAC5C,IAAI,KAAc,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB;;;;WAIG;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI;aAC3B,MAAM,CAAC;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;YACzB,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1E;;;;;;;;;eASG;YACH,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;YACtF,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;SAC3E,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;aACjC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC;YAC5E,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,gCAAgC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,IAAI;aAC5G,CAAC;QACJ,CAAC;QACD,IAAI,OAAO;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QAC9B,OAAO,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,qBAAqB,GAAG,CAAC,EAAU,EAAE,KAAe,EAAQ,EAAE;QAClE,sFAAsF;QACtF,qFAAqF;QACrF,yFAAyF;QACzF,mFAAmF;QACnF,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO;YAAE,OAAO;QACjF,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,uFAAuF;QACvF,4EAA4E;QAC5E,QAAQ,CAAC,+CAA+C,QAAQ,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACjH,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,MAAc,EAAE,QAAkC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAQ,EAAE;QAC/F,IAAI,CAAC;YACH,4BAA4B,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAC1C,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;gBAClD,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC;gBACvD,CAAC,CAAC,SAAS,CACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mFAAmF;YACnF,6CAA6C;YAC7C,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAsB,EAAE,CAC7D,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAG,KAAK,EAAE,KAAY,EAAE,OAAgB,EAAiB,EAAE;QACrE,IAAI,OAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,qFAAqF;YACrF,oDAAoD;YACpD,oFAAoF;YACpF,kFAAkF;YAClF,iFAAiF;YACjF,sFAAsF;YACtF,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CACrC,KAAK,CAAC,QAAQ,CAAC,IAAI,EACnB,KAAK,CAAC,MAAM,EACZ,iBAAiB,CAAC,KAAK,CAAC,EACxB,KAAK,CAAC,EAAE,CACT,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf;;;;;;;;;;;eAWG;YACH,IAAI,CAAC;gBACH,4BAA4B,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAChD,MAAM,CAAC,MAAM,KAAK,OAAO;oBACvB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,EAAE,iCAAiC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5F,CAAC,CAAC,SAAS,CACd,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,kFAAkF;gBAClF,qFAAqF;gBACrF,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;YACvC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC;QACF,uFAAuF;QACvF,8CAA8C;QAC9C,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB;;;;;WAKG;QACH,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,uFAAuF;QACvF,6EAA6E;QAC7E,sFAAsF;QACtF,6EAA6E;QAC7E,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,MAAM,EAAE,CAAC;YACf,qFAAqF;YACrF,kFAAkF;YAClF,qFAAqF;YACrF,oFAAoF;YACpF,6EAA6E;YAC7E,sFAAsF;YACtF,sFAAsF;YACtF,2EAA2E;YAC3E,IAAI,OAAO,CAAC,YAAY;gBAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B;;;;;WAKG;QACH,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;QAC9C,IAAI,MAA0B,CAAC;QAC/B;;;WAGG;QACH,IAAI,SAAuC,CAAC;QAC5C,+EAA+E;QAC/E,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B;;;;;WAKG;QACH,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB;;;;;;WAMG;QACH,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC;YACH;;;;;;;;;;eAUG;YACH,OAAO,GAAG,4BAA4B,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;oBAAE,OAAO,SAAS,CAAC;gBAChD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC7D,MAAM,qBAAqB,GACzB,SAAS,KAAK,SAAS;oBACrB,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9G,IAAI,SAAS,KAAK,SAAS;oBAAE,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACxG,iFAAiF;gBACjF,kFAAkF;gBAClF,iFAAiF;gBACjF,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClD,OAAO,SAAS,CAAC,EAAE,GAAG,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACjG,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,EAAE,CAAC;gBACZ,mFAAmF;gBACnF,mFAAmF;gBACnF,yDAAyD;gBACzD,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;gBACzB,SAAS;oBACP,CAAC,MAAM,OAAO,CAAC,WAAW,CACxB,QAAQ,EACR,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAC1D,CAAC,IAAI,SAAS,CAAC;gBAClB,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uFAAuF;YACvF,qFAAqF;YACrF,wFAAwF;YACxF,oCAAoC;YACpC,EAAE;YACF,kFAAkF;YAClF,gFAAgF;YAChF,6EAA6E;YAC7E,qFAAqF;YACrF,iFAAiF;YACjF,mEAAmE;YACnE,IAAI,OAAO,EAAE,CAAC;gBACZ,mFAAmF;gBACnF,kFAAkF;gBAClF,4EAA4E;gBAC5E,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;oBAAE,aAAa,GAAG,IAAI,CAAC;gBACpF,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/F,CAAC;;gBAAM,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;gBAAS,CAAC;YACT;;;;;;;;;;;eAWG;YACH,MAAM,MAAM,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,wFAAwF;QACxF,sFAAsF;QACtF,0FAA0F;QAC1F,kFAAkF;QAClF,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,GAAG,yBAAyB,CAAC;QACrC,CAAC;QACD;;;;;;;WAOG;QACH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5G,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACxB,oFAAoF;YACpF,sFAAsF;YACtF,iFAAiF;YACjF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACtE,OAAO,CAAC,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3E,CAAC;QACH,CAAC;QACD;;;;;WAKG;QACH,yFAAyF;QACzF,wFAAwF;QACxF,EAAE;QACF,wFAAwF;QACxF,0FAA0F;QAC1F,wFAAwF;QACxF,uFAAuF;QACvF,yFAAyF;QACzF,uDAAuD;QACvD,IAAI,aAAa,GAAwB,CAAC,CAAC,EAAE,EAAE,CAC7C,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC;YACH,IAAI,MAAM,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7D,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,CACpB,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrF,kFAAkF;gBAClF,IAAI,aAAa;oBAAE,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;QACD,IAAI,CAAC;YACH,sFAAsF;YACtF,oFAAoF;YACpF,sFAAsF;YACtF,mEAAmE;YACnE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,4BAA4B,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAChD,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;oBAClD,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;oBAC/C,CAAC,CAAC,SAAS,CACd,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uFAAuF;YACvF,qDAAqD;YACrD,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,iCAAiC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAChG,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,YAAY,GAAG,GAAY,EAAE;QACjC,IAAI,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE;YAAE,OAAO,IAAI,CAAC;QAClD,IAAI,SAAS;YAAE,QAAQ,CAAC,8EAA8E,CAAC,CAAC;QACxG,SAAS,GAAG,KAAK,CAAC;QAClB,qFAAqF;QACrF,wDAAwD;QACxD,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,CAAC,SAAS,IAAI,OAAO;YAAE,OAAO;QAClC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO;QAC5B;;;;;;;;;;;WAWG;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,KAAK,GAAY;YACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,YAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;iBACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,YAAqB,EAAE,CAAC,CAAC;SAC/D,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACnF,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE;YACrC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE;SAC1C,CAAC,EAAE,CAAC;YACH,mFAAmF;YACnF,IAAI,CAAC,YAAY,EAAE;gBAAE,OAAO;YAC5B;;;;;;eAMG;YACH,8EAA8E;YAC9E,+CAA+C;YAC/C,MAAM,OAAO,GAAY;gBACvB,KAAK;gBACL,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;gBAC1B,MAAM,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;gBACtB,YAAY,EAAE,KAAK;gBACnB,OAAO,EAAE,IAAI,GAAG,EAAE;aACnB,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;gBACtC,kFAAkF;gBAClF,oFAAoF;gBACpF,oBAAoB;iBACnB,KAAK,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;gBAC9B,gFAAgF;gBAChF,kFAAkF;gBAClF,4BAA4B;gBAC5B,MAAM,sBAAsB,CAC1B,KAAK,EACL,iCAAiC,QAAQ,CAAC,KAAK,CAAC,GAAG,EACnD,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,SAAS,CAClB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACzB,iFAAiF;gBACjF,+EAA+E;gBAC/E,2EAA2E;gBAC3E,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC;IAEF,mFAAmF;IACnF,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC9C,yFAAyF;QACzF,4EAA4E;QAC5E,YAAY,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,QAAQ,CAAC,4CAA4C,OAAO,CAAC,KAAK,qBAAqB,CAAC,CAAC;YACzF,OAAO;QACT,CAAC;QACD,SAAS,GAAG,IAAI,CAAC;QACjB;;;;;;;;;;;;;WAaG;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,YAAY,GAAY,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,iFAAiF;YACjF,8CAA8C;YAC9C,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACzE,sFAAsF;YACtF,mEAAmE;YACnE,YAAY,CAAC,IAAI,CACf,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CACnG,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACrC,QAAQ,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QACD;;;;;;;;;;;;;WAaG;QACH,IAAI,QAAQ,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;oBAAE,SAAS;gBACrC,IAAI,CAAC;oBACH,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAAC,MAAM,CAAC;oBACP,8EAA8E;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,QAAQ;YACZ;;;;;;;;;eASG;YACH,IAAI,CAAC;gBACH,MAAM,gBAAgB,EAAE,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf;;;;;;;;;mBASG;gBACH,IAAI,CAAC;oBACH,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,8EAA8E;gBAChF,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;gBAClB,QAAQ,CAAC,mDAAmD,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK;YACT,OAAO,GAAG,IAAI,CAAC;YACf;;;;;;eAMG;YACH,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC;;;;;;eAMG;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,CAAC,KAAK,IAAI,EAAE;gBACV,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC,CAAC,EAAE,EACJ,QAAQ,CAAC,aAAa,IAAI,iBAAiB,CAC5C,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,QAAQ,CACN,GAAG,OAAO,2EAA2E;oBACnF,yBAAyB,CAC5B,CAAC;YACJ,CAAC;YACD,gFAAgF;YAChF,yDAAyD;YACzD,IAAI,SAAS;gBAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC9C,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QAED;;;WAGG;QACH,KAAK,CAAC,MAAM,CAAC,EAAE;YACb,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,mFAAmF;YACnF,oFAAoF;YACpF,sFAAsF;YACtF,0EAA0E;YAC1E,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACvC,sFAAsF;YACtF,oFAAoF;YACpF,uFAAuF;YACvF,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YAC5B,qFAAqF;YACrF,kFAAkF;YAClF,kFAAkF;YAClF,sFAAsF;YACtF,4CAA4C;YAC5C,OAAO,QAAQ,CACb,CAAC,KAAK,IAAI,EAAE;gBACV,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,OAAO,CAAC,OAAO,CAAC;YACxB,CAAC,CAAC,EAAE,EACJ,QAAQ,CAAC,aAAa,IAAI,iBAAiB,CAC5C,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,EAAE,EAAE,MAAM;YACd,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,qFAAqF;YACrF,kFAAkF;YAClF,gEAAgE;YAChE,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC5C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5B,uFAAuF;YACvF,iFAAiF;YACjF,yCAAyC;YACzC,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,YAAY,CAAC,EAAE,EAAE,MAAM;YACrB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,qFAAqF;YACrF,iDAAiD;YACjD,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO;YAClC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS;QAC9B,oFAAoF;QACpF,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY;QACtC,OAAO;QACP;;;;;WAKG;QACH,KAAK,CAAC,OAAO;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,QAAQ,CAAC,OAAyB,EAAE,EAAU;IAC3D,IAAI,YAAuD,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,EAAE;QAC5C,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,IAAI,YAAY,KAAK,SAAS;YAAE,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,SAAS,QAAQ,CAAC,KAAc;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,269 @@
1
+ import { conLlamadaDeTool } from "../../core/actos.js";
2
+ /**
3
+ * Cada cuánto sale un parcial mientras el modelo escribe.
4
+ *
5
+ * No se emite por token porque cada emisión manda el acto ENTERO —así lo sustituye el
6
+ * cliente—, o sea que N tokens costarían N mensajes de tamaño creciente: cuadrático en
7
+ * bytes, y por un túnel eso se nota. No se emite tampoco solo al final, que es lo que hacía
8
+ * y es peor: la respuesta aparecía de golpe después de segundos de nada.
9
+ *
10
+ * 80 ms es el orden de un cuadro de pantalla largo: por debajo de eso nadie distingue el
11
+ * texto creciendo, y por encima se empieza a notar a tirones.
12
+ */
13
+ const MS_ENTRE_PARCIALES = 80;
14
+ /**
15
+ * `ahora - antes`, cuenta por cuenta. Los acumulados del tracker son monótonos mientras el
16
+ * proceso vive —cada llamada al modelo suma—, así que la resta nunca baja de cero; si
17
+ * bajara sería que la fuente cambió de escala, y un negativo pintado como gasto es peor que
18
+ * un cero. Por eso se acota, no se confía.
19
+ */
20
+ function restar(ahora, antes) {
21
+ const d = (a, b) => Math.max(0, a - b);
22
+ return {
23
+ entrada: d(ahora.entrada, antes.entrada),
24
+ salida: d(ahora.salida, antes.salida),
25
+ cache: d(ahora.cache, antes.cache),
26
+ };
27
+ }
28
+ export function crearPielWeb(ahora = Date.now,
29
+ /**
30
+ * Lo consumido ACUMULADO por la sesión, si consta. Es el mismo cierre que la consola ya
31
+ * tiene (`ConsolaDeProyecto.consumo`, que pregunta a la sesión real), y entra aquí para
32
+ * que el `fin` pueda llevar el DELTA del turno sin que `core/turno.ts` sepa nada de
33
+ * consumo: la piel lo consulta al cerrar, no el motor al llamarla.
34
+ *
35
+ * Va inyectado y no leído de un cierre propio porque la sesión real llega TARDE —nace
36
+ * dentro del primer turno—, así que lo que se guarda es la PREGUNTA, no la respuesta.
37
+ *
38
+ * Ausente = esta piel no persiste consumo, y entonces el `fin` sale sin `consumo`, que es
39
+ * «no consta». Las otras dos pieles ni lo reciben: por eso `Piel.fin(ms)` no cambia de
40
+ * firma y stdio y la TUI siguen byte-idénticas.
41
+ */
42
+ consumoAcumulado) {
43
+ const lista = [];
44
+ let colchon = "";
45
+ let faseActiva;
46
+ /** Hay un acto de asistente A MEDIAS al final de la lista, que los tokens siguientes
47
+ * sustituyen en vez de anexar. */
48
+ let parcial = false;
49
+ let ultimoParcial = 0;
50
+ /** Lo mismo para el razonamiento, que es otro acto y por tanto otro colchón: mezclarlos
51
+ * pondría lo que el modelo piensa dentro de lo que dice. */
52
+ let pensamiento = "";
53
+ let parcialPensado = false;
54
+ let ultimoPensado = 0;
55
+ const escuchas = [];
56
+ /**
57
+ * El acumulado en el ÚLTIMO `fin` estampado, para restarle el de ahora y quedarnos con el
58
+ * delta. Empieza en ceros porque el tracker de la sesión también: son la misma escala
59
+ * mientras el proceso viva, y por eso la resta da el gasto del turno.
60
+ */
61
+ let estampado;
62
+ const notificar = (acto) => {
63
+ for (const escucha of escuchas)
64
+ escucha(acto);
65
+ };
66
+ const empujar = (acto) => {
67
+ // Cualquier acto NUEVO cierra los parciales: lo que venga detrás ya no los sustituye.
68
+ parcial = false;
69
+ parcialPensado = false;
70
+ // Y el razonamiento se cierra con el acto que venga: el siguiente bloque de
71
+ // pensamiento, si lo hay, es otro y empieza el suyo.
72
+ pensamiento = "";
73
+ lista.push(acto);
74
+ notificar(acto);
75
+ };
76
+ /**
77
+ * Sustituye el último acto en vez de anexar. El transporte lo distingue por la LONGITUD
78
+ * de la lista (`consolaWeb.ts`): si no creció, manda `sustitucion` y el cliente reemplaza
79
+ * el último — el mismo camino que ya usaba el cierre de una racha de tools.
80
+ */
81
+ const sustituir = (acto) => {
82
+ lista[lista.length - 1] = acto;
83
+ notificar(acto);
84
+ };
85
+ /**
86
+ * Cualquier acto que no sea otra `fase` cierra la fase viva con su duración —la
87
+ * cascada del store (`cli/tui/store.ts#cerrarFase`), reproducida aquí porque la web
88
+ * no puede importar de `cli/tui/`. `fase` en sí NO pasa por aquí: dos `fase()`
89
+ * seguidas sustituyen la activa sin dejar rastro de la anterior, igual que el store.
90
+ */
91
+ const cerrarFase = () => {
92
+ if (faseActiva === undefined)
93
+ return;
94
+ const { texto, fase, t0 } = faseActiva;
95
+ faseActiva = undefined;
96
+ // `fase` es la CATEGORÍA (`core/events.ts#Fase`), aparte del texto en español. Va
97
+ // suelta y no deducida del texto porque el texto es prosa para leer —vive en
98
+ // `TEXTO_DE_FASE`, y reescribirlo es cosa de una tarde— y un filtro que dependiera de
99
+ // esa prosa se rompería sin que nada avisara.
100
+ empujar({
101
+ tipo: "fase",
102
+ texto,
103
+ ms: Math.max(0, Date.now() - t0),
104
+ ...(fase === undefined ? {} : { fase }),
105
+ });
106
+ };
107
+ /**
108
+ * Lo que hay que estampar en el `fin`: el DELTA de este turno, o nada.
109
+ *
110
+ * La resta es contra el último acumulado estampado, y por eso `estampado` empieza
111
+ * `undefined` y no en ceros: sin lector no hay nada que estampar, y una vez hay lector el
112
+ * primer delta es el acumulado entero —que es lo correcto, porque hasta ahí no había
113
+ * ningún `fin` en este proceso al que restarle—.
114
+ *
115
+ * Un turno que no gastó nada no estampa: `{0,0,0}` ocuparía sitio en el `.jsonl` y
116
+ * afirmaría una medida que nadie hizo. Ausente ya significa «no consta», y quien lea
117
+ * tiene que poder distinguirlo (es lo que hace `consumoDeLosActos`).
118
+ */
119
+ const deltaDelTurno = () => {
120
+ const ahora = consumoAcumulado?.();
121
+ if (ahora === undefined)
122
+ return {};
123
+ const antes = estampado;
124
+ estampado = ahora;
125
+ // Sin `antes` el delta es el acumulado ENTERO, no una resta contra ceros: hasta aquí no
126
+ // había ningún `fin` en este proceso, así que todo lo acumulado es de este turno.
127
+ const delta = antes === undefined
128
+ ? ahora
129
+ : {
130
+ modelo: restar(ahora.modelo, antes.modelo),
131
+ externo: restar(ahora.externo, antes.externo),
132
+ ...(ahora.ventana === undefined ? {} : { ventana: ahora.ventana }),
133
+ };
134
+ const gastado = delta.modelo.entrada + delta.modelo.salida + delta.externo.entrada + delta.externo.salida > 0;
135
+ return gastado ? { consumo: delta } : {};
136
+ };
137
+ const piel = {
138
+ token(texto) {
139
+ // A DIFERENCIA del store de la TUI (`cli/tui/store.ts:74-87`), aquí NO se parte por
140
+ // `\n`: la TUI pinta líneas en un terminal y necesita una por fila, pero la web
141
+ // renderiza markdown, donde un párrafo entero —con sus saltos internos, sus listas
142
+ // y sus bloques de código— tiene que llegar de una pieza para que se pueda parsear.
143
+ // Partirlo daría un acto por línea y el markdown se rompería en trozos sueltos.
144
+ colchon += texto;
145
+ // Y se ENSEÑA mientras llega. Antes el colchón se guardaba entero y no salía hasta
146
+ // `cerrarLinea`, así que la respuesta aparecía de golpe tras segundos de pantalla
147
+ // quieta — el modelo estaba escribiendo y no se veía.
148
+ if (!parcial) {
149
+ cerrarFase();
150
+ empujar({ tipo: "asistente", texto: colchon });
151
+ parcial = true;
152
+ ultimoParcial = ahora();
153
+ return;
154
+ }
155
+ const t = ahora();
156
+ if (t - ultimoParcial < MS_ENTRE_PARCIALES)
157
+ return;
158
+ ultimoParcial = t;
159
+ sustituir({ tipo: "asistente", texto: colchon });
160
+ },
161
+ razonamiento(texto) {
162
+ // Mismo trato que los tokens de la respuesta —parcial que se sustituye, con su
163
+ // ventana de 80 ms— pero en su propio acto: lo que el modelo PIENSA no es lo que
164
+ // dice, y el transcript tiene que poder distinguirlo.
165
+ if (!parcialPensado) {
166
+ cerrarFase();
167
+ // El orden importa: `empujar` limpia los colchones (cualquier acto nuevo cierra lo
168
+ // que hubiera a medias), así que el bloque nuevo se asigna DESPUÉS. Al revés se
169
+ // perdía el primer trozo y el pensamiento empezaba a contar desde el segundo.
170
+ empujar({ tipo: "razonamiento", texto });
171
+ pensamiento = texto;
172
+ parcialPensado = true;
173
+ ultimoPensado = ahora();
174
+ return;
175
+ }
176
+ pensamiento += texto;
177
+ const t = ahora();
178
+ if (t - ultimoPensado < MS_ENTRE_PARCIALES)
179
+ return;
180
+ ultimoPensado = t;
181
+ sustituir({ tipo: "razonamiento", texto: pensamiento });
182
+ },
183
+ cerrarLinea() {
184
+ if (colchon === "") {
185
+ // Sin texto no hay nada que cerrar, pero sí que olvidar: un parcial abierto que no
186
+ // se marcara cerrado haría que el siguiente mensaje del modelo SUSTITUYERA a éste
187
+ // en vez de ir detrás.
188
+ parcial = false;
189
+ return;
190
+ }
191
+ // El último trozo entra siempre, aunque no hayan pasado los 80 ms: es el que completa
192
+ // la frase, y perderlo por el reloj dejaría el mensaje cortado en pantalla hasta el
193
+ // siguiente turno.
194
+ if (parcial)
195
+ sustituir({ tipo: "asistente", texto: colchon });
196
+ else {
197
+ cerrarFase();
198
+ empujar({ tipo: "asistente", texto: colchon });
199
+ }
200
+ parcial = false;
201
+ colchon = "";
202
+ // El razonamiento que hubiera quedado a medias se da por cerrado aquí: la respuesta
203
+ // ya empezó, así que lo pensado antes no va a crecer más.
204
+ parcialPensado = false;
205
+ pensamiento = "";
206
+ },
207
+ linea(texto, detalle = {}) {
208
+ // La comprobación de fusión va ANTES de cerrar la fase, no después: con una fase
209
+ // viva el grupo no se completa (el acto de fase se intercala primero), igual que
210
+ // en el store — si no, una racha que arranca justo tras `fase()` se fusionaría con
211
+ // el grupo de ANTES de la fase, borrando la frontera que el usuario vio pasar.
212
+ //
213
+ // `detalle` dice de qué tool es la línea, y VACÍO cuando no es de ninguna: por este
214
+ // mismo canal pasan el plan, las tareas y la verificación (`core/turno.ts` las
215
+ // escribe con el mismo `escribirLinea`). Se guarda igual, con el objeto vacío, para
216
+ // que la lista corra en paralelo a la de líneas sin huecos — un array con agujeros y
217
+ // otro sin ellos es cómo se desalinean.
218
+ const ultimo = lista.at(-1);
219
+ if (ultimo?.tipo === "herramientas" && faseActiva === undefined) {
220
+ sustituir({ tipo: "herramientas", ...conLlamadaDeTool(ultimo, texto, detalle) });
221
+ return;
222
+ }
223
+ cerrarFase();
224
+ empujar({ tipo: "herramientas", lineas: [texto], detalles: [detalle] });
225
+ },
226
+ artefacto(a) {
227
+ // Acto PROPIO y no una línea más del grupo de herramientas: es lo único del turno que
228
+ // se escribió sin pasar por la aprobación humana, y desde aquí se abre el fichero.
229
+ // Cierra la fase como cualquier otro acto de conversación.
230
+ cerrarFase();
231
+ empujar({
232
+ tipo: "artefacto",
233
+ ruta: a.ruta,
234
+ nombre: a.nombre,
235
+ bytes: a.bytes,
236
+ ...(a.mime === undefined ? {} : { mime: a.mime }),
237
+ });
238
+ },
239
+ pausa(pendientes) {
240
+ cerrarFase();
241
+ // Una línea por pendiente, origen y descripción y NADA más: ni el fichero, ni el
242
+ // diff — eso viaja solo en el mensaje de aprobación (`transporte.ts`).
243
+ const texto = pendientes.map((p) => `${p.origen}: ${p.descripcion}`).join("\n");
244
+ empujar({ tipo: "sistema", texto });
245
+ },
246
+ fin(ms) {
247
+ cerrarFase();
248
+ empujar({ tipo: "fin", ms, ...deltaDelTurno() });
249
+ },
250
+ fase(texto, fase) {
251
+ // Sustituye la activa sin emitir acto por ella: igual que el store, dos `fase()`
252
+ // seguidas sin nada de por medio pierden la duración de la primera a propósito —
253
+ // es una fase que no llegó a contar nada.
254
+ faseActiva = { texto, t0: Date.now(), ...(fase === undefined ? {} : { fase }) };
255
+ },
256
+ notificacion(texto) {
257
+ cerrarFase();
258
+ empujar({ tipo: "sistema", texto });
259
+ },
260
+ };
261
+ return {
262
+ piel,
263
+ actos: () => lista,
264
+ alActo: (escucha) => {
265
+ escuchas.push(escucha);
266
+ },
267
+ };
268
+ }
269
+ //# sourceMappingURL=pielWeb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pielWeb.js","sourceRoot":"","sources":["../../../src/web/servidor/pielWeb.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAmBvD;;;;;;;;;;GAUG;AACH,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;;;GAKG;AACH,SAAS,MAAM,CAAC,KAAyB,EAAE,KAAyB;IAClE,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAsB,IAAI,CAAC,GAAG;AAC9B;;;;;;;;;;;;GAYG;AACH,gBAAmD;IAEnD,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,UAAkE,CAAC;IACvE;uCACmC;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB;iEAC6D;IAC7D,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C;;;;OAIG;IACH,IAAI,SAAqC,CAAC;IAE1C,MAAM,SAAS,GAAG,CAAC,IAAU,EAAQ,EAAE;QACrC,KAAK,MAAM,OAAO,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAU,EAAQ,EAAE;QACnC,sFAAsF;QACtF,OAAO,GAAG,KAAK,CAAC;QAChB,cAAc,GAAG,KAAK,CAAC;QACvB,4EAA4E;QAC5E,qDAAqD;QACrD,WAAW,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,SAAS,GAAG,CAAC,IAAU,EAAQ,EAAE;QACrC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO;QACrC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC;QACvC,UAAU,GAAG,SAAS,CAAC;QACvB,kFAAkF;QAClF,6EAA6E;QAC7E,sFAAsF;QACtF,8CAA8C;QAC9C,OAAO,CAAC;YACN,IAAI,EAAE,MAAM;YACZ,KAAK;YACL,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAChC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF;;;;;;;;;;;OAWG;IACH,MAAM,aAAa,GAAG,GAAiC,EAAE;QACvD,MAAM,KAAK,GAAG,gBAAgB,EAAE,EAAE,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC;QACxB,SAAS,GAAG,KAAK,CAAC;QAClB,wFAAwF;QACxF,kFAAkF;QAClF,MAAM,KAAK,GACT,KAAK,KAAK,SAAS;YACjB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC;gBACE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;gBAC1C,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;gBAC7C,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;aACnE,CAAC;QACR,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAChG,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,IAAI,GAAS;QACjB,KAAK,CAAC,KAAK;YACT,oFAAoF;YACpF,gFAAgF;YAChF,mFAAmF;YACnF,oFAAoF;YACpF,gFAAgF;YAChF,OAAO,IAAI,KAAK,CAAC;YAEjB,mFAAmF;YACnF,kFAAkF;YAClF,sDAAsD;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC/C,OAAO,GAAG,IAAI,CAAC;gBACf,aAAa,GAAG,KAAK,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,aAAa,GAAG,kBAAkB;gBAAE,OAAO;YACnD,aAAa,GAAG,CAAC,CAAC;YAClB,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,YAAY,CAAC,KAAK;YAChB,+EAA+E;YAC/E,iFAAiF;YACjF,sDAAsD;YACtD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;gBACb,mFAAmF;gBACnF,gFAAgF;gBAChF,8EAA8E;gBAC9E,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,WAAW,GAAG,KAAK,CAAC;gBACpB,cAAc,GAAG,IAAI,CAAC;gBACtB,aAAa,GAAG,KAAK,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,WAAW,IAAI,KAAK,CAAC;YACrB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,aAAa,GAAG,kBAAkB;gBAAE,OAAO;YACnD,aAAa,GAAG,CAAC,CAAC;YAClB,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,WAAW;YACT,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,mFAAmF;gBACnF,kFAAkF;gBAClF,uBAAuB;gBACvB,OAAO,GAAG,KAAK,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,sFAAsF;YACtF,oFAAoF;YACpF,mBAAmB;YACnB,IAAI,OAAO;gBAAE,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;iBACzD,CAAC;gBACJ,UAAU,EAAE,CAAC;gBACb,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;YAChB,OAAO,GAAG,EAAE,CAAC;YACb,oFAAoF;YACpF,0DAA0D;YAC1D,cAAc,GAAG,KAAK,CAAC;YACvB,WAAW,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,KAAK,EAAE,UAA0B,EAAE;YACvC,iFAAiF;YACjF,iFAAiF;YACjF,mFAAmF;YACnF,+EAA+E;YAC/E,EAAE;YACF,oFAAoF;YACpF,+EAA+E;YAC/E,oFAAoF;YACpF,qFAAqF;YACrF,wCAAwC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,MAAM,EAAE,IAAI,KAAK,cAAc,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAChE,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YACD,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,SAAS,CAAC,CAAC;YACT,sFAAsF;YACtF,mFAAmF;YACnF,2DAA2D;YAC3D,UAAU,EAAE,CAAC;YACb,OAAO,CAAC;gBACN,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAmC;YACvC,UAAU,EAAE,CAAC;YACb,iFAAiF;YACjF,uEAAuE;YACvE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,GAAG,CAAC,EAAE;YACJ,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,IAAI;YACd,iFAAiF;YACjF,iFAAiF;YACjF,0CAA0C;YAC1C,UAAU,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClF,CAAC;QAED,YAAY,CAAC,KAAK;YAChB,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK;QAClB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * El servidor de la consola web: `node:http`, loopback, sin framework.
3
+ *
4
+ * Tres cosas son de seguridad y no de estilo:
5
+ * - **Loopback y nada más.** No hay bandera para `0.0.0.0`: un servidor local que abre
6
+ * la red expone el proyecto entero del usuario y su `auth.json` está a un bug de
7
+ * distancia.
8
+ * - **`Host` y `Origin` en TODA petición.** El ataque real a un servidor local no es que
9
+ * alguien escanee el puerto: es DNS rebinding, donde una web cualquiera resuelve su
10
+ * dominio a 127.0.0.1 y le habla a este proceso desde el navegador de la víctima. Un
11
+ * `Host` que no sea loopback, o un `Origin` que no sea el nuestro, es 403.
12
+ * - **`.xonecode` no se sirve NUNCA.** Ni el del proyecto ni el del home. Va antes que
13
+ * la comprobación de existencia, para que un 403 y un 404 no cuenten cosas distintas.
14
+ */
15
+ import { createServer } from "node:http";
16
+ import { randomBytes, timingSafeEqual } from "node:crypto";
17
+ import { realpathSync, readFileSync, statSync } from "node:fs";
18
+ import { join, sep, extname } from "node:path";
19
+ /** Nombre de la cookie de sesión. No lleva "token" para no repetirlo en cabeceras de log. */
20
+ const NOMBRE_COOKIE = "xonecode_sesion";
21
+ /** Segmento de ruta que jamás se sirve, esté donde esté dentro de la raíz de estáticos. */
22
+ const SEGMENTO_VETADO = ".xonecode";
23
+ const TIPOS_MIME = {
24
+ ".html": "text/html; charset=utf-8",
25
+ ".js": "text/javascript; charset=utf-8",
26
+ ".mjs": "text/javascript; charset=utf-8",
27
+ ".css": "text/css; charset=utf-8",
28
+ ".json": "application/json; charset=utf-8",
29
+ ".svg": "image/svg+xml",
30
+ ".png": "image/png",
31
+ ".ico": "image/x-icon",
32
+ ".woff2": "font/woff2",
33
+ };
34
+ export async function arrancarServidor(opciones) {
35
+ // Resuelta UNA vez al arrancar: cada petición se compara contra esta cadena canónica,
36
+ // nunca contra `opciones.raizEstaticos` sin resolver (un enlace simbólico ahí dejaría
37
+ // pasar cualquier cosa que el enlace apunte).
38
+ const raizReal = realpathSync(opciones.raizEstaticos);
39
+ const token = randomBytes(32).toString("base64url");
40
+ const rutas = new Map();
41
+ let puertoReal = opciones.puerto;
42
+ let direccionReal = "127.0.0.1";
43
+ const contexto = () => ({
44
+ raizReal,
45
+ token,
46
+ rutas,
47
+ puerto: puertoReal,
48
+ ...(opciones.anfitrion === undefined ? {} : { anfitrion: opciones.anfitrion }),
49
+ });
50
+ const servidorHttp = createServer((peticion, respuesta) => {
51
+ manejarPeticion(peticion, respuesta, contexto()).catch(() => {
52
+ // Un fallo inesperado no puede tumbar el proceso: corre en la máquina del
53
+ // desarrollador, junto al resto de su trabajo.
54
+ if (!respuesta.headersSent)
55
+ respuesta.writeHead(500);
56
+ respuesta.end();
57
+ });
58
+ });
59
+ await new Promise((resolver, rechazar) => {
60
+ servidorHttp.once("error", (error) => {
61
+ if (error.code === "EADDRINUSE") {
62
+ // El mensaje por defecto de Node es una traza de `listen`, muda sobre qué hacer.
63
+ // Aquí el puerto y la salida (`--puerto`) son lo único que el usuario necesita.
64
+ rechazar(new Error(`El puerto ${opciones.puerto} ya está en uso — prueba con --puerto <otro>.`));
65
+ return;
66
+ }
67
+ rechazar(error);
68
+ });
69
+ servidorHttp.once("listening", () => {
70
+ // `address()` es la única fuente de verdad del bind real; un test que compare
71
+ // contra una cadena que él mismo construye pasaría igual con `listen(..., "0.0.0.0")`.
72
+ const direccion = servidorHttp.address();
73
+ if (typeof direccion === "object" && direccion !== null) {
74
+ puertoReal = direccion.port;
75
+ direccionReal = direccion.address;
76
+ }
77
+ resolver();
78
+ });
79
+ servidorHttp.listen(opciones.puerto, "127.0.0.1");
80
+ });
81
+ return {
82
+ get puerto() {
83
+ return puertoReal;
84
+ },
85
+ get direccion() {
86
+ return direccionReal;
87
+ },
88
+ token,
89
+ get url() {
90
+ return `http://127.0.0.1:${puertoReal}/?t=${token}`;
91
+ },
92
+ registrarRuta(metodo, ruta, manejador) {
93
+ rutas.set(`${metodo.toUpperCase()} ${ruta}`, manejador);
94
+ },
95
+ async cerrar() {
96
+ // El SSE deja respuestas abiertas de por vida; sin `closeAllConnections()` el
97
+ // `close()` normal espera a que esas conexiones se cierren solas, cosa que no
98
+ // hacen, y el proceso — el de este test incluido — se queda colgado.
99
+ servidorHttp.closeAllConnections();
100
+ await new Promise((resolver) => servidorHttp.close(() => resolver()));
101
+ },
102
+ };
103
+ }
104
+ async function manejarPeticion(peticion, respuesta, contexto) {
105
+ const { raizReal, token, rutas, puerto, anfitrion: anfitrionExtra } = contexto;
106
+ // DNS rebinding: una web ajena resuelve su dominio a 127.0.0.1 y le habla a este
107
+ // proceso desde el navegador de la víctima, que sí tiene la cookie. El único `Host`
108
+ // válido es el propio loopback con el puerto real de este arranque.
109
+ const anfitrion = peticion.headers.host;
110
+ if (anfitrion !== `127.0.0.1:${puerto}` &&
111
+ anfitrion !== `localhost:${puerto}` &&
112
+ // El del túnel, si se pidió uno: exacto y sin comodines (ver `OpcionesServidor`).
113
+ (anfitrionExtra === undefined || anfitrion !== anfitrionExtra)) {
114
+ responderProhibido(respuesta);
115
+ return;
116
+ }
117
+ // El `Origin` solo lo manda el navegador en peticiones que un atacante controla
118
+ // (fetch/XHR de otra pestaña); si está, tiene que ser el nuestro.
119
+ const origen = peticion.headers.origin;
120
+ if (origen !== undefined &&
121
+ origen !== `http://127.0.0.1:${puerto}` &&
122
+ origen !== `http://localhost:${puerto}` &&
123
+ // Un túnel sirve por HTTPS, así que su `Origin` es `https://<anfitrion>`. Se acepta
124
+ // SOLO ese, no cualquier esquema: `http://<anfitrion>` sería el mismo nombre servido
125
+ // en claro, que es otra cosa y no la que se pidió abrir.
126
+ (anfitrionExtra === undefined || origen !== `https://${anfitrionExtra}`)) {
127
+ responderProhibido(respuesta);
128
+ return;
129
+ }
130
+ // Partido a mano, NUNCA con `new URL()`: WHATWG normaliza los segmentos `..` del
131
+ // pathname en el propio parseo (medido), así que un recorrido crudo llegaría ya
132
+ // colapsado y el test de seguridad no probaría nada. `indexOf("?")` no toca los
133
+ // segmentos de la ruta.
134
+ const bruto = peticion.url ?? "/";
135
+ const indiceQuery = bruto.indexOf("?");
136
+ const rutaBruta = indiceQuery === -1 ? bruto : bruto.slice(0, indiceQuery);
137
+ const query = indiceQuery === -1 ? "" : bruto.slice(indiceQuery + 1);
138
+ let rutaDecodificada;
139
+ try {
140
+ rutaDecodificada = decodeURIComponent(rutaBruta);
141
+ }
142
+ catch {
143
+ responderTexto(respuesta, 400, "");
144
+ return;
145
+ }
146
+ const autenticacion = autenticar(peticion.headers.cookie, new URLSearchParams(query).get("t"), token);
147
+ if (!autenticacion.autenticado) {
148
+ responderTexto(respuesta, 401, "");
149
+ return;
150
+ }
151
+ if (autenticacion.cookieNueva !== undefined) {
152
+ respuesta.setHeader("Set-Cookie", autenticacion.cookieNueva);
153
+ }
154
+ const manejador = rutas.get(`${peticion.method} ${rutaDecodificada}`);
155
+ if (manejador !== undefined) {
156
+ await manejador(peticion, respuesta);
157
+ return;
158
+ }
159
+ servirEstatico(peticion, respuesta, raizReal, rutaDecodificada);
160
+ }
161
+ function autenticar(cabeceraCookie, tokenDeQuery, token) {
162
+ const cookieToken = extraerCookie(cabeceraCookie, NOMBRE_COOKIE);
163
+ if (cookieToken !== undefined && compararTokens(cookieToken, token)) {
164
+ return { autenticado: true };
165
+ }
166
+ if (tokenDeQuery !== null && compararTokens(tokenDeQuery, token)) {
167
+ return { autenticado: true, cookieNueva: construirCookie(token) };
168
+ }
169
+ return { autenticado: false };
170
+ }
171
+ /** `timingSafeEqual` exige buffers de igual longitud: la desigualdad ya descarta el intento. */
172
+ function compararTokens(candidato, token) {
173
+ const bufferCandidato = Buffer.from(candidato);
174
+ const bufferToken = Buffer.from(token);
175
+ if (bufferCandidato.length !== bufferToken.length)
176
+ return false;
177
+ return timingSafeEqual(bufferCandidato, bufferToken);
178
+ }
179
+ function construirCookie(token) {
180
+ // Sin `Secure`: esto es `http://` en loopback, y con `Secure` el navegador la
181
+ // descartaría sin avisar — la sesión nunca se establecería.
182
+ return `${NOMBRE_COOKIE}=${token}; HttpOnly; SameSite=Strict; Path=/`;
183
+ }
184
+ function extraerCookie(cabecera, nombre) {
185
+ if (cabecera === undefined)
186
+ return undefined;
187
+ for (const parte of cabecera.split(";")) {
188
+ const indice = parte.indexOf("=");
189
+ if (indice === -1)
190
+ continue;
191
+ if (parte.slice(0, indice).trim() === nombre)
192
+ return parte.slice(indice + 1).trim();
193
+ }
194
+ return undefined;
195
+ }
196
+ function servirEstatico(peticion, respuesta, raizReal, rutaDecodificada) {
197
+ // `.xonecode` se rechaza por el TEXTO de la ruta, antes de tocar el disco: así el
198
+ // fichero puede existir o no, y en ambos casos la respuesta es la misma 403 — un 404
199
+ // aquí delataría cuáles de sus ficheros están presentes.
200
+ // Comparación en minúsculas: MEDIDO en este disco (APFS por omisión, insensible a
201
+ // mayúsculas) — `/.XONECODE/secreto.json` pasa el `includes` sensible a caso, y el
202
+ // `realpathSync` de más abajo NO normaliza el caso de un componente que no es un
203
+ // enlace simbólico, así que el 403 nunca llegaría a dispararse y el fichero se
204
+ // serviría entero.
205
+ const segmentos = rutaDecodificada.split("/").filter((s) => s.length > 0);
206
+ if (segmentos.some((s) => s.toLowerCase() === SEGMENTO_VETADO)) {
207
+ responderProhibido(respuesta);
208
+ return;
209
+ }
210
+ const relativa = rutaDecodificada === "/" ? "index.html" : rutaDecodificada;
211
+ // `join` colapsa los `..` léxicamente contra `raizReal`: un recorrido que se salga de
212
+ // la raíz ya se nota aquí, SIN tocar el disco y sin depender de que exista el fichero
213
+ // apuntado — así el 403 no depende de si `/etc/passwd` existe en la máquina que corre
214
+ // el test.
215
+ const objetivoLexico = join(raizReal, relativa);
216
+ if (objetivoLexico !== raizReal && !objetivoLexico.startsWith(raizReal + sep)) {
217
+ responderProhibido(respuesta);
218
+ return;
219
+ }
220
+ if (peticion.method !== "GET" && peticion.method !== "HEAD") {
221
+ responderTexto(respuesta, 405, "");
222
+ return;
223
+ }
224
+ let objetivoReal;
225
+ try {
226
+ // Resuelve enlaces simbólicos DE VERDAD: un `.xne` que enlace fuera de `raizReal`
227
+ // pasaría el chequeo léxico de arriba y solo se detecta comparando la ruta ya resuelta.
228
+ objetivoReal = realpathSync(objetivoLexico);
229
+ }
230
+ catch {
231
+ responderTexto(respuesta, 404, "");
232
+ return;
233
+ }
234
+ if (objetivoReal !== raizReal && !objetivoReal.startsWith(raizReal + sep)) {
235
+ responderProhibido(respuesta);
236
+ return;
237
+ }
238
+ const info = statSync(objetivoReal);
239
+ if (!info.isFile()) {
240
+ responderTexto(respuesta, 404, "");
241
+ return;
242
+ }
243
+ const cuerpo = readFileSync(objetivoReal);
244
+ respuesta.writeHead(200, {
245
+ "Content-Type": TIPOS_MIME[extname(objetivoReal)] ?? "application/octet-stream",
246
+ "Content-Length": cuerpo.length,
247
+ });
248
+ respuesta.end(peticion.method === "HEAD" ? undefined : cuerpo);
249
+ }
250
+ function responderProhibido(respuesta) {
251
+ responderTexto(respuesta, 403, "Prohibido");
252
+ }
253
+ function responderTexto(respuesta, estado, cuerpo) {
254
+ respuesta.writeHead(estado, { "Content-Type": "text/plain; charset=utf-8" });
255
+ respuesta.end(cuerpo);
256
+ }
257
+ //# sourceMappingURL=servidor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servidor.js","sourceRoot":"","sources":["../../../src/web/servidor/servidor.ts"],"names":[],"mappings":"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"}