theus-cli-darwin-x64 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,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.kt"
|
|
4
|
+
- "**/*.kts"
|
|
5
|
+
---
|
|
6
|
+
# Seguridad en Kotlin
|
|
7
|
+
|
|
8
|
+
> Este archivo extiende [common/security.md](../common/security.md) con contenido específico de Kotlin y Android/KMP.
|
|
9
|
+
|
|
10
|
+
## Gestión de secretos
|
|
11
|
+
|
|
12
|
+
- Nunca escribas claves de API, tokens ni credenciales directamente en el código fuente
|
|
13
|
+
- Usa `local.properties` (ignorado por git) para los secretos de desarrollo local
|
|
14
|
+
- Usa campos de `BuildConfig` generados a partir de secretos de CI para las builds de release
|
|
15
|
+
- Usa `EncryptedSharedPreferences` (Android) o Keychain (iOS) para almacenar secretos en tiempo de ejecución
|
|
16
|
+
|
|
17
|
+
```kotlin
|
|
18
|
+
// MAL
|
|
19
|
+
val apiKey = "sk-abc123..."
|
|
20
|
+
|
|
21
|
+
// BIEN — desde BuildConfig (generado en tiempo de build)
|
|
22
|
+
val apiKey = BuildConfig.API_KEY
|
|
23
|
+
|
|
24
|
+
// BIEN — desde almacenamiento seguro en tiempo de ejecución
|
|
25
|
+
val token = secureStorage.get("auth_token")
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Seguridad de red
|
|
29
|
+
|
|
30
|
+
- Usa HTTPS exclusivamente — configura `network_security_config.xml` para bloquear el tráfico en claro
|
|
31
|
+
- Ancla certificados (certificate pinning) en los endpoints sensibles con `CertificatePinner` de OkHttp o el equivalente de Ktor
|
|
32
|
+
- Define timeouts en todos los clientes HTTP — nunca dejes los valores por defecto (pueden ser infinitos)
|
|
33
|
+
- Valida y sanitiza todas las respuestas del servidor antes de usarlas
|
|
34
|
+
|
|
35
|
+
```xml
|
|
36
|
+
<!-- res/xml/network_security_config.xml -->
|
|
37
|
+
<network-security-config>
|
|
38
|
+
<base-config cleartextTrafficPermitted="false" />
|
|
39
|
+
</network-security-config>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Validación de entrada
|
|
43
|
+
|
|
44
|
+
- Valida toda entrada del usuario antes de procesarla o enviarla a la API
|
|
45
|
+
- Usa consultas parametrizadas con Room/SQLDelight — nunca concatenes entrada del usuario en SQL
|
|
46
|
+
- Sanitiza las rutas de archivos provenientes del usuario para prevenir path traversal
|
|
47
|
+
|
|
48
|
+
```kotlin
|
|
49
|
+
// MAL — inyección SQL
|
|
50
|
+
@Query("SELECT * FROM items WHERE name = '$input'")
|
|
51
|
+
|
|
52
|
+
// BIEN — parametrizada
|
|
53
|
+
@Query("SELECT * FROM items WHERE name = :input")
|
|
54
|
+
fun findByName(input: String): List<ItemEntity>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Protección de datos
|
|
58
|
+
|
|
59
|
+
- Usa `EncryptedSharedPreferences` para datos clave-valor sensibles en Android
|
|
60
|
+
- Usa `@Serializable` con nombres de campo explícitos — no filtres los nombres internos de las propiedades
|
|
61
|
+
- Elimina los datos sensibles de la memoria cuando ya no se necesiten
|
|
62
|
+
- Usa `@Keep` o reglas de ProGuard en las clases serializadas para evitar la ofuscación de nombres
|
|
63
|
+
|
|
64
|
+
## Autenticación
|
|
65
|
+
|
|
66
|
+
- Almacena los tokens en almacenamiento seguro, no en SharedPreferences plano
|
|
67
|
+
- Implementa la renovación de tokens con un manejo correcto de 401/403
|
|
68
|
+
- Limpia todo el estado de autenticación al cerrar sesión (tokens, datos de usuario en caché, cookies)
|
|
69
|
+
- Usa autenticación biométrica (`BiometricPrompt`) para operaciones sensibles
|
|
70
|
+
|
|
71
|
+
## ProGuard / R8
|
|
72
|
+
|
|
73
|
+
- Reglas keep para todos los modelos serializados (`@Serializable`, Gson, Moshi)
|
|
74
|
+
- Reglas keep para bibliotecas basadas en reflexión (Koin, Retrofit)
|
|
75
|
+
- Prueba las builds de release — la ofuscación puede romper la serialización silenciosamente
|
|
76
|
+
|
|
77
|
+
## Seguridad en WebView
|
|
78
|
+
|
|
79
|
+
- Desactiva JavaScript salvo que sea explícitamente necesario: `settings.javaScriptEnabled = false`
|
|
80
|
+
- Valida las URLs antes de cargarlas en un WebView
|
|
81
|
+
- Nunca expongas métodos `@JavascriptInterface` que accedan a datos sensibles
|
|
82
|
+
- Usa `WebViewClient.shouldOverrideUrlLoading()` para controlar la navegación
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.kt"
|
|
4
|
+
- "**/*.kts"
|
|
5
|
+
---
|
|
6
|
+
# Testing en Kotlin
|
|
7
|
+
|
|
8
|
+
> Este archivo extiende [common/testing.md](../common/testing.md) con contenido específico de Kotlin y Android/KMP.
|
|
9
|
+
|
|
10
|
+
## Framework de tests
|
|
11
|
+
|
|
12
|
+
- **kotlin.test** para multiplataforma (KMP) — `@Test`, `assertEquals`, `assertTrue`
|
|
13
|
+
- **JUnit 4/5** para tests específicos de Android
|
|
14
|
+
- **Turbine** para probar Flows y StateFlow
|
|
15
|
+
- **kotlinx-coroutines-test** para probar corrutinas (`runTest`, `TestDispatcher`)
|
|
16
|
+
|
|
17
|
+
## Tests de ViewModel con Turbine
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
@Test
|
|
21
|
+
fun `emite estado de carga y luego los datos`() = runTest {
|
|
22
|
+
val repo = FakeItemRepository()
|
|
23
|
+
repo.addItem(testItem)
|
|
24
|
+
val viewModel = ItemListViewModel(GetItemsUseCase(repo))
|
|
25
|
+
|
|
26
|
+
viewModel.state.test {
|
|
27
|
+
assertEquals(ItemListState(), awaitItem()) // estado inicial
|
|
28
|
+
viewModel.onEvent(ItemListEvent.Load)
|
|
29
|
+
assertTrue(awaitItem().isLoading) // cargando
|
|
30
|
+
assertEquals(listOf(testItem), awaitItem().items) // cargado
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Fakes en lugar de mocks
|
|
36
|
+
|
|
37
|
+
Prefiere fakes escritos a mano en lugar de frameworks de mocking:
|
|
38
|
+
|
|
39
|
+
```kotlin
|
|
40
|
+
class FakeItemRepository : ItemRepository {
|
|
41
|
+
private val items = mutableListOf<Item>()
|
|
42
|
+
var fetchError: Throwable? = null
|
|
43
|
+
|
|
44
|
+
override suspend fun getAll(): Result<List<Item>> {
|
|
45
|
+
fetchError?.let { return Result.failure(it) }
|
|
46
|
+
return Result.success(items.toList())
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
override fun observeAll(): Flow<List<Item>> = flowOf(items.toList())
|
|
50
|
+
|
|
51
|
+
fun addItem(item: Item) { items.add(item) }
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Testing de corrutinas
|
|
56
|
+
|
|
57
|
+
```kotlin
|
|
58
|
+
@Test
|
|
59
|
+
fun `las operaciones paralelas se completan`() = runTest {
|
|
60
|
+
val repo = FakeRepository()
|
|
61
|
+
val result = loadDashboard(repo)
|
|
62
|
+
advanceUntilIdle()
|
|
63
|
+
assertNotNull(result.items)
|
|
64
|
+
assertNotNull(result.stats)
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Usa `runTest` — avanza automáticamente el tiempo virtual y provee `TestScope`.
|
|
69
|
+
|
|
70
|
+
## MockEngine de Ktor
|
|
71
|
+
|
|
72
|
+
```kotlin
|
|
73
|
+
val mockEngine = MockEngine { request ->
|
|
74
|
+
when (request.url.encodedPath) {
|
|
75
|
+
"/api/items" -> respond(
|
|
76
|
+
content = Json.encodeToString(testItems),
|
|
77
|
+
headers = headersOf(HttpHeaders.ContentType, ContentType.Application.Json.toString())
|
|
78
|
+
)
|
|
79
|
+
else -> respondError(HttpStatusCode.NotFound)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
val client = HttpClient(mockEngine) {
|
|
84
|
+
install(ContentNegotiation) { json() }
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Testing de Room/SQLDelight
|
|
89
|
+
|
|
90
|
+
- Room: usa `Room.inMemoryDatabaseBuilder()` para pruebas en memoria
|
|
91
|
+
- SQLDelight: usa `JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)` para tests en la JVM
|
|
92
|
+
|
|
93
|
+
```kotlin
|
|
94
|
+
@Test
|
|
95
|
+
fun `inserta y consulta items`() = runTest {
|
|
96
|
+
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
|
97
|
+
Database.Schema.create(driver)
|
|
98
|
+
val db = Database(driver)
|
|
99
|
+
|
|
100
|
+
db.itemQueries.insert("1", "Item de ejemplo", "descripción")
|
|
101
|
+
val items = db.itemQueries.getAll().executeAsList()
|
|
102
|
+
assertEquals(1, items.size)
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Nombres de los tests
|
|
107
|
+
|
|
108
|
+
Usa nombres descriptivos entre backticks:
|
|
109
|
+
|
|
110
|
+
```kotlin
|
|
111
|
+
@Test
|
|
112
|
+
fun `buscar con consulta vacía devuelve todos los items`() = runTest { }
|
|
113
|
+
|
|
114
|
+
@Test
|
|
115
|
+
fun `eliminar un item emite la lista actualizada sin el item eliminado`() = runTest { }
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Organización de los tests
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
src/
|
|
122
|
+
├── commonTest/kotlin/ # Tests compartidos (ViewModel, UseCase, Repository)
|
|
123
|
+
├── androidUnitTest/kotlin/ # Tests unitarios de Android (JUnit)
|
|
124
|
+
├── androidInstrumentedTest/kotlin/ # Tests instrumentados (Room, UI)
|
|
125
|
+
└── iosTest/kotlin/ # Tests específicos de iOS
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Cobertura mínima de tests: ViewModel + UseCase para cada funcionalidad.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/nuxt.config.*"
|
|
4
|
+
- "**/app.config.*"
|
|
5
|
+
- "**/app.vue"
|
|
6
|
+
- "**/pages/**"
|
|
7
|
+
- "**/layouts/**"
|
|
8
|
+
- "**/middleware/**"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Estilo de código Nuxt
|
|
12
|
+
|
|
13
|
+
> Este archivo extiende [common/coding-style.md](../common/coding-style.md) con contenido específico de Nuxt.
|
|
14
|
+
|
|
15
|
+
## Estructura de directorios
|
|
16
|
+
|
|
17
|
+
- El `srcDir` por defecto es `app/`. Los archivos del framework viven en `app/pages/`, `app/layouts/`, `app/middleware/`, `app/plugins/`, `app/app.config.ts`. `nuxt.config.ts` y `server/` se quedan en la raíz del proyecto.
|
|
18
|
+
- Algunos proyectos sobrescriben `srcDir` a `src/` para un layout tipo Feature-Sliced Design, remapeando `dir.pages` (por ejemplo a `src/app/routes`), `dir.layouts` y los alias `@`/`~`. Revisa siempre `nuxt.config.ts` antes de asumir una ruta.
|
|
19
|
+
|
|
20
|
+
## Disciplina de auto-imports
|
|
21
|
+
|
|
22
|
+
- Los composables en `app/composables/` y `server/utils/` se auto-importan. NO importes manualmente los composables de Nuxt (`useFetch`, `useState`, `navigateTo`) ni `defineStore` / `storeToRefs`.
|
|
23
|
+
- NO añadas una dependencia independiente de `vue-router` (Nuxt empaqueta la v5) ni montes a mano `createApp` / `createPinia` / `createRouter`. El framework se encarga de cablearlos.
|
|
24
|
+
|
|
25
|
+
## Macros del compilador
|
|
26
|
+
|
|
27
|
+
- `definePageMeta` es una macro de tiempo de compilación. Solo valores estáticos: nada de datos reactivos ni llamadas con efectos secundarios dentro.
|
|
28
|
+
- Amplía el tipo `PageMeta` mediante `declare module '#app'` en lugar de hacer casts.
|
|
29
|
+
|
|
30
|
+
## Separación de archivos de configuración
|
|
31
|
+
|
|
32
|
+
Tres archivos distintos; no los mezcles.
|
|
33
|
+
|
|
34
|
+
- `nuxt.config.ts` = solo tiempo de build (`routeRules`, `modules`, `nitro`, flag `ssr`). No es reactivo.
|
|
35
|
+
- `runtimeConfig` (dentro de nuxt.config) = valores de runtime por entorno, sobrescribibles vía variables `NUXT_*`. Las claves raíz son solo de servidor; las claves bajo `public` son visibles en el cliente.
|
|
36
|
+
- `app/app.config.ts` = ajustes públicos reactivos fijados en build (tokens de tema, feature flags). Sin sobrescritura por entorno. NUNCA secretos.
|
|
37
|
+
|
|
38
|
+
## Head y meta
|
|
39
|
+
|
|
40
|
+
- `app.head` en `nuxt.config.ts` acepta solo valores estáticos.
|
|
41
|
+
- Los meta reactivos van por `useHead` / `useSeoMeta` en el setup del componente, nunca vía `app.head`.
|
|
42
|
+
|
|
43
|
+
## Referencia
|
|
44
|
+
|
|
45
|
+
- Skills: `patrones-nuxt4`, `patrones-vite`, `patrones-frontend`.
|
|
46
|
+
- [Estructura de directorios de Nuxt](https://nuxt.com/docs/guide/directory-structure/app)
|
|
47
|
+
- [Configuración de Nuxt](https://nuxt.com/docs/api/nuxt-config)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/nuxt.config.*"
|
|
4
|
+
- "**/app.config.*"
|
|
5
|
+
- "**/server/**/*.ts"
|
|
6
|
+
- "**/*.vue"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Hooks de Nuxt
|
|
10
|
+
|
|
11
|
+
> Este archivo extiende [common/hooks.md](../common/hooks.md) con contenido específico de Nuxt.
|
|
12
|
+
|
|
13
|
+
Estos son hooks del harness de Theus para trabajo con Nuxt. Los ejecuta el harness, no el modelo.
|
|
14
|
+
|
|
15
|
+
## Verificación de tipos
|
|
16
|
+
|
|
17
|
+
- `nuxi typecheck` envuelve `vue-tsc`. Requiere `vue-tsc` + `typescript` como dependencias de desarrollo.
|
|
18
|
+
- Ejecútalo al editar `.vue` / `.ts` o en pre-commit. La verificación de tipos abarca todo el proyecto, así que aplícale debounce y envuélvela en un timeout (imita `web/hooks.md`, por ejemplo `timeout 60 nuxi typecheck`) para que una verificación colgada sea eliminada en lugar de acumularse entre ediciones rápidas.
|
|
19
|
+
|
|
20
|
+
## Lint
|
|
21
|
+
|
|
22
|
+
- Usa el módulo `@nuxt/eslint` (flat-config, consciente del proyecto, genera `.nuxt/eslint.config.mjs`).
|
|
23
|
+
- Ejecuta `eslint .` o `eslint --fix`. Es la integración oficial de ESLint para Nuxt; prefiérela sobre configuraciones hechas a mano.
|
|
24
|
+
|
|
25
|
+
## Formato
|
|
26
|
+
|
|
27
|
+
- `prettier --write`, o habilita las reglas estilísticas de `@nuxt/eslint` para evitar un conflicto Prettier/ESLint.
|
|
28
|
+
- Elige una única autoridad de formateo. No ejecutes Prettier y las reglas estilísticas de ESLint a la vez.
|
|
29
|
+
|
|
30
|
+
## Cadena PostToolUse sugerida
|
|
31
|
+
|
|
32
|
+
- Al editar `app/**` y `server/**`: ejecuta `eslint --fix` y después `timeout 60 nuxi typecheck`.
|
|
33
|
+
- El orden importa: primero el lint-fix (muta el archivo), después la verificación de tipos con timeout (verifica el resultado). El debounce sigue aplicando.
|
|
34
|
+
|
|
35
|
+
## Referencia
|
|
36
|
+
|
|
37
|
+
- Skills: `patrones-nuxt4`, `patrones-vite`.
|
|
38
|
+
- [Módulo @nuxt/eslint](https://eslint.nuxt.com/)
|
|
39
|
+
- [nuxi typecheck](https://nuxt.com/docs/api/commands/typecheck)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/nuxt.config.*"
|
|
4
|
+
- "**/app.config.*"
|
|
5
|
+
- "**/app.vue"
|
|
6
|
+
- "**/server/**/*.ts"
|
|
7
|
+
- "**/pages/**"
|
|
8
|
+
- "**/middleware/**"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Patrones de Nuxt
|
|
12
|
+
|
|
13
|
+
> Este archivo extiende [common/patterns.md](../common/patterns.md) con contenido específico de Nuxt.
|
|
14
|
+
|
|
15
|
+
## Selección de la herramienta de fetch de datos
|
|
16
|
+
|
|
17
|
+
Crítico. Elige según el momento de renderizado, no por costumbre.
|
|
18
|
+
|
|
19
|
+
- `useFetch(url)` = seguro en SSR, orientado a URL, para datos iniciales / del primer render. Es el valor por defecto. Reenvía el resultado del servidor a través del payload, así que no hay doble fetch en la hidratación.
|
|
20
|
+
- `useAsyncData(key, fn)` = seguro en SSR, para lógica asíncrona personalizada (SDK / GraphQL / llamadas combinadas). La clave explícita comparte el resultado entre componentes.
|
|
21
|
+
- `$fetch` = solo interacciones de cliente (envío de formulario, clic de botón, POST/PUT/DELETE). NO es seguro en SSR: provoca doble fetch si se usa para el primer render.
|
|
22
|
+
- Regla: `useFetch` / `useAsyncData` para todo lo que se renderiza en el primer paint; `$fetch` solo para mutaciones disparadas por eventos.
|
|
23
|
+
|
|
24
|
+
## Estado compartido
|
|
25
|
+
|
|
26
|
+
- `useState('key', () => init)` para estado compartido seguro en SSR. Los valores deben ser serializables a JSON.
|
|
27
|
+
- NUNCA `export const x = ref()` a nivel de módulo. Una única instancia compartida se filtra entre peticiones SSR concurrentes y provoca una fuga de memoria.
|
|
28
|
+
- Con `@pinia/nuxt`: Pinia para el estado de dominio, `useState` para primitivos pequeños entre componentes.
|
|
29
|
+
- La inicialización asíncrona del lado del servidor va en `callOnce(async () => {...})`, no como efecto secundario dentro de `useAsyncData`.
|
|
30
|
+
|
|
31
|
+
## Rutas de servidor Nitro
|
|
32
|
+
|
|
33
|
+
- `server/api/*.{get,post}.ts` se auto-registran por ruta + método. El handler es `defineEventHandler((event) => ...)`.
|
|
34
|
+
- Errores vía `throw createError({ status, statusText })`. Prefiere `status` / `statusText` (Web API) sobre los obsoletos `statusCode` / `statusMessage`.
|
|
35
|
+
- `server/middleware/` NO debe devolver una respuesta. Solo mutar `event.context` o establecer cabeceras.
|
|
36
|
+
|
|
37
|
+
## Middleware de rutas
|
|
38
|
+
|
|
39
|
+
- `app/middleware/*.ts` con `defineNuxtRouteMiddleware((to, from) => ...)`.
|
|
40
|
+
- Usa los argumentos `to` / `from`. NO llames a `useRoute()` dentro del middleware.
|
|
41
|
+
- El sufijo `.global` lo ejecuta en cada ruta. Devuelve `navigateTo()` para redirigir, `abortNavigation()` para detener.
|
|
42
|
+
|
|
43
|
+
## Renderizado seguro frente a la hidratación
|
|
44
|
+
|
|
45
|
+
- Enruta según `status` (`idle | pending | success | error`) para fetches perezosos.
|
|
46
|
+
- El payload de `useAsyncData` usa `devalue` (Date/Map/Set/refs sobreviven). Una respuesta de `server/api` es solo `JSON.stringify`, así que define `toJSON()` para los tipos no JSON.
|
|
47
|
+
- Reduce el payload con `pick` / `transform`. Esto reduce el tamaño serializado; no evita el fetch.
|
|
48
|
+
|
|
49
|
+
## Referencia
|
|
50
|
+
|
|
51
|
+
- Skills: `patrones-nuxt4`, `patrones-vite`, `patrones-frontend`.
|
|
52
|
+
- [Fetch de datos en Nuxt](https://nuxt.com/docs/getting-started/data-fetching)
|
|
53
|
+
- [Gestión de estado en Nuxt](https://nuxt.com/docs/getting-started/state-management)
|
|
54
|
+
- [Motor de servidor de Nuxt (Nitro)](https://nuxt.com/docs/guide/directory-structure/server)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/nuxt.config.*"
|
|
4
|
+
- "**/app.config.*"
|
|
5
|
+
- "**/server/**/*.ts"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Seguridad en Nuxt
|
|
9
|
+
|
|
10
|
+
> Este archivo extiende [common/security.md](../common/security.md) con contenido específico de Nuxt.
|
|
11
|
+
|
|
12
|
+
## runtimeConfig público vs privado
|
|
13
|
+
|
|
14
|
+
- Las claves raíz de `runtimeConfig` son solo de servidor. `runtimeConfig.public` se serializa en el payload de CADA página (visible en el cliente).
|
|
15
|
+
- Los secretos van solo en la raíz. Nunca pongas secretos en `app.config.ts` ni en `runtimeConfig.public`: ambos llegan al bundle del cliente.
|
|
16
|
+
- Advertencia oficial: "Cuida de no exponer claves de la configuración de runtime al lado cliente, ya sea renderizándolas o pasándolas a `useState`."
|
|
17
|
+
|
|
18
|
+
## Validación de entrada en rutas de servidor
|
|
19
|
+
|
|
20
|
+
- Usa los lectores validadores de h3. NO confíes en `readBody` / `getQuery` / `getRouterParam` crudos.
|
|
21
|
+
- `readValidatedBody(event, schema)` valida el body.
|
|
22
|
+
- `getValidatedQuery(event, schema)` valida la query.
|
|
23
|
+
- `getValidatedRouterParams(event, schema)` valida los parámetros de ruta.
|
|
24
|
+
- Todos aceptan una función de validación o un esquema Zod y lanzan un error si falla.
|
|
25
|
+
|
|
26
|
+
## Fuga por el payload de SSR
|
|
27
|
+
|
|
28
|
+
- Todo lo que esté en `useState`, en resultados de `useFetch` / `useAsyncData` o en `runtimeConfig.public` se serializa en el payload del cliente. Nunca escribas un secreto ahí.
|
|
29
|
+
- Usa `useServerSeoMeta` para meta solo de servidor sin coste en el cliente.
|
|
30
|
+
|
|
31
|
+
## Cookies y passthrough de autenticación en SSR
|
|
32
|
+
|
|
33
|
+
- Nuxt NO adjunta automáticamente las cookies del usuario entrante a los `$fetch` salientes del lado del servidor.
|
|
34
|
+
- Reenvíalas explícitamente con `useRequestFetch()` (lo más limpio, ya viene ligado a las cabeceras de la petición) o `useRequestHeaders(['cookie'])`.
|
|
35
|
+
- Retransmite un `Set-Cookie` del backend al navegador vía `$fetch.raw` + `appendResponseHeader(event, 'set-cookie', ...)`.
|
|
36
|
+
- socket.io es solo de cliente (plugin `.client.ts`), nunca en SSR.
|
|
37
|
+
|
|
38
|
+
## SSRF en `$fetch` de servidor
|
|
39
|
+
|
|
40
|
+
- Las rutas de servidor corren con salida de red completa. Nunca pases entrada controlada por el usuario directamente a la URL o al host de un `$fetch` del lado del servidor.
|
|
41
|
+
- Valida primero el parámetro (utilidades de h3 de arriba), usa una lista de permitidos para el destino, fíjalo a `runtimeConfig.public.apiBase` y rechaza URLs absolutas suministradas por el usuario.
|
|
42
|
+
- Usa el agente `revisor-seguridad` solo para rutas que hagan peticiones de red externas (`$fetch` de servidor), manejen tokens o credenciales de autenticación, o realicen mutaciones sensibles o verificaciones de autorización. Ejemplos: endpoints proxy propensos a SSRF, intercambio de tokens o restablecimiento de contraseña, acciones de administración. Omite las rutas benignas de solo lectura que solo aceptan parámetros de query validados.
|
|
43
|
+
|
|
44
|
+
## Referencia
|
|
45
|
+
|
|
46
|
+
- Skills: `revision-seguridad`, `patrones-nuxt4`.
|
|
47
|
+
- [Configuración de runtime de Nuxt](https://nuxt.com/docs/guide/going-further/runtime-config)
|
|
48
|
+
- [Utilidades de petición de h3](https://v1.h3.dev/utils/request)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/nuxt.config.*"
|
|
4
|
+
- "**/server/**/*.ts"
|
|
5
|
+
- "**/pages/**"
|
|
6
|
+
- "**/layouts/**"
|
|
7
|
+
- "**/middleware/**"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Testing en Nuxt
|
|
11
|
+
|
|
12
|
+
> Este archivo extiende [common/testing.md](../common/testing.md) con contenido específico de Nuxt.
|
|
13
|
+
|
|
14
|
+
Paquete: `@nuxt/test-utils`. Vitest-first para tests unitarios y de componentes, con soporte integrado de E2E en navegador vía Playwright. nuxt-vitest y vitest-environment-nuxt quedaron obsoletos y están absorbidos en él.
|
|
15
|
+
|
|
16
|
+
## Configuración
|
|
17
|
+
|
|
18
|
+
- Instala las dependencias de desarrollo: `@nuxt/test-utils vitest @vue/test-utils happy-dom playwright-core`.
|
|
19
|
+
- Configuración: `defineVitestConfig({ test: { environment: 'nuxt' } })` desde `@nuxt/test-utils/config`. Usa `defineVitestProject` para multi-proyecto (entornos separados unit / nuxt / e2e).
|
|
20
|
+
- Añade `@nuxt/test-utils/module` a `nuxt.config`. Opt-in por archivo vía `// @vitest-environment nuxt`.
|
|
21
|
+
|
|
22
|
+
## Helpers de runtime
|
|
23
|
+
|
|
24
|
+
Impórtalos desde `@nuxt/test-utils/runtime`.
|
|
25
|
+
|
|
26
|
+
- `mountSuspended(component, opts)` monta en el entorno de Nuxt con setup asíncrono + inyección de plugins (acepta las opciones de mount de `@vue/test-utils` + `route`).
|
|
27
|
+
- `renderSuspended(component, opts)` es la variante de Testing Library (necesita `@testing-library/vue`).
|
|
28
|
+
- `mockNuxtImport(name, factory)` mockea auto-imports (p. ej. `useState`). Una vez por import por archivo; usa `vi.hoisted()`.
|
|
29
|
+
- `mockComponent(name, factory)` mockea por nombre en PascalCase o por ruta.
|
|
30
|
+
- `registerEndpoint(path, handler|opts)` mockea un endpoint de Nitro para probar rutas de servidor o simular el backend. Soporta método + `once`.
|
|
31
|
+
|
|
32
|
+
## Helpers de E2E
|
|
33
|
+
|
|
34
|
+
Impórtalos desde `@nuxt/test-utils/e2e`.
|
|
35
|
+
|
|
36
|
+
- `await setup({ rootDir, server, browser, ... })` dentro del bloque describe (gestiona beforeAll/afterAll).
|
|
37
|
+
- Después: `$fetch(url)` (HTML renderizado), `fetch(url)` (objeto de respuesta), `url(path)` (URL completa con puerto), `createPage(url)` (Playwright).
|
|
38
|
+
- Integración con Playwright: importa `expect` / `test` desde `@nuxt/test-utils/playwright`.
|
|
39
|
+
|
|
40
|
+
## Qué probar y cómo
|
|
41
|
+
|
|
42
|
+
- Composables: mockea los auto-imports con `mockNuxtImport` y monta un componente anfitrión vía `mountSuspended` para ejercitar `useState` / `useFetch` en el runtime de Nuxt.
|
|
43
|
+
- Rutas de servidor: `registerEndpoint` para simularlas, o E2E con `$fetch` / `fetch` contra el servidor Nitro real.
|
|
44
|
+
|
|
45
|
+
## Referencia
|
|
46
|
+
|
|
47
|
+
- Skills: `patrones-nuxt4`, `testing-e2e`, `patrones-vite`.
|
|
48
|
+
- [Documentación de testing de Nuxt](https://nuxt.com/docs/getting-started/testing)
|
|
49
|
+
- [@nuxt/test-utils en npm](https://www.npmjs.com/package/@nuxt/test-utils)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/composer.json"
|
|
5
|
+
---
|
|
6
|
+
# Estilo de código PHP
|
|
7
|
+
|
|
8
|
+
> Este archivo extiende [common/coding-style.md](../common/coding-style.md) con contenido específico de PHP.
|
|
9
|
+
|
|
10
|
+
## Estándares
|
|
11
|
+
|
|
12
|
+
- Sigue las convenciones de formato y nombres de **PSR-12**.
|
|
13
|
+
- Prefiere `declare(strict_types=1);` en código de aplicación.
|
|
14
|
+
- Usa type hints escalares, tipos de retorno y propiedades tipadas en todo lugar donde el código nuevo lo permita.
|
|
15
|
+
|
|
16
|
+
## Inmutabilidad
|
|
17
|
+
|
|
18
|
+
- Prefiere DTOs inmutables y value objects para los datos que cruzan fronteras entre servicios.
|
|
19
|
+
- Usa propiedades `readonly` o constructores inmutables para los payloads de request/response siempre que sea posible.
|
|
20
|
+
- Mantén arrays para mapas simples; promueve las estructuras críticas para el negocio a clases explícitas.
|
|
21
|
+
|
|
22
|
+
## Formato
|
|
23
|
+
|
|
24
|
+
- Usa **PHP-CS-Fixer** o **Laravel Pint** para el formateo.
|
|
25
|
+
- Usa **PHPStan** o **Psalm** para el análisis estático.
|
|
26
|
+
- Mantén los scripts de Composer versionados en el repo para que los mismos comandos corran en local y en CI.
|
|
27
|
+
|
|
28
|
+
## Imports
|
|
29
|
+
|
|
30
|
+
- Añade sentencias `use` para todas las clases, interfaces y traits referenciados.
|
|
31
|
+
- Evita depender del namespace global salvo que el proyecto prefiera explícitamente nombres totalmente cualificados.
|
|
32
|
+
|
|
33
|
+
## Manejo de errores
|
|
34
|
+
|
|
35
|
+
- Lanza excepciones para estados excepcionales; evita devolver `false`/`null` como canales de error ocultos en código nuevo.
|
|
36
|
+
- Convierte la entrada del framework/request en DTOs validados antes de que llegue a la lógica de dominio.
|
|
37
|
+
|
|
38
|
+
## Referencia
|
|
39
|
+
|
|
40
|
+
Consulta la skill `patrones-backend` para una guía más amplia sobre capas de servicios y repositorios.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/composer.json"
|
|
5
|
+
- "**/phpstan.neon"
|
|
6
|
+
- "**/phpstan.neon.dist"
|
|
7
|
+
- "**/psalm.xml"
|
|
8
|
+
---
|
|
9
|
+
# Hooks para PHP
|
|
10
|
+
|
|
11
|
+
> Este archivo extiende [common/hooks.md](../common/hooks.md) con contenido específico de PHP.
|
|
12
|
+
|
|
13
|
+
## Hooks PostToolUse
|
|
14
|
+
|
|
15
|
+
Configúralos en `~/.theus/settings.json`:
|
|
16
|
+
|
|
17
|
+
- **Pint / PHP-CS-Fixer**: auto-formatea los archivos `.php` editados.
|
|
18
|
+
- **PHPStan / Psalm**: ejecuta análisis estático tras ediciones de PHP en bases de código tipadas.
|
|
19
|
+
- **PHPUnit / Pest**: ejecuta tests dirigidos a los archivos o módulos tocados cuando las ediciones afectan el comportamiento.
|
|
20
|
+
|
|
21
|
+
## Advertencias
|
|
22
|
+
|
|
23
|
+
- Advierte sobre `var_dump`, `dd`, `dump` o `die()` que queden en archivos editados.
|
|
24
|
+
- Advierte cuando archivos PHP editados añadan SQL crudo o deshabiliten protecciones CSRF/de sesión.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/composer.json"
|
|
5
|
+
---
|
|
6
|
+
# Patrones de PHP
|
|
7
|
+
|
|
8
|
+
> Este archivo extiende [common/patterns.md](../common/patterns.md) con contenido específico de PHP.
|
|
9
|
+
|
|
10
|
+
## Controladores delgados, servicios explícitos
|
|
11
|
+
|
|
12
|
+
- Mantén los controladores enfocados en el transporte: auth, validación, serialización, códigos de estado.
|
|
13
|
+
- Mueve las reglas de negocio a servicios de aplicación/dominio que sean fáciles de testear sin arrancar toda la capa HTTP.
|
|
14
|
+
|
|
15
|
+
## DTOs y value objects
|
|
16
|
+
|
|
17
|
+
- Reemplaza los arrays asociativos con muchas formas implícitas por DTOs para requests, comandos y payloads de APIs externas.
|
|
18
|
+
- Usa value objects para dinero, identificadores, rangos de fechas y otros conceptos con restricciones.
|
|
19
|
+
|
|
20
|
+
## Inyección de dependencias
|
|
21
|
+
|
|
22
|
+
- Depende de interfaces o contratos de servicio acotados, no de globals del framework.
|
|
23
|
+
- Pasa los colaboradores por los constructores para que los servicios sean testeables sin búsquedas por service locator.
|
|
24
|
+
|
|
25
|
+
## Fronteras
|
|
26
|
+
|
|
27
|
+
- Aísla los modelos del ORM de las decisiones de dominio cuando la capa de modelos hace más que persistencia.
|
|
28
|
+
- Envuelve los SDKs de terceros detrás de adaptadores pequeños para que el resto del código dependa de tu contrato, no del de ellos.
|
|
29
|
+
|
|
30
|
+
## Referencia
|
|
31
|
+
|
|
32
|
+
Consulta la skill `diseno-api` para convenciones de endpoints y guía sobre la forma de las respuestas.
|
|
33
|
+
Consulta la skill `patrones-laravel` para guía de arquitectura específica de Laravel.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/composer.lock"
|
|
5
|
+
- "**/composer.json"
|
|
6
|
+
---
|
|
7
|
+
# Seguridad en PHP
|
|
8
|
+
|
|
9
|
+
> Este archivo extiende [common/security.md](../common/security.md) con contenido específico de PHP.
|
|
10
|
+
|
|
11
|
+
## Entrada y salida
|
|
12
|
+
|
|
13
|
+
- Valida la entrada de los requests en la frontera del framework (`FormRequest`, Symfony Validator o validación explícita con DTOs).
|
|
14
|
+
- Escapa la salida en las plantillas por defecto; trata el renderizado de HTML crudo como una excepción que debe justificarse.
|
|
15
|
+
- Nunca confíes en query params, cookies, headers ni metadatos de archivos subidos sin validarlos.
|
|
16
|
+
|
|
17
|
+
## Seguridad de base de datos
|
|
18
|
+
|
|
19
|
+
- Usa sentencias preparadas (`PDO`, Doctrine, el query builder de Eloquent) para todas las consultas dinámicas.
|
|
20
|
+
- Evita construir SQL concatenando strings en controladores/vistas.
|
|
21
|
+
- Acota con cuidado la asignación masiva del ORM y usa una lista blanca de campos escribibles.
|
|
22
|
+
|
|
23
|
+
## Secretos y dependencias
|
|
24
|
+
|
|
25
|
+
- Carga los secretos desde variables de entorno o un gestor de secretos, nunca desde archivos de configuración commiteados.
|
|
26
|
+
- Ejecuta `composer audit` en CI y revisa la confianza en los mantenedores de cada paquete nuevo antes de añadir dependencias.
|
|
27
|
+
- Fija las versiones mayores de forma deliberada y elimina rápido los paquetes abandonados.
|
|
28
|
+
|
|
29
|
+
## Seguridad de auth y sesiones
|
|
30
|
+
|
|
31
|
+
- Usa `password_hash()` / `password_verify()` para el almacenamiento de contraseñas.
|
|
32
|
+
- Regenera los identificadores de sesión tras la autenticación y tras cambios de privilegios.
|
|
33
|
+
- Exige protección CSRF en los requests web que cambian estado.
|
|
34
|
+
|
|
35
|
+
## Referencia
|
|
36
|
+
|
|
37
|
+
Consulta la skill `seguridad-laravel` para guía de seguridad específica de Laravel.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.php"
|
|
4
|
+
- "**/phpunit.xml"
|
|
5
|
+
- "**/phpunit.xml.dist"
|
|
6
|
+
- "**/composer.json"
|
|
7
|
+
---
|
|
8
|
+
# Testing en PHP
|
|
9
|
+
|
|
10
|
+
> Este archivo extiende [common/testing.md](../common/testing.md) con contenido específico de PHP.
|
|
11
|
+
|
|
12
|
+
## Framework
|
|
13
|
+
|
|
14
|
+
Usa **PHPUnit** como framework de tests por defecto. Si el proyecto tiene configurado **Pest**, prefiere Pest para los tests nuevos y evita mezclar frameworks.
|
|
15
|
+
|
|
16
|
+
## Cobertura
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
vendor/bin/phpunit --coverage-text
|
|
20
|
+
# o
|
|
21
|
+
vendor/bin/pest --coverage
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Prefiere **pcov** o **Xdebug** en CI, y mantén los umbrales de cobertura en CI en lugar de como conocimiento tribal.
|
|
25
|
+
|
|
26
|
+
## Organización de tests
|
|
27
|
+
|
|
28
|
+
- Separa los tests unitarios rápidos de los tests de integración con framework/base de datos.
|
|
29
|
+
- Usa factories/builders para las fixtures en lugar de arrays grandes escritos a mano.
|
|
30
|
+
- Mantén los tests de HTTP/controladores enfocados en transporte y validación; mueve las reglas de negocio a tests a nivel de servicio.
|
|
31
|
+
|
|
32
|
+
## Inertia
|
|
33
|
+
|
|
34
|
+
Si el proyecto usa Inertia.js, prefiere `assertInertia` con `AssertableInertia` para verificar nombres de componentes y props en lugar de aserciones sobre JSON crudo.
|
|
35
|
+
|
|
36
|
+
## Referencia
|
|
37
|
+
|
|
38
|
+
Consulta la skill `flujo-tdd` para el ciclo RED -> GREEN -> REFACTOR a nivel de repo.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.py"
|
|
4
|
+
- "**/*.pyi"
|
|
5
|
+
---
|
|
6
|
+
# Estilo de código Python
|
|
7
|
+
|
|
8
|
+
> Este archivo extiende [common/coding-style.md](../common/coding-style.md) con contenido específico de Python.
|
|
9
|
+
|
|
10
|
+
## Estándares
|
|
11
|
+
|
|
12
|
+
- Sigue las convenciones de **PEP 8**
|
|
13
|
+
- Usa **anotaciones de tipo** en todas las firmas de funciones
|
|
14
|
+
|
|
15
|
+
## Inmutabilidad
|
|
16
|
+
|
|
17
|
+
Prefiere estructuras de datos inmutables:
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
from dataclasses import dataclass
|
|
21
|
+
|
|
22
|
+
@dataclass(frozen=True)
|
|
23
|
+
class User:
|
|
24
|
+
name: str
|
|
25
|
+
email: str
|
|
26
|
+
|
|
27
|
+
from typing import NamedTuple
|
|
28
|
+
|
|
29
|
+
class Point(NamedTuple):
|
|
30
|
+
x: float
|
|
31
|
+
y: float
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Formato
|
|
35
|
+
|
|
36
|
+
- **black** para el formateo del código
|
|
37
|
+
- **isort** para ordenar los imports
|
|
38
|
+
- **ruff** para el linting
|
|
39
|
+
|
|
40
|
+
## Referencia
|
|
41
|
+
|
|
42
|
+
Consulta la skill `patrones-python` para idiomas y patrones de Python en profundidad.
|