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
|
+
{"version":3,"file":"corredorDeTareas.js","sourceRoot":"","sources":["../../../src/web/servidor/corredorDeTareas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { conLlamadaDeTool } from "../../core/actos.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cada cuánto sale un parcial mientras el modelo escribe.
|
|
4
|
+
*
|
|
5
|
+
* No se emite por token porque cada emisión manda el acto ENTERO —así lo sustituye el
|
|
6
|
+
* cliente—, o sea que N tokens costarían N mensajes de tamaño creciente: cuadrático en
|
|
7
|
+
* bytes, y por un túnel eso se nota. No se emite tampoco solo al final, que es lo que hacía
|
|
8
|
+
* y es peor: la respuesta aparecía de golpe después de segundos de nada.
|
|
9
|
+
*
|
|
10
|
+
* 80 ms es el orden de un cuadro de pantalla largo: por debajo de eso nadie distingue el
|
|
11
|
+
* texto creciendo, y por encima se empieza a notar a tirones.
|
|
12
|
+
*/
|
|
13
|
+
const MS_ENTRE_PARCIALES = 80;
|
|
14
|
+
/**
|
|
15
|
+
* `ahora - antes`, cuenta por cuenta. Los acumulados del tracker son monótonos mientras el
|
|
16
|
+
* proceso vive —cada llamada al modelo suma—, así que la resta nunca baja de cero; si
|
|
17
|
+
* bajara sería que la fuente cambió de escala, y un negativo pintado como gasto es peor que
|
|
18
|
+
* un cero. Por eso se acota, no se confía.
|
|
19
|
+
*/
|
|
20
|
+
function restar(ahora, antes) {
|
|
21
|
+
const d = (a, b) => Math.max(0, a - b);
|
|
22
|
+
return {
|
|
23
|
+
entrada: d(ahora.entrada, antes.entrada),
|
|
24
|
+
salida: d(ahora.salida, antes.salida),
|
|
25
|
+
cache: d(ahora.cache, antes.cache),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function crearPielWeb(ahora = Date.now,
|
|
29
|
+
/**
|
|
30
|
+
* Lo consumido ACUMULADO por la sesión, si consta. Es el mismo cierre que la consola ya
|
|
31
|
+
* tiene (`ConsolaDeProyecto.consumo`, que pregunta a la sesión real), y entra aquí para
|
|
32
|
+
* que el `fin` pueda llevar el DELTA del turno sin que `core/turno.ts` sepa nada de
|
|
33
|
+
* consumo: la piel lo consulta al cerrar, no el motor al llamarla.
|
|
34
|
+
*
|
|
35
|
+
* Va inyectado y no leído de un cierre propio porque la sesión real llega TARDE —nace
|
|
36
|
+
* dentro del primer turno—, así que lo que se guarda es la PREGUNTA, no la respuesta.
|
|
37
|
+
*
|
|
38
|
+
* Ausente = esta piel no persiste consumo, y entonces el `fin` sale sin `consumo`, que es
|
|
39
|
+
* «no consta». Las otras dos pieles ni lo reciben: por eso `Piel.fin(ms)` no cambia de
|
|
40
|
+
* firma y stdio y la TUI siguen byte-idénticas.
|
|
41
|
+
*/
|
|
42
|
+
consumoAcumulado) {
|
|
43
|
+
const lista = [];
|
|
44
|
+
let colchon = "";
|
|
45
|
+
let faseActiva;
|
|
46
|
+
/** Hay un acto de asistente A MEDIAS al final de la lista, que los tokens siguientes
|
|
47
|
+
* sustituyen en vez de anexar. */
|
|
48
|
+
let parcial = false;
|
|
49
|
+
let ultimoParcial = 0;
|
|
50
|
+
/** Lo mismo para el razonamiento, que es otro acto y por tanto otro colchón: mezclarlos
|
|
51
|
+
* pondría lo que el modelo piensa dentro de lo que dice. */
|
|
52
|
+
let pensamiento = "";
|
|
53
|
+
let parcialPensado = false;
|
|
54
|
+
let ultimoPensado = 0;
|
|
55
|
+
const escuchas = [];
|
|
56
|
+
/**
|
|
57
|
+
* El acumulado en el ÚLTIMO `fin` estampado, para restarle el de ahora y quedarnos con el
|
|
58
|
+
* delta. Empieza en ceros porque el tracker de la sesión también: son la misma escala
|
|
59
|
+
* mientras el proceso viva, y por eso la resta da el gasto del turno.
|
|
60
|
+
*/
|
|
61
|
+
let estampado;
|
|
62
|
+
const notificar = (acto) => {
|
|
63
|
+
for (const escucha of escuchas)
|
|
64
|
+
escucha(acto);
|
|
65
|
+
};
|
|
66
|
+
const empujar = (acto) => {
|
|
67
|
+
// Cualquier acto NUEVO cierra los parciales: lo que venga detrás ya no los sustituye.
|
|
68
|
+
parcial = false;
|
|
69
|
+
parcialPensado = false;
|
|
70
|
+
// Y el razonamiento se cierra con el acto que venga: el siguiente bloque de
|
|
71
|
+
// pensamiento, si lo hay, es otro y empieza el suyo.
|
|
72
|
+
pensamiento = "";
|
|
73
|
+
lista.push(acto);
|
|
74
|
+
notificar(acto);
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Sustituye el último acto en vez de anexar. El transporte lo distingue por la LONGITUD
|
|
78
|
+
* de la lista (`consolaWeb.ts`): si no creció, manda `sustitucion` y el cliente reemplaza
|
|
79
|
+
* el último — el mismo camino que ya usaba el cierre de una racha de tools.
|
|
80
|
+
*/
|
|
81
|
+
const sustituir = (acto) => {
|
|
82
|
+
lista[lista.length - 1] = acto;
|
|
83
|
+
notificar(acto);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Cualquier acto que no sea otra `fase` cierra la fase viva con su duración —la
|
|
87
|
+
* cascada del store (`cli/tui/store.ts#cerrarFase`), reproducida aquí porque la web
|
|
88
|
+
* no puede importar de `cli/tui/`. `fase` en sí NO pasa por aquí: dos `fase()`
|
|
89
|
+
* seguidas sustituyen la activa sin dejar rastro de la anterior, igual que el store.
|
|
90
|
+
*/
|
|
91
|
+
const cerrarFase = () => {
|
|
92
|
+
if (faseActiva === undefined)
|
|
93
|
+
return;
|
|
94
|
+
const { texto, fase, t0 } = faseActiva;
|
|
95
|
+
faseActiva = undefined;
|
|
96
|
+
// `fase` es la CATEGORÍA (`core/events.ts#Fase`), aparte del texto en español. Va
|
|
97
|
+
// suelta y no deducida del texto porque el texto es prosa para leer —vive en
|
|
98
|
+
// `TEXTO_DE_FASE`, y reescribirlo es cosa de una tarde— y un filtro que dependiera de
|
|
99
|
+
// esa prosa se rompería sin que nada avisara.
|
|
100
|
+
empujar({
|
|
101
|
+
tipo: "fase",
|
|
102
|
+
texto,
|
|
103
|
+
ms: Math.max(0, Date.now() - t0),
|
|
104
|
+
...(fase === undefined ? {} : { fase }),
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Lo que hay que estampar en el `fin`: el DELTA de este turno, o nada.
|
|
109
|
+
*
|
|
110
|
+
* La resta es contra el último acumulado estampado, y por eso `estampado` empieza
|
|
111
|
+
* `undefined` y no en ceros: sin lector no hay nada que estampar, y una vez hay lector el
|
|
112
|
+
* primer delta es el acumulado entero —que es lo correcto, porque hasta ahí no había
|
|
113
|
+
* ningún `fin` en este proceso al que restarle—.
|
|
114
|
+
*
|
|
115
|
+
* Un turno que no gastó nada no estampa: `{0,0,0}` ocuparía sitio en el `.jsonl` y
|
|
116
|
+
* afirmaría una medida que nadie hizo. Ausente ya significa «no consta», y quien lea
|
|
117
|
+
* tiene que poder distinguirlo (es lo que hace `consumoDeLosActos`).
|
|
118
|
+
*/
|
|
119
|
+
const deltaDelTurno = () => {
|
|
120
|
+
const ahora = consumoAcumulado?.();
|
|
121
|
+
if (ahora === undefined)
|
|
122
|
+
return {};
|
|
123
|
+
const antes = estampado;
|
|
124
|
+
estampado = ahora;
|
|
125
|
+
// Sin `antes` el delta es el acumulado ENTERO, no una resta contra ceros: hasta aquí no
|
|
126
|
+
// había ningún `fin` en este proceso, así que todo lo acumulado es de este turno.
|
|
127
|
+
const delta = antes === undefined
|
|
128
|
+
? ahora
|
|
129
|
+
: {
|
|
130
|
+
modelo: restar(ahora.modelo, antes.modelo),
|
|
131
|
+
externo: restar(ahora.externo, antes.externo),
|
|
132
|
+
...(ahora.ventana === undefined ? {} : { ventana: ahora.ventana }),
|
|
133
|
+
};
|
|
134
|
+
const gastado = delta.modelo.entrada + delta.modelo.salida + delta.externo.entrada + delta.externo.salida > 0;
|
|
135
|
+
return gastado ? { consumo: delta } : {};
|
|
136
|
+
};
|
|
137
|
+
const piel = {
|
|
138
|
+
token(texto) {
|
|
139
|
+
// A DIFERENCIA del store de la TUI (`cli/tui/store.ts:74-87`), aquí NO se parte por
|
|
140
|
+
// `\n`: la TUI pinta líneas en un terminal y necesita una por fila, pero la web
|
|
141
|
+
// renderiza markdown, donde un párrafo entero —con sus saltos internos, sus listas
|
|
142
|
+
// y sus bloques de código— tiene que llegar de una pieza para que se pueda parsear.
|
|
143
|
+
// Partirlo daría un acto por línea y el markdown se rompería en trozos sueltos.
|
|
144
|
+
colchon += texto;
|
|
145
|
+
// Y se ENSEÑA mientras llega. Antes el colchón se guardaba entero y no salía hasta
|
|
146
|
+
// `cerrarLinea`, así que la respuesta aparecía de golpe tras segundos de pantalla
|
|
147
|
+
// quieta — el modelo estaba escribiendo y no se veía.
|
|
148
|
+
if (!parcial) {
|
|
149
|
+
cerrarFase();
|
|
150
|
+
empujar({ tipo: "asistente", texto: colchon });
|
|
151
|
+
parcial = true;
|
|
152
|
+
ultimoParcial = ahora();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const t = ahora();
|
|
156
|
+
if (t - ultimoParcial < MS_ENTRE_PARCIALES)
|
|
157
|
+
return;
|
|
158
|
+
ultimoParcial = t;
|
|
159
|
+
sustituir({ tipo: "asistente", texto: colchon });
|
|
160
|
+
},
|
|
161
|
+
razonamiento(texto) {
|
|
162
|
+
// Mismo trato que los tokens de la respuesta —parcial que se sustituye, con su
|
|
163
|
+
// ventana de 80 ms— pero en su propio acto: lo que el modelo PIENSA no es lo que
|
|
164
|
+
// dice, y el transcript tiene que poder distinguirlo.
|
|
165
|
+
if (!parcialPensado) {
|
|
166
|
+
cerrarFase();
|
|
167
|
+
// El orden importa: `empujar` limpia los colchones (cualquier acto nuevo cierra lo
|
|
168
|
+
// que hubiera a medias), así que el bloque nuevo se asigna DESPUÉS. Al revés se
|
|
169
|
+
// perdía el primer trozo y el pensamiento empezaba a contar desde el segundo.
|
|
170
|
+
empujar({ tipo: "razonamiento", texto });
|
|
171
|
+
pensamiento = texto;
|
|
172
|
+
parcialPensado = true;
|
|
173
|
+
ultimoPensado = ahora();
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
pensamiento += texto;
|
|
177
|
+
const t = ahora();
|
|
178
|
+
if (t - ultimoPensado < MS_ENTRE_PARCIALES)
|
|
179
|
+
return;
|
|
180
|
+
ultimoPensado = t;
|
|
181
|
+
sustituir({ tipo: "razonamiento", texto: pensamiento });
|
|
182
|
+
},
|
|
183
|
+
cerrarLinea() {
|
|
184
|
+
if (colchon === "") {
|
|
185
|
+
// Sin texto no hay nada que cerrar, pero sí que olvidar: un parcial abierto que no
|
|
186
|
+
// se marcara cerrado haría que el siguiente mensaje del modelo SUSTITUYERA a éste
|
|
187
|
+
// en vez de ir detrás.
|
|
188
|
+
parcial = false;
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// El último trozo entra siempre, aunque no hayan pasado los 80 ms: es el que completa
|
|
192
|
+
// la frase, y perderlo por el reloj dejaría el mensaje cortado en pantalla hasta el
|
|
193
|
+
// siguiente turno.
|
|
194
|
+
if (parcial)
|
|
195
|
+
sustituir({ tipo: "asistente", texto: colchon });
|
|
196
|
+
else {
|
|
197
|
+
cerrarFase();
|
|
198
|
+
empujar({ tipo: "asistente", texto: colchon });
|
|
199
|
+
}
|
|
200
|
+
parcial = false;
|
|
201
|
+
colchon = "";
|
|
202
|
+
// El razonamiento que hubiera quedado a medias se da por cerrado aquí: la respuesta
|
|
203
|
+
// ya empezó, así que lo pensado antes no va a crecer más.
|
|
204
|
+
parcialPensado = false;
|
|
205
|
+
pensamiento = "";
|
|
206
|
+
},
|
|
207
|
+
linea(texto, detalle = {}) {
|
|
208
|
+
// La comprobación de fusión va ANTES de cerrar la fase, no después: con una fase
|
|
209
|
+
// viva el grupo no se completa (el acto de fase se intercala primero), igual que
|
|
210
|
+
// en el store — si no, una racha que arranca justo tras `fase()` se fusionaría con
|
|
211
|
+
// el grupo de ANTES de la fase, borrando la frontera que el usuario vio pasar.
|
|
212
|
+
//
|
|
213
|
+
// `detalle` dice de qué tool es la línea, y VACÍO cuando no es de ninguna: por este
|
|
214
|
+
// mismo canal pasan el plan, las tareas y la verificación (`core/turno.ts` las
|
|
215
|
+
// escribe con el mismo `escribirLinea`). Se guarda igual, con el objeto vacío, para
|
|
216
|
+
// que la lista corra en paralelo a la de líneas sin huecos — un array con agujeros y
|
|
217
|
+
// otro sin ellos es cómo se desalinean.
|
|
218
|
+
const ultimo = lista.at(-1);
|
|
219
|
+
if (ultimo?.tipo === "herramientas" && faseActiva === undefined) {
|
|
220
|
+
sustituir({ tipo: "herramientas", ...conLlamadaDeTool(ultimo, texto, detalle) });
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
cerrarFase();
|
|
224
|
+
empujar({ tipo: "herramientas", lineas: [texto], detalles: [detalle] });
|
|
225
|
+
},
|
|
226
|
+
artefacto(a) {
|
|
227
|
+
// Acto PROPIO y no una línea más del grupo de herramientas: es lo único del turno que
|
|
228
|
+
// se escribió sin pasar por la aprobación humana, y desde aquí se abre el fichero.
|
|
229
|
+
// Cierra la fase como cualquier otro acto de conversación.
|
|
230
|
+
cerrarFase();
|
|
231
|
+
empujar({
|
|
232
|
+
tipo: "artefacto",
|
|
233
|
+
ruta: a.ruta,
|
|
234
|
+
nombre: a.nombre,
|
|
235
|
+
bytes: a.bytes,
|
|
236
|
+
...(a.mime === undefined ? {} : { mime: a.mime }),
|
|
237
|
+
});
|
|
238
|
+
},
|
|
239
|
+
pausa(pendientes) {
|
|
240
|
+
cerrarFase();
|
|
241
|
+
// Una línea por pendiente, origen y descripción y NADA más: ni el fichero, ni el
|
|
242
|
+
// diff — eso viaja solo en el mensaje de aprobación (`transporte.ts`).
|
|
243
|
+
const texto = pendientes.map((p) => `${p.origen}: ${p.descripcion}`).join("\n");
|
|
244
|
+
empujar({ tipo: "sistema", texto });
|
|
245
|
+
},
|
|
246
|
+
fin(ms) {
|
|
247
|
+
cerrarFase();
|
|
248
|
+
empujar({ tipo: "fin", ms, ...deltaDelTurno() });
|
|
249
|
+
},
|
|
250
|
+
fase(texto, fase) {
|
|
251
|
+
// Sustituye la activa sin emitir acto por ella: igual que el store, dos `fase()`
|
|
252
|
+
// seguidas sin nada de por medio pierden la duración de la primera a propósito —
|
|
253
|
+
// es una fase que no llegó a contar nada.
|
|
254
|
+
faseActiva = { texto, t0: Date.now(), ...(fase === undefined ? {} : { fase }) };
|
|
255
|
+
},
|
|
256
|
+
notificacion(texto) {
|
|
257
|
+
cerrarFase();
|
|
258
|
+
empujar({ tipo: "sistema", texto });
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
return {
|
|
262
|
+
piel,
|
|
263
|
+
actos: () => lista,
|
|
264
|
+
alActo: (escucha) => {
|
|
265
|
+
escuchas.push(escucha);
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=pielWeb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pielWeb.js","sourceRoot":"","sources":["../../../src/web/servidor/pielWeb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El servidor de la consola web: `node:http`, loopback, sin framework.
|
|
3
|
+
*
|
|
4
|
+
* Tres cosas son de seguridad y no de estilo:
|
|
5
|
+
* - **Loopback y nada más.** No hay bandera para `0.0.0.0`: un servidor local que abre
|
|
6
|
+
* la red expone el proyecto entero del usuario y su `auth.json` está a un bug de
|
|
7
|
+
* distancia.
|
|
8
|
+
* - **`Host` y `Origin` en TODA petición.** El ataque real a un servidor local no es que
|
|
9
|
+
* alguien escanee el puerto: es DNS rebinding, donde una web cualquiera resuelve su
|
|
10
|
+
* dominio a 127.0.0.1 y le habla a este proceso desde el navegador de la víctima. Un
|
|
11
|
+
* `Host` que no sea loopback, o un `Origin` que no sea el nuestro, es 403.
|
|
12
|
+
* - **`.xonecode` no se sirve NUNCA.** Ni el del proyecto ni el del home. Va antes que
|
|
13
|
+
* la comprobación de existencia, para que un 403 y un 404 no cuenten cosas distintas.
|
|
14
|
+
*/
|
|
15
|
+
import { createServer } from "node:http";
|
|
16
|
+
import { randomBytes, timingSafeEqual } from "node:crypto";
|
|
17
|
+
import { realpathSync, readFileSync, statSync } from "node:fs";
|
|
18
|
+
import { join, sep, extname } from "node:path";
|
|
19
|
+
/** Nombre de la cookie de sesión. No lleva "token" para no repetirlo en cabeceras de log. */
|
|
20
|
+
const NOMBRE_COOKIE = "xonecode_sesion";
|
|
21
|
+
/** Segmento de ruta que jamás se sirve, esté donde esté dentro de la raíz de estáticos. */
|
|
22
|
+
const SEGMENTO_VETADO = ".xonecode";
|
|
23
|
+
const TIPOS_MIME = {
|
|
24
|
+
".html": "text/html; charset=utf-8",
|
|
25
|
+
".js": "text/javascript; charset=utf-8",
|
|
26
|
+
".mjs": "text/javascript; charset=utf-8",
|
|
27
|
+
".css": "text/css; charset=utf-8",
|
|
28
|
+
".json": "application/json; charset=utf-8",
|
|
29
|
+
".svg": "image/svg+xml",
|
|
30
|
+
".png": "image/png",
|
|
31
|
+
".ico": "image/x-icon",
|
|
32
|
+
".woff2": "font/woff2",
|
|
33
|
+
};
|
|
34
|
+
export async function arrancarServidor(opciones) {
|
|
35
|
+
// Resuelta UNA vez al arrancar: cada petición se compara contra esta cadena canónica,
|
|
36
|
+
// nunca contra `opciones.raizEstaticos` sin resolver (un enlace simbólico ahí dejaría
|
|
37
|
+
// pasar cualquier cosa que el enlace apunte).
|
|
38
|
+
const raizReal = realpathSync(opciones.raizEstaticos);
|
|
39
|
+
const token = randomBytes(32).toString("base64url");
|
|
40
|
+
const rutas = new Map();
|
|
41
|
+
let puertoReal = opciones.puerto;
|
|
42
|
+
let direccionReal = "127.0.0.1";
|
|
43
|
+
const contexto = () => ({
|
|
44
|
+
raizReal,
|
|
45
|
+
token,
|
|
46
|
+
rutas,
|
|
47
|
+
puerto: puertoReal,
|
|
48
|
+
...(opciones.anfitrion === undefined ? {} : { anfitrion: opciones.anfitrion }),
|
|
49
|
+
});
|
|
50
|
+
const servidorHttp = createServer((peticion, respuesta) => {
|
|
51
|
+
manejarPeticion(peticion, respuesta, contexto()).catch(() => {
|
|
52
|
+
// Un fallo inesperado no puede tumbar el proceso: corre en la máquina del
|
|
53
|
+
// desarrollador, junto al resto de su trabajo.
|
|
54
|
+
if (!respuesta.headersSent)
|
|
55
|
+
respuesta.writeHead(500);
|
|
56
|
+
respuesta.end();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
await new Promise((resolver, rechazar) => {
|
|
60
|
+
servidorHttp.once("error", (error) => {
|
|
61
|
+
if (error.code === "EADDRINUSE") {
|
|
62
|
+
// El mensaje por defecto de Node es una traza de `listen`, muda sobre qué hacer.
|
|
63
|
+
// Aquí el puerto y la salida (`--puerto`) son lo único que el usuario necesita.
|
|
64
|
+
rechazar(new Error(`El puerto ${opciones.puerto} ya está en uso — prueba con --puerto <otro>.`));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
rechazar(error);
|
|
68
|
+
});
|
|
69
|
+
servidorHttp.once("listening", () => {
|
|
70
|
+
// `address()` es la única fuente de verdad del bind real; un test que compare
|
|
71
|
+
// contra una cadena que él mismo construye pasaría igual con `listen(..., "0.0.0.0")`.
|
|
72
|
+
const direccion = servidorHttp.address();
|
|
73
|
+
if (typeof direccion === "object" && direccion !== null) {
|
|
74
|
+
puertoReal = direccion.port;
|
|
75
|
+
direccionReal = direccion.address;
|
|
76
|
+
}
|
|
77
|
+
resolver();
|
|
78
|
+
});
|
|
79
|
+
servidorHttp.listen(opciones.puerto, "127.0.0.1");
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
get puerto() {
|
|
83
|
+
return puertoReal;
|
|
84
|
+
},
|
|
85
|
+
get direccion() {
|
|
86
|
+
return direccionReal;
|
|
87
|
+
},
|
|
88
|
+
token,
|
|
89
|
+
get url() {
|
|
90
|
+
return `http://127.0.0.1:${puertoReal}/?t=${token}`;
|
|
91
|
+
},
|
|
92
|
+
registrarRuta(metodo, ruta, manejador) {
|
|
93
|
+
rutas.set(`${metodo.toUpperCase()} ${ruta}`, manejador);
|
|
94
|
+
},
|
|
95
|
+
async cerrar() {
|
|
96
|
+
// El SSE deja respuestas abiertas de por vida; sin `closeAllConnections()` el
|
|
97
|
+
// `close()` normal espera a que esas conexiones se cierren solas, cosa que no
|
|
98
|
+
// hacen, y el proceso — el de este test incluido — se queda colgado.
|
|
99
|
+
servidorHttp.closeAllConnections();
|
|
100
|
+
await new Promise((resolver) => servidorHttp.close(() => resolver()));
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async function manejarPeticion(peticion, respuesta, contexto) {
|
|
105
|
+
const { raizReal, token, rutas, puerto, anfitrion: anfitrionExtra } = contexto;
|
|
106
|
+
// DNS rebinding: una web ajena resuelve su dominio a 127.0.0.1 y le habla a este
|
|
107
|
+
// proceso desde el navegador de la víctima, que sí tiene la cookie. El único `Host`
|
|
108
|
+
// válido es el propio loopback con el puerto real de este arranque.
|
|
109
|
+
const anfitrion = peticion.headers.host;
|
|
110
|
+
if (anfitrion !== `127.0.0.1:${puerto}` &&
|
|
111
|
+
anfitrion !== `localhost:${puerto}` &&
|
|
112
|
+
// El del túnel, si se pidió uno: exacto y sin comodines (ver `OpcionesServidor`).
|
|
113
|
+
(anfitrionExtra === undefined || anfitrion !== anfitrionExtra)) {
|
|
114
|
+
responderProhibido(respuesta);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// El `Origin` solo lo manda el navegador en peticiones que un atacante controla
|
|
118
|
+
// (fetch/XHR de otra pestaña); si está, tiene que ser el nuestro.
|
|
119
|
+
const origen = peticion.headers.origin;
|
|
120
|
+
if (origen !== undefined &&
|
|
121
|
+
origen !== `http://127.0.0.1:${puerto}` &&
|
|
122
|
+
origen !== `http://localhost:${puerto}` &&
|
|
123
|
+
// Un túnel sirve por HTTPS, así que su `Origin` es `https://<anfitrion>`. Se acepta
|
|
124
|
+
// SOLO ese, no cualquier esquema: `http://<anfitrion>` sería el mismo nombre servido
|
|
125
|
+
// en claro, que es otra cosa y no la que se pidió abrir.
|
|
126
|
+
(anfitrionExtra === undefined || origen !== `https://${anfitrionExtra}`)) {
|
|
127
|
+
responderProhibido(respuesta);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Partido a mano, NUNCA con `new URL()`: WHATWG normaliza los segmentos `..` del
|
|
131
|
+
// pathname en el propio parseo (medido), así que un recorrido crudo llegaría ya
|
|
132
|
+
// colapsado y el test de seguridad no probaría nada. `indexOf("?")` no toca los
|
|
133
|
+
// segmentos de la ruta.
|
|
134
|
+
const bruto = peticion.url ?? "/";
|
|
135
|
+
const indiceQuery = bruto.indexOf("?");
|
|
136
|
+
const rutaBruta = indiceQuery === -1 ? bruto : bruto.slice(0, indiceQuery);
|
|
137
|
+
const query = indiceQuery === -1 ? "" : bruto.slice(indiceQuery + 1);
|
|
138
|
+
let rutaDecodificada;
|
|
139
|
+
try {
|
|
140
|
+
rutaDecodificada = decodeURIComponent(rutaBruta);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
responderTexto(respuesta, 400, "");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const autenticacion = autenticar(peticion.headers.cookie, new URLSearchParams(query).get("t"), token);
|
|
147
|
+
if (!autenticacion.autenticado) {
|
|
148
|
+
responderTexto(respuesta, 401, "");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (autenticacion.cookieNueva !== undefined) {
|
|
152
|
+
respuesta.setHeader("Set-Cookie", autenticacion.cookieNueva);
|
|
153
|
+
}
|
|
154
|
+
const manejador = rutas.get(`${peticion.method} ${rutaDecodificada}`);
|
|
155
|
+
if (manejador !== undefined) {
|
|
156
|
+
await manejador(peticion, respuesta);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
servirEstatico(peticion, respuesta, raizReal, rutaDecodificada);
|
|
160
|
+
}
|
|
161
|
+
function autenticar(cabeceraCookie, tokenDeQuery, token) {
|
|
162
|
+
const cookieToken = extraerCookie(cabeceraCookie, NOMBRE_COOKIE);
|
|
163
|
+
if (cookieToken !== undefined && compararTokens(cookieToken, token)) {
|
|
164
|
+
return { autenticado: true };
|
|
165
|
+
}
|
|
166
|
+
if (tokenDeQuery !== null && compararTokens(tokenDeQuery, token)) {
|
|
167
|
+
return { autenticado: true, cookieNueva: construirCookie(token) };
|
|
168
|
+
}
|
|
169
|
+
return { autenticado: false };
|
|
170
|
+
}
|
|
171
|
+
/** `timingSafeEqual` exige buffers de igual longitud: la desigualdad ya descarta el intento. */
|
|
172
|
+
function compararTokens(candidato, token) {
|
|
173
|
+
const bufferCandidato = Buffer.from(candidato);
|
|
174
|
+
const bufferToken = Buffer.from(token);
|
|
175
|
+
if (bufferCandidato.length !== bufferToken.length)
|
|
176
|
+
return false;
|
|
177
|
+
return timingSafeEqual(bufferCandidato, bufferToken);
|
|
178
|
+
}
|
|
179
|
+
function construirCookie(token) {
|
|
180
|
+
// Sin `Secure`: esto es `http://` en loopback, y con `Secure` el navegador la
|
|
181
|
+
// descartaría sin avisar — la sesión nunca se establecería.
|
|
182
|
+
return `${NOMBRE_COOKIE}=${token}; HttpOnly; SameSite=Strict; Path=/`;
|
|
183
|
+
}
|
|
184
|
+
function extraerCookie(cabecera, nombre) {
|
|
185
|
+
if (cabecera === undefined)
|
|
186
|
+
return undefined;
|
|
187
|
+
for (const parte of cabecera.split(";")) {
|
|
188
|
+
const indice = parte.indexOf("=");
|
|
189
|
+
if (indice === -1)
|
|
190
|
+
continue;
|
|
191
|
+
if (parte.slice(0, indice).trim() === nombre)
|
|
192
|
+
return parte.slice(indice + 1).trim();
|
|
193
|
+
}
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
function servirEstatico(peticion, respuesta, raizReal, rutaDecodificada) {
|
|
197
|
+
// `.xonecode` se rechaza por el TEXTO de la ruta, antes de tocar el disco: así el
|
|
198
|
+
// fichero puede existir o no, y en ambos casos la respuesta es la misma 403 — un 404
|
|
199
|
+
// aquí delataría cuáles de sus ficheros están presentes.
|
|
200
|
+
// Comparación en minúsculas: MEDIDO en este disco (APFS por omisión, insensible a
|
|
201
|
+
// mayúsculas) — `/.XONECODE/secreto.json` pasa el `includes` sensible a caso, y el
|
|
202
|
+
// `realpathSync` de más abajo NO normaliza el caso de un componente que no es un
|
|
203
|
+
// enlace simbólico, así que el 403 nunca llegaría a dispararse y el fichero se
|
|
204
|
+
// serviría entero.
|
|
205
|
+
const segmentos = rutaDecodificada.split("/").filter((s) => s.length > 0);
|
|
206
|
+
if (segmentos.some((s) => s.toLowerCase() === SEGMENTO_VETADO)) {
|
|
207
|
+
responderProhibido(respuesta);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const relativa = rutaDecodificada === "/" ? "index.html" : rutaDecodificada;
|
|
211
|
+
// `join` colapsa los `..` léxicamente contra `raizReal`: un recorrido que se salga de
|
|
212
|
+
// la raíz ya se nota aquí, SIN tocar el disco y sin depender de que exista el fichero
|
|
213
|
+
// apuntado — así el 403 no depende de si `/etc/passwd` existe en la máquina que corre
|
|
214
|
+
// el test.
|
|
215
|
+
const objetivoLexico = join(raizReal, relativa);
|
|
216
|
+
if (objetivoLexico !== raizReal && !objetivoLexico.startsWith(raizReal + sep)) {
|
|
217
|
+
responderProhibido(respuesta);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (peticion.method !== "GET" && peticion.method !== "HEAD") {
|
|
221
|
+
responderTexto(respuesta, 405, "");
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
let objetivoReal;
|
|
225
|
+
try {
|
|
226
|
+
// Resuelve enlaces simbólicos DE VERDAD: un `.xne` que enlace fuera de `raizReal`
|
|
227
|
+
// pasaría el chequeo léxico de arriba y solo se detecta comparando la ruta ya resuelta.
|
|
228
|
+
objetivoReal = realpathSync(objetivoLexico);
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
responderTexto(respuesta, 404, "");
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (objetivoReal !== raizReal && !objetivoReal.startsWith(raizReal + sep)) {
|
|
235
|
+
responderProhibido(respuesta);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const info = statSync(objetivoReal);
|
|
239
|
+
if (!info.isFile()) {
|
|
240
|
+
responderTexto(respuesta, 404, "");
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const cuerpo = readFileSync(objetivoReal);
|
|
244
|
+
respuesta.writeHead(200, {
|
|
245
|
+
"Content-Type": TIPOS_MIME[extname(objetivoReal)] ?? "application/octet-stream",
|
|
246
|
+
"Content-Length": cuerpo.length,
|
|
247
|
+
});
|
|
248
|
+
respuesta.end(peticion.method === "HEAD" ? undefined : cuerpo);
|
|
249
|
+
}
|
|
250
|
+
function responderProhibido(respuesta) {
|
|
251
|
+
responderTexto(respuesta, 403, "Prohibido");
|
|
252
|
+
}
|
|
253
|
+
function responderTexto(respuesta, estado, cuerpo) {
|
|
254
|
+
respuesta.writeHead(estado, { "Content-Type": "text/plain; charset=utf-8" });
|
|
255
|
+
respuesta.end(cuerpo);
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=servidor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servidor.js","sourceRoot":"","sources":["../../../src/web/servidor/servidor.ts"],"names":[],"mappings":"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"}
|