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.
- package/README.md +49 -7
- package/THIRD_PARTY_NOTICES.md +128 -0
- package/apps/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/apps/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/apps/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/apps/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/apps/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/apps/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/apps/web/dist/assets/c-BIGW1oBm.js +1 -0
- package/apps/web/dist/assets/cpp-DddhVWhK.js +1 -0
- package/apps/web/dist/assets/csharp-DSvCPggb.js +1 -0
- package/apps/web/dist/assets/css-CLj8gQPS.js +1 -0
- package/apps/web/dist/assets/go-C27-OAKa.js +1 -0
- package/apps/web/dist/assets/html-CfGypltT.js +1 -0
- package/apps/web/dist/assets/index-BB3SamhR.css +1 -0
- package/apps/web/dist/assets/index-CFYAoHdw.js +477 -0
- package/apps/web/dist/assets/ini-BEwlwnbL.js +1 -0
- package/apps/web/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/apps/web/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/apps/web/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/apps/web/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/apps/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/apps/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/apps/web/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/apps/web/dist/assets/java-CylS5w8V.js +1 -0
- package/apps/web/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/apps/web/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/apps/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/apps/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/apps/web/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/apps/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/apps/web/dist/assets/less-B1dDrJ26.js +1 -0
- package/apps/web/dist/assets/lua-BaeVxFsk.js +1 -0
- package/apps/web/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/apps/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/apps/web/dist/assets/php-D_2--9WK.js +1 -0
- package/apps/web/dist/assets/python-B6aJPvgy.js +1 -0
- package/apps/web/dist/assets/ruby-DSHSDbk1.js +1 -0
- package/apps/web/dist/assets/rust-B1yitclQ.js +1 -0
- package/apps/web/dist/assets/scss-D5BDwBP9.js +1 -0
- package/apps/web/dist/assets/sql-CRqJ_cUM.js +1 -0
- package/apps/web/dist/assets/swift-C2oV4EkX.js +1 -0
- package/apps/web/dist/assets/toml-vGWfd6FD.js +1 -0
- package/apps/web/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/apps/web/dist/assets/yaml-Buea-lGh.js +1 -0
- package/apps/web/dist/iconos/xonecode.png +0 -0
- package/apps/web/dist/index.html +20 -0
- package/dist/agent/agentesEnDisco.js +539 -0
- package/dist/agent/agentesEnDisco.js.map +1 -0
- package/dist/agent/arbolDeProyecto.js +245 -0
- package/dist/agent/arbolDeProyecto.js.map +1 -0
- package/dist/agent/artefactosEnDisco.js +139 -0
- package/dist/agent/artefactosEnDisco.js.map +1 -0
- package/dist/agent/aumentador.js +175 -0
- package/dist/agent/aumentador.js.map +1 -0
- package/dist/agent/authEnDisco.js +76 -1
- package/dist/agent/authEnDisco.js.map +1 -1
- package/dist/agent/busquedaRegex.js +92 -0
- package/dist/agent/busquedaRegex.js.map +1 -0
- package/dist/agent/catalogoModelos.js +345 -0
- package/dist/agent/catalogoModelos.js.map +1 -0
- package/dist/agent/checkpointer.js +127 -0
- package/dist/agent/checkpointer.js.map +1 -0
- package/dist/agent/cloudstudioClient.js +194 -0
- package/dist/agent/cloudstudioClient.js.map +1 -0
- package/dist/agent/cloudstudioMcp.js +722 -0
- package/dist/agent/cloudstudioMcp.js.map +1 -0
- package/dist/agent/configEnDisco.js +309 -11
- package/dist/agent/configEnDisco.js.map +1 -1
- package/dist/agent/consumoExterno.js +99 -0
- package/dist/agent/consumoExterno.js.map +1 -0
- package/dist/agent/descarga.js +149 -0
- package/dist/agent/descarga.js.map +1 -0
- package/dist/agent/diagnosticoDeTools.js +51 -0
- package/dist/agent/diagnosticoDeTools.js.map +1 -0
- package/dist/agent/dispositivosEnMaquina.js +596 -0
- package/dist/agent/dispositivosEnMaquina.js.map +1 -0
- package/dist/agent/escrituraDeCodex.js +134 -0
- package/dist/agent/escrituraDeCodex.js.map +1 -0
- package/dist/agent/escrituraDeOpencode.js +80 -0
- package/dist/agent/escrituraDeOpencode.js.map +1 -0
- package/dist/agent/escrituraExterna.js +742 -0
- package/dist/agent/escrituraExterna.js.map +1 -0
- package/dist/agent/gemini.js +81 -0
- package/dist/agent/gemini.js.map +1 -0
- package/dist/agent/git.js +83 -0
- package/dist/agent/git.js.map +1 -0
- package/dist/agent/gitSync.js +441 -0
- package/dist/agent/gitSync.js.map +1 -0
- package/dist/agent/hotswap.js +448 -0
- package/dist/agent/hotswap.js.map +1 -0
- package/dist/agent/instalacionEnMaquina.js +252 -0
- package/dist/agent/instalacionEnMaquina.js.map +1 -0
- package/dist/agent/instantanea.js +7 -10
- package/dist/agent/instantanea.js.map +1 -1
- package/dist/agent/interrupts.js +11 -2
- package/dist/agent/interrupts.js.map +1 -1
- package/dist/agent/juezDeTarea.js +345 -0
- package/dist/agent/juezDeTarea.js.map +1 -0
- package/dist/agent/lanzamientoEnMaquina.js +377 -0
- package/dist/agent/lanzamientoEnMaquina.js.map +1 -0
- package/dist/agent/manifiesto.js +59 -0
- package/dist/agent/manifiesto.js.map +1 -0
- package/dist/agent/memoriaDeProyecto.js +60 -0
- package/dist/agent/memoriaDeProyecto.js.map +1 -0
- package/dist/agent/modelos.js +105 -17
- package/dist/agent/modelos.js.map +1 -1
- package/dist/agent/modelosDeMotor.js +204 -0
- package/dist/agent/modelosDeMotor.js.map +1 -0
- package/dist/agent/paqueteDelProyecto.js +181 -0
- package/dist/agent/paqueteDelProyecto.js.map +1 -0
- package/dist/agent/perfiles.js +92 -31
- package/dist/agent/perfiles.js.map +1 -1
- package/dist/agent/persona.js +40 -0
- package/dist/agent/persona.js.map +1 -0
- package/dist/agent/procesosEnMaquina.js +204 -0
- package/dist/agent/procesosEnMaquina.js.map +1 -0
- package/dist/agent/proyecto.js +311 -13
- package/dist/agent/proyecto.js.map +1 -1
- package/dist/agent/puente.js +63 -6
- package/dist/agent/puente.js.map +1 -1
- package/dist/agent/resumenDeContexto.js +30 -0
- package/dist/agent/resumenDeContexto.js.map +1 -0
- package/dist/agent/resumenDeTool.js +64 -18
- package/dist/agent/resumenDeTool.js.map +1 -1
- package/dist/agent/sesionGit.js +481 -0
- package/dist/agent/sesionGit.js.map +1 -0
- package/dist/agent/settingsEnDisco.js +189 -0
- package/dist/agent/settingsEnDisco.js.map +1 -0
- package/dist/agent/subagenteCodex.js +368 -0
- package/dist/agent/subagenteCodex.js.map +1 -0
- package/dist/agent/subagenteExterno.js +423 -0
- package/dist/agent/subagenteExterno.js.map +1 -0
- package/dist/agent/subagenteOpencode.js +389 -0
- package/dist/agent/subagenteOpencode.js.map +1 -0
- package/dist/agent/subida.js +202 -0
- package/dist/agent/subida.js.map +1 -0
- package/dist/agent/tareasEnDisco.js +466 -0
- package/dist/agent/tareasEnDisco.js.map +1 -0
- package/dist/agent/turnoReal.js +663 -50
- package/dist/agent/turnoReal.js.map +1 -1
- package/dist/agent/versionEnDisco.js +48 -0
- package/dist/agent/versionEnDisco.js.map +1 -0
- package/dist/agent/xoneAgent.js +290 -49
- package/dist/agent/xoneAgent.js.map +1 -1
- package/dist/agent/zip.js +52 -0
- package/dist/agent/zip.js.map +1 -0
- package/dist/cli/acuseDeModelo.js +30 -0
- package/dist/cli/acuseDeModelo.js.map +1 -0
- package/dist/cli/aprobar.js +55 -2
- package/dist/cli/aprobar.js.map +1 -1
- package/dist/cli/config.js +9 -13
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/consola.js +750 -19
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/main.js +740 -81
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/markdown.js +188 -2
- package/dist/cli/markdown.js.map +1 -1
- package/dist/cli/run.js +32 -4
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/stdio.js +46 -19
- package/dist/cli/stdio.js.map +1 -1
- package/dist/cli/tema.js +96 -8
- package/dist/cli/tema.js.map +1 -1
- package/dist/cli/tokens.js +29 -0
- package/dist/cli/tokens.js.map +1 -0
- package/dist/cli/tui/app.js +171 -0
- package/dist/cli/tui/app.js.map +1 -0
- package/dist/cli/tui/aprobarTui.js +80 -0
- package/dist/cli/tui/aprobarTui.js.map +1 -0
- package/dist/cli/tui/barra.js +37 -0
- package/dist/cli/tui/barra.js.map +1 -0
- package/dist/cli/tui/correrTui.js +478 -0
- package/dist/cli/tui/correrTui.js.map +1 -0
- package/dist/cli/tui/entrada.js +166 -0
- package/dist/cli/tui/entrada.js.map +1 -0
- package/dist/cli/tui/filas.js +24 -0
- package/dist/cli/tui/filas.js.map +1 -0
- package/dist/cli/tui/logo.js +49 -0
- package/dist/cli/tui/logo.js.map +1 -0
- package/dist/cli/tui/pielTui.js +14 -0
- package/dist/cli/tui/pielTui.js.map +1 -0
- package/dist/cli/tui/raton.js +126 -0
- package/dist/cli/tui/raton.js.map +1 -0
- package/dist/cli/tui/sidebar.js +86 -0
- package/dist/cli/tui/sidebar.js.map +1 -0
- package/dist/cli/tui/store.js +143 -0
- package/dist/cli/tui/store.js.map +1 -0
- package/dist/cli/tui/tarjeta.js +19 -0
- package/dist/cli/tui/tarjeta.js.map +1 -0
- package/dist/cli/tui/temaInk.js +114 -0
- package/dist/cli/tui/temaInk.js.map +1 -0
- package/dist/cli/tui/transcript.js +254 -0
- package/dist/cli/tui/transcript.js.map +1 -0
- package/dist/cli/wizardInicial.js +240 -0
- package/dist/cli/wizardInicial.js.map +1 -0
- package/dist/core/actos.js +113 -0
- package/dist/core/actos.js.map +1 -0
- package/dist/core/adjuntos.js +97 -0
- package/dist/core/adjuntos.js.map +1 -0
- package/dist/core/agentes.js +227 -0
- package/dist/core/agentes.js.map +1 -0
- package/dist/core/artefactos.js +149 -0
- package/dist/core/artefactos.js.map +1 -0
- package/dist/core/cloudstudio.js +7 -0
- package/dist/core/cloudstudio.js.map +1 -0
- package/dist/core/config.js +212 -5
- package/dist/core/config.js.map +1 -1
- package/dist/core/contextos.js +53 -1
- package/dist/core/contextos.js.map +1 -1
- package/dist/core/descargas.js +106 -0
- package/dist/core/descargas.js.map +1 -0
- package/dist/core/descriptoresDeApp.js +279 -0
- package/dist/core/descriptoresDeApp.js.map +1 -0
- package/dist/core/dispositivos.js +466 -0
- package/dist/core/dispositivos.js.map +1 -0
- package/dist/core/entrega.js +141 -0
- package/dist/core/entrega.js.map +1 -0
- package/dist/core/entrelazar.js +90 -0
- package/dist/core/entrelazar.js.map +1 -0
- package/dist/core/esqueleto.js +10 -0
- package/dist/core/esqueleto.js.map +1 -1
- package/dist/core/modelos.js +235 -3
- package/dist/core/modelos.js.map +1 -1
- package/dist/core/notify.js +27 -9
- package/dist/core/notify.js.map +1 -1
- package/dist/core/planDeSubida.js +127 -0
- package/dist/core/planDeSubida.js.map +1 -0
- package/dist/core/ports.js +189 -1
- package/dist/core/ports.js.map +1 -1
- package/dist/core/puedeLanzarse.js +239 -0
- package/dist/core/puedeLanzarse.js.map +1 -0
- package/dist/core/rutaVirtual.js +42 -0
- package/dist/core/rutaVirtual.js.map +1 -0
- package/dist/core/settings.js +246 -0
- package/dist/core/settings.js.map +1 -0
- package/dist/core/tareas.js +230 -0
- package/dist/core/tareas.js.map +1 -0
- package/dist/core/textos.js +36 -0
- package/dist/core/textos.js.map +1 -0
- package/dist/core/turno.js +70 -10
- package/dist/core/turno.js.map +1 -1
- package/dist/core/version.js +31 -0
- package/dist/core/version.js.map +1 -0
- package/dist/vendor/tokenTracking.js +22 -1
- package/dist/vendor/tokenTracking.js.map +1 -1
- package/dist/web/servidor/arranque.js +3964 -0
- package/dist/web/servidor/arranque.js.map +1 -0
- package/dist/web/servidor/consolaDeTarea.js +161 -0
- package/dist/web/servidor/consolaDeTarea.js.map +1 -0
- package/dist/web/servidor/consolaWeb.js +389 -0
- package/dist/web/servidor/consolaWeb.js.map +1 -0
- package/dist/web/servidor/corredorDeTareas.js +1119 -0
- package/dist/web/servidor/corredorDeTareas.js.map +1 -0
- package/dist/web/servidor/pielWeb.js +269 -0
- package/dist/web/servidor/pielWeb.js.map +1 -0
- package/dist/web/servidor/servidor.js +257 -0
- package/dist/web/servidor/servidor.js.map +1 -0
- package/dist/web/servidor/sesiones.js +440 -0
- package/dist/web/servidor/sesiones.js.map +1 -0
- package/dist/web/servidor/transporte.js +169 -0
- package/dist/web/servidor/transporte.js.map +1 -0
- package/dist/web/servidor/vestibulo.js +1276 -0
- package/dist/web/servidor/vestibulo.js.map +1 -0
- package/package.json +30 -8
- package/skills/archify/LICENSE +22 -0
- package/skills/archify/SKILL.md +109 -0
- package/skills/archify/THIRD_PARTY_NOTICES.md +56 -0
- package/skills/archify/assets/template.html +14787 -0
- package/skills/archify/bin/archify.mjs +1990 -0
- package/skills/archify/bin/open-artifact.mjs +86 -0
- package/skills/archify/bin/preview.mjs +648 -0
- package/skills/archify/bin/visual-check.mjs +829 -0
- package/skills/archify/brand-marks/README.md +31 -0
- package/skills/archify/brand-marks/catalog.json +131 -0
- package/skills/archify/delta/architecture-delta.mjs +1214 -0
- package/skills/archify/examples/agent-run.lifecycle.json +71 -0
- package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
- package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
- package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
- package/skills/archify/examples/cache-miss-request.sequence.json +81 -0
- package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
- package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
- package/skills/archify/examples/dataflow-product-analytics.html +14898 -0
- package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
- package/skills/archify/examples/event-stream.dataflow.json +57 -0
- package/skills/archify/examples/incident-response.workflow.json +64 -0
- package/skills/archify/examples/lifecycle-agent-run.html +14847 -0
- package/skills/archify/examples/product-analytics.dataflow.json +76 -0
- package/skills/archify/examples/production-deployment.architecture.json +71 -0
- package/skills/archify/examples/release-delivery.workflow.json +62 -0
- package/skills/archify/examples/sequence-cache-miss-request.html +14913 -0
- package/skills/archify/examples/web-app-rendered.html +14862 -0
- package/skills/archify/examples/web-app.architecture.json +46 -0
- package/skills/archify/examples/workflow-agent-tool-call-rendered.html +14904 -0
- package/skills/archify/migrations/workflow-v2.mjs +279 -0
- package/skills/archify/package.json +17 -0
- package/skills/archify/recipes/scenarios.mjs +391 -0
- package/skills/archify/references/authoring-contract.md +198 -0
- package/skills/archify/references/brand-marks.md +69 -0
- package/skills/archify/references/delivery-contract.md +116 -0
- package/skills/archify/references/viewer-runtime.md +45 -0
- package/skills/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
- package/skills/archify/renderers/dataflow/README.md +104 -0
- package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- package/skills/archify/renderers/lifecycle/README.md +115 -0
- package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- package/skills/archify/renderers/sequence/README.md +114 -0
- package/skills/archify/renderers/sequence/render-sequence.mjs +453 -0
- package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
- package/skills/archify/renderers/shared/cli.mjs +218 -0
- package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
- package/skills/archify/renderers/shared/diagnostics.mjs +127 -0
- package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
- package/skills/archify/renderers/shared/geometry.mjs +1423 -0
- package/skills/archify/renderers/shared/i18n.mjs +594 -0
- package/skills/archify/renderers/shared/layout-report.mjs +40 -0
- package/skills/archify/renderers/shared/legend.mjs +217 -0
- package/skills/archify/renderers/shared/output-path.mjs +321 -0
- package/skills/archify/renderers/shared/repository-evidence.mjs +235 -0
- package/skills/archify/renderers/shared/text-fit.mjs +49 -0
- package/skills/archify/renderers/shared/utils.mjs +232 -0
- package/skills/archify/renderers/shared/validator.mjs +86 -0
- package/skills/archify/renderers/workflow/README.md +223 -0
- package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
- package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/archify/schemas/README.md +211 -0
- package/skills/archify/schemas/architecture.schema.json +176 -0
- package/skills/archify/schemas/common.schema.json +115 -0
- package/skills/archify/schemas/dataflow.schema.json +243 -0
- package/skills/archify/schemas/lifecycle.schema.json +266 -0
- package/skills/archify/schemas/sequence.schema.json +223 -0
- package/skills/archify/schemas/workflow.schema.json +428 -0
- package/skills/archify/scripts/check-render-output.mjs +835 -0
- package/skills/archify/scripts/check-update.mjs +1667 -0
- package/skills/archify/scripts/render-examples.mjs +26 -0
- package/skills/archify/scripts/update-contract.mjs +182 -0
- package/skills/archify/skill-release.json +10 -0
- package/skills/artifacts-builder/SKILL.md +120 -0
- package/skills/artifacts-builder/reference/diagramas.md +123 -0
- package/skills/artifacts-builder/reference/estilo.md +123 -0
- package/skills/artifacts-builder/reference/exportar-pdf.md +56 -0
- package/skills/artifacts-builder/reference/graficas.md +22 -0
- package/skills/artifacts-builder/scripts/bundle_artifact.py +109 -0
- package/skills/artifacts-builder/scripts/validate_artifact.py +345 -0
- package/skills/xone-hotswap/SKILL.md +185 -0
- package/skills/xone-hotswap/references/comandos.md +706 -0
- 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
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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(
|
|
105
|
+
const SIN_COLOR = Object.fromEntries(Object.keys(CON_COLOR_XONE).map((nombre) => [
|
|
41
106
|
nombre,
|
|
42
|
-
typeof
|
|
107
|
+
typeof CON_COLOR_XONE[nombre] === "function" ? SIN_ACCION : "",
|
|
43
108
|
]));
|
|
44
|
-
|
|
45
|
-
|
|
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
|
package/dist/cli/tema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tema.js","sourceRoot":"","sources":["../../src/cli/tema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
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":"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"}
|
|
@@ -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"}
|