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
package/dist/cli/tema.js CHANGED
@@ -13,7 +13,19 @@
13
13
  * que el tema apagado no tiene nada que poner. (Y `src/cli/tema.test.ts` recorre
14
14
  * `src/` entera y falla si alguien escribe un ANSI fuera de aquí.)
15
15
  */
16
- const CON_COLOR = {
16
+ export const TEMAS = [
17
+ { id: "xone", etiqueta: "XOne", detalle: "cian corporativo · logo de bloque" },
18
+ { id: "clear", etiqueta: "Clear", detalle: "alto contraste frío · trazo ligero" },
19
+ { id: "midnight", etiqueta: "Midnight", detalle: "dark azul profundo · bajo brillo" },
20
+ { id: "graphite", etiqueta: "Graphite", detalle: "dark neutro · contraste sobrio" },
21
+ { id: "ember", etiqueta: "Ember", detalle: "ámbar cálido · trazo técnico" },
22
+ ];
23
+ const CONTROL = {
24
+ borrar: "\x1b[K",
25
+ limpiarLinea: "\x1b[2K",
26
+ arriba: (lineas) => (lineas > 0 ? `\x1b[${lineas}A` : ""),
27
+ };
28
+ const CON_COLOR_XONE = {
17
29
  texto: "",
18
30
  mudo: "\x1b[2m",
19
31
  negrita: "\x1b[1m",
@@ -26,9 +38,62 @@ const CON_COLOR = {
26
38
  quitado: "\x1b[31m",
27
39
  prompt: "\x1b[36m",
28
40
  reset: "\x1b[0m",
29
- borrar: "\x1b[K",
30
- limpiarLinea: "\x1b[2K",
31
- arriba: (lineas) => (lineas > 0 ? `\x1b[${lineas}A` : ""),
41
+ ...CONTROL,
42
+ };
43
+ const CON_COLOR = {
44
+ xone: CON_COLOR_XONE,
45
+ clear: {
46
+ texto: "",
47
+ mudo: "\x1b[38;5;250m",
48
+ negrita: "\x1b[1;97m",
49
+ exito: "\x1b[38;5;120m",
50
+ aviso: "\x1b[38;5;222m",
51
+ grave: "\x1b[38;5;210m",
52
+ anadido: "\x1b[38;5;120m",
53
+ quitado: "\x1b[38;5;210m",
54
+ prompt: "\x1b[38;5;159m",
55
+ reset: "\x1b[0m",
56
+ ...CONTROL,
57
+ },
58
+ midnight: {
59
+ texto: "",
60
+ mudo: "\x1b[38;5;110m",
61
+ negrita: "\x1b[1;97m",
62
+ exito: "\x1b[38;5;80m",
63
+ aviso: "\x1b[38;5;221m",
64
+ grave: "\x1b[38;5;210m",
65
+ anadido: "\x1b[38;5;80m",
66
+ quitado: "\x1b[38;5;210m",
67
+ prompt: "\x1b[38;5;81m",
68
+ reset: "\x1b[0m",
69
+ ...CONTROL,
70
+ },
71
+ graphite: {
72
+ texto: "",
73
+ mudo: "\x1b[38;5;249m",
74
+ negrita: "\x1b[1;97m",
75
+ exito: "\x1b[38;5;114m",
76
+ aviso: "\x1b[38;5;223m",
77
+ grave: "\x1b[38;5;217m",
78
+ anadido: "\x1b[38;5;114m",
79
+ quitado: "\x1b[38;5;217m",
80
+ prompt: "\x1b[38;5;255m",
81
+ reset: "\x1b[0m",
82
+ ...CONTROL,
83
+ },
84
+ ember: {
85
+ texto: "",
86
+ mudo: "\x1b[38;5;245m",
87
+ negrita: "\x1b[1;97m",
88
+ exito: "\x1b[38;5;150m",
89
+ aviso: "\x1b[38;5;214m",
90
+ grave: "\x1b[38;5;203m",
91
+ anadido: "\x1b[38;5;150m",
92
+ quitado: "\x1b[38;5;203m",
93
+ prompt: "\x1b[38;5;215m",
94
+ reset: "\x1b[0m",
95
+ ...CONTROL,
96
+ },
32
97
  };
33
98
  /** El no-op para los tokens-función del tema apagado: se llama, y no escribe nada. */
34
99
  const SIN_ACCION = () => "";
@@ -37,11 +102,34 @@ const SIN_ACCION = () => "";
37
102
  * se olvide de apagarse falla en el test que recorre `Object.entries`, no en un pipe
38
103
  * de CI a las tantas. Los tokens-función se derivan al no-op.
39
104
  */
40
- const SIN_COLOR = Object.fromEntries(Object.keys(CON_COLOR).map((nombre) => [
105
+ const SIN_COLOR = Object.fromEntries(Object.keys(CON_COLOR_XONE).map((nombre) => [
41
106
  nombre,
42
- typeof CON_COLOR[nombre] === "function" ? SIN_ACCION : "",
107
+ typeof CON_COLOR_XONE[nombre] === "function" ? SIN_ACCION : "",
43
108
  ]));
44
- export function crearTema(conColor) {
45
- return conColor ? CON_COLOR : SIN_COLOR;
109
+ let temaSeleccionado = "xone";
110
+ export function temaActivo() {
111
+ return temaSeleccionado;
112
+ }
113
+ export function seleccionarTema(id) {
114
+ temaSeleccionado = id;
115
+ }
116
+ export function esTema(valor) {
117
+ return TEMAS.some((tema) => tema.id === valor);
46
118
  }
119
+ export function crearTema(conColor, id = temaSeleccionado) {
120
+ return conColor ? CON_COLOR[id] : SIN_COLOR;
121
+ }
122
+ /**
123
+ * Los modos de terminal de la TUI (`cli/tui/raton.ts`), aquí porque este es el único
124
+ * fichero de producción con escapes ANSI (tema.test.ts lo vigila): son control de
125
+ * terminal, como `arriba` o `limpiarLinea`, no color. Solo se escriben con stdout TTY.
126
+ */
127
+ export const MODOS_DE_TERMINAL = {
128
+ /** `?1049h` entra en la pantalla alternativa (la de vim); `H` lleva el cursor arriba a la izquierda. */
129
+ entrarPantallaAlternativa: "\x1b[?1049h\x1b[H",
130
+ salirPantallaAlternativa: "\x1b[?1049l",
131
+ /** `?1000h` pide botones (la rueda son los botones 64/65); `?1006h` los codifica en SGR, legibles. */
132
+ activarRaton: "\x1b[?1000h\x1b[?1006h",
133
+ desactivarRaton: "\x1b[?1006l\x1b[?1000l",
134
+ };
47
135
  //# sourceMappingURL=tema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tema.js","sourceRoot":"","sources":["../../src/cli/tema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgCH,MAAM,SAAS,GAAS;IACtB,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,UAAU;IACjB,mFAAmF;IACnF,4EAA4E;IAC5E,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,SAAS;IACvB,MAAM,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;CAC1E,CAAC;AAEF,sFAAsF;AACtF,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,EAAE,CAAC;AAEpC;;;;GAIG;AACH,MAAM,SAAS,GAAS,MAAM,CAAC,WAAW,CACxC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACrC,MAAM;IACN,OAAO,SAAS,CAAC,MAAoB,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;CACxE,CAAC,CACgB,CAAC;AAErB,MAAM,UAAU,SAAS,CAAC,QAAiB;IACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"tema.js","sourceRoot":"","sources":["../../src/cli/tema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * El formato compacto de cifras, COMPARTIDO por las dos pieles.
3
+ *
4
+ * Vivía duplicado — `formatearTokens` en `main.ts` y un `compacto` propio en
5
+ * `tui/sidebar.tsx` — y las pieles divergían: la sidebar decía «200.0K» donde stdio
6
+ * decía «200K». Un indicador que da dos cifras según la piel no es un formato, son
7
+ * dos a la espera de desincronizarse; la cifra compacta vive aquí y ninguna piel
8
+ * compone la suya. (No puede vivir en `main.ts` porque `cli/tui/` no lo importa:
9
+ * sería un ciclo.)
10
+ */
11
+ /** `999`, `12.8K`, `200K`, `1.5M` — un decimal cuando hace falta, `.0` de cortesía nunca. */
12
+ export function compacto(n) {
13
+ if (n < 1000)
14
+ return `${n}`;
15
+ if (n >= 1_000_000)
16
+ return `${+((n / 1_000_000).toFixed(1))}M`;
17
+ return `${+((n / 1000).toFixed(1))}K`;
18
+ }
19
+ /** Token compacto para la línea de estado: `0 tokens` hasta 999, `12.8K tokens` a partir de 1000. */
20
+ export function formatearTokens(total) {
21
+ return `${compacto(total)} tokens`;
22
+ }
23
+ /** El tope de contexto, compacto: `131K`, `200K`, `1M`. Sin decimales de cortesía. */
24
+ export function formatearTope(tope) {
25
+ if (tope >= 1_000_000)
26
+ return `${tope / 1_000_000}M`;
27
+ return `${Math.round(tope / 1000)}K`;
28
+ }
29
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/cli/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,6FAA6F;AAC7F,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACrC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC;IACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AACvC,CAAC"}
@@ -0,0 +1,171 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * La raíz Ink: dos columnas (transcript+entrada | sidebar), entrada abajo, barra al pie
4
+ * y el modal de aprobación por encima de todo cuando toca decidir. Solo pinta y reparte
5
+ * el teclado: la semántica vive en el store y en `correrTui.ts`.
6
+ */
7
+ import { Box, Text, useInput, useStdout } from "ink";
8
+ import { useEffect, useState } from "react";
9
+ import { Transcript } from "./transcript.js";
10
+ import { Entrada } from "./entrada.js";
11
+ import { ANCHO_DE_SIDEBAR, BarraDeEstado, Sidebar, cabeSidebar } from "./sidebar.js";
12
+ import { ModalAprobacion } from "./aprobarTui.js";
13
+ import { barra } from "./barra.js";
14
+ import { temaInk } from "./temaInk.js";
15
+ /**
16
+ * Sincroniza un trozo de estado observable con React: el store manda y la app repinta.
17
+ * Igual que `Transcript` hace con su propio `useState`, pero reutilizable para la
18
+ * ranura de la vista (ocupado/pregunta/modal).
19
+ */
20
+ function useSincronizado(obtener, suscribir) {
21
+ const [valor, setValor] = useState(obtener);
22
+ useEffect(() => {
23
+ const sincronizar = () => setValor({ ...obtener() });
24
+ const baja = suscribir(sincronizar);
25
+ // `render()` devuelve antes de que React instale este efecto. El asistente de
26
+ // arranque puede abrir un selector exactamente en ese intervalo; sin esta lectura
27
+ // posterior, la ranura ya contiene el selector pero nadie vuelve a pintar la App.
28
+ sincronizar();
29
+ return baja;
30
+ }, [obtener, suscribir]);
31
+ return valor;
32
+ }
33
+ /**
34
+ * La pregunta de la consola (asistente de creación, clave de /provider): un input
35
+ * propio, en lugar de la Entrada, porque mientras vive ES lo único que el teclado
36
+ * puede contestar. Con `oculto` muestra asteriscos: el valor real viaja en el estado,
37
+ * nunca en pantalla.
38
+ */
39
+ function PreguntaInk({ pregunta, alResponder, }) {
40
+ const [valor, setValor] = useState("");
41
+ useInput((entrada, tecla) => {
42
+ if (tecla.return) {
43
+ alResponder(valor);
44
+ return;
45
+ }
46
+ if (tecla.backspace || tecla.delete) {
47
+ setValor((v) => v.slice(0, -1));
48
+ return;
49
+ }
50
+ if (entrada && !tecla.ctrl && !tecla.meta && !tecla.escape)
51
+ setValor((v) => v + entrada);
52
+ });
53
+ return (
54
+ // `flexShrink={0}`: mientras vive, la pregunta ES lo único contestable — la fila de
55
+ // columnas tiene altura fija y quien cede es el transcript, nunca ella.
56
+ _jsx(Box, { flexShrink: 0, ...barra(temaInk.aviso), children: _jsxs(Text, { children: [pregunta.texto, pregunta.oculto ? "*".repeat(valor.length) : valor, _jsx(Text, { color: temaInk.prompt, children: "▏" })] }) }));
57
+ }
58
+ const FILAS_SELECTOR = 6;
59
+ /** Selector pequeño y filtrable: no vuelca el catálogo completo al transcript. */
60
+ function SelectorInk({ selector, alResponder, ancho, }) {
61
+ const [filtro, setFiltro] = useState("");
62
+ const [seleccion, setSeleccion] = useState(0);
63
+ const opciones = selector.opciones.filter((opcion) => {
64
+ const texto = `${opcion.etiqueta} ${opcion.id} ${opcion.detalle ?? ""}`.toLowerCase();
65
+ return texto.includes(filtro.toLowerCase());
66
+ });
67
+ const inicio = Math.max(0, Math.min(seleccion - Math.floor(FILAS_SELECTOR / 2), opciones.length - FILAS_SELECTOR));
68
+ const visibles = opciones.slice(inicio, inicio + FILAS_SELECTOR);
69
+ useEffect(() => setSeleccion(0), [filtro]);
70
+ useInput((entrada, tecla) => {
71
+ if (tecla.escape)
72
+ return alResponder(undefined);
73
+ if (tecla.return)
74
+ return alResponder(opciones[seleccion]?.id);
75
+ if (tecla.upArrow && opciones.length > 0) {
76
+ setSeleccion((actual) => (actual - 1 + opciones.length) % opciones.length);
77
+ return;
78
+ }
79
+ if (tecla.downArrow && opciones.length > 0) {
80
+ setSeleccion((actual) => (actual + 1) % opciones.length);
81
+ return;
82
+ }
83
+ if (tecla.backspace || tecla.delete) {
84
+ setFiltro((actual) => actual.slice(0, -1));
85
+ return;
86
+ }
87
+ if (entrada && !tecla.ctrl && !tecla.meta)
88
+ setFiltro((actual) => actual + entrada);
89
+ });
90
+ const recortar = (texto) => Array.from(texto).slice(0, Math.max(1, ancho - 2)).join("");
91
+ return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, ...barra(temaInk.acento), children: [_jsx(Text, { color: temaInk.negrita, children: recortar(selector.titulo) }), _jsx(Text, { color: temaInk.mudo, children: recortar(`filtra · ↑↓ elige · Enter confirma · Esc cancela ${filtro}▏`) }), Array.from({ length: FILAS_SELECTOR }, (_, indice) => {
92
+ const opcion = visibles[indice];
93
+ if (opcion === undefined)
94
+ return _jsx(Text, { children: " " }, indice);
95
+ const posicion = inicio + indice;
96
+ const activa = posicion === seleccion;
97
+ const detalle = opcion.detalle === undefined ? "" : ` — ${opcion.detalle}`;
98
+ return (_jsx(Text, { color: activa ? temaInk.fondoCola : temaInk.texto, backgroundColor: activa ? temaInk.fase : undefined, children: recortar(`${activa ? "›" : " "} ${opcion.etiqueta}${detalle}`) }, opcion.id));
99
+ })] }));
100
+ }
101
+ /**
102
+ * Las filas que NO son transcript: las 4 de la Entrada (aire, línea en edición, aire,
103
+ * modelo; la barra izquierda no añade filas) y 1 del pie. Si la Entrada cambia de forma,
104
+ * este número cambia con ella. La pista de Tab añade una fila transitoria, y no pasa nada:
105
+ * la fila de columnas sigue midiendo lo mismo y la pista sale de una fila del
106
+ * transcript, que es la ÚNICA pieza elástica (Entrada, Pregunta y pie no encogen).
107
+ *
108
+ * Con eso, `alturaTranscript` ya NO es la altura de la caja del transcript —esa la pone
109
+ * el flex— sino el tamaño de la rebanada que `ventanaDe` corta del historial: cuántos
110
+ * actos se piden. Si sobran, el transcript los recorta por arriba.
111
+ */
112
+ const FILAS_FIJAS = 5;
113
+ /**
114
+ * Una fila que la TUI NUNCA ocupa. Ink (`build/ink.js`, `outputHeight >= stdout.rows`)
115
+ * borra el terminal entero y repinta el frame completo cuando la salida llega a las
116
+ * filas de la pantalla; y la fila de columnas mide SIEMPRE lo que se le dice, así que
117
+ * con `height = rows` TODOS los frames caerían ahí — un borrado por token y por tecla.
118
+ * Con la reserva, el frame normal es `rows - 1` y el repintado es incremental. El modal de
119
+ * aprobación (montado debajo de la fila) sí supera `rows` mientras está abierto: es el
120
+ * comportamiento previo y está anotado en la spec como riesgo asumido.
121
+ */
122
+ const FILA_DE_RESERVA = 1;
123
+ export function App({ store, vista: ranuraVista, alEnviar, responder, responderSelector, completa, historial, datosSidebar, alCancelarTurno, rueda, }) {
124
+ const vista = useSincronizado(ranuraVista.ver, ranuraVista.suscribir);
125
+ const datos = datosSidebar();
126
+ const { stdout } = useStdout();
127
+ const filas = (stdout.rows ?? 24) - FILA_DE_RESERVA;
128
+ const alturaTranscript = Math.max(5, filas - FILAS_FIJAS - (vista.enCola.length > 0 ? 1 : 0) - (vista.selector === null ? 0 : FILAS_SELECTOR + 2 - 4));
129
+ const columnas = stdout.columns ?? 80;
130
+ const conSidebar = cabeSidebar(columnas);
131
+ // Lo que la Entrada rellena de fondo: la columna izquierda (total menos sidebar, su
132
+ // borde izquierdo y el paddingRight de 1) menos la barra `▌`. El borde cuenta como
133
+ // una columna real de Ink; si no se descuenta, las filas de fondo de la Entrada
134
+ // invaden una celda y sus bandas dejan de formar un rectángulo.
135
+ const anchoEntrada = columnas - (conSidebar ? ANCHO_DE_SIDEBAR + 1 : 0) - 1 - 1;
136
+ // Ink escucha el `resize` del terminal, pero su manejador (`ink.js`, `resized`) solo
137
+ // recalcula Yoga y repinta el árbol YA montado: no re-renderiza React. Sin esto,
138
+ // `stdout.columns` no se volvería a leer y la sidebar no aparecería ni se iría al
139
+ // cambiar la anchura hasta el siguiente acto del transcript. `app.test.tsx` lo prueba.
140
+ const [, alRedimensionar] = useState(0);
141
+ useEffect(() => {
142
+ const f = () => alRedimensionar((n) => n + 1);
143
+ stdout.on("resize", f);
144
+ return () => {
145
+ stdout.off("resize", f);
146
+ };
147
+ }, [stdout]);
148
+ // El transcript se repinta por su cuenta (Transcript está suscrito al store); la app
149
+ // necesita re-render por los DATOS (sidebar, modelo), no por los actos. `suscribir`
150
+ // devuelve la baja: el cleanup del useEffect la usa al desmontar.
151
+ const [, repintar] = useState(0);
152
+ useEffect(() => store.suscribir(() => repintar((n) => n + 1)), [store]);
153
+ useInput((entrada, tecla) => {
154
+ if (!(tecla.ctrl && entrada === "c"))
155
+ return;
156
+ // Con modal montado, el modal ya recibe el Ctrl-C y RECHAZA (fail-closed): aquí no
157
+ // se toca nada, o habría dos lectores para la misma tecla.
158
+ if (vista.modal !== null)
159
+ return;
160
+ if (vista.ocupado) {
161
+ alCancelarTurno();
162
+ }
163
+ else {
164
+ // El mínimo honesto: Ctrl-C inactivo no mata la app (un dedo torpe no debe
165
+ // cerrar una sesión con hilo vivo) — el aviso, y /salir sigue siendo la salida.
166
+ store.linea("· Ctrl-C no cierra la consola: usa /salir", "sistema");
167
+ }
168
+ });
169
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsxs(Box, { flexDirection: "row", height: filas, children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, flexBasis: 0, paddingRight: 1, children: [_jsx(Transcript, { store: store, altura: alturaTranscript, rueda: rueda, ancho: anchoEntrada }), vista.selector !== null ? (_jsx(SelectorInk, { selector: vista.selector, alResponder: responderSelector, ancho: anchoEntrada })) : vista.pregunta !== null ? (_jsx(PreguntaInk, { pregunta: vista.pregunta, alResponder: responder })) : (_jsx(Entrada, { alEnviar: alEnviar, completa: completa, ocupado: vista.ocupado, pendientes: vista.enCola, historial: historial, modelo: datos.modelo, ancho: anchoEntrada })), _jsx(BarraDeEstado, { ruta: datos.ruta, rama: conSidebar ? undefined : datos.rama, contexto: datos.contexto, tope: datos.tope })] }), conSidebar ? (_jsx(Box, { width: ANCHO_DE_SIDEBAR, flexShrink: 0, paddingLeft: 2, paddingRight: 2, paddingTop: 1, flexDirection: "column", borderLeft: true, borderLeftColor: temaInk.acento, children: _jsx(Sidebar, { ...datos, altura: Math.max(0, filas - 1) }) })) : null] }), vista.modal !== null ? _jsx(ModalAprobacion, { ...vista.modal }) : null] }));
170
+ }
171
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/tui/app.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AACH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAuB,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC;;;;GAIG;AACH,SAAS,eAAe,CACtB,OAAgB,EAChB,SAAwC;IAExC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,OAAO,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QACpC,8EAA8E;QAC9E,kFAAkF;QAClF,kFAAkF;QAClF,WAAW,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,EACnB,QAAQ,EACR,WAAW,GAIZ;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC1B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IACH,OAAO;IACL,oFAAoF;IACpF,wEAAwE;IACxE,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,KAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAC1C,MAAC,IAAI,eACF,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EACnD,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,MAAM,YAAG,GAAG,GAAQ,IACpC,GACH,CACP,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,kFAAkF;AAClF,SAAS,WAAW,CAAC,EACnB,QAAQ,EACR,WAAW,EACX,KAAK,GAKN;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;QACtF,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IACnH,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC1B,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxG,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,KAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAClE,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,OAAO,YAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAQ,EAChE,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,YAAG,QAAQ,CAAC,qDAAqD,MAAM,GAAG,CAAC,GAAQ,EAC3G,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,MAAM,KAAK,SAAS;oBAAE,OAAO,KAAC,IAAI,qBAAM,MAAM,CAAU,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;gBACjC,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC;gBACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC3E,OAAO,CACL,KAAC,IAAI,IAAiB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,YACxH,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC,IADtD,MAAM,CAAC,EAAE,CAEb,CACR,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB;;;;;;;;GAQG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,KAAK,GAiBN;IACC,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,CAAC,EACD,KAAK,GAAG,WAAW,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,CACjH,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,oFAAoF;IACpF,mFAAmF;IACnF,gFAAgF;IAChF,gEAAgE;IAChE,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEhF,qFAAqF;IACrF,iFAAiF;IACjF,kFAAkF;IAClF,uFAAuF;IACvF,MAAM,CAAC,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,GAAG,GAAS,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,qFAAqF;IACrF,oFAAoF;IACpF,kEAAkE;IAClE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAExE,QAAQ,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC1B,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;YAAE,OAAO;QAC7C,mFAAmF;QACnF,2DAA2D;QAC3D,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO;QACjC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,eAAe,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,2EAA2E;YAC3E,gFAAgF;YAChF,KAAK,CAAC,KAAK,CAAC,2CAA2C,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,aACtC,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,MAAM,EAAE,KAAK,aAIpC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aACpE,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAI,EACxF,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CACzB,KAAC,WAAW,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,GAAI,CAC/F,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAC5B,KAAC,WAAW,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,GAAI,CAClE,CAAC,CAAC,CAAC,CACF,KAAC,OAAO,IACN,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,UAAU,EAAE,KAAK,CAAC,MAAM,EACxB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,KAAK,EAAE,YAAY,GACnB,CACH,EAED,KAAC,aAAa,IACZ,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,KAAK,CAAC,IAAI,GAChB,IACE,EAKL,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,GAAG,IACF,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,CAAC,EACb,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,CAAC,EACb,aAAa,EAAC,QAAQ,EACtB,UAAU,QACV,eAAe,EAAE,OAAO,CAAC,MAAM,YAE/B,KAAC,OAAO,OAAK,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAI,GAClD,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAC,eAAe,OAAK,KAAK,CAAC,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI,IAC/D,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { conContexto, recortar } from "../../core/diff.js";
3
+ import { Box, Text, useInput } from "ink";
4
+ import { useState } from "react";
5
+ import { temaInk } from "./temaInk.js";
6
+ /** Contexto alrededor de cada cambio y techo de líneas: los MISMOS que `cli/aprobar.ts`, porque decidir es decidir en cualquier piel. */
7
+ const CONTEXTO_DEL_DIFF = 2;
8
+ const TECHO_DEL_DIFF = 25;
9
+ export function estadoInicial(pendientes) {
10
+ return { pendientes, indice: 0, decisiones: new Map() };
11
+ }
12
+ /**
13
+ * Puro: una respuesta («aprobar» | «rechazar») avanza el índice y acumula la decisión
14
+ * del pendiente actual. Al agotar la lista, `terminado` lleva el Map completo — el
15
+ * fail-closed de los pendientes sin responder vive en `pedirDecisionesTui`, que rellena
16
+ * con RECHAZO lo que falte, pero el contrato aquí es que lo agotado está decidido entero.
17
+ */
18
+ export function reductorDeAprobacion(s, respuesta) {
19
+ const p = s.pendientes[s.indice];
20
+ if (p === undefined)
21
+ return s;
22
+ const decisiones = new Map(s.decisiones).set(p.id, { type: respuesta === "aprobar" ? "approve" : "reject" });
23
+ const terminado = s.indice + 1 >= s.pendientes.length ? decisiones : undefined;
24
+ return { ...s, indice: s.indice + 1, decisiones, terminado };
25
+ }
26
+ /**
27
+ * El puerto `pedirAprobacion` en TUI — MISMA firma que `abrirSesionReal` espera. `montar`
28
+ * lo pone en el store de la app (el modal se pinta); la promesa resuelve con TODAS las
29
+ * decisiones. **Desmontar el modal sin responder es rechazo de los restantes** — la
30
+ * costura del fail-closed está aquí, porque aprobar ESCRIBE y lo que no se entiende no
31
+ * toca nada.
32
+ */
33
+ export function pedirDecisionesTui(pendientes, ficheros, diffs, montar) {
34
+ return new Promise((resolver) => {
35
+ if (pendientes.length === 0)
36
+ return resolver(new Map());
37
+ montar({
38
+ pendientes,
39
+ fichero: (id) => ficheros.get(id),
40
+ diff: (id) => diffs.get(id),
41
+ alTerminar: (decisiones) => {
42
+ // Los pendientes sin decisión explícita: RECHAZO. Nunca silencio ni aprobación.
43
+ for (const p of pendientes) {
44
+ if (!decisiones.has(p.id))
45
+ decisiones.set(p.id, { type: "reject" });
46
+ }
47
+ resolver(decisiones);
48
+ },
49
+ });
50
+ });
51
+ }
52
+ /**
53
+ * El modal: enseña el pendiente actual con su diff coloreado (el ÚNICO sitio donde el
54
+ * contenido de una escritura se enseña, porque aquí se DECIDE sobre él) y lee el teclado.
55
+ * **Fail-closed por tecla**: solo «s»/«S» aprueba; «n», Enter, Escape y Ctrl-C rechazan.
56
+ */
57
+ export function ModalAprobacion({ pendientes, fichero, diff, alTerminar }) {
58
+ const [estado, setEstado] = useState(() => estadoInicial(pendientes));
59
+ useInput((entrada, tecla) => {
60
+ if (estado.terminado !== undefined)
61
+ return;
62
+ const esSi = entrada === "s" || entrada === "S";
63
+ // Todo lo demás —incluido Enter a secas y Ctrl-C— es rechazo: aprobar es un acto
64
+ // explícito, no un default.
65
+ const esNo = entrada === "n" || entrada === "N" || tecla.return || tecla.escape || tecla.ctrl;
66
+ if (!esSi && !esNo)
67
+ return;
68
+ const siguiente = reductorDeAprobacion(estado, esSi ? "aprobar" : "rechazar");
69
+ setEstado(siguiente);
70
+ if (siguiente.terminado !== undefined)
71
+ alTerminar(siguiente.terminado);
72
+ });
73
+ const p = estado.pendientes[estado.indice];
74
+ if (p === undefined)
75
+ return null;
76
+ const lineas = diff(p.id);
77
+ const visibles = lineas !== undefined ? recortar(conContexto(lineas, CONTEXTO_DEL_DIFF), TECHO_DEL_DIFF) : undefined;
78
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: temaInk.aviso, paddingX: 1, children: [_jsx(Text, { bold: true, color: temaInk.aviso, children: `APROBACIÓN ${estado.indice + 1}/${pendientes.length}` }), _jsx(Text, { children: ` ${p.descripcion}` }), fichero(p.id) !== undefined ? _jsx(Text, { children: ` fichero: ${fichero(p.id)}` }) : null, _jsx(Text, { color: temaInk.mudo, children: ` quién: ${p.origen}` }), visibles?.lineas.map((l, i) => (_jsx(Text, { color: l.tipo === "anadido" ? temaInk.anadido : l.tipo === "quitado" ? temaInk.quitado : temaInk.mudo, children: ` ${l.tipo === "anadido" ? "+ " : l.tipo === "quitado" ? "- " : " "}${l.texto}` }, i))), visibles !== undefined && visibles.recortadas > 0 ? (_jsx(Text, { color: temaInk.mudo, children: ` … y ${visibles.recortadas} líneas más` })) : null, _jsx(Text, { bold: true, children: " ¿Aprobar? [S/n]" })] }));
79
+ }
80
+ //# sourceMappingURL=aprobarTui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aprobarTui.js","sourceRoot":"","sources":["../../../src/cli/tui/aprobarTui.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * El bloque con barra izquierda: la forma de los mensajes del usuario, de la Entrada y
3
+ * de la Pregunta. Solo el lado izquierdo, con `┃` (la vertical gruesa de cajas, la de
4
+ * OpenCode: MEDIDO, `▌` no llena la celda en vertical con la fuente del usuario y salía a
5
+ * trozos entre filas; los glifos de cajas están hechos para empalmar), y NUNCA borde arriba ni abajo: en el
6
+ * transcript un acto es una fila (`ventanaDe` cuenta así), y una caja de tres filas por
7
+ * mensaje se saldría de la pantalla. Vive aparte de los componentes para que las tres
8
+ * cajas no puedan divergir en la barra. La Entrada (entrada.tsx) extiende esta forma: pone
9
+ * `paddingLeft` a 0 y mete el aire dentro de cada fila, con fondo, porque es la tarjeta
10
+ * donde se escribe y tiene que verse; la barra sigue siendo esta.
11
+ *
12
+ * TypeScript puro: son props de Box, pero no importa ink — no hace falta.
13
+ */
14
+ /** El estilo de borde: `left` es lo único que se pinta, el resto queda vacío por contrato. */
15
+ export const BORDE_BARRA = {
16
+ topLeft: "",
17
+ top: "",
18
+ topRight: "",
19
+ right: "",
20
+ bottomRight: "",
21
+ bottom: "",
22
+ bottomLeft: "",
23
+ left: "┃",
24
+ };
25
+ /** Las props de un `<Box>` de Ink para un bloque con barra izquierda del color dado. */
26
+ export function barra(color) {
27
+ return {
28
+ borderStyle: BORDE_BARRA,
29
+ borderTop: false,
30
+ borderRight: false,
31
+ borderBottom: false,
32
+ borderLeft: true,
33
+ borderLeftColor: color,
34
+ paddingLeft: 1,
35
+ };
36
+ }
37
+ //# sourceMappingURL=barra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barra.js","sourceRoot":"","sources":["../../../src/cli/tui/barra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,EAAE;IACX,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,GAAG;CACD,CAAC;AAEX,wFAAwF;AACxF,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO;QACL,WAAW,EAAE,WAAW;QACxB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,KAAK;QACtB,WAAW,EAAE,CAAC;KACN,CAAC;AACb,CAAC"}