theus-cli-linux-arm64 0.2.84
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/LICENSE +42 -0
- package/README.md +295 -0
- package/RELEASE.json +18 -0
- package/assets/brand-official/v1.0/logo/theus-lockup-negative-official.png +0 -0
- package/assets/brand-official/v1.0/logo/theus-lockup-primary-dark-official.png +0 -0
- package/assets/fonts/satoshi/satoshi-300.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-400.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-500.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-700.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-900.woff2 +0 -0
- package/assets/windows-store/Square150x150Logo.png +0 -0
- package/assets/windows-store/Square44x44Logo.png +0 -0
- package/assets/windows-store/StoreLogo.png +0 -0
- package/assets/windows-store/theus-store-icon-master.png +0 -0
- package/bin/theus +0 -0
- package/package.json +18 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola2.json +6 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola3.json +72 -0
- package/vendor/theus-arsenal/.mailmap +2 -0
- package/vendor/theus-arsenal/.theus-plugin/marketplace.json +25 -0
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +20 -0
- package/vendor/theus-arsenal/AUTHORS.md +8 -0
- package/vendor/theus-arsenal/CLEANROOM_REPLACEMENT_PLAN.md +11 -0
- package/vendor/theus-arsenal/LICENSE +26 -0
- package/vendor/theus-arsenal/PROVENANCE.md +9 -0
- package/vendor/theus-arsenal/README.md +41 -0
- package/vendor/theus-arsenal/THIRD_PARTY.md +80 -0
- package/vendor/theus-arsenal/agents/actualizador-docs.md +123 -0
- package/vendor/theus-arsenal/agents/analista-comentarios.md +53 -0
- package/vendor/theus-arsenal/agents/analista-conversaciones.md +60 -0
- package/vendor/theus-arsenal/agents/analista-tests-pr.md +53 -0
- package/vendor/theus-arsenal/agents/analista-tipos.md +49 -0
- package/vendor/theus-arsenal/agents/arquitecto-accesibilidad.md +148 -0
- package/vendor/theus-arsenal/agents/arquitecto-codigo.md +79 -0
- package/vendor/theus-arsenal/agents/arquitecto-homelab.md +90 -0
- package/vendor/theus-arsenal/agents/arquitecto-redes.md +116 -0
- package/vendor/theus-arsenal/agents/arquitecto-sistemas.md +219 -0
- package/vendor/theus-arsenal/agents/bifurcador-opensource.md +206 -0
- package/vendor/theus-arsenal/agents/cazador-fallos-silenciosos.md +58 -0
- package/vendor/theus-arsenal/agents/consultor-documentacion.md +76 -0
- package/vendor/theus-arsenal/agents/diagnosticador-redes.md +135 -0
- package/vendor/theus-arsenal/agents/ejecutor-e2e.md +96 -0
- package/vendor/theus-arsenal/agents/empaquetador-opensource.md +257 -0
- package/vendor/theus-arsenal/agents/escaner-secretos.md +196 -0
- package/vendor/theus-arsenal/agents/especialista-seo.md +70 -0
- package/vendor/theus-arsenal/agents/estratega-marketing.md +158 -0
- package/vendor/theus-arsenal/agents/evaluador-agentes.md +214 -0
- package/vendor/theus-arsenal/agents/evaluador-harness.md +217 -0
- package/vendor/theus-arsenal/agents/explorador-codigo.md +79 -0
- package/vendor/theus-arsenal/agents/extractor-specs.md +214 -0
- package/vendor/theus-arsenal/agents/generador-harness.md +139 -0
- package/vendor/theus-arsenal/agents/guia-tdd.md +99 -0
- package/vendor/theus-arsenal/agents/jefe-de-gabinete.md +162 -0
- package/vendor/theus-arsenal/agents/limpiador-refactors.md +93 -0
- package/vendor/theus-arsenal/agents/optimizador-rendimiento.md +454 -0
- package/vendor/theus-arsenal/agents/planificador-harness.md +107 -0
- package/vendor/theus-arsenal/agents/planificador.md +221 -0
- package/vendor/theus-arsenal/agents/resolutor-apps-harmonyos.md +181 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-cpp.md +98 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-dart.md +209 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-django.md +253 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-go.md +102 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-java.md +274 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-kotlin.md +128 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-pytorch.md +128 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-react.md +214 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-rust.md +156 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-swift.md +169 -0
- package/vendor/theus-arsenal/agents/resolutor-builds.md +122 -0
- package/vendor/theus-arsenal/agents/revisor-bd.md +97 -0
- package/vendor/theus-arsenal/agents/revisor-codigo.md +291 -0
- package/vendor/theus-arsenal/agents/revisor-config-red.md +116 -0
- package/vendor/theus-arsenal/agents/revisor-cpp.md +80 -0
- package/vendor/theus-arsenal/agents/revisor-csharp.md +109 -0
- package/vendor/theus-arsenal/agents/revisor-django.md +168 -0
- package/vendor/theus-arsenal/agents/revisor-fastapi.md +82 -0
- package/vendor/theus-arsenal/agents/revisor-flutter.md +251 -0
- package/vendor/theus-arsenal/agents/revisor-go.md +84 -0
- package/vendor/theus-arsenal/agents/revisor-java.md +192 -0
- package/vendor/theus-arsenal/agents/revisor-kotlin.md +171 -0
- package/vendor/theus-arsenal/agents/revisor-ml.md +159 -0
- package/vendor/theus-arsenal/agents/revisor-php.md +108 -0
- package/vendor/theus-arsenal/agents/revisor-python.md +106 -0
- package/vendor/theus-arsenal/agents/revisor-react.md +166 -0
- package/vendor/theus-arsenal/agents/revisor-rust.md +102 -0
- package/vendor/theus-arsenal/agents/revisor-seguridad.md +116 -0
- package/vendor/theus-arsenal/agents/revisor-software-clinico.md +95 -0
- package/vendor/theus-arsenal/agents/revisor-swift.md +115 -0
- package/vendor/theus-arsenal/agents/revisor-typescript.md +123 -0
- package/vendor/theus-arsenal/agents/revisor-vue.md +205 -0
- package/vendor/theus-arsenal/agents/simplificador-codigo.md +55 -0
- package/vendor/theus-arsenal/commands/actualizar-docs.md +88 -0
- package/vendor/theus-arsenal/commands/actualizar-mapas-codigo.md +78 -0
- package/vendor/theus-arsenal/commands/aprender-evaluar.md +109 -0
- package/vendor/theus-arsenal/commands/aprender.md +74 -0
- package/vendor/theus-arsenal/commands/arreglar-build.md +66 -0
- package/vendor/theus-arsenal/commands/bucle-multiperspectiva.md +153 -0
- package/vendor/theus-arsenal/commands/build-cpp.md +173 -0
- package/vendor/theus-arsenal/commands/build-flutter.md +164 -0
- package/vendor/theus-arsenal/commands/build-go.md +183 -0
- package/vendor/theus-arsenal/commands/build-gradle.md +75 -0
- package/vendor/theus-arsenal/commands/build-kotlin.md +176 -0
- package/vendor/theus-arsenal/commands/build-react.md +187 -0
- package/vendor/theus-arsenal/commands/build-rust.md +187 -0
- package/vendor/theus-arsenal/commands/campana-marketing.md +125 -0
- package/vendor/theus-arsenal/commands/checkpoint.md +78 -0
- package/vendor/theus-arsenal/commands/cobertura-tests.md +73 -0
- package/vendor/theus-arsenal/commands/configurar-gestor-paquetes.md +86 -0
- package/vendor/theus-arsenal/commands/consulta.md +164 -0
- package/vendor/theus-arsenal/commands/control-calidad.md +50 -0
- package/vendor/theus-arsenal/commands/crear-skill.md +77 -0
- package/vendor/theus-arsenal/commands/enrutar-modelo.md +30 -0
- package/vendor/theus-arsenal/commands/epica-desbloquear.md +17 -0
- package/vendor/theus-arsenal/commands/epica-descomponer.md +22 -0
- package/vendor/theus-arsenal/commands/epica-publicar.md +21 -0
- package/vendor/theus-arsenal/commands/epica-reclamar.md +25 -0
- package/vendor/theus-arsenal/commands/epica-revisar.md +22 -0
- package/vendor/theus-arsenal/commands/epica-sincronizar.md +21 -0
- package/vendor/theus-arsenal/commands/epica-validar.md +21 -0
- package/vendor/theus-arsenal/commands/evolucionar.md +176 -0
- package/vendor/theus-arsenal/commands/funcionalidad.md +49 -0
- package/vendor/theus-arsenal/commands/guardar-sesion.md +278 -0
- package/vendor/theus-arsenal/commands/harness-build.md +111 -0
- package/vendor/theus-arsenal/commands/harness-diseno.md +46 -0
- package/vendor/theus-arsenal/commands/informe-costos.md +90 -0
- package/vendor/theus-arsenal/commands/iniciar-bucle.md +36 -0
- package/vendor/theus-arsenal/commands/instintos-estado.md +53 -0
- package/vendor/theus-arsenal/commands/instintos-exportar.md +69 -0
- package/vendor/theus-arsenal/commands/instintos-importar.md +120 -0
- package/vendor/theus-arsenal/commands/lienzo-planes.md +48 -0
- package/vendor/theus-arsenal/commands/limpiar-refactor.md +84 -0
- package/vendor/theus-arsenal/commands/modo-seguro.md +96 -0
- package/vendor/theus-arsenal/commands/orq-agregar-funcionalidad.md +36 -0
- package/vendor/theus-arsenal/commands/orq-cambiar-funcionalidad.md +38 -0
- package/vendor/theus-arsenal/commands/orq-construir-mvp.md +36 -0
- package/vendor/theus-arsenal/commands/orq-corregir-defecto.md +40 -0
- package/vendor/theus-arsenal/commands/orq-refinar-codigo.md +44 -0
- package/vendor/theus-arsenal/commands/orq-revisar.md +135 -0
- package/vendor/theus-arsenal/commands/plan-prd.md +160 -0
- package/vendor/theus-arsenal/commands/plan.md +198 -0
- package/vendor/theus-arsenal/commands/podar.md +31 -0
- package/vendor/theus-arsenal/commands/pr.md +181 -0
- package/vendor/theus-arsenal/commands/promover.md +41 -0
- package/vendor/theus-arsenal/commands/proyectos.md +33 -0
- package/vendor/theus-arsenal/commands/prp-commit.md +112 -0
- package/vendor/theus-arsenal/commands/prp-implementar.md +385 -0
- package/vendor/theus-arsenal/commands/prp-planificar.md +501 -0
- package/vendor/theus-arsenal/commands/reanudar-sesion.md +160 -0
- package/vendor/theus-arsenal/commands/revisar-codigo.md +289 -0
- package/vendor/theus-arsenal/commands/revisar-cpp.md +132 -0
- package/vendor/theus-arsenal/commands/revisar-fastapi.md +39 -0
- package/vendor/theus-arsenal/commands/revisar-flutter.md +115 -0
- package/vendor/theus-arsenal/commands/revisar-go.md +148 -0
- package/vendor/theus-arsenal/commands/revisar-kotlin.md +140 -0
- package/vendor/theus-arsenal/commands/revisar-pr.md +37 -0
- package/vendor/theus-arsenal/commands/revisar-python.md +297 -0
- package/vendor/theus-arsenal/commands/revisar-react.md +170 -0
- package/vendor/theus-arsenal/commands/revisar-rust.md +142 -0
- package/vendor/theus-arsenal/commands/revisar-vue.md +174 -0
- package/vendor/theus-arsenal/commands/salud-skills.md +52 -0
- package/vendor/theus-arsenal/commands/sesiones.md +345 -0
- package/vendor/theus-arsenal/commands/test-cpp.md +252 -0
- package/vendor/theus-arsenal/commands/test-flutter.md +143 -0
- package/vendor/theus-arsenal/commands/test-go.md +268 -0
- package/vendor/theus-arsenal/commands/test-kotlin.md +312 -0
- package/vendor/theus-arsenal/commands/test-react.md +265 -0
- package/vendor/theus-arsenal/commands/test-rust.md +309 -0
- package/vendor/theus-arsenal/commands/vigilancia-canary.md +43 -0
- package/vendor/theus-arsenal/hooks/hooks.json +274 -0
- package/vendor/theus-arsenal/package.json +6 -0
- package/vendor/theus-arsenal/rules/angular/coding-style.md +182 -0
- package/vendor/theus-arsenal/rules/angular/hooks.md +25 -0
- package/vendor/theus-arsenal/rules/angular/patterns.md +249 -0
- package/vendor/theus-arsenal/rules/angular/security.md +87 -0
- package/vendor/theus-arsenal/rules/angular/testing.md +164 -0
- package/vendor/theus-arsenal/rules/arkts/coding-style.md +153 -0
- package/vendor/theus-arsenal/rules/arkts/hooks.md +80 -0
- package/vendor/theus-arsenal/rules/arkts/patterns.md +236 -0
- package/vendor/theus-arsenal/rules/arkts/security.md +141 -0
- package/vendor/theus-arsenal/rules/arkts/testing.md +126 -0
- package/vendor/theus-arsenal/rules/common/agents.md +49 -0
- package/vendor/theus-arsenal/rules/common/code-review.md +123 -0
- package/vendor/theus-arsenal/rules/common/coding-style.md +90 -0
- package/vendor/theus-arsenal/rules/common/development-workflow.md +44 -0
- package/vendor/theus-arsenal/rules/common/git-workflow.md +24 -0
- package/vendor/theus-arsenal/rules/common/hooks.md +32 -0
- package/vendor/theus-arsenal/rules/common/patterns.md +31 -0
- package/vendor/theus-arsenal/rules/common/performance.md +53 -0
- package/vendor/theus-arsenal/rules/common/security.md +29 -0
- package/vendor/theus-arsenal/rules/common/testing.md +57 -0
- package/vendor/theus-arsenal/rules/cpp/coding-style.md +44 -0
- package/vendor/theus-arsenal/rules/cpp/hooks.md +39 -0
- package/vendor/theus-arsenal/rules/cpp/patterns.md +51 -0
- package/vendor/theus-arsenal/rules/cpp/security.md +51 -0
- package/vendor/theus-arsenal/rules/cpp/testing.md +44 -0
- package/vendor/theus-arsenal/rules/csharp/coding-style.md +72 -0
- package/vendor/theus-arsenal/rules/csharp/hooks.md +25 -0
- package/vendor/theus-arsenal/rules/csharp/patterns.md +50 -0
- package/vendor/theus-arsenal/rules/csharp/security.md +58 -0
- package/vendor/theus-arsenal/rules/csharp/testing.md +50 -0
- package/vendor/theus-arsenal/rules/dart/coding-style.md +159 -0
- package/vendor/theus-arsenal/rules/dart/hooks.md +68 -0
- package/vendor/theus-arsenal/rules/dart/patterns.md +261 -0
- package/vendor/theus-arsenal/rules/dart/security.md +135 -0
- package/vendor/theus-arsenal/rules/dart/testing.md +215 -0
- package/vendor/theus-arsenal/rules/fsharp/coding-style.md +112 -0
- package/vendor/theus-arsenal/rules/fsharp/hooks.md +26 -0
- package/vendor/theus-arsenal/rules/fsharp/patterns.md +111 -0
- package/vendor/theus-arsenal/rules/fsharp/security.md +76 -0
- package/vendor/theus-arsenal/rules/fsharp/testing.md +62 -0
- package/vendor/theus-arsenal/rules/golang/coding-style.md +32 -0
- package/vendor/theus-arsenal/rules/golang/hooks.md +17 -0
- package/vendor/theus-arsenal/rules/golang/patterns.md +45 -0
- package/vendor/theus-arsenal/rules/golang/security.md +34 -0
- package/vendor/theus-arsenal/rules/golang/testing.md +31 -0
- package/vendor/theus-arsenal/rules/java/coding-style.md +114 -0
- package/vendor/theus-arsenal/rules/java/hooks.md +18 -0
- package/vendor/theus-arsenal/rules/java/patterns.md +147 -0
- package/vendor/theus-arsenal/rules/java/security.md +101 -0
- package/vendor/theus-arsenal/rules/java/testing.md +133 -0
- package/vendor/theus-arsenal/rules/kotlin/coding-style.md +86 -0
- package/vendor/theus-arsenal/rules/kotlin/hooks.md +17 -0
- package/vendor/theus-arsenal/rules/kotlin/patterns.md +146 -0
- package/vendor/theus-arsenal/rules/kotlin/security.md +82 -0
- package/vendor/theus-arsenal/rules/kotlin/testing.md +128 -0
- package/vendor/theus-arsenal/rules/nuxt/coding-style.md +47 -0
- package/vendor/theus-arsenal/rules/nuxt/hooks.md +39 -0
- package/vendor/theus-arsenal/rules/nuxt/patterns.md +54 -0
- package/vendor/theus-arsenal/rules/nuxt/security.md +48 -0
- package/vendor/theus-arsenal/rules/nuxt/testing.md +49 -0
- package/vendor/theus-arsenal/rules/php/coding-style.md +40 -0
- package/vendor/theus-arsenal/rules/php/hooks.md +24 -0
- package/vendor/theus-arsenal/rules/php/patterns.md +33 -0
- package/vendor/theus-arsenal/rules/php/security.md +37 -0
- package/vendor/theus-arsenal/rules/php/testing.md +38 -0
- package/vendor/theus-arsenal/rules/python/coding-style.md +42 -0
- package/vendor/theus-arsenal/rules/python/fastapi.md +58 -0
- package/vendor/theus-arsenal/rules/python/hooks.md +19 -0
- package/vendor/theus-arsenal/rules/python/patterns.md +39 -0
- package/vendor/theus-arsenal/rules/python/security.md +30 -0
- package/vendor/theus-arsenal/rules/python/testing.md +38 -0
- package/vendor/theus-arsenal/rules/react/coding-style.md +109 -0
- package/vendor/theus-arsenal/rules/react/hooks.md +187 -0
- package/vendor/theus-arsenal/rules/react/patterns.md +194 -0
- package/vendor/theus-arsenal/rules/react/security.md +180 -0
- package/vendor/theus-arsenal/rules/react/testing.md +208 -0
- package/vendor/theus-arsenal/rules/react-native/accessibility.md +55 -0
- package/vendor/theus-arsenal/rules/react-native/coding-style.md +71 -0
- package/vendor/theus-arsenal/rules/react-native/hooks.md +28 -0
- package/vendor/theus-arsenal/rules/react-native/patterns.md +88 -0
- package/vendor/theus-arsenal/rules/react-native/performance.md +45 -0
- package/vendor/theus-arsenal/rules/react-native/production-readiness.md +51 -0
- package/vendor/theus-arsenal/rules/react-native/security.md +43 -0
- package/vendor/theus-arsenal/rules/react-native/testing.md +52 -0
- package/vendor/theus-arsenal/rules/ruby/coding-style.md +46 -0
- package/vendor/theus-arsenal/rules/ruby/hooks.md +37 -0
- package/vendor/theus-arsenal/rules/ruby/patterns.md +44 -0
- package/vendor/theus-arsenal/rules/ruby/security.md +51 -0
- package/vendor/theus-arsenal/rules/ruby/testing.md +51 -0
- package/vendor/theus-arsenal/rules/rust/coding-style.md +151 -0
- package/vendor/theus-arsenal/rules/rust/hooks.md +16 -0
- package/vendor/theus-arsenal/rules/rust/patterns.md +168 -0
- package/vendor/theus-arsenal/rules/rust/security.md +141 -0
- package/vendor/theus-arsenal/rules/rust/testing.md +154 -0
- package/vendor/theus-arsenal/rules/swift/coding-style.md +47 -0
- package/vendor/theus-arsenal/rules/swift/hooks.md +20 -0
- package/vendor/theus-arsenal/rules/swift/patterns.md +66 -0
- package/vendor/theus-arsenal/rules/swift/security.md +33 -0
- package/vendor/theus-arsenal/rules/swift/testing.md +45 -0
- package/vendor/theus-arsenal/rules/typescript/coding-style.md +199 -0
- package/vendor/theus-arsenal/rules/typescript/hooks.md +22 -0
- package/vendor/theus-arsenal/rules/typescript/patterns.md +52 -0
- package/vendor/theus-arsenal/rules/typescript/security.md +28 -0
- package/vendor/theus-arsenal/rules/typescript/testing.md +18 -0
- package/vendor/theus-arsenal/rules/vue/coding-style.md +54 -0
- package/vendor/theus-arsenal/rules/vue/hooks.md +45 -0
- package/vendor/theus-arsenal/rules/vue/patterns.md +56 -0
- package/vendor/theus-arsenal/rules/vue/security.md +46 -0
- package/vendor/theus-arsenal/rules/vue/testing.md +53 -0
- package/vendor/theus-arsenal/rules/web/coding-style.md +108 -0
- package/vendor/theus-arsenal/rules/web/design-quality.md +75 -0
- package/vendor/theus-arsenal/rules/web/hooks.md +141 -0
- package/vendor/theus-arsenal/rules/web/patterns.md +91 -0
- package/vendor/theus-arsenal/rules/web/performance.md +76 -0
- package/vendor/theus-arsenal/rules/web/security.md +69 -0
- package/vendor/theus-arsenal/rules/web/testing.md +67 -0
- package/vendor/theus-arsenal/scripts/hooks/bash-hook-dispatcher.js +192 -0
- package/vendor/theus-arsenal/scripts/hooks/block-no-verify.js +556 -0
- package/vendor/theus-arsenal/scripts/hooks/check-console-log.js +92 -0
- package/vendor/theus-arsenal/scripts/hooks/check-hook-enabled.js +16 -0
- package/vendor/theus-arsenal/scripts/hooks/config-protection.js +171 -0
- package/vendor/theus-arsenal/scripts/hooks/design-quality-check.js +132 -0
- package/vendor/theus-arsenal/scripts/hooks/doc-file-warning.js +110 -0
- package/vendor/theus-arsenal/scripts/hooks/modo-seguro.js +158 -0
- package/vendor/theus-arsenal/scripts/hooks/notificacion-escritorio.js +208 -0
- package/vendor/theus-arsenal/scripts/hooks/plugin-hook-bootstrap.js +280 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-command-log.js +87 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-dispatcher.js +24 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-pr-created.js +60 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-accumulator.js +94 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-console-warn.js +54 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-format.js +110 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-typecheck.js +98 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-commit-quality.js +447 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dev-server-block.js +232 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dispatcher.js +27 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-compact.js +101 -0
- package/vendor/theus-arsenal/scripts/hooks/pretooluse-visible-output.js +49 -0
- package/vendor/theus-arsenal/scripts/hooks/quality-gate.js +168 -0
- package/vendor/theus-arsenal/scripts/hooks/run-with-flags.js +271 -0
- package/vendor/theus-arsenal/scripts/hooks/salud-mcp.js +749 -0
- package/vendor/theus-arsenal/scripts/hooks/seguimiento-costos.js +161 -0
- package/vendor/theus-arsenal/scripts/hooks/session-end.js +340 -0
- package/vendor/theus-arsenal/scripts/hooks/session-start.js +906 -0
- package/vendor/theus-arsenal/scripts/hooks/stop-format-typecheck.js +263 -0
- package/vendor/theus-arsenal/scripts/hooks/suggest-compact.js +286 -0
- package/vendor/theus-arsenal/scripts/hooks/theus-context-monitor.js +289 -0
- package/vendor/theus-arsenal/scripts/hooks/verificacion-factual.js +1278 -0
- package/vendor/theus-arsenal/scripts/lib/agent-data-home.js +96 -0
- package/vendor/theus-arsenal/scripts/lib/cost-estimate.js +66 -0
- package/vendor/theus-arsenal/scripts/lib/hook-flags.js +79 -0
- package/vendor/theus-arsenal/scripts/lib/llm-summary.js +185 -0
- package/vendor/theus-arsenal/scripts/lib/loopback-guard.js +54 -0
- package/vendor/theus-arsenal/scripts/lib/observer-sessions.js +237 -0
- package/vendor/theus-arsenal/scripts/lib/package-manager.d.ts +120 -0
- package/vendor/theus-arsenal/scripts/lib/package-manager.js +434 -0
- package/vendor/theus-arsenal/scripts/lib/path-safety.js +86 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/markdown.js +285 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sdk.js +238 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/server.js +534 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sessions.js +274 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/ui.js +546 -0
- package/vendor/theus-arsenal/scripts/lib/project-detect.js +451 -0
- package/vendor/theus-arsenal/scripts/lib/resolve-formatter.js +193 -0
- package/vendor/theus-arsenal/scripts/lib/resolve-theus-root.js +101 -0
- package/vendor/theus-arsenal/scripts/lib/session-aliases.d.ts +138 -0
- package/vendor/theus-arsenal/scripts/lib/session-aliases.js +483 -0
- package/vendor/theus-arsenal/scripts/lib/session-bridge.js +155 -0
- package/vendor/theus-arsenal/scripts/lib/session-manager.d.ts +137 -0
- package/vendor/theus-arsenal/scripts/lib/session-manager.js +555 -0
- package/vendor/theus-arsenal/scripts/lib/shell-split.js +86 -0
- package/vendor/theus-arsenal/scripts/lib/shell-substitution.js +501 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/dashboard.js +414 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/health.js +285 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/index.js +22 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/provenance.js +200 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/tracker.js +157 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/versioning.js +246 -0
- package/vendor/theus-arsenal/scripts/lib/transcript-context.js +232 -0
- package/vendor/theus-arsenal/scripts/lib/utils.d.ts +205 -0
- package/vendor/theus-arsenal/scripts/lib/utils.js +658 -0
- package/vendor/theus-arsenal/scripts/plan-canvas.js +341 -0
- package/vendor/theus-arsenal/scripts/setup-package-manager.js +46 -0
- package/vendor/theus-arsenal/scripts/skills-health.js +143 -0
- package/vendor/theus-arsenal/skills/a11y-frontend/SKILL.md +444 -0
- package/vendor/theus-arsenal/skills/accesibilidad/SKILL.md +144 -0
- package/vendor/theus-arsenal/skills/acelerador-throughput-datos/SKILL.md +72 -0
- package/vendor/theus-arsenal/skills/agente-scraper-datos/SKILL.md +771 -0
- package/vendor/theus-arsenal/skills/analisis-plataformas-competencia/SKILL.md +137 -0
- package/vendor/theus-arsenal/skills/api-x/SKILL.md +233 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/SKILL.md +335 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer-loop.sh +374 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer.md +188 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/session-guardian.sh +153 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/start-observer.sh +253 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/config.json +8 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/hooks/observe.sh +594 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/detect-project.sh +325 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/instinct-cli.py +1918 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/lib/arsenal-dir.sh +23 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/test_parse_instinct.py +1420 -0
- package/vendor/theus-arsenal/skills/arquitectura-hexagonal/SKILL.md +275 -0
- package/vendor/theus-arsenal/skills/arquitectura-limpia-android/SKILL.md +340 -0
- package/vendor/theus-arsenal/skills/arquitectura-pipelines-recomendacion/SKILL.md +112 -0
- package/vendor/theus-arsenal/skills/atlas-datos-prediccion/SKILL.md +53 -0
- package/vendor/theus-arsenal/skills/auditoria-arquitectura-agentes/SKILL.md +257 -0
- package/vendor/theus-arsenal/skills/auditoria-produccion/SKILL.md +180 -0
- package/vendor/theus-arsenal/skills/auditoria-rutas-clic/SKILL.md +243 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/SKILL.md +180 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/high-score-example.md +89 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/low-score-example.md +87 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/evaluation-criteria.md +71 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/hook-integration.md +90 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/scripts/evaluate.py +409 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/templates/evaluation-report.md +86 -0
- package/vendor/theus-arsenal/skills/automatizacion-ssh-netmiko/SKILL.md +176 -0
- package/vendor/theus-arsenal/skills/base-datos-pubmed/SKILL.md +174 -0
- package/vendor/theus-arsenal/skills/base-datos-uspto/SKILL.md +173 -0
- package/vendor/theus-arsenal/skills/benchmark/SKILL.md +92 -0
- package/vendor/theus-arsenal/skills/bitacora-crecimiento/SKILL.md +120 -0
- package/vendor/theus-arsenal/skills/bucle-verificacion/SKILL.md +125 -0
- package/vendor/theus-arsenal/skills/buscar-primero/SKILL.md +184 -0
- package/vendor/theus-arsenal/skills/busqueda-exa/SKILL.md +111 -0
- package/vendor/theus-arsenal/skills/cache-por-hash/SKILL.md +160 -0
- package/vendor/theus-arsenal/skills/campana-marketing/SKILL.md +118 -0
- package/vendor/theus-arsenal/skills/capacidad-producto/SKILL.md +138 -0
- package/vendor/theus-arsenal/skills/cazador-vulnerabilidades/SKILL.md +104 -0
- package/vendor/theus-arsenal/skills/compactacion-estrategica/SKILL.md +115 -0
- package/vendor/theus-arsenal/skills/comparador-baskets-prediccion/SKILL.md +69 -0
- package/vendor/theus-arsenal/skills/compras-energia/SKILL.md +206 -0
- package/vendor/theus-arsenal/skills/concurrencia-swift-6-2/SKILL.md +224 -0
- package/vendor/theus-arsenal/skills/consejo/SKILL.md +201 -0
- package/vendor/theus-arsenal/skills/construccion-harness-agentes/SKILL.md +78 -0
- package/vendor/theus-arsenal/skills/constructor-conectores/SKILL.md +119 -0
- package/vendor/theus-arsenal/skills/constructor-equipos/SKILL.md +169 -0
- package/vendor/theus-arsenal/skills/consulta-documentacion/SKILL.md +92 -0
- package/vendor/theus-arsenal/skills/consultas-genomicas-gget/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/contacto-inversores/SKILL.md +95 -0
- package/vendor/theus-arsenal/skills/corrutinas-flows-kotlin/SKILL.md +284 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/SKILL.md +46 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/3d.md +86 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/animations.md +29 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/charts-bar-chart.tsx +173 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-typewriter.tsx +100 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets.md +78 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/audio.md +172 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/calculate-metadata.md +104 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/can-decode.md +75 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/charts.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/compositions.md +146 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/display-captions.md +126 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/extract-frames.md +229 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/fonts.md +152 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-audio-duration.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-dimensions.md +68 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-duration.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/gifs.md +138 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/images.md +130 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/import-srt-captions.md +67 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/lottie.md +67 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-dom-nodes.md +34 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-text.md +143 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/sequencing.md +106 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/tailwind.md +11 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/text-animations.md +20 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/timing.md +179 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transcribe-captions.md +19 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transitions.md +122 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/trimming.md +52 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/videos.md +171 -0
- package/vendor/theus-arsenal/skills/cumplimiento-aduanero/SKILL.md +270 -0
- package/vendor/theus-arsenal/skills/cumplimiento-hipaa/SKILL.md +78 -0
- package/vendor/theus-arsenal/skills/datos-sensibles-salud/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/decimales-tokens-evm/SKILL.md +128 -0
- package/vendor/theus-arsenal/skills/decisiones-arquitectura/SKILL.md +206 -0
- package/vendor/theus-arsenal/skills/demos-ui/SKILL.md +469 -0
- package/vendor/theus-arsenal/skills/desarrollo-por-intencion/SKILL.md +369 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/10_proposito-porque.md +42 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/20_posicionamiento.md +47 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/30_audiencia-nicho.md +53 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/40_personalidad-arquetipo.md +61 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/50_voz-tono.md +62 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/60_narrativa-historia.md +54 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/70_tension-fundador.md +50 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/90_SINTESIS.md +133 -0
- package/vendor/theus-arsenal/skills/descubrimiento-plugins-laravel/SKILL.md +230 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/SKILL.md +263 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-rules.sh +58 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-skills.sh +129 -0
- package/vendor/theus-arsenal/skills/diagnostico-bgp/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/direccion-estetica/SKILL.md +220 -0
- package/vendor/theus-arsenal/skills/direccion-estetica/references/taxonomia-generos.md +89 -0
- package/vendor/theus-arsenal/skills/diseno-api/SKILL.md +522 -0
- package/vendor/theus-arsenal/skills/diseno-liquid-glass/SKILL.md +282 -0
- package/vendor/theus-arsenal/skills/e2e-escritorio-windows/SKILL.md +879 -0
- package/vendor/theus-arsenal/skills/edicion-video/SKILL.md +289 -0
- package/vendor/theus-arsenal/skills/enfoque-producto/SKILL.md +91 -0
- package/vendor/theus-arsenal/skills/entornos-flox/SKILL.md +493 -0
- package/vendor/theus-arsenal/skills/estandares-codigo/SKILL.md +548 -0
- package/vendor/theus-arsenal/skills/estandares-cpp/SKILL.md +727 -0
- package/vendor/theus-arsenal/skills/estandares-java/SKILL.md +389 -0
- package/vendor/theus-arsenal/skills/estilo-legado/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/estructura-informes-competencia/SKILL.md +95 -0
- package/vendor/theus-arsenal/skills/evaluacion-academica/SKILL.md +165 -0
- package/vendor/theus-arsenal/skills/explorador-skills/SKILL.md +129 -0
- package/vendor/theus-arsenal/skills/flujo-git/SKILL.md +714 -0
- package/vendor/theus-arsenal/skills/flujo-ingenieria-ml/SKILL.md +343 -0
- package/vendor/theus-arsenal/skills/flujo-tdd/SKILL.md +584 -0
- package/vendor/theus-arsenal/skills/forja-personas/SKILL.md +298 -0
- package/vendor/theus-arsenal/skills/forja-personas/gacha.py +224 -0
- package/vendor/theus-arsenal/skills/forja-personas/gacha.sh +5 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/avatar-style.md +123 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/boundary-rules.md +53 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/error-handling.md +53 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/identity-tension.md +48 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/naming-system.md +39 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/output-template.md +166 -0
- package/vendor/theus-arsenal/skills/fundamentos-animacion/SKILL.md +296 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/SKILL.md +156 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/generate_icons.swift +258 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/iconify_gen.sh +235 -0
- package/vendor/theus-arsenal/skills/gestion-excepciones-logisticas/SKILL.md +208 -0
- package/vendor/theus-arsenal/skills/gestion-transportistas/SKILL.md +204 -0
- package/vendor/theus-arsenal/skills/guia-adopcion-ml/SKILL.md +64 -0
- package/vendor/theus-arsenal/skills/harness-agente-autonomo/SKILL.md +252 -0
- package/vendor/theus-arsenal/skills/harness-eval-clinico/SKILL.md +212 -0
- package/vendor/theus-arsenal/skills/harness-evaluacion/SKILL.md +296 -0
- package/vendor/theus-arsenal/skills/harness-generador-evaluador/SKILL.md +254 -0
- package/vendor/theus-arsenal/skills/homelab-diseno-red/SKILL.md +120 -0
- package/vendor/theus-arsenal/skills/homelab-dns-pihole/SKILL.md +264 -0
- package/vendor/theus-arsenal/skills/homelab-preparacion-red/SKILL.md +144 -0
- package/vendor/theus-arsenal/skills/homelab-segmentacion-vlan/SKILL.md +307 -0
- package/vendor/theus-arsenal/skills/homelab-vpn-wireguard/SKILL.md +299 -0
- package/vendor/theus-arsenal/skills/ingenieria-agentica/SKILL.md +96 -0
- package/vendor/theus-arsenal/skills/inspeccion-animaciones-blender/SKILL.md +164 -0
- package/vendor/theus-arsenal/skills/instaladores-python/SKILL.md +820 -0
- package/vendor/theus-arsenal/skills/integracion-jira/SKILL.md +307 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/SKILL.md +312 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/agente-enriquecimiento.md +87 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/mapeador-mutuos.md +76 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/puntuador-senales.md +60 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/redactor-outreach.md +102 -0
- package/vendor/theus-arsenal/skills/inteligencia-mercados-prediccion/SKILL.md +53 -0
- package/vendor/theus-arsenal/skills/introspeccion-agente/SKILL.md +150 -0
- package/vendor/theus-arsenal/skills/inventario-skills/SKILL.md +194 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/quick-diff.sh +87 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/save-results.sh +57 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/scan.sh +170 -0
- package/vendor/theus-arsenal/skills/investigacion-mercado/SKILL.md +87 -0
- package/vendor/theus-arsenal/skills/investigacion-oraculos-prediccion/SKILL.md +59 -0
- package/vendor/theus-arsenal/skills/investigacion-profunda/SKILL.md +161 -0
- package/vendor/theus-arsenal/skills/keccak256-nodejs/SKILL.md +100 -0
- package/vendor/theus-arsenal/skills/libro-decisiones-recursivo/SKILL.md +82 -0
- package/vendor/theus-arsenal/skills/lienzo-planes/SKILL.md +111 -0
- package/vendor/theus-arsenal/skills/limpieza-configuracion/SKILL.md +116 -0
- package/vendor/theus-arsenal/skills/logistica-inversa-devoluciones/SKILL.md +241 -0
- package/vendor/theus-arsenal/skills/manejo-errores/SKILL.md +375 -0
- package/vendor/theus-arsenal/skills/materiales-inversores/SKILL.md +101 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/forget.mjs +44 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/info.mjs +24 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/init.mjs +152 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/list.mjs +40 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/migrate.mjs +214 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/resume.mjs +36 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/save.mjs +210 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/shared.mjs +402 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/hooks/session-start.mjs +238 -0
- package/vendor/theus-arsenal/skills/metodologia-benchmarks/SKILL.md +131 -0
- package/vendor/theus-arsenal/skills/migraciones-bd/SKILL.md +430 -0
- package/vendor/theus-arsenal/skills/modelos-fundacionales-en-dispositivo/SKILL.md +244 -0
- package/vendor/theus-arsenal/skills/modo-seguro/SKILL.md +86 -0
- package/vendor/theus-arsenal/skills/motion-avanzado/SKILL.md +592 -0
- package/vendor/theus-arsenal/skills/motor-de-contenido/SKILL.md +136 -0
- package/vendor/theus-arsenal/skills/no-conformidades-calidad/SKILL.md +249 -0
- package/vendor/theus-arsenal/skills/onboarding-codigo/SKILL.md +244 -0
- package/vendor/theus-arsenal/skills/operaciones-agentes-empresariales/SKILL.md +51 -0
- package/vendor/theus-arsenal/skills/operaciones-conocimiento/SKILL.md +159 -0
- package/vendor/theus-arsenal/skills/operaciones-correo/SKILL.md +123 -0
- package/vendor/theus-arsenal/skills/operaciones-facturacion/SKILL.md +142 -0
- package/vendor/theus-arsenal/skills/operaciones-flujo-proyectos/SKILL.md +110 -0
- package/vendor/theus-arsenal/skills/operaciones-github/SKILL.md +143 -0
- package/vendor/theus-arsenal/skills/operaciones-google-workspace/SKILL.md +100 -0
- package/vendor/theus-arsenal/skills/operaciones-investigacion/SKILL.md +124 -0
- package/vendor/theus-arsenal/skills/operaciones-mensajes/SKILL.md +103 -0
- package/vendor/theus-arsenal/skills/operaciones-terminal/SKILL.md +110 -0
- package/vendor/theus-arsenal/skills/optimizacion-benchmark/SKILL.md +70 -0
- package/vendor/theus-arsenal/skills/optimizacion-costos-llm/SKILL.md +182 -0
- package/vendor/theus-arsenal/skills/optimizador-conexiones/SKILL.md +191 -0
- package/vendor/theus-arsenal/skills/optimizador-paralelismo/SKILL.md +75 -0
- package/vendor/theus-arsenal/skills/optimizador-prompts/SKILL.md +374 -0
- package/vendor/theus-arsenal/skills/orq-agregar-funcionalidad/SKILL.md +37 -0
- package/vendor/theus-arsenal/skills/orq-cambiar-funcionalidad/SKILL.md +36 -0
- package/vendor/theus-arsenal/skills/orq-construir-mvp/SKILL.md +38 -0
- package/vendor/theus-arsenal/skills/orq-corregir-defecto/SKILL.md +36 -0
- package/vendor/theus-arsenal/skills/orq-pipeline/SKILL.md +134 -0
- package/vendor/theus-arsenal/skills/orq-refinar-codigo/SKILL.md +49 -0
- package/vendor/theus-arsenal/skills/orquestacion-equipos-agentes/SKILL.md +117 -0
- package/vendor/theus-arsenal/skills/pagos-agentes-x402/SKILL.md +237 -0
- package/vendor/theus-arsenal/skills/patrones-angular/SKILL.md +153 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-animations.md +160 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-aria.md +410 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/cli.md +86 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-harnesses.md +59 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-styling.md +91 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/components.md +117 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/creating-services.md +97 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/data-resolvers.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/define-routes.md +67 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/defining-providers.md +72 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/di-fundamentals.md +120 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/e2e-testing.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/effects.md +83 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/hierarchical-injectors.md +43 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/host-elements.md +80 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/injection-context.md +63 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/inputs.md +101 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/linked-signal.md +59 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/loading-strategies.md +61 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/mcp.md +67 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/navigate-to-routes.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/outputs.md +86 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/reactive-forms.md +122 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/rendering-strategies.md +44 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/resource.md +77 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-animations.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-guards.md +52 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-lifecycle.md +45 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-testing.md +87 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/show-routes-with-outlets.md +68 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/signal-forms.md +795 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/signals-overview.md +94 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/tailwind-css.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/template-driven-forms.md +114 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/testing-fundamentals.md +65 -0
- package/vendor/theus-arsenal/skills/patrones-animacion/SKILL.md +432 -0
- package/vendor/theus-arsenal/skills/patrones-backend/SKILL.md +560 -0
- package/vendor/theus-arsenal/skills/patrones-cdss-clinico/SKILL.md +249 -0
- package/vendor/theus-arsenal/skills/patrones-cisco-ios/SKILL.md +148 -0
- package/vendor/theus-arsenal/skills/patrones-clickhouse/SKILL.md +443 -0
- package/vendor/theus-arsenal/skills/patrones-compose-multiplatform/SKILL.md +298 -0
- package/vendor/theus-arsenal/skills/patrones-dart-flutter/SKILL.md +566 -0
- package/vendor/theus-arsenal/skills/patrones-despliegue/SKILL.md +426 -0
- package/vendor/theus-arsenal/skills/patrones-django/SKILL.md +739 -0
- package/vendor/theus-arsenal/skills/patrones-django-celery/SKILL.md +456 -0
- package/vendor/theus-arsenal/skills/patrones-docker/SKILL.md +363 -0
- package/vendor/theus-arsenal/skills/patrones-dotnet/SKILL.md +321 -0
- package/vendor/theus-arsenal/skills/patrones-emr-clinico/SKILL.md +168 -0
- package/vendor/theus-arsenal/skills/patrones-fastapi/SKILL.md +513 -0
- package/vendor/theus-arsenal/skills/patrones-frontend/SKILL.md +655 -0
- package/vendor/theus-arsenal/skills/patrones-go/SKILL.md +674 -0
- package/vendor/theus-arsenal/skills/patrones-jpa/SKILL.md +156 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin/SKILL.md +717 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin-exposed/SKILL.md +724 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin-ktor/SKILL.md +694 -0
- package/vendor/theus-arsenal/skills/patrones-kubernetes/SKILL.md +754 -0
- package/vendor/theus-arsenal/skills/patrones-laravel/SKILL.md +414 -0
- package/vendor/theus-arsenal/skills/patrones-mcp/SKILL.md +66 -0
- package/vendor/theus-arsenal/skills/patrones-mysql/SKILL.md +420 -0
- package/vendor/theus-arsenal/skills/patrones-nestjs/SKILL.md +229 -0
- package/vendor/theus-arsenal/skills/patrones-nextjs/SKILL.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-nuxt4/SKILL.md +99 -0
- package/vendor/theus-arsenal/skills/patrones-perl/SKILL.md +508 -0
- package/vendor/theus-arsenal/skills/patrones-postgres/SKILL.md +141 -0
- package/vendor/theus-arsenal/skills/patrones-prisma/SKILL.md +399 -0
- package/vendor/theus-arsenal/skills/patrones-python/SKILL.md +750 -0
- package/vendor/theus-arsenal/skills/patrones-pytorch/SKILL.md +400 -0
- package/vendor/theus-arsenal/skills/patrones-quarkus/SKILL.md +729 -0
- package/vendor/theus-arsenal/skills/patrones-react/SKILL.md +339 -0
- package/vendor/theus-arsenal/skills/patrones-react-native/SKILL.md +325 -0
- package/vendor/theus-arsenal/skills/patrones-redis/SKILL.md +401 -0
- package/vendor/theus-arsenal/skills/patrones-rust/SKILL.md +504 -0
- package/vendor/theus-arsenal/skills/patrones-springboot/SKILL.md +314 -0
- package/vendor/theus-arsenal/skills/patrones-swiftui/SKILL.md +261 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/SKILL.md +281 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/architecture.md +90 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/data-handling.md +60 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/database.md +99 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/routing.md +64 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/system-usage.md +97 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/testing.md +72 -0
- package/vendor/theus-arsenal/skills/patrones-vite/SKILL.md +449 -0
- package/vendor/theus-arsenal/skills/patrones-vue/SKILL.md +469 -0
- package/vendor/theus-arsenal/skills/persistencia-actores-swift/SKILL.md +148 -0
- package/vendor/theus-arsenal/skills/pipeline-opensource/SKILL.md +254 -0
- package/vendor/theus-arsenal/skills/planificacion-demanda-inventario/SKILL.md +236 -0
- package/vendor/theus-arsenal/skills/planificador-trades-prediccion/SKILL.md +60 -0
- package/vendor/theus-arsenal/skills/plano-tecnico/SKILL.md +102 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/SKILL.md +189 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/STYLE_PRESETS.md +330 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/animation-patterns.md +122 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/html-template.md +419 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/export-pdf.sh +418 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/extract-pptx.py +96 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/viewport-base.css +153 -0
- package/vendor/theus-arsenal/skills/presupuesto-contexto/SKILL.md +263 -0
- package/vendor/theus-arsenal/skills/procesamiento-documentos-nutrient/SKILL.md +168 -0
- package/vendor/theus-arsenal/skills/programacion-produccion/SKILL.md +220 -0
- package/vendor/theus-arsenal/skills/publicacion-cruzada/SKILL.md +117 -0
- package/vendor/theus-arsenal/skills/publicador-social/SKILL.md +121 -0
- package/vendor/theus-arsenal/skills/puerta-de-entrega/SKILL.md +164 -0
- package/vendor/theus-arsenal/skills/puerta-de-entrega/hooks/puerta-entrega.py +242 -0
- package/vendor/theus-arsenal/skills/pulir-interfaces/SKILL.md +126 -0
- package/vendor/theus-arsenal/skills/qa-navegador/SKILL.md +103 -0
- package/vendor/theus-arsenal/skills/ranking-grafo-social/SKILL.md +153 -0
- package/vendor/theus-arsenal/skills/recuperacion-iterativa/SKILL.md +236 -0
- package/vendor/theus-arsenal/skills/redaccion-articulos/SKILL.md +81 -0
- package/vendor/theus-arsenal/skills/regex-vs-llm/SKILL.md +221 -0
- package/vendor/theus-arsenal/skills/regresion-codigo-ia/SKILL.md +388 -0
- package/vendor/theus-arsenal/skills/rendimiento-react/SKILL.md +567 -0
- package/vendor/theus-arsenal/skills/revision-codigo-flutter-dart/SKILL.md +442 -0
- package/vendor/theus-arsenal/skills/revision-literatura-cientifica/SKILL.md +191 -0
- package/vendor/theus-arsenal/skills/revision-multiperspectiva/SKILL.md +302 -0
- package/vendor/theus-arsenal/skills/revision-riesgo-prediccion/SKILL.md +56 -0
- package/vendor/theus-arsenal/skills/revision-seguridad/SKILL.md +505 -0
- package/vendor/theus-arsenal/skills/revision-seguridad/cloud-infrastructure-security.md +361 -0
- package/vendor/theus-arsenal/skills/runtime-bun/SKILL.md +83 -0
- package/vendor/theus-arsenal/skills/salud-codigo-codescene/SKILL.md +163 -0
- package/vendor/theus-arsenal/skills/salud-interfaces-red/SKILL.md +143 -0
- package/vendor/theus-arsenal/skills/seguimiento-costos/SKILL.md +122 -0
- package/vendor/theus-arsenal/skills/seguridad-agentes-trading/SKILL.md +145 -0
- package/vendor/theus-arsenal/skills/seguridad-amm-defi/SKILL.md +166 -0
- package/vendor/theus-arsenal/skills/seguridad-django/SKILL.md +648 -0
- package/vendor/theus-arsenal/skills/seguridad-laravel/SKILL.md +945 -0
- package/vendor/theus-arsenal/skills/seguridad-perl/SKILL.md +507 -0
- package/vendor/theus-arsenal/skills/seguridad-quarkus/SKILL.md +474 -0
- package/vendor/theus-arsenal/skills/seguridad-springboot/SKILL.md +279 -0
- package/vendor/theus-arsenal/skills/seo/SKILL.md +166 -0
- package/vendor/theus-arsenal/skills/sistema-diseno/SKILL.md +81 -0
- package/vendor/theus-arsenal/skills/sistema-operativo-agentico/SKILL.md +375 -0
- package/vendor/theus-arsenal/skills/sistemas-latencia-critica/SKILL.md +65 -0
- package/vendor/theus-arsenal/skills/tdd-django/SKILL.md +735 -0
- package/vendor/theus-arsenal/skills/tdd-laravel/SKILL.md +673 -0
- package/vendor/theus-arsenal/skills/tdd-quarkus/SKILL.md +817 -0
- package/vendor/theus-arsenal/skills/tdd-springboot/SKILL.md +165 -0
- package/vendor/theus-arsenal/skills/testing-cpp/SKILL.md +328 -0
- package/vendor/theus-arsenal/skills/testing-csharp/SKILL.md +321 -0
- package/vendor/theus-arsenal/skills/testing-e2e/SKILL.md +325 -0
- package/vendor/theus-arsenal/skills/testing-go/SKILL.md +719 -0
- package/vendor/theus-arsenal/skills/testing-kotlin/SKILL.md +829 -0
- package/vendor/theus-arsenal/skills/testing-perl/SKILL.md +479 -0
- package/vendor/theus-arsenal/skills/testing-protocolos-di-swift/SKILL.md +196 -0
- package/vendor/theus-arsenal/skills/testing-python/SKILL.md +815 -0
- package/vendor/theus-arsenal/skills/testing-react/SKILL.md +421 -0
- package/vendor/theus-arsenal/skills/testing-rust/SKILL.md +506 -0
- package/vendor/theus-arsenal/skills/tours-de-codigo/SKILL.md +252 -0
- package/vendor/theus-arsenal/skills/traduccion-documentos-visado/SKILL.md +121 -0
- package/vendor/theus-arsenal/skills/ui-a-vue/SKILL.md +141 -0
- package/vendor/theus-arsenal/skills/validacion-config-red/SKILL.md +211 -0
- package/vendor/theus-arsenal/skills/verificacion-django/SKILL.md +470 -0
- package/vendor/theus-arsenal/skills/verificacion-factual/SKILL.md +142 -0
- package/vendor/theus-arsenal/skills/verificacion-laravel/SKILL.md +184 -0
- package/vendor/theus-arsenal/skills/verificacion-quarkus/SKILL.md +485 -0
- package/vendor/theus-arsenal/skills/verificacion-springboot/SKILL.md +237 -0
- package/vendor/theus-arsenal/skills/videodb/SKILL.md +374 -0
- package/vendor/theus-arsenal/skills/videodb/reference/api-reference.md +550 -0
- package/vendor/theus-arsenal/skills/videodb/reference/capture-reference.md +407 -0
- package/vendor/theus-arsenal/skills/videodb/reference/capture.md +101 -0
- package/vendor/theus-arsenal/skills/videodb/reference/editor.md +443 -0
- package/vendor/theus-arsenal/skills/videodb/reference/generative.md +331 -0
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream-reference.md +564 -0
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream.md +65 -0
- package/vendor/theus-arsenal/skills/videodb/reference/search.md +230 -0
- package/vendor/theus-arsenal/skills/videodb/reference/streaming.md +406 -0
- package/vendor/theus-arsenal/skills/videodb/reference/use-cases.md +118 -0
- package/vendor/theus-arsenal/skills/videodb/scripts/ws_listener.py +279 -0
- package/vendor/theus-arsenal/skills/videos-manim/SKILL.md +91 -0
- package/vendor/theus-arsenal/skills/videos-manim/assets/network_graph_scene.py +52 -0
- package/vendor/theus-arsenal/skills/vigilancia-canary/SKILL.md +108 -0
- package/vendor/theus-arsenal/skills/voz-de-marca/SKILL.md +106 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decisiones-arquitectura
|
|
3
|
+
description: Captura las decisiones arquitectónicas tomadas durante las sesiones de Theus como ADR estructurados. Detecta los momentos de decisión, registra el contexto, las alternativas consideradas y la justificación. Mantiene el registro de ADR en el almacén de Ñaupa (tool manage_adr del MCP theus-naupa) para que los futuros desarrolladores entiendan por qué el código base tiene la forma que tiene.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Registros de decisiones de arquitectura (ADR)
|
|
7
|
+
|
|
8
|
+
Captura las decisiones arquitectónicas en el momento en que ocurren durante las sesiones de trabajo. En lugar de que las decisiones vivan solo en hilos de chat, comentarios de PR o en la memoria de alguien, esta skill produce documentos ADR estructurados que viven junto al proyecto.
|
|
9
|
+
|
|
10
|
+
**En Theus, los ADR se gestionan a través de la tool `manage_adr` del MCP `theus-naupa`**, no como archivos sueltos en el repo. Ñaupa guarda el documento ADR del proyecto en su almacén SQLite (el mismo backend que usa la sección ADR del panel de Ñaupa, así que lo escrito por la tool es visible en la interfaz y viceversa). No crees estructuras paralelas tipo `docs/adr/` a menos que el usuario lo pida explícitamente.
|
|
11
|
+
|
|
12
|
+
## Cuándo activarla
|
|
13
|
+
|
|
14
|
+
- El usuario dice explícitamente "registra esta decisión" o "haz un ADR de esto"
|
|
15
|
+
- El usuario elige entre alternativas significativas (framework, librería, patrón, base de datos, diseño de API)
|
|
16
|
+
- El usuario dice "decidimos que..." o "la razón por la que hacemos X en vez de Y es..."
|
|
17
|
+
- El usuario pregunta "¿por qué elegimos X?" (leer los ADR existentes)
|
|
18
|
+
- Durante fases de planificación en las que se discuten compensaciones arquitectónicas
|
|
19
|
+
|
|
20
|
+
## La tool manage_adr
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
manage_adr(project, mode?, content?)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
| Parámetro | Descripción |
|
|
27
|
+
|-----------|-------------|
|
|
28
|
+
| `project` | Obligatorio. Nombre del proyecto tal como está indexado en Ñaupa (si dudas, consúltalo con `list_projects`). |
|
|
29
|
+
| `mode` | `get` (por defecto) devuelve el documento ADR completo; `sections` lista los encabezados Markdown (líneas que empiezan con `#`) — sirve de índice; `update` guarda `content` como el documento ADR del proyecto. |
|
|
30
|
+
| `content` | Solo con `mode='update'`: el documento ADR **completo** en Markdown. |
|
|
31
|
+
|
|
32
|
+
**Regla crítica: `update` reemplaza el documento entero.** El flujo de escritura es siempre leer-modificar-escribir:
|
|
33
|
+
|
|
34
|
+
1. `manage_adr(project, mode='get')` → obtén el documento actual
|
|
35
|
+
2. Añade o modifica la sección del ADR en cuestión
|
|
36
|
+
3. `manage_adr(project, mode='update', content=<documento completo actualizado>)`
|
|
37
|
+
|
|
38
|
+
Nunca envíes solo el ADR nuevo como `content`: borrarías el histórico.
|
|
39
|
+
|
|
40
|
+
## Formato de ADR
|
|
41
|
+
|
|
42
|
+
Usa el formato de ADR ligero propuesto por Michael Nygard, adaptado al desarrollo asistido por IA. Cada decisión es una sección de nivel 1 dentro del documento ADR del proyecto, de modo que `mode='sections'` funcione como índice:
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
# ADR-NNNN: [Título de la decisión]
|
|
46
|
+
|
|
47
|
+
**Fecha**: AAAA-MM-DD
|
|
48
|
+
**Estado**: propuesto | aceptado | obsoleto | reemplazado por ADR-NNNN
|
|
49
|
+
**Decisores**: [quiénes participaron]
|
|
50
|
+
|
|
51
|
+
## Contexto
|
|
52
|
+
|
|
53
|
+
¿Qué problema estamos viendo que motiva esta decisión o este cambio?
|
|
54
|
+
|
|
55
|
+
[2-5 frases describiendo la situación, las restricciones y las fuerzas en juego]
|
|
56
|
+
|
|
57
|
+
## Decisión
|
|
58
|
+
|
|
59
|
+
¿Qué cambio proponemos y/o estamos haciendo?
|
|
60
|
+
|
|
61
|
+
[1-3 frases enunciando la decisión con claridad]
|
|
62
|
+
|
|
63
|
+
## Alternativas consideradas
|
|
64
|
+
|
|
65
|
+
### Alternativa 1: [Nombre]
|
|
66
|
+
- **Pros**: [beneficios]
|
|
67
|
+
- **Contras**: [inconvenientes]
|
|
68
|
+
- **Por qué no**: [razón concreta por la que se descartó]
|
|
69
|
+
|
|
70
|
+
### Alternativa 2: [Nombre]
|
|
71
|
+
- **Pros**: [beneficios]
|
|
72
|
+
- **Contras**: [inconvenientes]
|
|
73
|
+
- **Por qué no**: [razón concreta por la que se descartó]
|
|
74
|
+
|
|
75
|
+
## Consecuencias
|
|
76
|
+
|
|
77
|
+
¿Qué se vuelve más fácil o más difícil a raíz de este cambio?
|
|
78
|
+
|
|
79
|
+
### Positivas
|
|
80
|
+
- [beneficio 1]
|
|
81
|
+
- [beneficio 2]
|
|
82
|
+
|
|
83
|
+
### Negativas
|
|
84
|
+
- [compensación 1]
|
|
85
|
+
- [compensación 2]
|
|
86
|
+
|
|
87
|
+
### Riesgos
|
|
88
|
+
- [riesgo y mitigación]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Flujo de trabajo
|
|
92
|
+
|
|
93
|
+
### Capturar un ADR nuevo
|
|
94
|
+
|
|
95
|
+
Cuando se detecta un momento de decisión:
|
|
96
|
+
|
|
97
|
+
1. **Inicializar (solo la primera vez)** — llama a `manage_adr(project, mode='get')`. Si responde `status: "no_adr"`, pide confirmación al usuario antes de crear el primer documento ADR del proyecto. No escribas nada sin consentimiento explícito. (Nota: si Ñaupa sugiere secciones genéricas como PURPOSE/STACK/ARCHITECTURE, esas corresponden a su resumen de proyecto guiado; para esta skill, el documento se estructura como secciones `# ADR-NNNN:` numeradas.)
|
|
98
|
+
2. **Identificar la decisión** — extrae la elección arquitectónica central que se está tomando
|
|
99
|
+
3. **Reunir el contexto** — ¿qué problema la motivó? ¿Qué restricciones existen?
|
|
100
|
+
4. **Documentar las alternativas** — ¿qué otras opciones se consideraron? ¿Por qué se rechazaron?
|
|
101
|
+
5. **Enunciar las consecuencias** — ¿cuáles son las compensaciones? ¿Qué se facilita o se dificulta?
|
|
102
|
+
6. **Asignar un número** — lee el documento actual con `mode='get'` (o el índice con `mode='sections'`), localiza el mayor `ADR-NNNN` e incrementa
|
|
103
|
+
7. **Confirmar y escribir** — presenta el borrador del ADR al usuario para revisión. Solo tras su aprobación explícita, guarda con el flujo leer-modificar-escribir: `get` → añadir la sección nueva → `update` con el documento completo. Si el usuario declina, descarta el borrador sin escribir nada.
|
|
104
|
+
|
|
105
|
+
### Leer los ADR existentes
|
|
106
|
+
|
|
107
|
+
Cuando el usuario pregunta "¿por qué elegimos X?":
|
|
108
|
+
|
|
109
|
+
1. Llama a `manage_adr(project, mode='get')` — si responde `status: "no_adr"`, contesta: "No hay ADR registrados en este proyecto. ¿Quieres empezar a registrar las decisiones arquitectónicas?"
|
|
110
|
+
2. Si existe, usa `mode='sections'` como índice para localizar las entradas relevantes
|
|
111
|
+
3. Presenta las secciones Contexto y Decisión del ADR que corresponda
|
|
112
|
+
4. Si no hay coincidencia, responde: "No encuentro un ADR para esa decisión. ¿Quieres registrarla ahora?"
|
|
113
|
+
|
|
114
|
+
### Estructura del documento ADR
|
|
115
|
+
|
|
116
|
+
Un único documento Markdown por proyecto, almacenado en Ñaupa:
|
|
117
|
+
|
|
118
|
+
```markdown
|
|
119
|
+
# ADR-0001: Usar Next.js como framework de frontend
|
|
120
|
+
...
|
|
121
|
+
|
|
122
|
+
# ADR-0002: PostgreSQL sobre MongoDB como almacén primario
|
|
123
|
+
...
|
|
124
|
+
|
|
125
|
+
# ADR-0003: API REST sobre GraphQL
|
|
126
|
+
...
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Índice
|
|
130
|
+
|
|
131
|
+
No hace falta mantener un índice manual: `manage_adr(project, mode='sections')` devuelve los encabezados del documento, que con el formato `# ADR-NNNN: Título` funcionan directamente como tabla de contenidos:
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"sections": [
|
|
136
|
+
"# ADR-0001: Usar Next.js como framework de frontend",
|
|
137
|
+
"# ADR-0002: PostgreSQL sobre MongoDB como almacén primario",
|
|
138
|
+
"# ADR-0003: API REST sobre GraphQL"
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Señales de detección de decisiones
|
|
144
|
+
|
|
145
|
+
Vigila estos patrones en la conversación que indican una decisión arquitectónica:
|
|
146
|
+
|
|
147
|
+
**Señales explícitas**
|
|
148
|
+
- "Vamos con X"
|
|
149
|
+
- "Deberíamos usar X en lugar de Y"
|
|
150
|
+
- "La compensación vale la pena porque..."
|
|
151
|
+
- "Registra esto como un ADR"
|
|
152
|
+
|
|
153
|
+
**Señales implícitas** (sugiere registrar un ADR — no lo crees automáticamente sin confirmación del usuario)
|
|
154
|
+
- Comparar dos frameworks o librerías y llegar a una conclusión
|
|
155
|
+
- Tomar una decisión de diseño de esquema de base de datos con justificación explícita
|
|
156
|
+
- Elegir entre patrones arquitectónicos (monolito vs microservicios, REST vs GraphQL)
|
|
157
|
+
- Decidir la estrategia de autenticación/autorización
|
|
158
|
+
- Seleccionar la infraestructura de despliegue tras evaluar alternativas
|
|
159
|
+
|
|
160
|
+
## Qué hace bueno a un ADR
|
|
161
|
+
|
|
162
|
+
### Haz
|
|
163
|
+
- **Sé específico** — "Usar el ORM Prisma", no "usar un ORM"
|
|
164
|
+
- **Registra el porqué** — la justificación importa más que el qué
|
|
165
|
+
- **Incluye las alternativas rechazadas** — los futuros desarrolladores necesitan saber qué se consideró
|
|
166
|
+
- **Enuncia las consecuencias con honestidad** — toda decisión tiene compensaciones
|
|
167
|
+
- **Mantenlo corto** — un ADR debe poder leerse en 2 minutos
|
|
168
|
+
- **Usa el presente** — "Usamos X", no "Usaremos X"
|
|
169
|
+
|
|
170
|
+
### No hagas
|
|
171
|
+
- Registrar decisiones triviales — los nombres de variables o el formato no necesitan ADR
|
|
172
|
+
- Escribir ensayos — si la sección de contexto supera las 10 líneas, es demasiado larga
|
|
173
|
+
- Omitir alternativas — "simplemente lo elegimos" no es una justificación válida
|
|
174
|
+
- Retrodatar sin marcarlo — si registras una decisión pasada, anota la fecha original
|
|
175
|
+
- Dejar que los ADR caduquen — las decisiones reemplazadas deben referenciar a su reemplazo
|
|
176
|
+
|
|
177
|
+
## Ciclo de vida de un ADR
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
propuesto → aceptado → [obsoleto | reemplazado por ADR-NNNN]
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
- **propuesto**: la decisión está en discusión, aún no comprometida
|
|
184
|
+
- **aceptado**: la decisión está en vigor y se sigue
|
|
185
|
+
- **obsoleto**: la decisión ya no es relevante (p. ej., se eliminó la funcionalidad)
|
|
186
|
+
- **reemplazado**: un ADR más nuevo sustituye a este (enlaza siempre el reemplazo)
|
|
187
|
+
|
|
188
|
+
Los cambios de estado también siguen el flujo leer-modificar-escribir: `get` → editar la línea **Estado** de la sección afectada → `update` con el documento completo.
|
|
189
|
+
|
|
190
|
+
## Categorías de decisiones que vale la pena registrar
|
|
191
|
+
|
|
192
|
+
| Categoría | Ejemplos |
|
|
193
|
+
|-----------|----------|
|
|
194
|
+
| **Elecciones de tecnología** | Framework, lenguaje, base de datos, proveedor de nube |
|
|
195
|
+
| **Patrones de arquitectura** | Monolito vs microservicios, orientado a eventos, CQRS |
|
|
196
|
+
| **Diseño de API** | REST vs GraphQL, estrategia de versionado, mecanismo de auth |
|
|
197
|
+
| **Modelado de datos** | Diseño de esquema, decisiones de normalización, estrategia de caché |
|
|
198
|
+
| **Infraestructura** | Modelo de despliegue, pipeline de CI/CD, stack de monitorización |
|
|
199
|
+
| **Seguridad** | Estrategia de auth, enfoque de cifrado, gestión de secretos |
|
|
200
|
+
| **Testing** | Framework de tests, metas de cobertura, balance E2E vs integración |
|
|
201
|
+
| **Proceso** | Estrategia de branches, proceso de revisión, cadencia de releases |
|
|
202
|
+
|
|
203
|
+
## Integración con otras skills
|
|
204
|
+
|
|
205
|
+
- **Agente `planificador`**: cuando el planificador proponga cambios de arquitectura, sugiere crear un ADR
|
|
206
|
+
- **Agente `revisor-codigo`**: marca los PR que introducen cambios arquitectónicos sin su ADR correspondiente
|
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: demos-ui
|
|
3
|
+
description: Graba videos de demo pulidos de aplicaciones web usando Playwright. Úsala cuando se pida un demo, walkthrough, grabación de pantalla o video tutorial de una app web. Produce videos WebM con cursor visible, ritmo natural y acabado profesional.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Grabador de demos de UI
|
|
7
|
+
|
|
8
|
+
Graba videos de demostración pulidos de aplicaciones web usando la grabación de video de Playwright con un cursor superpuesto inyectado, ritmo natural y flujo narrativo.
|
|
9
|
+
|
|
10
|
+
## Cuándo usarla
|
|
11
|
+
|
|
12
|
+
- Se pide un "video demo", "grabación de pantalla", "walkthrough" o "tutorial"
|
|
13
|
+
- Se quiere mostrar visualmente una funcionalidad o un flujo de trabajo
|
|
14
|
+
- Se necesita un video para documentación, onboarding o presentación a stakeholders
|
|
15
|
+
|
|
16
|
+
## Proceso en tres fases
|
|
17
|
+
|
|
18
|
+
Todo demo pasa por tres fases: **Descubrir -> Ensayar -> Grabar**. Nunca saltes directo a grabar.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Fase 1: Descubrir
|
|
23
|
+
|
|
24
|
+
Antes de escribir cualquier script, explora las páginas objetivo para entender qué hay realmente.
|
|
25
|
+
|
|
26
|
+
### Por qué
|
|
27
|
+
|
|
28
|
+
No puedes guionizar lo que no has visto. Los campos pueden ser `<input>` y no `<textarea>`, los desplegables pueden ser componentes personalizados y no `<select>`, y las cajas de comentarios pueden soportar `@menciones` o `#tags`. Las suposiciones rompen las grabaciones en silencio.
|
|
29
|
+
|
|
30
|
+
### Cómo
|
|
31
|
+
|
|
32
|
+
Navega a cada página del flujo y vuelca sus elementos interactivos:
|
|
33
|
+
|
|
34
|
+
```javascript
|
|
35
|
+
// Ejecuta esto en cada página del flujo ANTES de escribir el script del demo
|
|
36
|
+
const fields = await page.evaluate(() => {
|
|
37
|
+
const els = [];
|
|
38
|
+
document.querySelectorAll('input, select, textarea, button, [contenteditable]').forEach(el => {
|
|
39
|
+
if (el.offsetParent !== null) {
|
|
40
|
+
els.push({
|
|
41
|
+
tag: el.tagName,
|
|
42
|
+
type: el.type || '',
|
|
43
|
+
name: el.name || '',
|
|
44
|
+
placeholder: el.placeholder || '',
|
|
45
|
+
text: el.textContent?.trim().substring(0, 40) || '',
|
|
46
|
+
contentEditable: el.contentEditable === 'true',
|
|
47
|
+
role: el.getAttribute('role') || '',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return els;
|
|
52
|
+
});
|
|
53
|
+
console.log(JSON.stringify(fields, null, 2));
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Qué buscar
|
|
57
|
+
|
|
58
|
+
- **Campos de formulario**: ¿son `<select>`, `<input>`, desplegables personalizados o comboboxes?
|
|
59
|
+
- **Opciones de select**: vuelca valores Y texto de las opciones. Los placeholders suelen tener `value="0"` o `value=""`, que parece no vacío. Usa `Array.from(el.options).map(o => ({ value: o.value, text: o.text }))`. Descarta opciones cuyo texto incluya "Seleccionar"/"Select" o cuyo valor sea `"0"`.
|
|
60
|
+
- **Texto enriquecido**: ¿la caja de comentarios soporta `@menciones`, `#tags`, markdown o emoji? Revisa el texto del placeholder.
|
|
61
|
+
- **Campos obligatorios**: ¿qué campos bloquean el envío del formulario? Revisa `required`, `*` en las etiquetas, e intenta enviar vacío para ver los errores de validación.
|
|
62
|
+
- **Contenido dinámico**: ¿aparecen campos después de rellenar otros?
|
|
63
|
+
- **Textos de botones**: el texto exacto, como `"Enviar"`, `"Submit Request"` o `"Send"`.
|
|
64
|
+
- **Encabezados de columnas de tablas**: en modales basados en tablas, mapea cada `input[type="number"]` a su encabezado de columna en lugar de asumir que todos los inputs numéricos significan lo mismo.
|
|
65
|
+
|
|
66
|
+
### Salida
|
|
67
|
+
|
|
68
|
+
Un mapa de campos por página, usado para escribir selectores correctos en el script. Ejemplo:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
/purchase-requests/new:
|
|
72
|
+
- Código de presupuesto: <select> (primer select de la página, 4 opciones)
|
|
73
|
+
- Entrega deseada: <input type="date">
|
|
74
|
+
- Contexto: <textarea> (no input)
|
|
75
|
+
- Tabla BOM: celdas editables en línea con patrón span.cursor-pointer -> input
|
|
76
|
+
- Enviar: <button> texto="Submit"
|
|
77
|
+
|
|
78
|
+
/purchase-requests/N (detalle):
|
|
79
|
+
- Comentario: <input placeholder="Type a message..."> soporta @usuario y tags #PR
|
|
80
|
+
- Enviar: <button> texto="Send" (deshabilitado hasta que el input tenga contenido)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Fase 2: Ensayar
|
|
86
|
+
|
|
87
|
+
Recorre todos los pasos sin grabar. Verifica que cada selector resuelva.
|
|
88
|
+
|
|
89
|
+
### Por qué
|
|
90
|
+
|
|
91
|
+
Los fallos silenciosos de selectores son la razón principal por la que se rompen las grabaciones. El ensayo los atrapa antes de desperdiciar una grabación.
|
|
92
|
+
|
|
93
|
+
### Cómo
|
|
94
|
+
|
|
95
|
+
Usa `ensureVisible`, un wrapper que registra y falla ruidosamente:
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
async function ensureVisible(page, locator, label) {
|
|
99
|
+
const el = typeof locator === 'string' ? page.locator(locator).first() : locator;
|
|
100
|
+
const visible = await el.isVisible().catch(() => false);
|
|
101
|
+
if (!visible) {
|
|
102
|
+
const msg = `ENSAYO FALLIDO: "${label}" no encontrado - selector: ${typeof locator === 'string' ? locator : '(objeto locator)'}`;
|
|
103
|
+
console.error(msg);
|
|
104
|
+
const found = await page.evaluate(() => {
|
|
105
|
+
return Array.from(document.querySelectorAll('button, input, select, textarea, a'))
|
|
106
|
+
.filter(el => el.offsetParent !== null)
|
|
107
|
+
.map(el => `${el.tagName}[${el.type || ''}] "${el.textContent?.trim().substring(0, 30)}"`)
|
|
108
|
+
.join('\n ');
|
|
109
|
+
});
|
|
110
|
+
console.error(' Elementos visibles:\n ' + found);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
console.log(`ENSAYO OK: "${label}"`);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Estructura del script de ensayo
|
|
119
|
+
|
|
120
|
+
```javascript
|
|
121
|
+
const steps = [
|
|
122
|
+
{ label: 'Campo de email del login', selector: '#email' },
|
|
123
|
+
{ label: 'Botón de envío del login', selector: 'button[type="submit"]' },
|
|
124
|
+
{ label: 'Botón Nueva solicitud', selector: 'button:has-text("New Request")' },
|
|
125
|
+
{ label: 'Select de código de presupuesto', selector: 'select' },
|
|
126
|
+
{ label: 'Fecha de entrega', selector: 'input[type="date"]:visible' },
|
|
127
|
+
{ label: 'Campo de descripción', selector: 'textarea:visible' },
|
|
128
|
+
{ label: 'Botón Agregar ítem', selector: 'button:has-text("Add Item")' },
|
|
129
|
+
{ label: 'Botón Enviar', selector: 'button:has-text("Submit")' },
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
let allOk = true;
|
|
133
|
+
for (const step of steps) {
|
|
134
|
+
if (!await ensureVisible(page, step.selector, step.label)) {
|
|
135
|
+
allOk = false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (!allOk) {
|
|
139
|
+
console.error('ENSAYO FALLIDO - corrige los selectores antes de grabar');
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
console.log('ENSAYO SUPERADO - todos los selectores verificados');
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Cuando el ensayo falla
|
|
146
|
+
|
|
147
|
+
1. Lee el volcado de elementos visibles.
|
|
148
|
+
2. Encuentra el selector correcto.
|
|
149
|
+
3. Actualiza el script.
|
|
150
|
+
4. Vuelve a ejecutar el ensayo.
|
|
151
|
+
5. Continúa solo cuando todos los selectores pasen.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Fase 3: Grabar
|
|
156
|
+
|
|
157
|
+
Solo después de que el descubrimiento y el ensayo pasen debes crear la grabación.
|
|
158
|
+
|
|
159
|
+
### Principios de grabación
|
|
160
|
+
|
|
161
|
+
#### 1. Flujo narrativo
|
|
162
|
+
|
|
163
|
+
Planifica el video como una historia. Sigue el orden que pida el usuario, o usa este por defecto:
|
|
164
|
+
|
|
165
|
+
- **Entrada**: login o navegación al punto de partida
|
|
166
|
+
- **Contexto**: recorre el entorno para que el espectador se oriente
|
|
167
|
+
- **Acción**: ejecuta los pasos del flujo principal
|
|
168
|
+
- **Variación**: muestra una funcionalidad secundaria como ajustes, tema o localización
|
|
169
|
+
- **Resultado**: muestra el desenlace, la confirmación o el nuevo estado
|
|
170
|
+
|
|
171
|
+
#### 2. Ritmo
|
|
172
|
+
|
|
173
|
+
- Tras el login: `4s`
|
|
174
|
+
- Tras navegar: `3s`
|
|
175
|
+
- Tras hacer clic en un botón: `2s`
|
|
176
|
+
- Entre pasos importantes: `1.5-2s`
|
|
177
|
+
- Tras la acción final: `3s`
|
|
178
|
+
- Retardo de tipeo: `25-40ms` por carácter
|
|
179
|
+
|
|
180
|
+
#### 3. Cursor superpuesto
|
|
181
|
+
|
|
182
|
+
Inyecta un cursor SVG de flecha que sigue los movimientos del mouse:
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
async function injectCursor(page) {
|
|
186
|
+
await page.evaluate(() => {
|
|
187
|
+
if (document.getElementById('demo-cursor')) return;
|
|
188
|
+
const cursor = document.createElement('div');
|
|
189
|
+
cursor.id = 'demo-cursor';
|
|
190
|
+
cursor.innerHTML = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
191
|
+
<path d="M5 3L19 12L12 13L9 20L5 3Z" fill="white" stroke="black" stroke-width="1.5" stroke-linejoin="round"/>
|
|
192
|
+
</svg>`;
|
|
193
|
+
cursor.style.cssText = `
|
|
194
|
+
position: fixed; z-index: 999999; pointer-events: none;
|
|
195
|
+
width: 24px; height: 24px;
|
|
196
|
+
transition: left 0.1s, top 0.1s;
|
|
197
|
+
filter: drop-shadow(1px 1px 2px rgba(0,0,0,0.3));
|
|
198
|
+
`;
|
|
199
|
+
cursor.style.left = '0px';
|
|
200
|
+
cursor.style.top = '0px';
|
|
201
|
+
document.body.appendChild(cursor);
|
|
202
|
+
document.addEventListener('mousemove', (e) => {
|
|
203
|
+
cursor.style.left = e.clientX + 'px';
|
|
204
|
+
cursor.style.top = e.clientY + 'px';
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Llama a `injectCursor(page)` después de cada navegación, porque el overlay se destruye al navegar.
|
|
211
|
+
|
|
212
|
+
#### 4. Movimiento del mouse
|
|
213
|
+
|
|
214
|
+
Nunca teletransportes el cursor. Muévelo hasta el objetivo antes de hacer clic:
|
|
215
|
+
|
|
216
|
+
```javascript
|
|
217
|
+
async function moveAndClick(page, locator, label, opts = {}) {
|
|
218
|
+
const { postClickDelay = 800, ...clickOpts } = opts;
|
|
219
|
+
const el = typeof locator === 'string' ? page.locator(locator).first() : locator;
|
|
220
|
+
const visible = await el.isVisible().catch(() => false);
|
|
221
|
+
if (!visible) {
|
|
222
|
+
console.error(`ADVERTENCIA: moveAndClick omitido - "${label}" no visible`);
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
await el.scrollIntoViewIfNeeded();
|
|
227
|
+
await page.waitForTimeout(300);
|
|
228
|
+
const box = await el.boundingBox();
|
|
229
|
+
if (box) {
|
|
230
|
+
await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2, { steps: 10 });
|
|
231
|
+
await page.waitForTimeout(400);
|
|
232
|
+
}
|
|
233
|
+
await el.click(clickOpts);
|
|
234
|
+
} catch (e) {
|
|
235
|
+
console.error(`ADVERTENCIA: moveAndClick falló en "${label}": ${e.message}`);
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
await page.waitForTimeout(postClickDelay);
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Cada llamada debe incluir un `label` descriptivo para depuración.
|
|
244
|
+
|
|
245
|
+
#### 5. Tipeo
|
|
246
|
+
|
|
247
|
+
Escribe de forma visible, no con relleno instantáneo:
|
|
248
|
+
|
|
249
|
+
```javascript
|
|
250
|
+
async function typeSlowly(page, locator, text, label, charDelay = 35) {
|
|
251
|
+
const el = typeof locator === 'string' ? page.locator(locator).first() : locator;
|
|
252
|
+
const visible = await el.isVisible().catch(() => false);
|
|
253
|
+
if (!visible) {
|
|
254
|
+
console.error(`ADVERTENCIA: typeSlowly omitido - "${label}" no visible`);
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
await moveAndClick(page, el, label);
|
|
258
|
+
await el.fill('');
|
|
259
|
+
await el.pressSequentially(text, { delay: charDelay });
|
|
260
|
+
await page.waitForTimeout(500);
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### 6. Desplazamiento
|
|
266
|
+
|
|
267
|
+
Usa scroll suave en lugar de saltos:
|
|
268
|
+
|
|
269
|
+
```javascript
|
|
270
|
+
await page.evaluate(() => window.scrollTo({ top: 400, behavior: 'smooth' }));
|
|
271
|
+
await page.waitForTimeout(1500);
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
#### 7. Paneo de dashboards
|
|
275
|
+
|
|
276
|
+
Al mostrar un dashboard o una página de resumen, mueve el cursor sobre los elementos clave:
|
|
277
|
+
|
|
278
|
+
```javascript
|
|
279
|
+
async function panElements(page, selector, maxCount = 6) {
|
|
280
|
+
const elements = await page.locator(selector).all();
|
|
281
|
+
for (let i = 0; i < Math.min(elements.length, maxCount); i++) {
|
|
282
|
+
try {
|
|
283
|
+
const box = await elements[i].boundingBox();
|
|
284
|
+
if (box && box.y < 700) {
|
|
285
|
+
await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2, { steps: 8 });
|
|
286
|
+
await page.waitForTimeout(600);
|
|
287
|
+
}
|
|
288
|
+
} catch (e) {
|
|
289
|
+
console.warn(`ADVERTENCIA: panElements omitió el elemento ${i} (selector: "${selector}"): ${e.message}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
#### 8. Subtítulos
|
|
296
|
+
|
|
297
|
+
Inyecta una barra de subtítulos en la parte inferior del viewport:
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
async function injectSubtitleBar(page) {
|
|
301
|
+
await page.evaluate(() => {
|
|
302
|
+
if (document.getElementById('demo-subtitle')) return;
|
|
303
|
+
const bar = document.createElement('div');
|
|
304
|
+
bar.id = 'demo-subtitle';
|
|
305
|
+
bar.style.cssText = `
|
|
306
|
+
position: fixed; bottom: 0; left: 0; right: 0; z-index: 999998;
|
|
307
|
+
text-align: center; padding: 12px 24px;
|
|
308
|
+
background: rgba(0, 0, 0, 0.75);
|
|
309
|
+
color: white; font-family: -apple-system, "Segoe UI", sans-serif;
|
|
310
|
+
font-size: 16px; font-weight: 500; letter-spacing: 0.3px;
|
|
311
|
+
transition: opacity 0.3s;
|
|
312
|
+
pointer-events: none;
|
|
313
|
+
`;
|
|
314
|
+
bar.textContent = '';
|
|
315
|
+
bar.style.opacity = '0';
|
|
316
|
+
document.body.appendChild(bar);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
async function showSubtitle(page, text) {
|
|
321
|
+
await page.evaluate((t) => {
|
|
322
|
+
const bar = document.getElementById('demo-subtitle');
|
|
323
|
+
if (!bar) return;
|
|
324
|
+
if (t) {
|
|
325
|
+
bar.textContent = t;
|
|
326
|
+
bar.style.opacity = '1';
|
|
327
|
+
} else {
|
|
328
|
+
bar.style.opacity = '0';
|
|
329
|
+
}
|
|
330
|
+
}, text);
|
|
331
|
+
if (text) await page.waitForTimeout(800);
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Llama a `injectSubtitleBar(page)` junto con `injectCursor(page)` después de cada navegación.
|
|
336
|
+
|
|
337
|
+
Patrón de uso:
|
|
338
|
+
|
|
339
|
+
```javascript
|
|
340
|
+
await showSubtitle(page, 'Paso 1 - Iniciando sesión');
|
|
341
|
+
await showSubtitle(page, 'Paso 2 - Vista general del dashboard');
|
|
342
|
+
await showSubtitle(page, '');
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Pautas:
|
|
346
|
+
|
|
347
|
+
- Mantén el texto del subtítulo corto, idealmente menos de 60 caracteres.
|
|
348
|
+
- Usa el formato `Paso N - Acción` para mantener consistencia.
|
|
349
|
+
- Borra el subtítulo durante pausas largas en las que la UI habla por sí sola.
|
|
350
|
+
|
|
351
|
+
## Plantilla del script
|
|
352
|
+
|
|
353
|
+
```javascript
|
|
354
|
+
'use strict';
|
|
355
|
+
const { chromium } = require('playwright');
|
|
356
|
+
const path = require('path');
|
|
357
|
+
const fs = require('fs');
|
|
358
|
+
|
|
359
|
+
const BASE_URL = process.env.QA_BASE_URL || 'http://localhost:3000';
|
|
360
|
+
const VIDEO_DIR = path.join(__dirname, 'screenshots');
|
|
361
|
+
const OUTPUT_NAME = 'demo-FUNCIONALIDAD.webm';
|
|
362
|
+
const REHEARSAL = process.argv.includes('--rehearse');
|
|
363
|
+
|
|
364
|
+
// Pega aquí injectCursor, injectSubtitleBar, showSubtitle, moveAndClick,
|
|
365
|
+
// typeSlowly, ensureVisible y panElements.
|
|
366
|
+
|
|
367
|
+
(async () => {
|
|
368
|
+
const browser = await chromium.launch({ headless: true });
|
|
369
|
+
|
|
370
|
+
if (REHEARSAL) {
|
|
371
|
+
const context = await browser.newContext({ viewport: { width: 1280, height: 720 } });
|
|
372
|
+
const page = await context.newPage();
|
|
373
|
+
// Navega por el flujo y ejecuta ensureVisible para cada selector.
|
|
374
|
+
await browser.close();
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
const context = await browser.newContext({
|
|
379
|
+
recordVideo: { dir: VIDEO_DIR, size: { width: 1280, height: 720 } },
|
|
380
|
+
viewport: { width: 1280, height: 720 }
|
|
381
|
+
});
|
|
382
|
+
const page = await context.newPage();
|
|
383
|
+
|
|
384
|
+
try {
|
|
385
|
+
await injectCursor(page);
|
|
386
|
+
await injectSubtitleBar(page);
|
|
387
|
+
|
|
388
|
+
await showSubtitle(page, 'Paso 1 - Iniciando sesión');
|
|
389
|
+
// acciones de login
|
|
390
|
+
|
|
391
|
+
await page.goto(`${BASE_URL}/dashboard`);
|
|
392
|
+
await injectCursor(page);
|
|
393
|
+
await injectSubtitleBar(page);
|
|
394
|
+
await showSubtitle(page, 'Paso 2 - Vista general del dashboard');
|
|
395
|
+
// paneo del dashboard
|
|
396
|
+
|
|
397
|
+
await showSubtitle(page, 'Paso 3 - Flujo principal');
|
|
398
|
+
// secuencia de acciones
|
|
399
|
+
|
|
400
|
+
await showSubtitle(page, 'Paso 4 - Resultado');
|
|
401
|
+
// revelación final
|
|
402
|
+
await showSubtitle(page, '');
|
|
403
|
+
} catch (err) {
|
|
404
|
+
console.error('ERROR DEL DEMO:', err.message);
|
|
405
|
+
} finally {
|
|
406
|
+
await context.close();
|
|
407
|
+
const video = page.video();
|
|
408
|
+
if (video) {
|
|
409
|
+
const src = await video.path();
|
|
410
|
+
const dest = path.join(VIDEO_DIR, OUTPUT_NAME);
|
|
411
|
+
try {
|
|
412
|
+
fs.copyFileSync(src, dest);
|
|
413
|
+
console.log('Video guardado:', dest);
|
|
414
|
+
} catch (e) {
|
|
415
|
+
console.error('ERROR: no se pudo copiar el video:', e.message);
|
|
416
|
+
console.error(' Origen:', src);
|
|
417
|
+
console.error(' Destino:', dest);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
await browser.close();
|
|
421
|
+
}
|
|
422
|
+
})();
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
Uso:
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
# Fase 2: ensayar
|
|
429
|
+
node demo-script.cjs --rehearse
|
|
430
|
+
|
|
431
|
+
# Fase 3: grabar
|
|
432
|
+
node demo-script.cjs
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
## Lista de verificación antes de grabar
|
|
436
|
+
|
|
437
|
+
- [ ] Fase de descubrimiento completada
|
|
438
|
+
- [ ] El ensayo pasa con todos los selectores OK
|
|
439
|
+
- [ ] Modo headless habilitado
|
|
440
|
+
- [ ] Resolución fijada en `1280x720`
|
|
441
|
+
- [ ] Overlays de cursor y subtítulos reinyectados tras cada navegación
|
|
442
|
+
- [ ] `showSubtitle(page, 'Paso N - ...')` usado en las transiciones importantes
|
|
443
|
+
- [ ] `moveAndClick` usado en todos los clics con labels descriptivos
|
|
444
|
+
- [ ] `typeSlowly` usado para entrada visible
|
|
445
|
+
- [ ] Sin catch silenciosos; los helpers registran advertencias
|
|
446
|
+
- [ ] Scroll suave usado para revelar contenido
|
|
447
|
+
- [ ] Las pausas clave son visibles para un espectador humano
|
|
448
|
+
- [ ] El flujo coincide con el orden narrativo solicitado
|
|
449
|
+
- [ ] El script refleja la UI real descubierta en la fase 1
|
|
450
|
+
|
|
451
|
+
## Errores comunes
|
|
452
|
+
|
|
453
|
+
1. El cursor desaparece tras navegar - reinyéctalo.
|
|
454
|
+
2. El video va demasiado rápido - añade pausas.
|
|
455
|
+
3. El cursor es un punto en vez de una flecha - usa el overlay SVG.
|
|
456
|
+
4. El cursor se teletransporta - muévelo antes de hacer clic.
|
|
457
|
+
5. Los desplegables se ven mal - muestra el movimiento y luego elige la opción.
|
|
458
|
+
6. Los modales se sienten abruptos - añade una pausa de lectura antes de confirmar.
|
|
459
|
+
7. La ruta del archivo de video es aleatoria - cópialo a un nombre de salida estable.
|
|
460
|
+
8. Los fallos de selectores se tragan en silencio - nunca uses bloques catch silenciosos.
|
|
461
|
+
9. Se asumieron tipos de campo - descúbrelos primero.
|
|
462
|
+
10. Se asumieron funcionalidades - inspecciona la UI real antes de guionizar.
|
|
463
|
+
11. Los valores placeholder de los select parecen reales - vigila `"0"` y `"Select..."`.
|
|
464
|
+
12. Los popups crean videos separados - captura las páginas popup explícitamente y fusiona después si hace falta.
|
|
465
|
+
|
|
466
|
+
## Skills relacionadas
|
|
467
|
+
|
|
468
|
+
- `testing-e2e` — pruebas E2E web con Playwright
|
|
469
|
+
- `qa-navegador` — verificación de UI en el navegador
|