xonecode 0.3.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 +56 -8
- 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
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { closeSync, existsSync, mkdirSync, openSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { SqliteSaver } from "@langchain/langgraph-checkpoint-sqlite";
|
|
4
|
+
/**
|
|
5
|
+
* El checkpointer PERSISTENTE de un proyecto: la memoria del agente entre arranques.
|
|
6
|
+
*
|
|
7
|
+
* Hasta aquí el hilo vivía en un `MemorySaver` que moría con el proceso, así que reabrir
|
|
8
|
+
* una sesión era RELEER —la conversación a la vista y el agente sin recordar nada—, y la
|
|
9
|
+
* interfaz lo decía con el aviso de «conversación reabierta». Con esto el hilo sobrevive.
|
|
10
|
+
*
|
|
11
|
+
* Seis decisiones, y ninguna es de conveniencia:
|
|
12
|
+
*
|
|
13
|
+
* - **Uno por PROYECTO, no por sesión**, particionado por `thread_id`. Es la forma que la
|
|
14
|
+
* librería asume —`deleteThread(threadId)` existe justamente para eso— y evita tener
|
|
15
|
+
* tantos ficheros y tantas conexiones abiertas como conversaciones guardadas.
|
|
16
|
+
* - **El `thread_id` ES el id de la sesión.** Sin esa igualdad no hay nada que reanudar: al
|
|
17
|
+
* reabrir hay que preguntar por la misma cadena con la que se escribió. Por eso el id de
|
|
18
|
+
* sesión pasa a decidirse al ABRIR (`web/servidor/vestibulo.ts`) y no en el primer
|
|
19
|
+
* volcado — lo que sigue siendo perezoso es la entrada del índice, que es lo que
|
|
20
|
+
* ensuciaría la barra con sesiones vacías.
|
|
21
|
+
* - **Dentro de `.xonecode/`**, que está denegada al agente (`permisosDe`), excluida del
|
|
22
|
+
* diff de Revisión y no sube nunca a CloudStudio. No es cosmético: un checkpoint lleva la
|
|
23
|
+
* lista de mensajes ENTERA —los argumentos de cada tool, el contenido de cada
|
|
24
|
+
* `write_file`, la respuesta de cada tool remota—, o sea justo lo que el transcript de
|
|
25
|
+
* `sesiones.ts` no puede llevar por construcción. Este fichero es de la misma clase que
|
|
26
|
+
* `auth.json` y por eso se crea con modo **0600**.
|
|
27
|
+
* - **WAL viene de serie** (medido contra `better-sqlite3` 12.11.1: `journal_mode` es `wal`
|
|
28
|
+
* nada más abrir), que es lo que hace que dos procesos sobre el mismo proyecto —una
|
|
29
|
+
* consola de terminal y la web— no se pisen. Con `MemorySaver` el problema no existía
|
|
30
|
+
* porque cada proceso tenía el suyo.
|
|
31
|
+
* - **La consola de TERMINAL no lo usa.** Su hilo es un uuid nuevo en cada arranque y no hay
|
|
32
|
+
* índice de sesiones donde reanudarlo, así que persistirlo solo dejaría hilos que nadie
|
|
33
|
+
* puede volver a abrir engordando el fichero. Persistir es de quien tiene identidad que
|
|
34
|
+
* reanudar; ahí sigue el `MemorySaver`, que además es la omisión de `construirAgente`.
|
|
35
|
+
* - **Un fallo al abrirlo no puede tumbar el turno.** Devuelve `undefined` y quien llama
|
|
36
|
+
* cae al checkpointer en memoria: se pierde la memoria entre arranques, que es lo que ya
|
|
37
|
+
* pasaba, y se dice — nunca se pierde la conversación en curso.
|
|
38
|
+
*
|
|
39
|
+
* Y dos cosas MEDIDAS, no deducidas, que cambian lo que hay que hacer:
|
|
40
|
+
*
|
|
41
|
+
* - **Una aprobación que se quedó sin contestar rompía el primer mensaje tras reabrir**, y
|
|
42
|
+
* la primera medida no lo vio porque usaba la forma de grafo equivocada. Con un grafo de
|
|
43
|
+
* un nodo, donde `START` va al nodo interrumpido, llegar con un mensaje humano normal
|
|
44
|
+
* reejecuta ese nodo y vuelve a preguntar: inofensivo. El grafo del agente no tiene esa
|
|
45
|
+
* forma —`START` va al MODELO y el nodo parado es el de tools—, así que lo que le llegaba
|
|
46
|
+
* al modelo era `human → ai(tool_calls) → human`, con un `AIMessage` de llamadas y ningún
|
|
47
|
+
* `ToolMessage` detrás: Gemini y OpenAI rechazan exactamente eso. Lo arregla
|
|
48
|
+
* `turnoReal.ts#saldarAprobacionesHuerfanas` al abrir, no una guarda aquí: marcar como
|
|
49
|
+
* histórico un hilo con tareas pendientes sería negar una sesión que sí puede continuar.
|
|
50
|
+
* - **Los acompañantes heredan el modo, y eso está comprobado.** SQLite escribe además
|
|
51
|
+
* `checkpoint.sqlite-wal` y `-shm`, que crea él y no nosotros: medido sobre un proyecto
|
|
52
|
+
* de verdad, los dos salen `-rw-------` como el fichero principal, porque los crea con
|
|
53
|
+
* los permisos de la base. Así que poner el modo ANTES de abrir vale también para ellos —
|
|
54
|
+
* con el `chmod` de después habrían salido a 0644.
|
|
55
|
+
*/
|
|
56
|
+
export function rutaDelCheckpointer(raiz) {
|
|
57
|
+
return join(raiz, ".xonecode", "checkpoint.sqlite");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Los abiertos, por RUTA. Que la fábrica devuelva la MISMA instancia para el mismo proyecto
|
|
61
|
+
* no es una optimización: `arranque.ts` la llama en cada reapertura y en cada borrado de
|
|
62
|
+
* sesión, y sin esto cada llamada abriría una conexión nueva que nadie cierra —y borrar un
|
|
63
|
+
* hilo mientras su propia sesión está viva serían dos escritores distintos sobre el mismo
|
|
64
|
+
* fichero—. Con una sola conexión por proyecto, el `deleteThread` y el turno en vuelo
|
|
65
|
+
* comparten handle. Un fallo NO se cachea: la carpeta puede aparecer más tarde.
|
|
66
|
+
*/
|
|
67
|
+
const abiertos = new Map();
|
|
68
|
+
export function crearCheckpointerDeProyecto(raiz) {
|
|
69
|
+
const ruta = rutaDelCheckpointer(raiz);
|
|
70
|
+
const yaAbierto = abiertos.get(ruta);
|
|
71
|
+
if (yaAbierto !== undefined)
|
|
72
|
+
return yaAbierto;
|
|
73
|
+
try {
|
|
74
|
+
mkdirSync(dirname(ruta), { recursive: true, mode: 0o700 });
|
|
75
|
+
// El fichero se crea AQUÍ y con el modo puesto, no después de abrirlo: medido, SQLite
|
|
76
|
+
// lo crea ya en `fromConnString` y con el modo por omisión (0644), así que un `chmod`
|
|
77
|
+
// posterior deja una ventana —corta, pero real— en la que el checkpoint es legible por
|
|
78
|
+
// cualquiera. `openSync(…, "a")` sobre uno que ya existe no lo toca ni le cambia el modo.
|
|
79
|
+
if (!existsSync(ruta))
|
|
80
|
+
closeSync(openSync(ruta, "a", 0o600));
|
|
81
|
+
const saver = SqliteSaver.fromConnString(ruta);
|
|
82
|
+
abiertos.set(ruta, saver);
|
|
83
|
+
return saver;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// El motivo NO se propaga: puede llevar la ruta absoluta del home del usuario, y de
|
|
87
|
+
// aquí sale un aviso que viaja por el cable. Quien llama dice QUÉ pasó, no dónde.
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* ¿Hay algo guardado de ese hilo?
|
|
93
|
+
*
|
|
94
|
+
* Es lo que convierte `historica` en un hecho comprobado en vez de en «se reabrió»: una
|
|
95
|
+
* sesión con checkpoint continúa de verdad, y una sin él —la de antes de que esto
|
|
96
|
+
* existiera, o una cuyo primer turno nunca llegó a correr— sigue siendo una relectura y se
|
|
97
|
+
* dice. Un fallo al preguntar se responde `false`, que es el lado conservador: enseñar el
|
|
98
|
+
* aviso de más es peor que prometer una memoria que no está.
|
|
99
|
+
*/
|
|
100
|
+
export async function hayCheckpoint(checkpointer, hilo) {
|
|
101
|
+
if (checkpointer === undefined)
|
|
102
|
+
return false;
|
|
103
|
+
try {
|
|
104
|
+
return (await checkpointer.getTuple({ configurable: { thread_id: hilo } })) !== undefined;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Olvida el hilo de una sesión borrada. Sin esto, borrar una conversación dejaría su
|
|
112
|
+
* memoria entera —con el contenido de los ficheros que se escribieron en ella— viva en el
|
|
113
|
+
* fichero del proyecto para siempre, invisible desde la interfaz.
|
|
114
|
+
*/
|
|
115
|
+
export async function olvidarHilo(checkpointer, hilo) {
|
|
116
|
+
const conBorrado = checkpointer;
|
|
117
|
+
if (conBorrado?.deleteThread === undefined)
|
|
118
|
+
return;
|
|
119
|
+
try {
|
|
120
|
+
await conBorrado.deleteThread(hilo);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Que no se pueda olvidar no puede impedir borrar la sesión: el índice y su transcript
|
|
124
|
+
// sí se van, y lo que quede aquí es un hilo huérfano que nadie puede reabrir.
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=checkpointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointer.js","sourceRoot":"","sources":["../../src/agent/checkpointer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AAExD,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,sFAAsF;QACtF,sFAAsF;QACtF,uFAAuF;QACvF,0FAA0F;QAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,oFAAoF;QACpF,kFAAkF;QAClF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAA6C,EAC7C,IAAY;IAEZ,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,YAA6C,EAC7C,IAAY;IAEZ,MAAM,UAAU,GAAG,YAA4E,CAAC;IAChG,IAAI,UAAU,EAAE,YAAY,KAAK,SAAS;QAAE,OAAO;IACnD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,uFAAuF;QACvF,8EAA8E;IAChF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El servidor pierde el proyecto abierto al caducar la sesión, y lo dice de DOS formas.
|
|
3
|
+
*
|
|
4
|
+
* A veces como error de tool (`isError: true`), que `invocarSobre` convierte en excepción.
|
|
5
|
+
* Y a veces —medido contra el servidor real— como una respuesta CORRECTA cuyo contenido de
|
|
6
|
+
* texto es «Error: No project is open…». Esa segunda es la que se colaba: nadie miraba el
|
|
7
|
+
* resultado, así que la reapertura no se disparaba y el texto seguía camino hasta el
|
|
8
|
+
* `JSON.parse` de quien lo llamó, que reventaba con «Unexpected token 'E'». Un fallo de
|
|
9
|
+
* sesión disfrazado de fallo de formato.
|
|
10
|
+
*/
|
|
11
|
+
const SESION_PERDIDA = /no project is open/i;
|
|
12
|
+
/** Los SDK MCP envuelven el resultado en `content[].text`. */
|
|
13
|
+
function texto(valor) {
|
|
14
|
+
if (typeof valor === "string")
|
|
15
|
+
return valor;
|
|
16
|
+
if (typeof valor === "object" && valor !== null) {
|
|
17
|
+
const contenido = valor.content;
|
|
18
|
+
if (Array.isArray(contenido)) {
|
|
19
|
+
return contenido
|
|
20
|
+
.filter((b) => typeof b === "object" && b !== null && b.type === "text")
|
|
21
|
+
.map((b) => b.text)
|
|
22
|
+
.join("");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
/** Desenvuelve y parsea como JSON; si no hay nada que parsear, el objeto crudo. */
|
|
28
|
+
function registro(valor) {
|
|
29
|
+
if (typeof valor === "string") {
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(valor);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const desenvuelto = texto(valor);
|
|
38
|
+
if (desenvuelto !== "") {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(desenvuelto);
|
|
41
|
+
}
|
|
42
|
+
catch { /* sigue abajo */ }
|
|
43
|
+
}
|
|
44
|
+
return typeof valor === "object" && valor !== null ? valor : {};
|
|
45
|
+
}
|
|
46
|
+
/** Cuánto del cuerpo remoto se deja ver en un error de formato: lo justo para reconocerlo. */
|
|
47
|
+
const TOPE_DE_MUESTRA = 120;
|
|
48
|
+
/**
|
|
49
|
+
* JSON, o un error que dice quién contestó y con qué.
|
|
50
|
+
*
|
|
51
|
+
* La alternativa —`JSON.parse` a secas— produce un `SyntaxError` que no nombra la tool ni
|
|
52
|
+
* el contexto: «Unexpected token 'E', "Error: No "... is not valid JSON» fue justo el
|
|
53
|
+
* mensaje que llegó a la interfaz cuando lo que pasaba era que la sesión estaba caída.
|
|
54
|
+
*/
|
|
55
|
+
function comoJson(bruto, tool) {
|
|
56
|
+
try {
|
|
57
|
+
return JSON.parse(bruto);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
const muestra = bruto.length > TOPE_DE_MUESTRA ? `${bruto.slice(0, TOPE_DE_MUESTRA)}…` : bruto;
|
|
61
|
+
throw new Error(`${tool} no devolvió JSON: «${muestra}»`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @param nombreDeProyecto El NOMBRE del proyecto, nunca su id. El servidor abre por nombre y
|
|
66
|
+
* rechaza el identificador («not found for user», medido), y este valor es el que usa la
|
|
67
|
+
* reapertura automática de `conSesion`. Pasarle el id daba un bucle sordo: se reabría con
|
|
68
|
+
* algo que el servidor no encuentra, la tool volvía a decir «no project is open», y el
|
|
69
|
+
* error hablaba de la tool y no del argumento equivocado.
|
|
70
|
+
*/
|
|
71
|
+
export function clienteCloudStudio(invocar, nombreDeProyecto) {
|
|
72
|
+
const proyecto = nombreDeProyecto;
|
|
73
|
+
/**
|
|
74
|
+
* Una llamada que sobrevive a la caducidad: reabre y reintenta UNA vez. Una segunda
|
|
75
|
+
* vuelta convertiría un servidor caído en un bucle silencioso.
|
|
76
|
+
*
|
|
77
|
+
* Mira las DOS formas en que el servidor dice que perdió el proyecto (ver
|
|
78
|
+
* `SESION_PERDIDA`): la excepción y el texto de una respuesta por lo demás correcta. Y
|
|
79
|
+
* después de reabrir vuelve a mirar: si sigue diciendo lo mismo, se lanza con el nombre
|
|
80
|
+
* de la tool delante en vez de devolver ese texto a quien llamó — devolverlo es como
|
|
81
|
+
* acabó siendo un error de JSON en la interfaz.
|
|
82
|
+
*/
|
|
83
|
+
const conSesion = async (nombre, argumentos) => {
|
|
84
|
+
let perdida = false;
|
|
85
|
+
try {
|
|
86
|
+
const resultado = await invocar(nombre, argumentos);
|
|
87
|
+
if (!SESION_PERDIDA.test(texto(resultado)))
|
|
88
|
+
return resultado;
|
|
89
|
+
perdida = true;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (!SESION_PERDIDA.test(error.message))
|
|
93
|
+
throw error;
|
|
94
|
+
perdida = true;
|
|
95
|
+
}
|
|
96
|
+
if (!perdida)
|
|
97
|
+
throw new Error(`${nombre}: no se pudo determinar el estado de la sesión`);
|
|
98
|
+
// Reabrir es transparente a propósito: quien llamó pidió `studio_get_file`, no
|
|
99
|
+
// gestionar una sesión. Lo único que no se puede hacer transparente es que falle otra
|
|
100
|
+
// vez, y eso se dice.
|
|
101
|
+
await invocar("studio_open_project", { project: proyecto });
|
|
102
|
+
const reintento = await invocar(nombre, argumentos);
|
|
103
|
+
if (SESION_PERDIDA.test(texto(reintento))) {
|
|
104
|
+
throw new Error(`${nombre}: CloudStudio sigue diciendo que no hay proyecto abierto después de reabrir «${proyecto}»`);
|
|
105
|
+
}
|
|
106
|
+
return reintento;
|
|
107
|
+
};
|
|
108
|
+
const entradasDeArbol = (arbol) => {
|
|
109
|
+
const salida = [];
|
|
110
|
+
const recorrer = (nodo) => {
|
|
111
|
+
if (typeof nodo !== "object" || nodo === null)
|
|
112
|
+
return;
|
|
113
|
+
const n = nodo;
|
|
114
|
+
if (n.type === "file" && typeof n.path === "string") {
|
|
115
|
+
salida.push({ ruta: n.path, bytes: typeof n.size === "number" ? n.size : 0 });
|
|
116
|
+
}
|
|
117
|
+
if (Array.isArray(n.children))
|
|
118
|
+
for (const hijo of n.children)
|
|
119
|
+
recorrer(hijo);
|
|
120
|
+
};
|
|
121
|
+
recorrer(arbol.tree ?? arbol);
|
|
122
|
+
return salida;
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
async abrir(nombre) {
|
|
126
|
+
// Por NOMBRE: medido, el servidor rechaza el identificador («not found for user»).
|
|
127
|
+
await invocar("studio_open_project", { project: nombre });
|
|
128
|
+
},
|
|
129
|
+
async contexto() {
|
|
130
|
+
const r = registro(await conSesion("studio_get_context", {}));
|
|
131
|
+
return { proyecto: String(r.project ?? ""), rama: String(r.branch ?? "") };
|
|
132
|
+
},
|
|
133
|
+
async descargarZip() {
|
|
134
|
+
const r = registro(await conSesion("studio_download_project", { unified: false }));
|
|
135
|
+
const zip = r.base64Zip;
|
|
136
|
+
if (typeof zip !== "string" || zip === "")
|
|
137
|
+
throw new Error("CloudStudio no devolvió el ZIP del proyecto");
|
|
138
|
+
return zip;
|
|
139
|
+
},
|
|
140
|
+
async estructura(directorio) {
|
|
141
|
+
const arbol = registro(await conSesion("studio_get_project_structure", {
|
|
142
|
+
mode: "filesystem",
|
|
143
|
+
maxFiles: 2000,
|
|
144
|
+
...(directorio === undefined || directorio === "" ? {} : { directoryPath: directorio }),
|
|
145
|
+
}));
|
|
146
|
+
// El servidor manda `truncated` en la raíz del objeto (medido: con `maxFiles:60`
|
|
147
|
+
// ya venía `true`). Tirarlo aquí sería repetir el mismo error que obligó a que el
|
|
148
|
+
// puerto entero informara del recorte: el manifiesto sostiene el candado de borrado.
|
|
149
|
+
return { entradas: entradasDeArbol(arbol), truncado: arbol.truncated === true };
|
|
150
|
+
},
|
|
151
|
+
async leerTexto(ruta) {
|
|
152
|
+
const bruto = await conSesion("studio_get_file", { filePath: ruta });
|
|
153
|
+
const desenvuelto = texto(bruto);
|
|
154
|
+
return desenvuelto !== "" ? desenvuelto : typeof bruto === "string" ? bruto : "";
|
|
155
|
+
},
|
|
156
|
+
async escribirTexto(ruta, contenido) {
|
|
157
|
+
await conSesion("studio_edit_file", { filePath: ruta, content: contenido, editMode: "replace" });
|
|
158
|
+
},
|
|
159
|
+
async borrarTexto(ruta) {
|
|
160
|
+
// `studio_edit_file` es una tool de TEXTO: no hay borrado de binarios por MCP. Ese
|
|
161
|
+
// caso tampoco llega hasta aquí — `planDeSubida` lo declara imposible y lo saca del
|
|
162
|
+
// plan, con un motivo que le dice al usuario que lo borre en Studio a mano.
|
|
163
|
+
await conSesion("studio_edit_file", { filePath: ruta, editMode: "delete" });
|
|
164
|
+
},
|
|
165
|
+
async subirBinario(ruta, datos) {
|
|
166
|
+
// `base64` es el ÚNICO modo que xonecode implementa, y el puerto ni siquiera lleva
|
|
167
|
+
// el campo: el `chunked` del servidor no está enchufado. Por eso `planDeSubida`
|
|
168
|
+
// declara IMPOSIBLE —y saca del plan— cualquier binario por encima de
|
|
169
|
+
// `TOPE_BASE64`, en vez de mandarlo aquí a fallar. Si algún día se implementa el
|
|
170
|
+
// troceado, este es el sitio, y `OperacionDeSubida` vuelve a tener dos modos.
|
|
171
|
+
await conSesion("studio_upload_file", {
|
|
172
|
+
filePath: ruta,
|
|
173
|
+
source: "base64",
|
|
174
|
+
base64Content: Buffer.from(datos).toString("base64"),
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
async ramas() {
|
|
178
|
+
const bruto = await conSesion("studio_manage_branches", { operation: "list" });
|
|
179
|
+
// `JSON.parse` a pelo era lo que convertía cualquier respuesta inesperada en un
|
|
180
|
+
// «Unexpected token …» sin nombre de tool ni pista: el error que se veía en la
|
|
181
|
+
// interfaz hablaba de JSON cuando el problema era la sesión. Aquí se falla diciendo
|
|
182
|
+
// QUÉ tool contestó y CON QUÉ, acotado.
|
|
183
|
+
const lista = comoJson(texto(bruto) || JSON.stringify(bruto), "studio_manage_branches");
|
|
184
|
+
return Array.isArray(lista)
|
|
185
|
+
? lista.flatMap((r) => typeof r === "object" && r !== null && typeof r.Key === "string"
|
|
186
|
+
? [r.Key] : [])
|
|
187
|
+
: [];
|
|
188
|
+
},
|
|
189
|
+
async cambiarRama(nombre) {
|
|
190
|
+
await conSesion("studio_manage_branches", { operation: "switch", branchName: nombre });
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=cloudstudioClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudstudioClient.js","sourceRoot":"","sources":["../../src/agent/cloudstudioClient.ts"],"names":[],"mappings":"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"}
|