xonecode 0.3.0 → 0.5.1
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 +50 -8
- package/THIRD_PARTY_NOTICES.md +160 -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/sqliteSaver.js +389 -0
- package/dist/vendor/sqliteSaver.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 +33 -9
- 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/agent/proyecto.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { CompositeBackend, FilesystemBackend } from "deepagents";
|
|
4
|
+
import { RUTA_MEMORIA_INTERNA, RUTA_MEMORIA_VIRTUAL } from "./memoriaDeProyecto.js";
|
|
5
|
+
import { RAIZ_SKILLS } from "./skills.js";
|
|
6
|
+
import { artefactoFueraDeSitio, mimeDeArtefacto, nombreDeArtefacto, RUTA_ARTEFACTOS, } from "../core/artefactos.js";
|
|
7
|
+
import { RUTA_ADJUNTOS } from "../core/adjuntos.js";
|
|
8
|
+
import { RUTAS_DE_DESCARGA, carpetaDeDescargas, descargaFueraDeSitio, porQueNoEsDelProyecto, } from "../core/descargas.js";
|
|
2
9
|
/**
|
|
3
10
|
* El backend del proyecto: confinado, y sin las vistas aplanadas.
|
|
4
11
|
*
|
|
5
|
-
* **`virtualMode: true` no es configurable.** Medido contra deepagents 1.
|
|
12
|
+
* **`virtualMode: true` no es configurable.** Medido contra deepagents 1.13.2: con el
|
|
6
13
|
* default (`false`) el backend LEYÓ una ruta absoluta de fuera de la raíz. La propia
|
|
7
14
|
* librería lo dice de su default — «absolute paths and `..` can bypass rootDir».
|
|
8
15
|
*
|
|
@@ -12,6 +19,295 @@ import { FilesystemBackend } from "deepagents";
|
|
|
12
19
|
export function backendDelProyecto(raiz) {
|
|
13
20
|
return new FilesystemBackend({ rootDir: raiz, virtualMode: true });
|
|
14
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Añade las skills del harness como una ruta virtual de solo lectura del agente.
|
|
24
|
+
*
|
|
25
|
+
* El proyecto del usuario sigue siendo la raíz predeterminada. `/skills` apunta al
|
|
26
|
+
* catálogo que se distribuye con xonecode: así SkillsMiddleware puede descubrir y
|
|
27
|
+
* cargar bajo demanda cada `SKILL.md` sin conceder al modelo acceso al repositorio
|
|
28
|
+
* del harness ni sacarlo de la raíz del proyecto.
|
|
29
|
+
*/
|
|
30
|
+
export function backendConSkills(backend) {
|
|
31
|
+
return new CompositeBackend(backend, {
|
|
32
|
+
// La barra final importa: CompositeBackend la retira antes de delegar. Sin ella
|
|
33
|
+
// reconstruye `//archify/...`, que FilesystemBackend interpreta fuera de su raíz.
|
|
34
|
+
"/skills/": new FilesystemBackend({ rootDir: RAIZ_SKILLS, virtualMode: true }),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Cuelga `/adjuntos/` de la carpeta de la TAREA, de solo lectura.
|
|
39
|
+
*
|
|
40
|
+
* **La misma pieza que `/skills/` y `/artefactos/`**: otra raíz del `CompositeBackend`. Y de
|
|
41
|
+
* solo lectura por lo mismo que las skills — son material de ENTRADA, los documentos que
|
|
42
|
+
* anexó la persona que creó la tarea, no ficheros que reescribir. Quien lo deniega es
|
|
43
|
+
* `permisosDe` (`agent/perfiles.ts`), incondicionalmente y por patrón: aquí no hay Proxy que
|
|
44
|
+
* rechace, igual que no lo hay para `/skills/`, porque la denegación que el modelo choca es
|
|
45
|
+
* la del middleware de permisos y ese es el sitio donde vive la regla.
|
|
46
|
+
*
|
|
47
|
+
* La carpeta vive FUERA del proyecto (`~/.xonecode/tareas/<id>/adjuntos/`), y eso trae
|
|
48
|
+
* gratis lo que importaba: no entra en git y no sube a CloudStudio, sin depender de ninguna
|
|
49
|
+
* exclusión. El porqué entero está en `core/adjuntos.ts`.
|
|
50
|
+
*
|
|
51
|
+
* **La carpeta no se crea aquí**, misma medida que `/artefactos/`: `FilesystemBackend` no
|
|
52
|
+
* exige que su `rootDir` exista. Y quien monta esto solo lo hace cuando la tarea TRAE
|
|
53
|
+
* adjuntos (`web/servidor/corredorDeTareas.ts`): una raíz vacía sería mandar al agente a
|
|
54
|
+
* mirar un sitio donde no hay nada.
|
|
55
|
+
*/
|
|
56
|
+
export function backendConAdjuntos(backend, carpeta) {
|
|
57
|
+
return new CompositeBackend(backend, {
|
|
58
|
+
// La barra final es obligatoria: `CompositeBackend` la retira antes de delegar, y sin
|
|
59
|
+
// ella reconstruye `//fichero`, fuera de la raíz montada. La misma trampa de `/skills/`.
|
|
60
|
+
[RUTA_ADJUNTOS]: new FilesystemBackend({ rootDir: carpeta, virtualMode: true }),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Cuelga `/artefactos/` de la carpeta de la SESIÓN, fuera del proyecto.
|
|
65
|
+
*
|
|
66
|
+
* El porqué está en `core/artefactos.ts`: hoy los diagramas del `mockup` acaban en la raíz
|
|
67
|
+
* del proyecto y de ahí a git y a CloudStudio. Esto es el mismo mecanismo que `/skills/`
|
|
68
|
+
* —otra raíz en el `CompositeBackend`— con dos diferencias que importan:
|
|
69
|
+
*
|
|
70
|
+
* - **Se puede ESCRIBIR.** `/skills/` está denegada en `permisosDe` porque son instrucciones
|
|
71
|
+
* del harness; esta es justamente donde el agente deja lo que produce.
|
|
72
|
+
* - **Se APUNTA lo que se escribe.** El backend es el único sitio que sabe que una escritura
|
|
73
|
+
* ocurrió y cuánto pesó, y un artefacto que nadie nombra es un fichero en una carpeta que
|
|
74
|
+
* nadie abre. El Proxy va sobre el sub-backend y no sobre el compuesto: así solo ve lo de
|
|
75
|
+
* esta carpeta, sin filtrar las escrituras del proyecto por el mismo sitio.
|
|
76
|
+
*
|
|
77
|
+
* La carpeta **no se crea aquí**. Medido contra deepagents: `FilesystemBackend` no exige que
|
|
78
|
+
* su `rootDir` exista y el `write` lo crea. Crearla al montar dejaría un `artefactos/` vacío
|
|
79
|
+
* en cada sesión que no dibuja nada, que es la mayoría.
|
|
80
|
+
*/
|
|
81
|
+
export function backendConArtefactos(backend, carpeta, alEscribir) {
|
|
82
|
+
const destino = new FilesystemBackend({ rootDir: carpeta, virtualMode: true });
|
|
83
|
+
const anotado = new Proxy(destino, {
|
|
84
|
+
get(objetivo, prop, receptor) {
|
|
85
|
+
const valor = Reflect.get(objetivo, prop, receptor);
|
|
86
|
+
if (typeof valor !== "function")
|
|
87
|
+
return valor;
|
|
88
|
+
if (prop !== "write" && prop !== "edit") {
|
|
89
|
+
return valor.bind(objetivo);
|
|
90
|
+
}
|
|
91
|
+
return async (...args) => {
|
|
92
|
+
const resultado = await valor.apply(objetivo, args);
|
|
93
|
+
// La ruta que llega aquí ya viene sin el prefijo (`CompositeBackend` lo retira antes
|
|
94
|
+
// de delegar), así que se rehace para que lo apuntado sea lo que el agente escribió
|
|
95
|
+
// y lo que después se le pide al lector.
|
|
96
|
+
const relativa = String(args[0] ?? "").replace(/^\/+/, "");
|
|
97
|
+
const ruta = RUTA_ARTEFACTOS + relativa;
|
|
98
|
+
const nombre = nombreDeArtefacto(ruta);
|
|
99
|
+
const mime = mimeDeArtefacto(nombre);
|
|
100
|
+
// El tamaño se mide del DISCO y no del argumento: por aquí pasa también `edit`,
|
|
101
|
+
// cuyo segundo argumento es el texto a sustituir y no el fichero resultante.
|
|
102
|
+
let bytes = 0;
|
|
103
|
+
try {
|
|
104
|
+
bytes = statSync(join(carpeta, relativa)).size;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Si no se puede medir, se dice cero: es un dato de adorno, no la existencia.
|
|
108
|
+
}
|
|
109
|
+
alEscribir({ ruta, nombre, bytes, ...(mime === undefined ? {} : { mime }) });
|
|
110
|
+
return resultado;
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
return new CompositeBackend(backend, { [RUTA_ARTEFACTOS]: anotado });
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Cuelga `/large_tool_results/` y `/conversation_history/` al lado de los artefactos de la
|
|
118
|
+
* sesión — o sea, FUERA del proyecto.
|
|
119
|
+
*
|
|
120
|
+
* Son las dos carpetas donde deepagents descarga lo que no cabe en el contexto, y hasta
|
|
121
|
+
* ahora no estaban montadas: medido, `large_tool_results/call_866999.txt` (26 KB) acabó
|
|
122
|
+
* dentro del AppDemo del usuario y commiteado. El porqué entero, y por qué la carpeta se
|
|
123
|
+
* deriva de la de artefactos en vez de recibir su propio parámetro, está en
|
|
124
|
+
* `core/descargas.ts`.
|
|
125
|
+
*
|
|
126
|
+
* La misma pieza que `/skills/`, `/artefactos/` y `/adjuntos/`: otra raíz del
|
|
127
|
+
* `CompositeBackend`, con la barra final obligatoria y sin crear la carpeta al montar
|
|
128
|
+
* —`FilesystemBackend` no exige que su `rootDir` exista y el `write` la crea—. Aquí eso
|
|
129
|
+
* importa más que en las otras: la mayoría de las sesiones no descargan nada, y crearlas al
|
|
130
|
+
* montar dejaría dos carpetas vacías en cada una.
|
|
131
|
+
*
|
|
132
|
+
* **Y no se apunta nada de lo que se escriba, al contrario que `/artefactos/`.** Un
|
|
133
|
+
* artefacto es una salida para una persona y por eso se anuncia; esto es el andamio del
|
|
134
|
+
* agente —la salida cruda de una tool que él mismo va a volver a leer— y un evento por cada
|
|
135
|
+
* una sería ruido en la conversación sobre algo que nadie pidió.
|
|
136
|
+
*/
|
|
137
|
+
export function backendConDescargas(backend, carpetaDeArtefactos) {
|
|
138
|
+
const montajes = {};
|
|
139
|
+
for (const ruta of RUTAS_DE_DESCARGA) {
|
|
140
|
+
montajes[ruta] = new FilesystemBackend({
|
|
141
|
+
rootDir: carpetaDeDescargas(carpetaDeArtefactos, ruta),
|
|
142
|
+
virtualMode: true,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return new CompositeBackend(backend, montajes);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Envuelve el backend del PROYECTO para que una descarga del agente no pueda aterrizar
|
|
149
|
+
* dentro.
|
|
150
|
+
*
|
|
151
|
+
* Con las dos raíces montadas esto no salta nunca —`CompositeBackend` enruta por prefijo de
|
|
152
|
+
* TEXTO, sin mirar si la carpeta destino existe (leído en deepagents 1.13.2)—, y ahí está el
|
|
153
|
+
* sentido: el día que el montaje falte, la escritura falla CERRADO en vez de acabar en la
|
|
154
|
+
* app del cliente. Es la misma lección que la fila incondicional de `/adjuntos/` en
|
|
155
|
+
* `permisosDe`, medida por el mismo camino.
|
|
156
|
+
*
|
|
157
|
+
* Y como `sinArtefactosEnElProyecto`: **solo `write` y `edit`** —leer o borrar una descarga
|
|
158
|
+
* mal puesta de antes tiene que seguir funcionando— y el rechazo se DEVUELVE como `{error}`,
|
|
159
|
+
* nunca se lanza. Leído en deepagents 1.13.2: los tools de fichero hacen
|
|
160
|
+
* `if (result.error) return result.error`, así que un error devuelto vuelve al modelo y una
|
|
161
|
+
* excepción se lleva el turno por delante. Aquí quien escribe es la librería y no una tool,
|
|
162
|
+
* y su hueco en el contexto ya sabe decir «no se pudo guardar»: lanzar reventaría el turno
|
|
163
|
+
* por una descarga que solo es andamio.
|
|
164
|
+
*/
|
|
165
|
+
export function sinDescargasEnElProyecto(backend) {
|
|
166
|
+
const motivo = (ruta) => {
|
|
167
|
+
if (typeof ruta !== "string")
|
|
168
|
+
return undefined;
|
|
169
|
+
const destino = descargaFueraDeSitio(ruta);
|
|
170
|
+
return destino === undefined ? undefined : porQueNoEsDelProyecto(ruta, destino);
|
|
171
|
+
};
|
|
172
|
+
return new Proxy(backend, {
|
|
173
|
+
get(destino, prop, receptor) {
|
|
174
|
+
const valor = Reflect.get(destino, prop, receptor);
|
|
175
|
+
if (typeof valor !== "function")
|
|
176
|
+
return valor;
|
|
177
|
+
if (prop !== "write" && prop !== "edit") {
|
|
178
|
+
return valor.bind(destino);
|
|
179
|
+
}
|
|
180
|
+
return async (...args) => {
|
|
181
|
+
const porQue = motivo(args[0]);
|
|
182
|
+
if (porQue !== undefined)
|
|
183
|
+
return { error: porQue };
|
|
184
|
+
return valor.apply(destino, args);
|
|
185
|
+
};
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* El backend con el que el agente ve el proyecto, compuesto entero.
|
|
191
|
+
*
|
|
192
|
+
* Vivía dentro de `construirAgente`, y eso dejaba sin probar justo la parte que decide si
|
|
193
|
+
* las reglas están puestas: los tests de este fichero comprobaban cada envoltorio por
|
|
194
|
+
* separado y `construirAgente` se simula en todos los suyos, así que **el cableado no lo
|
|
195
|
+
* miraba nadie**. Una regla que existe y no está montada es peor que no tenerla, porque
|
|
196
|
+
* hay un test en verde diciendo que sí.
|
|
197
|
+
*
|
|
198
|
+
* El orden es lo que hay que leer aquí:
|
|
199
|
+
* 1. La raíz confinada (`virtualMode`), con la memoria del proyecto expuesta por su ruta
|
|
200
|
+
* virtual.
|
|
201
|
+
* 2. Las dos reglas del PROYECTO: las vistas aplanadas no existen, y un artefacto no se
|
|
202
|
+
* puede escribir dentro.
|
|
203
|
+
* 3. `/skills/` colgada, de solo lectura por `permisosDe`.
|
|
204
|
+
* 4. Y `/artefactos/` colgada por FUERA, que es lo que hace que escribir ahí no pase por la
|
|
205
|
+
* guarda de (2) — son dos raíces distintas del mismo compuesto.
|
|
206
|
+
* 4b. Y las dos carpetas donde deepagents DESCARGA lo que no cabe en el contexto
|
|
207
|
+
* (`/large_tool_results/`, `/conversation_history/`), al lado de los artefactos. Sin
|
|
208
|
+
* ellas caían en el proyecto: medido, commiteadas dentro de la app del usuario.
|
|
209
|
+
* 5. Y `/adjuntos/`, cuando la tarea trae alguno: la misma pieza, de solo lectura por
|
|
210
|
+
* `permisosDe`.
|
|
211
|
+
*/
|
|
212
|
+
export function backendDeAgente(opciones) {
|
|
213
|
+
const delProyecto = sinDescargasEnElProyecto(sinArtefactosEnElProyecto(sinVistasAplanadas(exponerMemoriaDeProyecto(backendDelProyecto(opciones.raiz)), opciones.ficheros)));
|
|
214
|
+
const conSkills = backendConSkills(delProyecto);
|
|
215
|
+
const conArtefactos = opciones.artefactos === undefined
|
|
216
|
+
? conSkills
|
|
217
|
+
: backendConArtefactos(conSkills, opciones.artefactos.carpeta, opciones.artefactos.alEscribir);
|
|
218
|
+
// Las descargas cuelgan de la MISMA carpeta de sesión que los artefactos, así que sin
|
|
219
|
+
// ella no hay dónde montarlas — y entonces la guarda de (2) es lo que las para.
|
|
220
|
+
const conDescargas = opciones.artefactos === undefined
|
|
221
|
+
? conArtefactos
|
|
222
|
+
: backendConDescargas(conArtefactos, opciones.artefactos.carpeta);
|
|
223
|
+
return opciones.adjuntos === undefined ? conDescargas : backendConAdjuntos(conDescargas, opciones.adjuntos);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Expone la memoria del proyecto sin abrir la carpeta interna `.xonecode`.
|
|
227
|
+
*
|
|
228
|
+
* Los permisos siguen denegando esa carpeta completa (puede contener configuración), pero
|
|
229
|
+
* esta única ruta virtual permite al agente conservar decisiones aprobadas entre sesiones.
|
|
230
|
+
*/
|
|
231
|
+
export function exponerMemoriaDeProyecto(backend) {
|
|
232
|
+
const rutaReal = (ruta) => ruta === RUTA_MEMORIA_VIRTUAL ? RUTA_MEMORIA_INTERNA : ruta;
|
|
233
|
+
return new Proxy(backend, {
|
|
234
|
+
get(destino, prop, receptor) {
|
|
235
|
+
const valor = Reflect.get(destino, prop, receptor);
|
|
236
|
+
if (typeof valor !== "function")
|
|
237
|
+
return valor;
|
|
238
|
+
if (prop === "read" || prop === "readRaw" || prop === "write" || prop === "edit") {
|
|
239
|
+
return async (...args) => {
|
|
240
|
+
args[0] = rutaReal(args[0]);
|
|
241
|
+
return valor.apply(destino, args);
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
return valor.bind(destino);
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* El motivo con el que se rechaza escribir un artefacto en el proyecto.
|
|
250
|
+
*
|
|
251
|
+
* Mismo criterio que `porQueNo`: rechazar y EXPLICAR. Un error seco haría que el modelo
|
|
252
|
+
* probara otra ruta —o que diera el trabajo por hecho—; diciéndole la ruta buena, corrige a
|
|
253
|
+
* la primera. Y nombra las tres consecuencias porque son el porqué: sin ellas, «usa otra
|
|
254
|
+
* carpeta» se lee como una preferencia de estilo.
|
|
255
|
+
*/
|
|
256
|
+
export const porQueNoAhi = (ruta, destino) => `«${ruta}» está en el PROYECTO, y un artefacto ahí acaba dentro de la app XOne del usuario: ` +
|
|
257
|
+
`pasa por aprobación humana, entra en git y sube a CloudStudio. ` +
|
|
258
|
+
`Los artefactos van en «${destino}», la carpeta de ESTA sesión: se escribe sin aprobación, ` +
|
|
259
|
+
`no entra en git y no sale de aquí. Escríbelo ahí.`;
|
|
260
|
+
/**
|
|
261
|
+
* Envuelve el backend del proyecto para que un artefacto NO se pueda escribir dentro.
|
|
262
|
+
*
|
|
263
|
+
* **Por qué es código y no una frase más en el prompt.** La carpeta buena ya la nombran los
|
|
264
|
+
* cuatro sitios que el modelo puede leer, y aun así, medido el 2026-09-07 en dos
|
|
265
|
+
* delegaciones consecutivas del mismo proyecto: la primera escribió
|
|
266
|
+
* `/artifacts/login_flow.html` —la raíz— y la segunda `/artefactos/diagrama.html`. Con la
|
|
267
|
+
* instrucción puesta en los cuatro sitios, añadir un quinto no cambia nada; lo que cambia es
|
|
268
|
+
* que la regla deje de depender de que el modelo la recuerde. Es exactamente el argumento de
|
|
269
|
+
* `sinVistasAplanadas`, y también el de los avisos de honestidad: en este repo lo que tiene
|
|
270
|
+
* que cumplirse es código.
|
|
271
|
+
*
|
|
272
|
+
* Va sobre el backend del PROYECTO, por dentro del compuesto, así que una escritura en
|
|
273
|
+
* `/artefactos/` —que es otra raíz montada— no pasa por aquí y no se ve afectada.
|
|
274
|
+
*
|
|
275
|
+
* **Solo `write` y `edit`.** Leer un artefacto mal puesto de una sesión anterior tiene que
|
|
276
|
+
* seguir funcionando: si no, el agente no podría ni mirar lo que hay que mover. Y borrarlo
|
|
277
|
+
* tampoco se toca — quitar de la app del cliente un diagrama que no debería estar ahí es
|
|
278
|
+
* justo lo que se quiere poder hacer.
|
|
279
|
+
*/
|
|
280
|
+
export function sinArtefactosEnElProyecto(backend) {
|
|
281
|
+
const motivo = (ruta) => {
|
|
282
|
+
if (typeof ruta !== "string")
|
|
283
|
+
return undefined;
|
|
284
|
+
const destino = artefactoFueraDeSitio(ruta);
|
|
285
|
+
return destino === undefined ? undefined : porQueNoAhi(ruta, destino);
|
|
286
|
+
};
|
|
287
|
+
return new Proxy(backend, {
|
|
288
|
+
get(destino, prop, receptor) {
|
|
289
|
+
const valor = Reflect.get(destino, prop, receptor);
|
|
290
|
+
if (typeof valor !== "function")
|
|
291
|
+
return valor;
|
|
292
|
+
if (prop !== "write" && prop !== "edit") {
|
|
293
|
+
return valor.bind(destino);
|
|
294
|
+
}
|
|
295
|
+
return async (...args) => {
|
|
296
|
+
// **Se DEVUELVE `{error}`, no se lanza**, y esta es la diferencia entre corregir al
|
|
297
|
+
// modelo y tumbarle el turno. Leído en deepagents 1.13.2: los cuatro tools de
|
|
298
|
+
// fichero hacen `const result = await backend.write(...); if (result.error) return
|
|
299
|
+
// result.error`, así que un error DEVUELTO vuelve al modelo como resultado de la
|
|
300
|
+
// tool y puede reintentar. Un `throw` se sale de la tool y se lleva el turno por
|
|
301
|
+
// delante — medido en vivo el 2026-09-07: el mensaje salió impecable en el chat, el
|
|
302
|
+
// fichero no se escribió, y el agente no reintentó porque el turno ya había muerto.
|
|
303
|
+
const porQue = motivo(args[0]);
|
|
304
|
+
if (porQue !== undefined)
|
|
305
|
+
return { error: porQue };
|
|
306
|
+
return valor.apply(destino, args);
|
|
307
|
+
};
|
|
308
|
+
},
|
|
309
|
+
});
|
|
310
|
+
}
|
|
15
311
|
/** ¿Es `ruta` una vista aplanada, teniendo a la vista el conjunto de ficheros del proyecto? */
|
|
16
312
|
export function esVistaAplanada(ruta, todas) {
|
|
17
313
|
return ruta.endsWith(".xml") && todas.has(`${ruta.slice(0, -4)}.xne`);
|
|
@@ -21,7 +317,8 @@ export function esVistaAplanada(ruta, todas) {
|
|
|
21
317
|
*
|
|
22
318
|
* **Rechazar y explicar, no fallar en seco.** Un «fichero no encontrado» hace que el modelo
|
|
23
319
|
* pruebe otra ruta, o peor, que dé por hecho que el cambio no hacía falta. Diciéndole dónde
|
|
24
|
-
* está la fuente,
|
|
320
|
+
* está la fuente puede corregir — pero solo si el mensaje LLEGA, y para eso hay que
|
|
321
|
+
* devolverlo como `{error}` y no lanzarlo (ver `sinVistasAplanadas`).
|
|
25
322
|
*/
|
|
26
323
|
export const porQueNo = (ruta) => `«${ruta}» es una vista APLANADA que genera XOne Studio a partir de «${ruta.slice(0, -4)}.xne». ` +
|
|
27
324
|
`No se lee ni se edita: los cambios se hacen en el .xne y Studio regenera esta. ` +
|
|
@@ -41,10 +338,7 @@ export const porQueNo = (ruta) => `«${ruta}» es una vista APLANADA que genera
|
|
|
41
338
|
* `app.xml` no tiene hermano `.xne`, así que el propio predicado lo conserva: es fuente.
|
|
42
339
|
*/
|
|
43
340
|
export function sinVistasAplanadas(backend, todas) {
|
|
44
|
-
const
|
|
45
|
-
if (typeof ruta === "string" && esVistaAplanada(ruta, todas))
|
|
46
|
-
throw new Error(porQueNo(ruta));
|
|
47
|
-
};
|
|
341
|
+
const motivo = (ruta) => typeof ruta === "string" && esVistaAplanada(ruta, todas) ? porQueNo(ruta) : undefined;
|
|
48
342
|
return new Proxy(backend, {
|
|
49
343
|
get(destino, prop, receptor) {
|
|
50
344
|
const valor = Reflect.get(destino, prop, receptor);
|
|
@@ -52,13 +346,17 @@ export function sinVistasAplanadas(backend, todas) {
|
|
|
52
346
|
return valor;
|
|
53
347
|
// Las que reciben una ruta y la tocan: se rechazan con explicación.
|
|
54
348
|
if (prop === "read" || prop === "readRaw" || prop === "write" || prop === "edit" || prop === "delete") {
|
|
55
|
-
// `async` a propósito, y no una función normal que lanza. Los métodos del backend
|
|
56
|
-
// real son asíncronos, así que un `throw` SÍNCRONO aquí cambia el contrato de la
|
|
57
|
-
// llamada: quien haga `backend.read(x).catch(...)` se comería la excepción antes
|
|
58
|
-
// de tener una promesa que rechazar. Con `async`, el rechazo llega por donde el
|
|
59
|
-
// llamador lo espera.
|
|
60
349
|
return async (...args) => {
|
|
61
|
-
|
|
350
|
+
// **Devolver `{error}` y no lanzar.** Esto LANZABA, y el comentario de al lado
|
|
351
|
+
// prometía que así el modelo «corrige a la primera» — que era falso y no estaba
|
|
352
|
+
// medido. Leído en deepagents 1.13.2, los cuatro tools de fichero comprueban
|
|
353
|
+
// `result.error` y lo devuelven al modelo; una excepción, en cambio, se sale de la
|
|
354
|
+
// tool y se lleva el turno. Medido en vivo con la guarda hermana
|
|
355
|
+
// (`sinArtefactosEnElProyecto`): mensaje impecable en el chat, fichero no escrito,
|
|
356
|
+
// y ningún reintento porque el turno ya había muerto.
|
|
357
|
+
const porQue = motivo(args[0]);
|
|
358
|
+
if (porQue !== undefined)
|
|
359
|
+
return { error: porQue };
|
|
62
360
|
return valor.apply(destino, args);
|
|
63
361
|
};
|
|
64
362
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proyecto.js","sourceRoot":"","sources":["../../src/agent/proyecto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"proyecto.js","sourceRoot":"","sources":["../../src/agent/proyecto.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/puente.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { normalizar } from "./normalizar.js";
|
|
2
2
|
import { Mensajes } from "./mensajes.js";
|
|
3
|
-
import { detalleDe } from "./resumenDeTool.js";
|
|
3
|
+
import { detalleDe, parametrosDe } from "./resumenDeTool.js";
|
|
4
4
|
/** El texto de un mensaje, venga como venga. */
|
|
5
5
|
export function textoDe(msg) {
|
|
6
6
|
if (!msg || typeof msg !== "object")
|
|
@@ -16,11 +16,51 @@ export function textoDe(msg) {
|
|
|
16
16
|
// vería basura donde esperaba una frase.
|
|
17
17
|
if (Array.isArray(c)) {
|
|
18
18
|
return c
|
|
19
|
-
.map((b) =>
|
|
19
|
+
.map((b) => {
|
|
20
|
+
if (!b || typeof b !== "object")
|
|
21
|
+
return "";
|
|
22
|
+
const bloque = b;
|
|
23
|
+
// Un bloque de PENSAMIENTO también trae `text` en algunos adaptadores
|
|
24
|
+
// (`{ text, thought: true }`), así que mirar solo `typeof text === "string"` metía
|
|
25
|
+
// el razonamiento dentro de la respuesta. Sale por `razonamientoDe`, no por aquí.
|
|
26
|
+
if (bloque.thought === true || bloque.type === "thinking")
|
|
27
|
+
return "";
|
|
28
|
+
return typeof bloque.text === "string" ? bloque.text : "";
|
|
29
|
+
})
|
|
20
30
|
.join("");
|
|
21
31
|
}
|
|
22
32
|
return "";
|
|
23
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* El RAZONAMIENTO de un mensaje, cuando el proveedor lo publica en bloques.
|
|
36
|
+
*
|
|
37
|
+
* Gemini lo manda como `{ type: "thinking", thinking: "…" }` dentro de `content`
|
|
38
|
+
* (`@langchain/google-genai`, `common.js`), o sea que `textoDe` —que solo mira `b.text`— lo
|
|
39
|
+
* dejaba fuera. Estaba bien dejarlo fuera de la RESPUESTA; lo que faltaba era tener por
|
|
40
|
+
* dónde enseñarlo aparte.
|
|
41
|
+
*
|
|
42
|
+
* Se aceptan las dos formas que hay sueltas por el ecosistema: el bloque `thinking` con su
|
|
43
|
+
* campo homónimo y el `{ text, thought: true }` que usan otros adaptadores.
|
|
44
|
+
*/
|
|
45
|
+
export function razonamientoDe(msg) {
|
|
46
|
+
if (!msg || typeof msg !== "object")
|
|
47
|
+
return "";
|
|
48
|
+
const c = msg.content;
|
|
49
|
+
if (!Array.isArray(c))
|
|
50
|
+
return "";
|
|
51
|
+
return c
|
|
52
|
+
.map((b) => {
|
|
53
|
+
if (!b || typeof b !== "object")
|
|
54
|
+
return "";
|
|
55
|
+
const bloque = b;
|
|
56
|
+
if (bloque.type === "thinking" && typeof bloque.thinking === "string")
|
|
57
|
+
return bloque.thinking;
|
|
58
|
+
if (bloque.thought === true && typeof bloque.text === "string")
|
|
59
|
+
return bloque.text;
|
|
60
|
+
return "";
|
|
61
|
+
})
|
|
62
|
+
.join("");
|
|
63
|
+
}
|
|
24
64
|
/** Los nombres de tool de un chunk de `updates`, con su detalle de la lista blanca. */
|
|
25
65
|
export function toolsDe(dato) {
|
|
26
66
|
if (!dato || typeof dato !== "object")
|
|
@@ -35,8 +75,12 @@ export function toolsDe(dato) {
|
|
|
35
75
|
if (Array.isArray(llamadas)) {
|
|
36
76
|
for (const l of llamadas) {
|
|
37
77
|
const n = l?.name;
|
|
38
|
-
if (typeof n === "string")
|
|
39
|
-
|
|
78
|
+
if (typeof n === "string") {
|
|
79
|
+
const args = l.args;
|
|
80
|
+
const detalle = detalleDe(n, args);
|
|
81
|
+
const parametros = parametrosDe(n, args);
|
|
82
|
+
salida.push({ nombre: n, ...(detalle === undefined ? {} : { detalle }), ...(parametros === undefined ? {} : { parametros }) });
|
|
83
|
+
}
|
|
40
84
|
}
|
|
41
85
|
}
|
|
42
86
|
}
|
|
@@ -84,7 +128,7 @@ export function esDelPadre(ns) {
|
|
|
84
128
|
* consola en un volcado. Su trabajo se cuenta por `tool`, que es lo que el usuario
|
|
85
129
|
* necesita ver mientras espera.
|
|
86
130
|
*/
|
|
87
|
-
export async function* aEventos(stream, pendientes) {
|
|
131
|
+
export async function* aEventos(stream, pendientes, alLlamarTool) {
|
|
88
132
|
const mensajes = new Mensajes();
|
|
89
133
|
try {
|
|
90
134
|
for await (const bruto of stream) {
|
|
@@ -92,7 +136,13 @@ export async function* aEventos(stream, pendientes) {
|
|
|
92
136
|
if (!chunk)
|
|
93
137
|
continue;
|
|
94
138
|
if (chunk.modo === "updates") {
|
|
95
|
-
for (const { nombre, detalle } of toolsDe(chunk.dato)) {
|
|
139
|
+
for (const { nombre, detalle, parametros } of toolsDe(chunk.dato)) {
|
|
140
|
+
try {
|
|
141
|
+
alLlamarTool?.({ nombre, ...(detalle === undefined ? {} : { detalle }), ...(parametros === undefined ? {} : { parametros }) });
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// La observabilidad no puede tumbar ni silenciar el stream.
|
|
145
|
+
}
|
|
96
146
|
yield { tipo: "tool", nombre, ...(detalle !== undefined ? { detalle } : {}) };
|
|
97
147
|
}
|
|
98
148
|
continue;
|
|
@@ -106,6 +156,13 @@ export async function* aEventos(stream, pendientes) {
|
|
|
106
156
|
const texto = textoDe(msg);
|
|
107
157
|
const id = msg?.id;
|
|
108
158
|
const idTexto = typeof id === "string" ? id : undefined;
|
|
159
|
+
// El razonamiento sale por su propio evento y NO pasa por `Mensajes`: ese contador
|
|
160
|
+
// decide qué trozos de la RESPUESTA se pintan (dedupe de reintentos), y contar el
|
|
161
|
+
// pensamiento ahí desalinearía esa cuenta.
|
|
162
|
+
const pensado = razonamientoDe(msg);
|
|
163
|
+
if (pensado !== "") {
|
|
164
|
+
yield { tipo: "razonamiento", texto: pensado, ...(idTexto === undefined ? {} : { msgId: idTexto }) };
|
|
165
|
+
}
|
|
109
166
|
if (mensajes.trozo(idTexto, texto).pintar) {
|
|
110
167
|
yield { tipo: "token", texto, msgId: idTexto };
|
|
111
168
|
}
|
package/dist/agent/puente.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puente.js","sourceRoot":"","sources":["../../src/agent/puente.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"puente.js","sourceRoot":"","sources":["../../src/agent/puente.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Política de contexto del harness.
|
|
3
|
+
*
|
|
4
|
+
* DeepAgents usa 170k tokens cuando el proveedor no publica su ventana de contexto. Con
|
|
5
|
+
* Ollama eso retrasa demasiado la compresión y cada llamada reenvía lecturas ya resueltas.
|
|
6
|
+
* Este umbral es independiente del proveedor: limita el coste sin borrar el trabajo reciente.
|
|
7
|
+
*/
|
|
8
|
+
import { createSummarizationMiddleware } from "deepagents";
|
|
9
|
+
import { RUTA_HISTORIAL_RESUMIDO } from "./memoriaDeProyecto.js";
|
|
10
|
+
export const UMBRAL_RESUMEN_TOKENS = 32_000;
|
|
11
|
+
export const CONTEXTO_RECIENTE_TOKENS = 8_000;
|
|
12
|
+
export function resumenDeContexto(backend) {
|
|
13
|
+
return createSummarizationMiddleware({
|
|
14
|
+
backend,
|
|
15
|
+
trigger: { type: "tokens", value: UMBRAL_RESUMEN_TOKENS },
|
|
16
|
+
keep: { type: "tokens", value: CONTEXTO_RECIENTE_TOKENS },
|
|
17
|
+
// Las tools de fichero pueden llevar contenido grande. Los argumentos antiguos ya
|
|
18
|
+
// están representados por el resumen, no deben volver a inflar las siguientes llamadas.
|
|
19
|
+
truncateArgsSettings: {
|
|
20
|
+
trigger: { type: "tokens", value: UMBRAL_RESUMEN_TOKENS },
|
|
21
|
+
keep: { type: "tokens", value: CONTEXTO_RECIENTE_TOKENS },
|
|
22
|
+
maxLength: 1_000,
|
|
23
|
+
},
|
|
24
|
+
trimTokensToSummarize: 12_000,
|
|
25
|
+
// El backend lo escribe directamente; no debe aparecer en el árbol ni en las tools del
|
|
26
|
+
// agente. Así el estado de sesión permanece junto al proyecto y fuera de la app XOne.
|
|
27
|
+
historyPathPrefix: RUTA_HISTORIAL_RESUMIDO,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=resumenDeContexto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumenDeContexto.js","sourceRoot":"","sources":["../../src/agent/resumenDeContexto.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,6BAA6B,EAA0B,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,MAAM,UAAU,iBAAiB,CAAC,OAA0B;IAC1D,OAAO,6BAA6B,CAAC;QACnC,OAAO;QACP,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE;QACzD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,EAAE;QACzD,kFAAkF;QAClF,wFAAwF;QACxF,oBAAoB,EAAE;YACpB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE;YACzD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,EAAE;YACzD,SAAS,EAAE,KAAK;SACjB;QACD,qBAAqB,EAAE,MAAM;QAC7B,uFAAuF;QACvF,sFAAsF;QACtF,iBAAiB,EAAE,uBAAuB;KAC3C,CAAC,CAAC;AACL,CAAC"}
|