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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`)),n=[e];export{n as default};
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="es">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>xonecode</title>
|
|
7
|
+
<!-- El icono oficial, servido por Vite desde `iconos/`. Es el mismo fichero que la
|
|
8
|
+
marca de la barra superior: dos copias del logo acaban siendo dos logos. -->
|
|
9
|
+
<link rel="icon" type="image/png" href="./iconos/xonecode.png" />
|
|
10
|
+
<script type="module" crossorigin src="./assets/index-CFYAoHdw.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="./assets/index-BB3SamhR.css">
|
|
12
|
+
</head>
|
|
13
|
+
<!-- Sin el atributo aquí: el oscuro es SOLO del splash (el registro de entorno y
|
|
14
|
+
modelo), no de la consola entera — `App.tsx` lo pone y lo quita él mismo, en el
|
|
15
|
+
único componente que sabe si `enAlta` es cierto. Ponerlo aquí a fuego lo dejaba
|
|
16
|
+
encendido también dentro de la maqueta ya abierta, que va clara como deepseek. -->
|
|
17
|
+
<body>
|
|
18
|
+
<div id="root"></div>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los subagentes en disco: `<base>/.xonecode/agentes/<nombre>.md`, uno por fichero.
|
|
3
|
+
*
|
|
4
|
+
* Ficheros y no una entrada en `config.json` por tres razones. El cuerpo son
|
|
5
|
+
* INSTRUCCIONES, o sea prosa larga, y la prosa dentro de un JSON se vuelve inmanejable en
|
|
6
|
+
* cuanto pasa de dos frases. Es la convención que ya conoce quien viene de Claude Code
|
|
7
|
+
* (`.claude/agents/*.md`), así que el fichero se lee sin explicar nada. Y se edita a mano y
|
|
8
|
+
* se diffea, que es lo que va a pasar de verdad con un prompt que se afina.
|
|
9
|
+
*
|
|
10
|
+
* `.xonecode/` hereda además dos protecciones que aquí importan: está denegada entera al
|
|
11
|
+
* agente (`permisosDe`) y **no sube nunca** a CloudStudio. Un subagente es configuración de
|
|
12
|
+
* la herramienta, no del proyecto XOne — no tiene por qué acabar en Studio.
|
|
13
|
+
*
|
|
14
|
+
* Dos sitios, con la misma precedencia que los modelos: el GLOBAL (`~/.xonecode/agentes/`)
|
|
15
|
+
* y el del PROYECTO, y el de proyecto gana. Un «revisor de XOne» se quiere en todos los
|
|
16
|
+
* proyectos; un «experto en esta app», solo en uno.
|
|
17
|
+
*/
|
|
18
|
+
import { createHash } from "node:crypto";
|
|
19
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
20
|
+
import { homedir } from "node:os";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { escribirAgente, fusionarAgentes, leerAgente, } from "../core/agentes.js";
|
|
23
|
+
import { segmentoSeguro } from "../core/settings.js";
|
|
24
|
+
import { NOMBRE_CARPETA } from "./configEnDisco.js";
|
|
25
|
+
const CARPETA = "agentes";
|
|
26
|
+
/** La carpeta de agentes de una raíz cualquiera. */
|
|
27
|
+
export function rutaDeAgentes(base) {
|
|
28
|
+
return join(base, NOMBRE_CARPETA, CARPETA);
|
|
29
|
+
}
|
|
30
|
+
/** La global. `homedir()` en el momento de la llamada, como el resto del repo: cachearla en
|
|
31
|
+
* una constante de módulo la congelaría para los tests que la cambian. */
|
|
32
|
+
export function rutaGlobalDeAgentes() {
|
|
33
|
+
return join(homedir(), NOMBRE_CARPETA, CARPETA);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Lee una carpeta. Un fichero que no se puede leer o que no valida NO tumba la carga: se
|
|
37
|
+
* salta, se apunta el motivo y los demás siguen — es la misma postura que `reabrirSesion`
|
|
38
|
+
* con una línea corrupta del `.jsonl`, y la que evita que un `.md` a medio escribir deje la
|
|
39
|
+
* consola sin ningún subagente.
|
|
40
|
+
*/
|
|
41
|
+
export function leerCarpetaDeAgentes(carpeta, origen) {
|
|
42
|
+
if (!existsSync(carpeta))
|
|
43
|
+
return { agentes: [], problemas: [] };
|
|
44
|
+
const agentes = [];
|
|
45
|
+
const problemas = [];
|
|
46
|
+
for (const fichero of readdirSync(carpeta).sort()) {
|
|
47
|
+
if (!fichero.endsWith(".md"))
|
|
48
|
+
continue;
|
|
49
|
+
const nombre = fichero.slice(0, -3);
|
|
50
|
+
let contenido;
|
|
51
|
+
try {
|
|
52
|
+
contenido = readFileSync(join(carpeta, fichero), "utf8");
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
problemas.push(`${fichero}: no se pudo leer (${e.message})`);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const r = leerAgente(nombre, contenido, origen);
|
|
59
|
+
if ("error" in r)
|
|
60
|
+
problemas.push(`${fichero}: ${r.error}`);
|
|
61
|
+
else
|
|
62
|
+
agentes.push(r.agente);
|
|
63
|
+
}
|
|
64
|
+
return { agentes, problemas };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Los agentes en vigor para un proyecto: los globales, pisados por los del proyecto.
|
|
68
|
+
*
|
|
69
|
+
* `raizDelProyecto` es opcional porque el vestíbulo existe ANTES de que haya proyecto
|
|
70
|
+
* abierto (`web/servidor/vestibulo.ts`) y la ventana de ajustes se abre desde ahí: sin
|
|
71
|
+
* raíz se contestan los globales, que es la verdad, en vez de una lista vacía.
|
|
72
|
+
*/
|
|
73
|
+
export function cargarAgentes(raizDelProyecto) {
|
|
74
|
+
// La siembra se hace AQUÍ, y no en el arranque de cada piel. Medido: estaba en
|
|
75
|
+
// `main.ts#entrarEnConsola` y la rama web devuelve antes de llegar ahí, así que
|
|
76
|
+
// `npm run web` no sembraba nada — la consola arrancaba sin un solo subagente y el
|
|
77
|
+
// orquestador sin nadie a quien delegar, sin que nada diera error. Colgarlo del cargador
|
|
78
|
+
// lo hace imposible de olvidar: quien necesita agentes los pide por aquí, y por
|
|
79
|
+
// construcción hay algo que leer. Es idempotente y no hace nada si la carpeta existe.
|
|
80
|
+
const { desactualizados, retirados } = sembrarAgentes();
|
|
81
|
+
const global = leerCarpetaDeAgentes(rutaGlobalDeAgentes(), "global");
|
|
82
|
+
const proyecto = raizDelProyecto === undefined
|
|
83
|
+
? { agentes: [], problemas: [] }
|
|
84
|
+
: leerCarpetaDeAgentes(rutaDeAgentes(raizDelProyecto), "proyecto");
|
|
85
|
+
// Los que se quedaron atrás se DICEN por el mismo canal que un `.md` roto, y por la misma
|
|
86
|
+
// razón: quien lo tiene que arreglar está mirando la ventana de subagentes, y un agente
|
|
87
|
+
// que se quedó en una versión anterior sin que nadie lo diga es exactamente el fallo que
|
|
88
|
+
// esta tanda viene a cerrar. No se pisa: el mensaje dice qué hacer si lo quiere nuevo.
|
|
89
|
+
const atrasados = desactualizados.map((n) => `${n}.md: no es el de serie y la versión de serie ha cambiado; se respeta el tuyo. Bórralo si quieres el nuevo.`);
|
|
90
|
+
// Y los renombrados, por el mismo canal y por la misma razón: el especialista cambia de
|
|
91
|
+
// nombre (o se va con él), y enterarse por la lista sin que nadie lo explique es la clase de
|
|
92
|
+
// sorpresa silenciosa que este módulo existe para no dar. El que se retiró se dice UNA vez
|
|
93
|
+
// —la clave se va con el fichero—; el que se respeta, cada arranque, porque queda decidir.
|
|
94
|
+
const renombrados = retirados.map(({ nombre, ahoraSeLlama, borrado }) => borrado
|
|
95
|
+
? `${nombre}.md: se ha retirado —ese agente se llama ahora \`${ahoraSeLlama}\`— y el nuevo ya está sembrado.`
|
|
96
|
+
: `${nombre}.md: ese agente se llama ahora \`${ahoraSeLlama}\`, y el tuyo se respeta. Bórralo si quieres quedarte solo con el de serie.`);
|
|
97
|
+
return {
|
|
98
|
+
agentes: fusionarAgentes(global.agentes, proyecto.agentes),
|
|
99
|
+
problemas: [...renombrados, ...atrasados, ...global.problemas, ...proyecto.problemas],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Escribe un agente.
|
|
104
|
+
*
|
|
105
|
+
* `segmentoSeguro` por lo mismo que en `sesiones.ts`: el nombre llega del cliente por HTTP,
|
|
106
|
+
* y un `../../.env` compondría una ruta fuera de la carpeta. Misma función que usa
|
|
107
|
+
* `rutaDeWorkspace`, no una copia — dos guardas es cómo una se corrige y la otra no. LANZA
|
|
108
|
+
* en vez de limpiar, y está bien: limpiar el nombre hasta hacerlo válido guardaría el
|
|
109
|
+
* agente con uno que nadie pidió, y quien lo mandó creería que se llama de otra forma.
|
|
110
|
+
*
|
|
111
|
+
* La validación va ANTES del `mkdirSync`, y no es cosmético: al revés, un nombre rechazado
|
|
112
|
+
* dejaba la carpeta creada de todas formas — y la carpeta es justo la marca de «ya se
|
|
113
|
+
* sembró» (`sembrarAgentes`), así que un intento fallido en el global habría impedido para
|
|
114
|
+
* siempre que se sembraran los cuatro de serie.
|
|
115
|
+
*/
|
|
116
|
+
export function guardarAgente(base, agente) {
|
|
117
|
+
const seguro = segmentoSeguro(agente.nombre, "nombre de agente");
|
|
118
|
+
const carpeta = rutaDeAgentes(base);
|
|
119
|
+
mkdirSync(carpeta, { recursive: true });
|
|
120
|
+
writeFileSync(join(carpeta, `${seguro}.md`), escribirAgente({ ...agente, nombre: seguro }), "utf8");
|
|
121
|
+
}
|
|
122
|
+
/** Borra uno. Devuelve si existía: la interfaz no puede decir «borrado» de algo que no estaba. */
|
|
123
|
+
export function borrarAgente(base, nombre) {
|
|
124
|
+
const ruta = join(rutaDeAgentes(base), `${segmentoSeguro(nombre, "nombre de agente")}.md`);
|
|
125
|
+
if (!existsSync(ruta))
|
|
126
|
+
return false;
|
|
127
|
+
rmSync(ruta);
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Los especialistas de serie, sembrados en el GLOBAL.
|
|
132
|
+
*
|
|
133
|
+
* Dejan de ser un `Record` a fuego en `agent/perfiles.ts` y pasan a ser los mismos ficheros
|
|
134
|
+
* que puede escribir el usuario. Lo pidió él, y además arregla algo que estaba señalado
|
|
135
|
+
* como provisional en `xoneAgent.ts#promptDe` desde que se escribió: los prompts de los
|
|
136
|
+
* especialistas vivían en código con un `nombre === "planner"` dentro para las
|
|
137
|
+
* particularidades de uno de ellos.
|
|
138
|
+
*
|
|
139
|
+
* Lo que sigue siendo intocable, y por lo que la regla anterior existía: **el prompt que el
|
|
140
|
+
* usuario afina no se pisa, y el agente que borra no se resucita.** Lo que cambió es cómo
|
|
141
|
+
* se sabe cuál es cuál — ver `sembrarAgentes`.
|
|
142
|
+
*/
|
|
143
|
+
/** Lo que la marca guarda de cada agente sembrado: el hash de lo que ESCRIBIMOS nosotros. */
|
|
144
|
+
const AJENO = "ajeno";
|
|
145
|
+
/** El nombre de la marca. Empieza por punto y no acaba en `.md`: el cargador la ignora. */
|
|
146
|
+
export const FICHERO_DE_SEMILLA = ".semilla.json";
|
|
147
|
+
function rutaDeSemilla(carpeta) {
|
|
148
|
+
return join(carpeta, FICHERO_DE_SEMILLA);
|
|
149
|
+
}
|
|
150
|
+
function huella(contenido) {
|
|
151
|
+
return createHash("sha256").update(contenido, "utf8").digest("hex").slice(0, 16);
|
|
152
|
+
}
|
|
153
|
+
/** La marca en disco. Ausente o rota = no hay marca: se ADOPTA lo que haya (ver abajo). */
|
|
154
|
+
function leerSemilla(carpeta) {
|
|
155
|
+
const ruta = rutaDeSemilla(carpeta);
|
|
156
|
+
if (!existsSync(ruta))
|
|
157
|
+
return undefined;
|
|
158
|
+
try {
|
|
159
|
+
const bruto = JSON.parse(readFileSync(ruta, "utf8"));
|
|
160
|
+
if (typeof bruto !== "object" || bruto === null || Array.isArray(bruto))
|
|
161
|
+
return undefined;
|
|
162
|
+
const salida = {};
|
|
163
|
+
for (const [nombre, valor] of Object.entries(bruto)) {
|
|
164
|
+
if (typeof valor === "string")
|
|
165
|
+
salida[nombre] = valor;
|
|
166
|
+
}
|
|
167
|
+
return salida;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Una marca rota se trata como ausente y se REESCRIBE adoptando lo que hay. Es lo
|
|
171
|
+
// conservador: lo contrario —darla por vacía y sembrar— pisaría ficheros del usuario.
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function escribirSemilla(carpeta, marca) {
|
|
176
|
+
writeFileSync(rutaDeSemilla(carpeta), JSON.stringify(marca, null, 2) + "\n", "utf8");
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Los renombrados: nombre viejo → nombre nuevo.
|
|
180
|
+
*
|
|
181
|
+
* Hace falta porque la marca guarda el hash **por nombre**: renombrar deja una clave que ya no
|
|
182
|
+
* es de serie, y `sembrarAgentes` no la miraba — quien ya tuviera `probador.md` se quedaba con
|
|
183
|
+
* los DOS especialistas, uno de ellos sin mantenimiento.
|
|
184
|
+
*
|
|
185
|
+
* La alternativa era retirar toda clave desconocida cuyo hash fuera el nuestro. Funcionaría
|
|
186
|
+
* hoy y sería una trampa mañana: borraría cualquier entrada rara que un fallo dejara en la
|
|
187
|
+
* marca. Aquí solo se retira lo que consta que renombramos.
|
|
188
|
+
*/
|
|
189
|
+
const RENOMBRADOS = { probador: "xone-device-tester" };
|
|
190
|
+
/**
|
|
191
|
+
* Siembra los agentes de serie, y ACTUALIZA los que nadie ha tocado.
|
|
192
|
+
*
|
|
193
|
+
* La regla anterior era «la carpeta es la marca»: si existía, no se escribía nada nunca más.
|
|
194
|
+
* Respetaba el prompt afinado por el usuario —que es lo que había que respetar— pero eligió
|
|
195
|
+
* un cuerno del dilema y el otro acabó mordiendo: **ningún agente nuevo, y ninguna
|
|
196
|
+
* corrección a uno existente, alcanzaba a quien ya hubiera arrancado una vez**. Medido: el
|
|
197
|
+
* `docs.md` de un usuario llevaba semanas sin la consulta acotada, y el probador de
|
|
198
|
+
* dispositivos no le habría llegado jamás.
|
|
199
|
+
*
|
|
200
|
+
* Ahora la marca es un fichero, `.semilla.json`, con el HASH DE LO QUE ESCRIBIMOS NOSOTROS
|
|
201
|
+
* para cada agente. Con eso se distinguen los cuatro casos que antes eran uno solo:
|
|
202
|
+
*
|
|
203
|
+
* | en disco | en la marca | qué se hace |
|
|
204
|
+
* |---|---|---|
|
|
205
|
+
* | no está | no está | es un agente NUEVO: se escribe |
|
|
206
|
+
* | no está | está | lo BORRÓ el usuario: no se resucita |
|
|
207
|
+
* | está, y su hash es el nuestro | está | nadie lo tocó: se actualiza |
|
|
208
|
+
* | está, y su hash NO es el nuestro | cualquiera | es suyo: se deja, y se DICE |
|
|
209
|
+
*
|
|
210
|
+
* Y un quinto, que aparece el día que un agente se RENOMBRA y que no puede salir de ese bucle
|
|
211
|
+
* porque habla de una clave que ya no nombra a ninguno: ver `RENOMBRADOS` y `Retirado`.
|
|
212
|
+
*
|
|
213
|
+
* **Y una carpeta sin marca se ADOPTA, no se siembra.** Es la de quien ya venía de la regla
|
|
214
|
+
* vieja, y ahí no se puede saber qué borró a propósito: dar por nuevo lo que falta le
|
|
215
|
+
* resucitaría un agente que eliminó. Así que se anota lo que hay —como nuestro si coincide
|
|
216
|
+
* con la versión de serie de hoy, como `ajeno` si no— y no se escribe ningún `.md` esa vez.
|
|
217
|
+
* Desde la siguiente, todo lo de arriba funciona. El coste es una ronda de retraso para las
|
|
218
|
+
* instalaciones viejas; la alternativa es pisar o resucitar sin permiso.
|
|
219
|
+
*
|
|
220
|
+
* El fichero de marca empieza por punto y no acaba en `.md`, así que `leerCarpetaDeAgentes`
|
|
221
|
+
* ni lo mira — no hace falta excluirlo a mano en dos sitios.
|
|
222
|
+
*/
|
|
223
|
+
export function sembrarAgentes(base = homedir()) {
|
|
224
|
+
const carpeta = rutaDeAgentes(base);
|
|
225
|
+
const escritos = [];
|
|
226
|
+
const desactualizados = [];
|
|
227
|
+
if (!existsSync(carpeta)) {
|
|
228
|
+
mkdirSync(carpeta, { recursive: true });
|
|
229
|
+
const marca = {};
|
|
230
|
+
for (const agente of AGENTES_DE_SERIE) {
|
|
231
|
+
const contenido = escribirAgente(agente);
|
|
232
|
+
writeFileSync(join(carpeta, `${agente.nombre}.md`), contenido, "utf8");
|
|
233
|
+
marca[agente.nombre] = huella(contenido);
|
|
234
|
+
escritos.push(agente.nombre);
|
|
235
|
+
}
|
|
236
|
+
escribirSemilla(carpeta, marca);
|
|
237
|
+
return { escritos, desactualizados, retirados: [] };
|
|
238
|
+
}
|
|
239
|
+
const previa = leerSemilla(carpeta);
|
|
240
|
+
const marca = { ...(previa ?? {}) };
|
|
241
|
+
/**
|
|
242
|
+
* Sin marca hay DOS carpetas distintas, y confundirlas cuesta caro en los dos sentidos.
|
|
243
|
+
*
|
|
244
|
+
* La de quien viene de la regla vieja tiene agentes dentro: ahí se adopta, porque no se
|
|
245
|
+
* puede saber qué borró a propósito. Pero una carpeta sin NINGUNO de los de serie no
|
|
246
|
+
* viene de ninguna siembra —la deja, por ejemplo, un `guardarAgente` con un nombre
|
|
247
|
+
* inválido— y adoptarla anotaría los cinco como entregados sin escribir uno solo: ese
|
|
248
|
+
* usuario se quedaría sin ningún subagente para siempre. Se siembra, que es lo que
|
|
249
|
+
* habría pasado si la carpeta no existiera.
|
|
250
|
+
*/
|
|
251
|
+
const hayDeSerie = AGENTES_DE_SERIE.some((a) => existsSync(join(carpeta, `${a.nombre}.md`)));
|
|
252
|
+
const adoptando = previa === undefined && hayDeSerie;
|
|
253
|
+
for (const agente of AGENTES_DE_SERIE) {
|
|
254
|
+
const ruta = join(carpeta, `${agente.nombre}.md`);
|
|
255
|
+
const contenido = escribirAgente(agente);
|
|
256
|
+
const nuestro = huella(contenido);
|
|
257
|
+
let enDisco;
|
|
258
|
+
try {
|
|
259
|
+
enDisco = existsSync(ruta) ? huella(readFileSync(ruta, "utf8")) : undefined;
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// Un `.md` que no se puede leer no se puede comparar, y tampoco se pisa: el cargador
|
|
263
|
+
// ya dirá por qué no se pudo leer.
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (adoptando) {
|
|
267
|
+
// La ronda de adopción: se anota lo que hay y no se escribe nada.
|
|
268
|
+
if (enDisco === undefined)
|
|
269
|
+
marca[agente.nombre] = nuestro;
|
|
270
|
+
else if (enDisco === nuestro)
|
|
271
|
+
marca[agente.nombre] = nuestro;
|
|
272
|
+
else {
|
|
273
|
+
marca[agente.nombre] = AJENO;
|
|
274
|
+
desactualizados.push(agente.nombre);
|
|
275
|
+
}
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
if (enDisco === undefined) {
|
|
279
|
+
// Sin fichero: nuevo si no consta que lo hubiéramos entregado; borrado si consta.
|
|
280
|
+
if (marca[agente.nombre] === undefined) {
|
|
281
|
+
writeFileSync(ruta, contenido, "utf8");
|
|
282
|
+
marca[agente.nombre] = nuestro;
|
|
283
|
+
escritos.push(agente.nombre);
|
|
284
|
+
}
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (enDisco === nuestro) {
|
|
288
|
+
marca[agente.nombre] = nuestro;
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
if (marca[agente.nombre] !== undefined && marca[agente.nombre] !== AJENO && marca[agente.nombre] === enDisco) {
|
|
292
|
+
// Es exactamente lo que escribimos la última vez y la versión de serie ha cambiado:
|
|
293
|
+
// nadie lo ha tocado, así que se actualiza.
|
|
294
|
+
writeFileSync(ruta, contenido, "utf8");
|
|
295
|
+
marca[agente.nombre] = nuestro;
|
|
296
|
+
escritos.push(agente.nombre);
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
marca[agente.nombre] = AJENO;
|
|
300
|
+
desactualizados.push(agente.nombre);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* El quinto caso: una clave de la marca que ya no nombra a ningún agente de serie.
|
|
304
|
+
*
|
|
305
|
+
* Solo la deja un renombrado, y solo se mira la de los nombres que constan en `RENOMBRADOS`.
|
|
306
|
+
* El desenlace se decide con el mismo dato que todo lo demás: si el fichero sigue siendo
|
|
307
|
+
* exactamente lo que escribimos, es nuestra semilla y se retira; si no, es del usuario y se
|
|
308
|
+
* queda. Sin marca no se puede saber —esa es la carpeta que se adopta, y ahí el huérfano se
|
|
309
|
+
* queda y no se dice: es el límite, y es el lado que no borra nada ajeno.
|
|
310
|
+
*/
|
|
311
|
+
const retirados = [];
|
|
312
|
+
for (const [viejo, ahoraSeLlama] of Object.entries(RENOMBRADOS)) {
|
|
313
|
+
const anotado = marca[viejo];
|
|
314
|
+
if (anotado === undefined)
|
|
315
|
+
continue;
|
|
316
|
+
const ruta = join(carpeta, `${viejo}.md`);
|
|
317
|
+
let enDisco;
|
|
318
|
+
try {
|
|
319
|
+
enDisco = existsSync(ruta) ? huella(readFileSync(ruta, "utf8")) : undefined;
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
// Sin comparación no hay borrado: un `.md` ilegible se queda, y el cargador dirá por qué.
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (enDisco === undefined) {
|
|
326
|
+
// El fichero ya no está: la clave se va con él, y no hay nada que contarle a nadie.
|
|
327
|
+
delete marca[viejo];
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
if (enDisco === anotado) {
|
|
331
|
+
rmSync(ruta);
|
|
332
|
+
delete marca[viejo];
|
|
333
|
+
retirados.push({ nombre: viejo, ahoraSeLlama, borrado: true });
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
// Afinado por el usuario: se queda, y se DICE cada arranque mientras siga ahí — queda algo
|
|
337
|
+
// que decidir, que es borrarlo o quedarse con los dos.
|
|
338
|
+
marca[viejo] = AJENO;
|
|
339
|
+
retirados.push({ nombre: viejo, ahoraSeLlama, borrado: false });
|
|
340
|
+
}
|
|
341
|
+
escribirSemilla(carpeta, marca);
|
|
342
|
+
return { escritos, desactualizados, retirados };
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* El bloque de skills visuales, que los cuatro comparten.
|
|
346
|
+
*
|
|
347
|
+
* Va en el CUERPO de los sembrados y no en `REGLAS_XONE`: no es una regla del dominio, es
|
|
348
|
+
* cómo usar dos skills concretas. Un agente que el usuario escriba sin `archify` ni
|
|
349
|
+
* `artifacts-builder` no tiene por qué leer instrucciones sobre tools que no tiene —
|
|
350
|
+
* hablarle de una capacidad que no posee es la misma clase de mentira que un botón muerto.
|
|
351
|
+
*/
|
|
352
|
+
/**
|
|
353
|
+
* Las dos skills visuales, dónde se GUARDA lo que dibujan y qué NO funciona donde se VE.
|
|
354
|
+
*
|
|
355
|
+
* La última regla —los almacenes del navegador— está aquí y no en la skill por una razón
|
|
356
|
+
* medida: `artifacts-builder/SKILL.md` la explica con detalle y **el modelo no lo abre**. En
|
|
357
|
+
* las tres delegaciones medidas leyó `archify/SKILL.md` y `reference/diagramas.md`, y ni una
|
|
358
|
+
* vez el `SKILL.md` ni `reference/estilo.md`. El resultado, en vivo el 2026-09-07: un
|
|
359
|
+
* artefacto recién escrito puso un interruptor de tema con `localStorage.getItem` en la
|
|
360
|
+
* última línea de su arranque, lanzó `SecurityError` dentro del iframe y se llevó consigo el
|
|
361
|
+
* `setAttribute` del tema — página perfecta y botón muerto. Es la misma lección que la
|
|
362
|
+
* carpeta `/artefactos/`: lo que tiene que cumplirse va donde el modelo mira SIEMPRE, no en
|
|
363
|
+
* una skill que hay que cargar.
|
|
364
|
+
*/
|
|
365
|
+
const SKILLS_VISUALES = [
|
|
366
|
+
"SKILLS VISUALES:",
|
|
367
|
+
"- REGLA DE PRIORIDAD: para un diagrama, esquema, arquitectura, flujo, secuencia, datos o estados,",
|
|
368
|
+
" usa solamente `archify`. No cargues ni uses `artifacts-builder` como sustituto.",
|
|
369
|
+
"- Solo si, ADEMÁS del diagrama, el usuario pide un contenedor HTML interactivo, usa `artifacts-builder`",
|
|
370
|
+
" después de decidir el diagrama con `archify`. No menciones jamás una tool que no tienes.",
|
|
371
|
+
"- DÓNDE se guarda: `/artefactos/<nombre>.html`, y nunca en la raíz del proyecto ni dentro de",
|
|
372
|
+
" `/skills`. `/artefactos/` es la carpeta de esta sesión: no es del proyecto, no pasa por",
|
|
373
|
+
" aprobación, no entra en git y no sube a CloudStudio. Un diagrama escrito fuera de ella acaba",
|
|
374
|
+
" dentro de la app XOne del usuario.",
|
|
375
|
+
"- Si te piden un dashboard, informe, tabla o artefacto HTML interactivo, carga primero `artifacts-builder`.",
|
|
376
|
+
"- DÓNDE se VE, y qué NO funciona ahí: la consola lo pinta en un iframe sin `allow-same-origin`.",
|
|
377
|
+
" `localStorage`, `sessionStorage` e `indexedDB` LANZAN, y se llevan el resto de tu `<script>`:",
|
|
378
|
+
" nada de interruptor de tema ni de recordar nada — el tema se resuelve con `matchMedia`, y ya.",
|
|
379
|
+
" Y no se llega al origen de la consola, así que hornea los datos dentro del HTML.",
|
|
380
|
+
"- Apóyate en el código real antes de dibujar: no inventes nombres, componentes ni flujos.",
|
|
381
|
+
].join("\n");
|
|
382
|
+
/**
|
|
383
|
+
* La memoria del proyecto, y quién la lee y la escribe.
|
|
384
|
+
*
|
|
385
|
+
* También vivía en `promptDe`, repartida en dos ternarios sobre el nombre del perfil. Va al
|
|
386
|
+
* cuerpo del fichero y no a `REGLAS_XONE` porque es una POLÍTICA de estos cuatro, no una
|
|
387
|
+
* regla del dominio: un agente que el usuario escriba puede querer no leerla, y `docs`
|
|
388
|
+
* —que contesta de la plataforma y no del proyecto— tampoco la lee.
|
|
389
|
+
*/
|
|
390
|
+
const MEMORIA_LEER = [
|
|
391
|
+
"Para una tarea sobre este proyecto, lee una sola vez `/MEMORIA_PROYECTO.md` antes de inspeccionarlo.",
|
|
392
|
+
"No la uses para preguntas generales de plataforma.",
|
|
393
|
+
].join(" ");
|
|
394
|
+
const MEMORIA_LEER_CON_HANDOFF = "Lee `/MEMORIA_PROYECTO.md` solo si la tarea NO incluye un `HANDOFF DE PLANNER`. Con handoff, no la leas: sus hechos pertinentes ya vienen resumidos.";
|
|
395
|
+
const MEMORIA_ESCRIBIR = [
|
|
396
|
+
"Al terminar trabajo relevante, actualiza esa memoria solo con hechos comprobados, decisiones aprobadas",
|
|
397
|
+
"o pendientes útiles. Nunca copies transcripciones, salidas de tools, secretos ni ficheros completos.",
|
|
398
|
+
].join(" ");
|
|
399
|
+
const RECONOCIMIENTO_PLANNER = [
|
|
400
|
+
"RECONOCIMIENTO RÁPIDO DEL PROYECTO:",
|
|
401
|
+
"- Para preguntas generales como «qué hace esta app», busca evidencia suficiente, no un inventario completo.",
|
|
402
|
+
"- Lee `/app.xml` y, como máximo, tres ficheros representativos que ese contexto señale.",
|
|
403
|
+
"- En cada primera lectura usa exactamente `offset=0` y `limit=50`; usa otra página solo si una evidencia concreta lo exige.",
|
|
404
|
+
"- No repitas una lectura de la misma ruta y rango, ni hagas búsquedas genéricas como `function ` sin una hipótesis.",
|
|
405
|
+
"- Cuando puedas identificar el propósito y los módulos principales con evidencia, deja de llamar tools y responde.",
|
|
406
|
+
"- Solo amplía la exploración si el usuario pide detalle exhaustivo o si las evidencias son insuficientes o contradictorias; explica brevemente qué faltaba.",
|
|
407
|
+
"- Si el resultado alimenta un diagrama o artefacto, termina con un `HANDOFF DE PLANNER` compacto:",
|
|
408
|
+
" propósito; nodos; aristas `origen → destino`; evidencia `ruta:líneas`; y lagunas. No incluyas transcript ni lecturas crudas.",
|
|
409
|
+
].join("\n");
|
|
410
|
+
/**
|
|
411
|
+
* La consulta acotada de `docs`, medida antes de escribirla.
|
|
412
|
+
*
|
|
413
|
+
* Trazado (`docs/EVALS.md`, «El coste, medido»): para decir que un atributo NO existe,
|
|
414
|
+
* `docs` hizo 26 llamadas y 317k tokens de entrada — tres `ls` y tres `glob` para
|
|
415
|
+
* inventariar `/skills`, ocho `grep` con `max_count: 30` en modo contenido (uno solo metió
|
|
416
|
+
* 1,4k tokens), y seis referencias leídas por páginas. Y nunca abrió
|
|
417
|
+
* `references/indice-completo.md`, que es el índice de las 55 referencias y la primera
|
|
418
|
+
* fila de `SKILL.md`. La regla no le quita capacidad: le dice dónde está el índice y
|
|
419
|
+
* cuándo la respuesta ya es «no está documentado» — que en XOne significa «no existe, no
|
|
420
|
+
* lo uses», y seguir buscando sinónimos no lo hace existir.
|
|
421
|
+
*/
|
|
422
|
+
const CONSULTA_ACOTADA_DOCS = [
|
|
423
|
+
"CONSULTA ACOTADA DE LAS REFERENCIAS:",
|
|
424
|
+
"- `/skills/<skill>/SKILL.md` es la regla corta y `references/indice-completo.md` es el índice de TODAS las",
|
|
425
|
+
" referencias: léelo antes de buscar. No hagas `ls` ni `glob` sobre `/skills`; el índice ya dice qué hay y dónde.",
|
|
426
|
+
"- Abre como máximo tres referencias por pregunta, las que el índice señale para el tema, con `offset=0` y",
|
|
427
|
+
" `limit=100`; pide otra página solo si el índice o el propio fichero dicen que lo buscado sigue ahí.",
|
|
428
|
+
"- Un `grep` por hipótesis concreta (un atributo, una función, una clase), con `max_count=5` y sobre la carpeta",
|
|
429
|
+
" de su familia. Nunca dos sinónimos seguidos de lo mismo, ni una búsqueda sin hipótesis, ni repetir una",
|
|
430
|
+
" lectura de la misma ruta y rango.",
|
|
431
|
+
"- Si el índice y las referencias del tema no nombran lo que se pregunta, la respuesta es que NO está",
|
|
432
|
+
" documentado y por tanto no existe para XOne: dilo, nombra las referencias que miraste, y para.",
|
|
433
|
+
"- En cuanto tengas la evidencia para contestar, deja de llamar tools y responde.",
|
|
434
|
+
].join("\n");
|
|
435
|
+
const HANDOFF_MOCKUP = [
|
|
436
|
+
"HANDOFF PARA DIAGRAMAS:",
|
|
437
|
+
"- Si la descripción de tu tarea incluye `HANDOFF DE PLANNER`, ese bloque es tu evidencia de código real.",
|
|
438
|
+
"- Úsalo como fuente para el diagrama y NO vuelvas a leer, buscar ni reconstruir las rutas ya documentadas.",
|
|
439
|
+
"- Solo inspecciona un fichero si el handoff marca una laguna o dos evidencias se contradicen; explica cuál es la laguna.",
|
|
440
|
+
].join("\n");
|
|
441
|
+
/**
|
|
442
|
+
* El probador de dispositivos. Su conocimiento del protocolo NO va aquí: va en la skill
|
|
443
|
+
* `xone-hotswap`, que son 1.100 líneas de referencia sobre las dos plataformas y se cargan
|
|
444
|
+
* solo cuando hacen falta. Aquí queda lo que tiene que saber SIEMPRE, que es qué puede y qué
|
|
445
|
+
* no.
|
|
446
|
+
*
|
|
447
|
+
* **Y lo que hoy no puede es hablar con el dispositivo.** Este agente no tiene shell ni
|
|
448
|
+
* cliente del servidor hotswap: las tools que lo harían son el paso siguiente. Decirlo aquí
|
|
449
|
+
* —y decirlo en la `descripcion`, que es lo que el orquestador lee para delegar— es lo que
|
|
450
|
+
* evita el peor botón muerto de todos: uno dentro del grafo, que pulsa el modelo y del que
|
|
451
|
+
* se cree el resultado. Mientras tanto sirve para lo que sí puede: escribir el procedimiento
|
|
452
|
+
* exacto y leer lo que vuelva.
|
|
453
|
+
*
|
|
454
|
+
* Los ejemplos del cuerpo son de Android (`adb`, `logcat`, `runSql`) porque es lo que hay
|
|
455
|
+
* medido; no acotan el agente, que es de las dos plataformas. La que dice cuál tiene qué,
|
|
456
|
+
* comando a comando, es la skill.
|
|
457
|
+
*/
|
|
458
|
+
const PROCEDIMIENTO_DE_PRUEBA = [
|
|
459
|
+
"LO QUE PUEDES Y LO QUE NO, HOY:",
|
|
460
|
+
"- NO tienes conexión con el dispositivo: no puedes lanzar adb, ni abrir el WebSocket del",
|
|
461
|
+
" servidor hotswap, ni subir un fichero, ni capturar una pantalla. No lo intentes ni digas",
|
|
462
|
+
" que lo has hecho.",
|
|
463
|
+
"- Sí puedes leer el proyecto, y con eso escribir el PROCEDIMIENTO exacto: los comandos en",
|
|
464
|
+
" orden, con el nombre real de cada colección y de cada control, y qué tiene que valer cada",
|
|
465
|
+
" comprobación para dar la prueba por pasada.",
|
|
466
|
+
"- Y puedes LEER lo que te devuelvan: un volcado de `getAllElements`, un logcat, la salida de",
|
|
467
|
+
" un `runSql`. Ahí sí diagnosticas.",
|
|
468
|
+
"",
|
|
469
|
+
"CÓMO ESCRIBES UNA PRUEBA:",
|
|
470
|
+
"- Un paso es una acción y su comprobación. Una acción sin comprobación no prueba nada.",
|
|
471
|
+
"- Por NOMBRE de control, nunca por coordenadas.",
|
|
472
|
+
"- Espera a un control (`waitForElement`), nunca a un número de segundos.",
|
|
473
|
+
"- Di qué evidencia esperas de cada comprobación (`getText` devuelve X, `isVisible` true) en",
|
|
474
|
+
" vez de «comprobar que se ve bien».",
|
|
475
|
+
"- Si el proyecto no tiene el control que la prueba necesitaría, DILO: no inventes un nombre.",
|
|
476
|
+
].join("\n");
|
|
477
|
+
/**
|
|
478
|
+
* Los cinco. Nacieron como una mudanza de los textos que había en código; desde entonces
|
|
479
|
+
* `docs` lleva además la consulta acotada, y `xone-device-tester` llegó con la documentación
|
|
480
|
+
* del protocolo hotswap —con el nombre viejo, `probador`, ver `RENOMBRADOS`—. Cada regla que
|
|
481
|
+
* se añade aquí se mide antes con los evals, porque un prompt más largo es coste en TODAS las
|
|
482
|
+
* llamadas.
|
|
483
|
+
*/
|
|
484
|
+
export const AGENTES_DE_SERIE = [
|
|
485
|
+
{
|
|
486
|
+
nombre: "docs",
|
|
487
|
+
descripcion: "Responde preguntas técnicas de la plataforma XOne (XML/.xne, JavaScript, CSS, " +
|
|
488
|
+
"eventos, patrones). Puede leer el proyecto para no contradecir el código real. " +
|
|
489
|
+
"No modifica nada.",
|
|
490
|
+
motor: "modelo",
|
|
491
|
+
soloLectura: true,
|
|
492
|
+
skills: ["xone-development", "archify", "artifacts-builder"],
|
|
493
|
+
instrucciones: `${SKILLS_VISUALES}\n\n${CONSULTA_ACOTADA_DOCS}`,
|
|
494
|
+
origen: "semilla",
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
nombre: "planner",
|
|
498
|
+
descripcion: "Inspecciona el proyecto real para anclar planes y diagnósticos: estructura, " +
|
|
499
|
+
"colecciones y búsqueda de código. No modifica nada.",
|
|
500
|
+
motor: "modelo",
|
|
501
|
+
soloLectura: true,
|
|
502
|
+
skills: ["xone-spec-builder", "xone-plan-builder", "archify", "artifacts-builder"],
|
|
503
|
+
instrucciones: `${SKILLS_VISUALES}\n\n${RECONOCIMIENTO_PLANNER}\n\n${MEMORIA_LEER}`,
|
|
504
|
+
origen: "semilla",
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
nombre: "dev",
|
|
508
|
+
descripcion: "Desarrolla: crea y modifica colecciones, escribe scripts y edita ficheros. " +
|
|
509
|
+
"Las modificaciones requieren aprobación humana.",
|
|
510
|
+
motor: "modelo",
|
|
511
|
+
soloLectura: false,
|
|
512
|
+
skills: ["xone-development", "xone-debugging", "archify", "artifacts-builder"],
|
|
513
|
+
instrucciones: `${SKILLS_VISUALES}\n\n${MEMORIA_LEER}\n\n${MEMORIA_ESCRIBIR}`,
|
|
514
|
+
origen: "semilla",
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
nombre: "xone-device-tester",
|
|
518
|
+
descripcion: "Pruebas en un dispositivo o emulador LOCAL —Android o iOS— sobre la app host XOne " +
|
|
519
|
+
"instalada. Hoy NO se conecta al dispositivo: escribe el procedimiento de prueba con " +
|
|
520
|
+
"los comandos y las comprobaciones exactas, y diagnostica los volcados de controles, " +
|
|
521
|
+
"los log y las consultas que se le peguen. No modifica el proyecto.",
|
|
522
|
+
motor: "modelo",
|
|
523
|
+
soloLectura: true,
|
|
524
|
+
skills: ["xone-hotswap", "xone-debugging"],
|
|
525
|
+
instrucciones: PROCEDIMIENTO_DE_PRUEBA,
|
|
526
|
+
origen: "semilla",
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
nombre: "mockup",
|
|
530
|
+
descripcion: "Trabajo visual: layouts, CSS y recursos. Las modificaciones requieren " +
|
|
531
|
+
"aprobación humana.",
|
|
532
|
+
motor: "modelo",
|
|
533
|
+
soloLectura: false,
|
|
534
|
+
skills: ["xone-development", "archify", "artifacts-builder"],
|
|
535
|
+
instrucciones: `${SKILLS_VISUALES}\n\n${HANDOFF_MOCKUP}\n\n${MEMORIA_LEER_CON_HANDOFF}\n\n${MEMORIA_ESCRIBIR}`,
|
|
536
|
+
origen: "semilla",
|
|
537
|
+
},
|
|
538
|
+
];
|
|
539
|
+
//# sourceMappingURL=agentesEnDisco.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentesEnDisco.js","sourceRoot":"","sources":["../../src/agent/agentesEnDisco.ts"],"names":[],"mappings":"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"}
|