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
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El adaptador que lanza un agente de OTRO producto sobre la carpeta del proyecto.
|
|
3
|
+
*
|
|
4
|
+
* Dos motores, y cada uno por su camino porque no se parecen en nada. **Claude Code** va
|
|
5
|
+
* por su SDK oficial (`@anthropic-ai/claude-agent-sdk`) y se le deniegan las escrituras con
|
|
6
|
+
* `canUseTool`, un callback nuestro. **Codex** va por su `app-server --stdio`
|
|
7
|
+
* (`subagenteCodex.ts`), y ahí la denegación la hace el SANDBOX del sistema operativo
|
|
8
|
+
* (`sandbox: "read-only"`) — que es más fuerte, porque no depende de que el modelo colabore.
|
|
9
|
+
* En los dos casos entra una tarea autocontenida y sale la respuesta final, y el hijo es una
|
|
10
|
+
* sesión del producto de verdad: su autenticación, sus ajustes y su modelo.
|
|
11
|
+
*
|
|
12
|
+
* **La escritura se CONCEDE por escritura, una por una.** El SDK trae `canUseTool`, un
|
|
13
|
+
* callback que recibe cada tool con su entrada entera y contesta permitir o denegar. Es
|
|
14
|
+
* asíncrono y corre en NUESTRO proceso, así que se puede esperar ahí a que alguien decida
|
|
15
|
+
* mientras el hijo sigue vivo — y eso es lo que hace innecesario el `interrupt()` de
|
|
16
|
+
* LangGraph, cuyo reanudado reejecuta el nodo y relanzaría el proceso hijo.
|
|
17
|
+
*
|
|
18
|
+
* Tres listas y no dos (`escrituraExterna.ts`): lectura, escritura y denegadas, con lo que
|
|
19
|
+
* no se reconoce denegado igual. Antes era `permitirEscritura || esDeLectura(nombre)`, o sea
|
|
20
|
+
* que el día que se concediera la escritura se concedía TODO — y `Bash` sola basta para
|
|
21
|
+
* escribir el proyecto entero saltándose la política, el diff y las guardas de ruta.
|
|
22
|
+
*
|
|
23
|
+
* El import del SDK es DINÁMICO a propósito: así `npm test` no lo carga nunca —los tests
|
|
24
|
+
* usan el doble del puerto— y una instalación sin el paquete sigue arrancando, con
|
|
25
|
+
* `disponible` contestando que no en vez de reventar al importar.
|
|
26
|
+
*/
|
|
27
|
+
import { codexDisponible, correrCodex } from "./subagenteCodex.js";
|
|
28
|
+
import { correrOpencode, opencodeDisponible } from "./subagenteOpencode.js";
|
|
29
|
+
import { consumoDeClaude } from "./consumoExterno.js";
|
|
30
|
+
import { claseDeToolExterna, decisionDePreToolUse, diffDeEscrituraExterna, eventoDeToolExterna, veredictoDeLectura, motivoDeToolDenegada, veredictoDeRuta, MOTIVO_DE_ESCRITURA_RECHAZADA, MOTIVO_DE_ESCRITURA_ABORTADA, } from "./escrituraExterna.js";
|
|
31
|
+
/**
|
|
32
|
+
* La decisión sobre una tool del hijo. **Exportada para poder probarla**: es la regla de
|
|
33
|
+
* seguridad de toda esta integración, y probarla llamando al SDK exigiría lanzar un Claude
|
|
34
|
+
* Code de verdad en `npm test` — que es justo lo que este repo no consiente. Lo único que no
|
|
35
|
+
* es puro son el `realpath` y la lectura del disco, y los dos entran por parámetro.
|
|
36
|
+
*
|
|
37
|
+
* El orden importa y es el conservador:
|
|
38
|
+
* 1. **La clase de la tool** (`claseDeToolExterna`). Lo que no está en las dos listas
|
|
39
|
+
* blancas se deniega, `Bash` y `WebFetch` incluidos y con escritura concedida.
|
|
40
|
+
* 2. **El papel.** Un agente de solo lectura no llega a la política: no hay nada que
|
|
41
|
+
* preguntar sobre una escritura que su `.md` no autoriza.
|
|
42
|
+
* 3. **Las guardas de RUTA del proyecto** (`veredictoDeRuta`), y van ANTES de preguntar:
|
|
43
|
+
* un modal cuyo único final posible es un rechazo enseña a aprobar sin mirar, que es la
|
|
44
|
+
* misma razón por la que `seDetieneEn` no pregunta por un artefacto mal puesto.
|
|
45
|
+
* 4. **La política**, con el diff delante. Y sin política no hay escritura: fail-closed por
|
|
46
|
+
* tipo, el patrón de `core/cloudstudio.ts#PoliticaDeAprobacion`.
|
|
47
|
+
*
|
|
48
|
+
* **Nada de aquí puede lanzar hacia el SDK.** El envoltorio de `correr` atrapa lo que
|
|
49
|
+
* escape y deniega: el comportamiento del SDK ante un `canUseTool` que revienta no está
|
|
50
|
+
* medido, y «no medido» no es una barrera.
|
|
51
|
+
*/
|
|
52
|
+
export async function decisionDeTool(opciones) {
|
|
53
|
+
const { nombre, entrada, peticion, ficheros, politica, signal } = opciones;
|
|
54
|
+
// Abortado antes de empezar: no se pregunta a nadie por una escritura que ya no va a
|
|
55
|
+
// ocurrir. Sacar un modal para eso enseña a aprobar sin mirar.
|
|
56
|
+
if (signal?.aborted === true)
|
|
57
|
+
return { behavior: "deny", message: MOTIVO_DE_ESCRITURA_ABORTADA };
|
|
58
|
+
const clase = claseDeToolExterna(nombre);
|
|
59
|
+
if (clase === "lectura") {
|
|
60
|
+
/**
|
|
61
|
+
* Leer también lleva guarda de ruta. Medido corriéndolo, y dicho por el propio hijo:
|
|
62
|
+
* «`.env` — sí pude leerlo». La lista blanca permitía `Read` a secas, sin mirar dónde —
|
|
63
|
+
* desde el primer día, o sea que este agujero no lo abrió la escritura: ya estaba.
|
|
64
|
+
*/
|
|
65
|
+
const v = veredictoDeLectura({
|
|
66
|
+
cwd: peticion.cwd,
|
|
67
|
+
nombre,
|
|
68
|
+
entrada,
|
|
69
|
+
ficheros,
|
|
70
|
+
...(opciones.real === undefined ? {} : { real: opciones.real }),
|
|
71
|
+
});
|
|
72
|
+
return v.admitida ? { behavior: "allow" } : { behavior: "deny", message: v.motivo };
|
|
73
|
+
}
|
|
74
|
+
if (clase !== "escritura") {
|
|
75
|
+
return { behavior: "deny", message: motivoDeToolDenegada(nombre, clase) };
|
|
76
|
+
}
|
|
77
|
+
if (!peticion.permitirEscritura) {
|
|
78
|
+
return { behavior: "deny", message: motivoDeToolDenegada(nombre, clase) };
|
|
79
|
+
}
|
|
80
|
+
if (politica === undefined) {
|
|
81
|
+
// Sin política no hay a quién preguntar, y «no hay a quién preguntar» nunca es «sí».
|
|
82
|
+
// Se dice con palabras porque el modo de fallo es que el hijo no pueda escribir: quien
|
|
83
|
+
// lo lea tiene que poder distinguirlo de un rechazo.
|
|
84
|
+
return {
|
|
85
|
+
behavior: "deny",
|
|
86
|
+
message: "xonecode no tiene a quién pedir la autorización de esta escritura en esta sesión, así que no se concede. " +
|
|
87
|
+
"Explica qué querías cambiar.",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const veredicto = veredictoDeRuta({
|
|
91
|
+
cwd: peticion.cwd,
|
|
92
|
+
ruta: entrada["file_path"],
|
|
93
|
+
ficheros,
|
|
94
|
+
...(opciones.real === undefined ? {} : { real: opciones.real }),
|
|
95
|
+
});
|
|
96
|
+
if (!veredicto.admitida)
|
|
97
|
+
return { behavior: "deny", message: veredicto.motivo };
|
|
98
|
+
const lineas = diffDeEscrituraExterna(nombre, entrada, veredicto.ruta, ...(opciones.leer === undefined ? [] : [opciones.leer]));
|
|
99
|
+
/**
|
|
100
|
+
* **El `catch` va AQUÍ y no solo en el envoltorio de `correr`.** El de allá vive en un
|
|
101
|
+
* cierre que ningún test puede alcanzar sin lanzar un Claude Code de verdad, o sea que
|
|
102
|
+
* sería la regla escrita y no probada — el patrón de fallo que este repo lleva medido
|
|
103
|
+
* siete veces. Aquí sí se prueba: una política que revienta es un NO.
|
|
104
|
+
*
|
|
105
|
+
* Y reventar es alcanzable de verdad, no hipotético: el «sin humano» de `cli/run.ts`
|
|
106
|
+
* corta LANZANDO desde `pedirAprobacion`.
|
|
107
|
+
*/
|
|
108
|
+
let concedida = false;
|
|
109
|
+
// Se apunta aparte: después de la guarda de arriba TypeScript ya sabe que `aborted` era
|
|
110
|
+
// falso, así que releerlo al final no distingue «me dijeron que no» de «se canceló».
|
|
111
|
+
let abortada = false;
|
|
112
|
+
try {
|
|
113
|
+
concedida = await (signal === undefined
|
|
114
|
+
? politica([{ agente: peticion.agente, ruta: veredicto.ruta, lineas }])
|
|
115
|
+
: // Se corre contra el `signal`, y gana el primero. `pedirAprobacion` no tiene
|
|
116
|
+
// cancelación, así que lo que NO se puede hacer todavía es cerrar el modal que se
|
|
117
|
+
// queda huérfano: sigue delante hasta que alguien lo conteste o venza su plazo, y
|
|
118
|
+
// su respuesta no autoriza nada. Deuda declarada; cerrarlo exige un canal nuevo
|
|
119
|
+
// hacia las tres pieles.
|
|
120
|
+
Promise.race([
|
|
121
|
+
politica([{ agente: peticion.agente, ruta: veredicto.ruta, lineas }]),
|
|
122
|
+
new Promise((resuelto) => {
|
|
123
|
+
// Se relee AQUÍ, y no es redundante con la guarda de arriba: medido con un test
|
|
124
|
+
// que se colgaba cinco segundos, un `signal` que aborta entre las dos líneas
|
|
125
|
+
// —o durante el propio `politica(...)`, que corre ANTES de que esta promesa se
|
|
126
|
+
// construya— nunca dispara su evento, porque `addEventListener("abort")` sobre
|
|
127
|
+
// uno ya abortado no llama a nadie. Sin esta línea la carrera no resolvía nunca
|
|
128
|
+
// y el turno se quedaba colgado esperando a un hijo muerto.
|
|
129
|
+
if (signal.aborted) {
|
|
130
|
+
abortada = true;
|
|
131
|
+
resuelto(false);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
signal.addEventListener("abort", () => {
|
|
135
|
+
abortada = true;
|
|
136
|
+
resuelto(false);
|
|
137
|
+
}, { once: true });
|
|
138
|
+
}),
|
|
139
|
+
]));
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
concedida = false;
|
|
143
|
+
}
|
|
144
|
+
if (!concedida) {
|
|
145
|
+
return {
|
|
146
|
+
behavior: "deny",
|
|
147
|
+
message: abortada ? MOTIVO_DE_ESCRITURA_ABORTADA : MOTIVO_DE_ESCRITURA_RECHAZADA,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// `updatedInput` se OMITE a propósito: por el TIPO del SDK es opcional y ausente
|
|
151
|
+
// significa «no toco la entrada», que es exactamente lo que queremos. Antes se mandaba
|
|
152
|
+
// `{}`, que por ese mismo tipo se lee como «la entrada es este objeto vacío». Qué hacía
|
|
153
|
+
// el SDK con aquello **no está medido** —nunca se ha lanzado un hijo de Claude Code desde
|
|
154
|
+
// este repo—, así que no se afirma que lo ignorara: se manda la forma que su contrato
|
|
155
|
+
// declara para «sin cambios».
|
|
156
|
+
return { behavior: "allow" };
|
|
157
|
+
}
|
|
158
|
+
/** Si el motor se puede usar de verdad. Sin cachear: el que cachea es quien lo llama. */
|
|
159
|
+
async function medirDisponible(motor) {
|
|
160
|
+
if (motor === "codex")
|
|
161
|
+
return codexDisponible();
|
|
162
|
+
if (motor === "opencode")
|
|
163
|
+
return opencodeDisponible();
|
|
164
|
+
try {
|
|
165
|
+
await import("@anthropic-ai/claude-agent-sdk");
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Sin el paquete no hay motor. No se lanza: quien pregunta está decidiendo si monta el
|
|
170
|
+
// especialista, y una excepción ahí tumbaría la construcción del agente entera por una
|
|
171
|
+
// capacidad opcional.
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* El adaptador real, con quien autoriza dentro.
|
|
177
|
+
*
|
|
178
|
+
* **Las opciones son obligatorias aunque sus campos no lo sean**, y eso es deliberado: pedir
|
|
179
|
+
* el objeto obliga a pasar por cada llamador el día que esto cambie, y un campo ausente
|
|
180
|
+
* falla CERRADO —sin política no se escribe— en vez de abrir una puerta en silencio. Es la
|
|
181
|
+
* única dirección aceptable para el patrón de fallo que este repo ya ha medido siete veces:
|
|
182
|
+
* una composición que vive en un cierre que los tests doblan.
|
|
183
|
+
*/
|
|
184
|
+
export function crearSubagenteExterno(opciones) {
|
|
185
|
+
const cache = new Map();
|
|
186
|
+
return {
|
|
187
|
+
async disponible(motor) {
|
|
188
|
+
// Se cachea por proceso: `disponible` se pregunta una vez por agente y por
|
|
189
|
+
// construcción del grafo, y comprobar Codex cuesta un `spawn`. La respuesta no cambia
|
|
190
|
+
// a mitad de una sesión salvo que alguien instale el binario con la consola abierta,
|
|
191
|
+
// que es un caso que se arregla reiniciando.
|
|
192
|
+
const visto = cache.get(motor);
|
|
193
|
+
if (visto !== undefined)
|
|
194
|
+
return visto;
|
|
195
|
+
const hay = await medirDisponible(motor);
|
|
196
|
+
cache.set(motor, hay);
|
|
197
|
+
return hay;
|
|
198
|
+
},
|
|
199
|
+
async correr(peticion) {
|
|
200
|
+
if (peticion.motor === "codex") {
|
|
201
|
+
/**
|
|
202
|
+
* **Las cuatro costuras van aquí, y este es exactamente el sitio donde este repo ha
|
|
203
|
+
* fallado nueve veces**: una regla de producción compuesta dentro de algo que todos
|
|
204
|
+
* los tests doblan. `aprobar` y `ficheros` son opcionales, así que olvidarlos deja
|
|
205
|
+
* los dos `tsc` limpios y el agente sin poder escribir NADA —o, peor, escribiendo
|
|
206
|
+
* sin que las guardas de ruta lo vean—. Por eso la decisión entera vive extraída en
|
|
207
|
+
* `escrituraDeCodex.ts#decisionDeEscrituraDeCodex` y aquí solo queda el cableado,
|
|
208
|
+
* que tiene un test por argumento.
|
|
209
|
+
*/
|
|
210
|
+
return correrCodex(peticion, {
|
|
211
|
+
...(opciones.alConsumir === undefined
|
|
212
|
+
? {}
|
|
213
|
+
: { alConsumir: (c) => opciones.alConsumir?.({ motor: "codex", ...c }) }),
|
|
214
|
+
...(opciones.aprobarEscritura === undefined ? {} : { aprobar: opciones.aprobarEscritura }),
|
|
215
|
+
// `real` no se pasa: aquí no hay ninguno que inyectar y el de omisión es
|
|
216
|
+
// `realpathSync`, que es el de producción. Quien lo dobla es el test de
|
|
217
|
+
// `decisionDeEscrituraDeCodex`, que es donde vive la guarda.
|
|
218
|
+
ficheros: () => opciones.ficherosDelProyecto?.() ?? new Set(),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
if (peticion.motor === "opencode") {
|
|
222
|
+
/**
|
|
223
|
+
* Las mismas costuras que Codex, y el mismo motivo para que estén aquí y probadas una
|
|
224
|
+
* por una: son opcionales, así que olvidar una deja los dos `tsc` limpios. La de
|
|
225
|
+
* `vistasAplanadas` es la peligrosa — sin ella el hijo puede LEER un `.xml` generado y
|
|
226
|
+
* editar el fichero equivocado.
|
|
227
|
+
*/
|
|
228
|
+
return correrOpencode(peticion, {
|
|
229
|
+
...(opciones.alConsumir === undefined
|
|
230
|
+
? {}
|
|
231
|
+
: { alConsumir: (c) => opciones.alConsumir?.({ motor: "opencode", ...c }) }),
|
|
232
|
+
...(opciones.aprobarEscritura === undefined ? {} : { aprobar: opciones.aprobarEscritura }),
|
|
233
|
+
ficheros: () => opciones.ficherosDelProyecto?.() ?? new Set(),
|
|
234
|
+
vistasAplanadas: () => vistasAplanadasDe(opciones.ficherosDelProyecto?.() ?? new Set()),
|
|
235
|
+
...(opciones.alUsarTool === undefined ? {} : { alUsarTool: opciones.alUsarTool }),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
const { query } = await import("@anthropic-ai/claude-agent-sdk");
|
|
239
|
+
const respuesta = query({
|
|
240
|
+
prompt: peticion.tarea,
|
|
241
|
+
options: {
|
|
242
|
+
// La carpeta del proyecto y ninguna otra. El hijo lee de aquí sus propios ajustes
|
|
243
|
+
// (`CLAUDE.md`, `.claude/`) si los hay; xonecode no se los escribe ni se los filtra.
|
|
244
|
+
cwd: peticion.cwd,
|
|
245
|
+
// Sus instrucciones se AÑADEN al preset de Claude Code en vez de sustituirlo: lo
|
|
246
|
+
// que sabe hacer como producto —leer código, buscar, razonar sobre un repo— es la
|
|
247
|
+
// razón de llamarlo, y reemplazar su prompt entero lo dejaría sin ello. Lo que
|
|
248
|
+
// añadimos son las reglas de XOne y su papel, que es lo que no puede saber.
|
|
249
|
+
systemPrompt: { type: "preset", preset: "claude_code", append: peticion.instrucciones },
|
|
250
|
+
// Doble llave. `permissionMode` es la política del propio hijo y `canUseTool` es
|
|
251
|
+
// la nuestra: la primera puede cambiar de significado con una versión del SDK, la
|
|
252
|
+
// segunda la decidimos aquí y es la que manda.
|
|
253
|
+
/**
|
|
254
|
+
* **`"default"` y no `"dontAsk"`, y el motivo es que ninguno de los dos es seguro
|
|
255
|
+
* por suposición.** Leídas sus descripciones en el SDK: `dontAsk` es «deny if not
|
|
256
|
+
* pre-approved», así que podría denegar la escritura ANTES de consultar nuestro
|
|
257
|
+
* callback y dejar toda esta función muerta con los tests en verde; `default` es
|
|
258
|
+
* «prompts for dangerous operations», así que podría aprobar una tool «no
|
|
259
|
+
* peligrosa» —`WebSearch`, que saca el proyecto de la máquina— sin consultarnos.
|
|
260
|
+
* El primero falla cerrado y el segundo abierto.
|
|
261
|
+
*
|
|
262
|
+
* Lo que resuelve la elección es que ya no depende del modo: el hook `PreToolUse`
|
|
263
|
+
* de abajo contesta las tres clases explícitamente, así que no queda ninguna tool
|
|
264
|
+
* para que la decida el modo. Con eso se elige `default`, que es el modo donde la
|
|
265
|
+
* decisión `ask` del hook SÍ llega a `canUseTool` («the 'ask' path surfaces via a
|
|
266
|
+
* can_use_tool control_request»), que es donde se puede esperar a una persona.
|
|
267
|
+
*/
|
|
268
|
+
permissionMode: "default",
|
|
269
|
+
/**
|
|
270
|
+
* **La denegación de verdad vive aquí**, no en `canUseTool`: una regla `allow` de
|
|
271
|
+
* un `settings.json` puede ensombrecer el callback, y un deny del hook «resuelve
|
|
272
|
+
* antes de que `canUseTool` corra». Las dos citas son del propio SDK.
|
|
273
|
+
*
|
|
274
|
+
* Y las dos llaves siguen puestas, que es lo que hace que esto sea robusto en vez
|
|
275
|
+
* de listo: si el hook no llegara a correr, `canUseTool` aplica las MISMAS tres
|
|
276
|
+
* listas (es la misma función); si `canUseTool` se ensombreciera, el hook ya negó
|
|
277
|
+
* lo que no toca y una escritura quedaría en `ask` sin nadie que la conceda.
|
|
278
|
+
*/
|
|
279
|
+
hooks: {
|
|
280
|
+
PreToolUse: [
|
|
281
|
+
{
|
|
282
|
+
hooks: [
|
|
283
|
+
// El tipo del callback es la unión de TODOS los eventos de hook, así que
|
|
284
|
+
// el nombre de la tool se lee con cuidado en vez de afirmarlo: por aquí
|
|
285
|
+
// solo llegan `PreToolUse`, pero una entrada sin `tool_name` no puede
|
|
286
|
+
// decidir nada — y ante la duda, denegar (cadena vacía no está en ninguna
|
|
287
|
+
// lista blanca, así que `decisionDePreToolUse` contesta «deny»).
|
|
288
|
+
async (entrada) => {
|
|
289
|
+
const nombre = "tool_name" in entrada ? entrada.tool_name : "";
|
|
290
|
+
const cruda = "tool_input" in entrada ? entrada.tool_input : undefined;
|
|
291
|
+
const args = typeof cruda === "object" && cruda !== null
|
|
292
|
+
? cruda
|
|
293
|
+
: {};
|
|
294
|
+
const decision = decisionDePreToolUse({
|
|
295
|
+
nombre,
|
|
296
|
+
entrada: args,
|
|
297
|
+
cwd: peticion.cwd,
|
|
298
|
+
ficheros: opciones.ficherosDelProyecto?.() ?? new Set(),
|
|
299
|
+
});
|
|
300
|
+
/**
|
|
301
|
+
* **Solo se cuenta lo que va a ocurrir.** Una tool DENEGADA no se
|
|
302
|
+
* anuncia: la línea diría que el hijo hizo algo que no hizo, y este
|
|
303
|
+
* repo no tiene ningún sitio donde eso sea aceptable. `ask` sí se
|
|
304
|
+
* cuenta —es una escritura propuesta—, que es exactamente lo que el
|
|
305
|
+
* flujo del grafo ya hace con un `write_file` antes de su aprobación.
|
|
306
|
+
*/
|
|
307
|
+
if (decision.permissionDecision !== "deny") {
|
|
308
|
+
opciones.alUsarTool?.(eventoDeToolExterna(nombre, args, peticion.cwd));
|
|
309
|
+
}
|
|
310
|
+
return { hookSpecificOutput: decision };
|
|
311
|
+
},
|
|
312
|
+
],
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
},
|
|
316
|
+
/**
|
|
317
|
+
* **Los ajustes del PROYECTO no se cargan, y esto cierra un agujero que ya estaba
|
|
318
|
+
* abierto.** Medido en el propio SDK (`sdk.mjs`, el aviso
|
|
319
|
+
* `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`): «Allow rules from settings files can also
|
|
320
|
+
* shadow the callback». O sea que una regla `allow` en un `settings.json` hace que
|
|
321
|
+
* `canUseTool` **no se invoque** — y por omisión el SDK carga las tres fuentes,
|
|
322
|
+
* incluida `.claude/settings.json` de dentro del `cwd`. Ese fichero viene de
|
|
323
|
+
* CloudStudio con el proyecto, o sea de fuera: es exactamente el argumento por el
|
|
324
|
+
* que `seAplicaSinAprobacion` vive en `settings.json` y no en el `config.json` del
|
|
325
|
+
* proyecto. Con las tres fuentes cargadas, quien te pasa un proyecto decidía si
|
|
326
|
+
* tus barreras se aplican.
|
|
327
|
+
*
|
|
328
|
+
* Se queda `"user"`: son los ajustes del dueño de la máquina —su autenticación,
|
|
329
|
+
* sus MCP, su modelo—, que es la misma confianza que ya se declara para Codex («el
|
|
330
|
+
* hijo es el Codex DEL USUARIO, con sus MCP, sus plugins y sus hooks»). Lo que se
|
|
331
|
+
* va es lo que puede venir en un zip.
|
|
332
|
+
*
|
|
333
|
+
* Coste dicho: sin `"project"` el hijo tampoco carga el `CLAUDE.md` del proyecto
|
|
334
|
+
* (lo dice su propia documentación de esta opción). No se pierde el papel: sus
|
|
335
|
+
* instrucciones y las reglas de XOne van por `systemPrompt.append`, que es de
|
|
336
|
+
* donde salen de verdad.
|
|
337
|
+
*
|
|
338
|
+
* Y queda DECLARADO lo que esto no cierra: un `allow` en los ajustes GLOBALES del
|
|
339
|
+
* usuario sigue pudiendo ensombrecer el callback. El cierre robusto que el propio
|
|
340
|
+
* SDK nombra es un hook `PreToolUse`, que no se ensombrece; no está puesto todavía.
|
|
341
|
+
*/
|
|
342
|
+
settingSources: ["user"],
|
|
343
|
+
// El modelo del PRODUCTO, si el `.md` lo pide. Ausente = el que Claude Code use
|
|
344
|
+
// por su cuenta, que es lo que hacía siempre. Los alias (`opus`, `sonnet`…) son
|
|
345
|
+
// los que su propio SDK documenta, y se prefieren a un id pinchado: sobreviven a
|
|
346
|
+
// la siguiente versión, que es justo para lo que el producto los ofrece.
|
|
347
|
+
...(peticion.modelo === undefined ? {} : { model: peticion.modelo }),
|
|
348
|
+
/**
|
|
349
|
+
* El envoltorio es el fail-closed llevado al final: **nada de aquí dentro puede
|
|
350
|
+
* lanzar hacia el SDK**. Si la política revienta, si el disco contesta un EACCES
|
|
351
|
+
* al canonicalizar o si alguien introduce un fallo en las guardas, la respuesta es
|
|
352
|
+
* DENEGAR — nunca una excepción, cuyo tratamiento en la máquina de permisos del
|
|
353
|
+
* SDK no está medido, y nunca un permiso.
|
|
354
|
+
*/
|
|
355
|
+
canUseTool: async (nombre, entrada, contexto) => {
|
|
356
|
+
try {
|
|
357
|
+
return await decisionDeTool({
|
|
358
|
+
nombre,
|
|
359
|
+
entrada,
|
|
360
|
+
peticion,
|
|
361
|
+
signal: contexto.signal,
|
|
362
|
+
ficheros: opciones.ficherosDelProyecto?.() ?? new Set(),
|
|
363
|
+
...(opciones.aprobarEscritura === undefined
|
|
364
|
+
? {}
|
|
365
|
+
: { politica: opciones.aprobarEscritura }),
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
return {
|
|
370
|
+
behavior: "deny",
|
|
371
|
+
message: "xonecode no pudo decidir sobre esa llamada, así que no se concede. Explica qué querías hacer.",
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
});
|
|
377
|
+
// Se recorre hasta el `result`, que es el cierre del turno. El texto final está ahí y
|
|
378
|
+
// no en el último `assistant`: un turno puede terminar por error y entonces el último
|
|
379
|
+
// mensaje del modelo no es la respuesta.
|
|
380
|
+
for await (const mensaje of respuesta) {
|
|
381
|
+
if (mensaje.type !== "result")
|
|
382
|
+
continue;
|
|
383
|
+
if (mensaje.subtype !== "success") {
|
|
384
|
+
opciones.alConsumir?.({ motor: "claude-code", ...consumoDeClaude(mensaje) });
|
|
385
|
+
throw new Error(`${peticion.motor} terminó sin respuesta (${mensaje.subtype})`);
|
|
386
|
+
}
|
|
387
|
+
// `is_error` con subtype «success» significa que el turno acabó en un error de API y
|
|
388
|
+
// el texto ES el error. Devolverlo como si fuera la respuesta del especialista
|
|
389
|
+
// haría que el orquestador se lo creyera.
|
|
390
|
+
// El consumo se apunta ANTES de contestar, y también cuando el turno acabó en
|
|
391
|
+
// error: esos tokens se gastaron igual. Contar solo los éxitos haría que la cifra
|
|
392
|
+
// bajara justo en los turnos que más cuestan.
|
|
393
|
+
opciones.alConsumir?.({ motor: "claude-code", ...consumoDeClaude(mensaje) });
|
|
394
|
+
if (mensaje.is_error)
|
|
395
|
+
throw new Error(`${peticion.motor}: ${mensaje.result}`);
|
|
396
|
+
return mensaje.result;
|
|
397
|
+
}
|
|
398
|
+
throw new Error(`${peticion.motor} no devolvió ningún resultado`);
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/** Los que están cableados de verdad. Los tres, desde que OpenCode habla por ACP. */
|
|
403
|
+
export const MOTORES_CABLEADOS = new Set([
|
|
404
|
+
"claude-code",
|
|
405
|
+
"codex",
|
|
406
|
+
"opencode",
|
|
407
|
+
]);
|
|
408
|
+
/**
|
|
409
|
+
* Las vistas aplanadas del proyecto: cada `X.xml` que tiene un `X.xne` al lado.
|
|
410
|
+
*
|
|
411
|
+
* Existe porque OpenCode guarda la LECTURA por PATRÓN y no por código —su permiso de lectura
|
|
412
|
+
* llega sin ruta—, y «un `.xml` con un `.xne` al lado» no es un patrón que se pueda escribir:
|
|
413
|
+
* hay que enumerarlas. En los otros dos motores esto lo decide `esVistaAplanada` en el momento.
|
|
414
|
+
*/
|
|
415
|
+
export function vistasAplanadasDe(ficheros) {
|
|
416
|
+
const salida = [];
|
|
417
|
+
for (const ruta of ficheros) {
|
|
418
|
+
if (ruta.endsWith(".xml") && ficheros.has(`${ruta.slice(0, -4)}.xne`))
|
|
419
|
+
salida.push(ruta);
|
|
420
|
+
}
|
|
421
|
+
return salida.sort();
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=subagenteExterno.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagenteExterno.js","sourceRoot":"","sources":["../../src/agent/subagenteExterno.ts"],"names":[],"mappings":"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"}
|