theus-cli-linux-arm64 1.2.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -11
- package/RELEASE.json +6 -6
- package/bin/theus +0 -0
- package/package.json +1 -1
- package/vendor/higiene-motor/PARCHES.md +244 -0
- package/vendor/higiene-motor/audit_dir.py +166 -0
- package/vendor/higiene-motor/audit_lib.py +333 -0
- package/vendor/higiene-motor/audit_website.py +635 -0
- package/vendor/higiene-motor/av_meta.py +498 -0
- package/vendor/higiene-motor/check_staged.py +71 -0
- package/vendor/higiene-motor/clean_ctrlregen.py +212 -0
- package/vendor/higiene-motor/clean_file.py +237 -0
- package/vendor/higiene-motor/clean_image.py +218 -0
- package/vendor/higiene-motor/clean_staged.py +143 -0
- package/vendor/higiene-motor/clean_text.py +108 -0
- package/vendor/higiene-motor/common.py +486 -0
- package/vendor/higiene-motor/container_meta.py +2522 -0
- package/vendor/higiene-motor/detect_gumbel.py +308 -0
- package/vendor/higiene-motor/detect_text_watermark.py +613 -0
- package/vendor/higiene-motor/format_dispatch.py +157 -0
- package/vendor/higiene-motor/hook_written_file.py +253 -0
- package/vendor/higiene-motor/image_meta.py +2171 -0
- package/vendor/higiene-motor/inspect_file.py +138 -0
- package/vendor/higiene-motor/inspect_image.py +72 -0
- package/vendor/higiene-motor/inspect_text.py +86 -0
- package/vendor/higiene-motor/markdiffusion_harness.py +533 -0
- package/vendor/higiene-motor/rewrite_text.py +737 -0
- package/vendor/higiene-motor/score_stylometry.py +460 -0
- package/vendor/higiene-motor/score_synthid.py +165 -0
- package/vendor/higiene-motor/server.py +1059 -0
- package/vendor/higiene-motor/synthid_score_server.py +176 -0
- package/vendor/higiene-motor/text_detectors.py +433 -0
- package/vendor/higiene-motor/text_unicode.py +730 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola2.json +0 -6
- package/vendor/theus-arsenal/.arsenal-nombres-ola3.json +0 -72
- package/vendor/theus-arsenal/.mailmap +0 -2
- package/vendor/theus-arsenal/.theus-plugin/marketplace.json +0 -25
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +0 -20
- package/vendor/theus-arsenal/AUTHORS.md +0 -8
- package/vendor/theus-arsenal/CLEANROOM_REPLACEMENT_PLAN.md +0 -11
- package/vendor/theus-arsenal/LICENSE +0 -26
- package/vendor/theus-arsenal/PROVENANCE.md +0 -9
- package/vendor/theus-arsenal/README.md +0 -41
- package/vendor/theus-arsenal/THIRD_PARTY.md +0 -80
- package/vendor/theus-arsenal/agents/actualizador-docs.md +0 -123
- package/vendor/theus-arsenal/agents/analista-comentarios.md +0 -53
- package/vendor/theus-arsenal/agents/analista-conversaciones.md +0 -60
- package/vendor/theus-arsenal/agents/analista-tests-pr.md +0 -53
- package/vendor/theus-arsenal/agents/analista-tipos.md +0 -49
- package/vendor/theus-arsenal/agents/arquitecto-accesibilidad.md +0 -148
- package/vendor/theus-arsenal/agents/arquitecto-codigo.md +0 -79
- package/vendor/theus-arsenal/agents/arquitecto-homelab.md +0 -90
- package/vendor/theus-arsenal/agents/arquitecto-redes.md +0 -116
- package/vendor/theus-arsenal/agents/arquitecto-sistemas.md +0 -219
- package/vendor/theus-arsenal/agents/bifurcador-opensource.md +0 -206
- package/vendor/theus-arsenal/agents/cazador-fallos-silenciosos.md +0 -58
- package/vendor/theus-arsenal/agents/consultor-documentacion.md +0 -76
- package/vendor/theus-arsenal/agents/diagnosticador-redes.md +0 -135
- package/vendor/theus-arsenal/agents/ejecutor-e2e.md +0 -96
- package/vendor/theus-arsenal/agents/empaquetador-opensource.md +0 -257
- package/vendor/theus-arsenal/agents/escaner-secretos.md +0 -196
- package/vendor/theus-arsenal/agents/especialista-seo.md +0 -70
- package/vendor/theus-arsenal/agents/estratega-marketing.md +0 -158
- package/vendor/theus-arsenal/agents/evaluador-agentes.md +0 -214
- package/vendor/theus-arsenal/agents/evaluador-harness.md +0 -217
- package/vendor/theus-arsenal/agents/explorador-codigo.md +0 -79
- package/vendor/theus-arsenal/agents/extractor-specs.md +0 -214
- package/vendor/theus-arsenal/agents/generador-harness.md +0 -139
- package/vendor/theus-arsenal/agents/guia-tdd.md +0 -99
- package/vendor/theus-arsenal/agents/jefe-de-gabinete.md +0 -162
- package/vendor/theus-arsenal/agents/limpiador-refactors.md +0 -93
- package/vendor/theus-arsenal/agents/optimizador-rendimiento.md +0 -454
- package/vendor/theus-arsenal/agents/planificador-harness.md +0 -107
- package/vendor/theus-arsenal/agents/planificador.md +0 -221
- package/vendor/theus-arsenal/agents/resolutor-apps-harmonyos.md +0 -181
- package/vendor/theus-arsenal/agents/resolutor-builds-cpp.md +0 -98
- package/vendor/theus-arsenal/agents/resolutor-builds-dart.md +0 -209
- package/vendor/theus-arsenal/agents/resolutor-builds-django.md +0 -253
- package/vendor/theus-arsenal/agents/resolutor-builds-go.md +0 -102
- package/vendor/theus-arsenal/agents/resolutor-builds-java.md +0 -274
- package/vendor/theus-arsenal/agents/resolutor-builds-kotlin.md +0 -128
- package/vendor/theus-arsenal/agents/resolutor-builds-pytorch.md +0 -128
- package/vendor/theus-arsenal/agents/resolutor-builds-react.md +0 -214
- package/vendor/theus-arsenal/agents/resolutor-builds-rust.md +0 -156
- package/vendor/theus-arsenal/agents/resolutor-builds-swift.md +0 -169
- package/vendor/theus-arsenal/agents/resolutor-builds.md +0 -122
- package/vendor/theus-arsenal/agents/revisor-bd.md +0 -97
- package/vendor/theus-arsenal/agents/revisor-codigo.md +0 -291
- package/vendor/theus-arsenal/agents/revisor-config-red.md +0 -116
- package/vendor/theus-arsenal/agents/revisor-cpp.md +0 -80
- package/vendor/theus-arsenal/agents/revisor-csharp.md +0 -109
- package/vendor/theus-arsenal/agents/revisor-django.md +0 -168
- package/vendor/theus-arsenal/agents/revisor-fastapi.md +0 -82
- package/vendor/theus-arsenal/agents/revisor-flutter.md +0 -251
- package/vendor/theus-arsenal/agents/revisor-go.md +0 -84
- package/vendor/theus-arsenal/agents/revisor-java.md +0 -192
- package/vendor/theus-arsenal/agents/revisor-kotlin.md +0 -171
- package/vendor/theus-arsenal/agents/revisor-ml.md +0 -159
- package/vendor/theus-arsenal/agents/revisor-php.md +0 -108
- package/vendor/theus-arsenal/agents/revisor-python.md +0 -106
- package/vendor/theus-arsenal/agents/revisor-react.md +0 -166
- package/vendor/theus-arsenal/agents/revisor-rust.md +0 -102
- package/vendor/theus-arsenal/agents/revisor-seguridad.md +0 -116
- package/vendor/theus-arsenal/agents/revisor-software-clinico.md +0 -95
- package/vendor/theus-arsenal/agents/revisor-swift.md +0 -115
- package/vendor/theus-arsenal/agents/revisor-typescript.md +0 -123
- package/vendor/theus-arsenal/agents/revisor-vue.md +0 -205
- package/vendor/theus-arsenal/agents/simplificador-codigo.md +0 -55
- package/vendor/theus-arsenal/commands/actualizar-docs.md +0 -88
- package/vendor/theus-arsenal/commands/actualizar-mapas-codigo.md +0 -78
- package/vendor/theus-arsenal/commands/aprender-evaluar.md +0 -109
- package/vendor/theus-arsenal/commands/aprender.md +0 -74
- package/vendor/theus-arsenal/commands/arreglar-build.md +0 -66
- package/vendor/theus-arsenal/commands/bucle-multiperspectiva.md +0 -153
- package/vendor/theus-arsenal/commands/build-cpp.md +0 -173
- package/vendor/theus-arsenal/commands/build-flutter.md +0 -164
- package/vendor/theus-arsenal/commands/build-go.md +0 -183
- package/vendor/theus-arsenal/commands/build-gradle.md +0 -75
- package/vendor/theus-arsenal/commands/build-kotlin.md +0 -176
- package/vendor/theus-arsenal/commands/build-react.md +0 -187
- package/vendor/theus-arsenal/commands/build-rust.md +0 -187
- package/vendor/theus-arsenal/commands/campana-marketing.md +0 -125
- package/vendor/theus-arsenal/commands/checkpoint.md +0 -78
- package/vendor/theus-arsenal/commands/cobertura-tests.md +0 -73
- package/vendor/theus-arsenal/commands/configurar-gestor-paquetes.md +0 -86
- package/vendor/theus-arsenal/commands/consulta.md +0 -164
- package/vendor/theus-arsenal/commands/control-calidad.md +0 -50
- package/vendor/theus-arsenal/commands/crear-skill.md +0 -77
- package/vendor/theus-arsenal/commands/enrutar-modelo.md +0 -30
- package/vendor/theus-arsenal/commands/epica-desbloquear.md +0 -17
- package/vendor/theus-arsenal/commands/epica-descomponer.md +0 -22
- package/vendor/theus-arsenal/commands/epica-publicar.md +0 -21
- package/vendor/theus-arsenal/commands/epica-reclamar.md +0 -25
- package/vendor/theus-arsenal/commands/epica-revisar.md +0 -22
- package/vendor/theus-arsenal/commands/epica-sincronizar.md +0 -21
- package/vendor/theus-arsenal/commands/epica-validar.md +0 -21
- package/vendor/theus-arsenal/commands/evolucionar.md +0 -176
- package/vendor/theus-arsenal/commands/funcionalidad.md +0 -49
- package/vendor/theus-arsenal/commands/guardar-sesion.md +0 -278
- package/vendor/theus-arsenal/commands/harness-build.md +0 -111
- package/vendor/theus-arsenal/commands/harness-diseno.md +0 -46
- package/vendor/theus-arsenal/commands/informe-costos.md +0 -90
- package/vendor/theus-arsenal/commands/iniciar-bucle.md +0 -36
- package/vendor/theus-arsenal/commands/instintos-estado.md +0 -53
- package/vendor/theus-arsenal/commands/instintos-exportar.md +0 -69
- package/vendor/theus-arsenal/commands/instintos-importar.md +0 -120
- package/vendor/theus-arsenal/commands/lienzo-planes.md +0 -48
- package/vendor/theus-arsenal/commands/limpiar-refactor.md +0 -84
- package/vendor/theus-arsenal/commands/modo-seguro.md +0 -96
- package/vendor/theus-arsenal/commands/orq-agregar-funcionalidad.md +0 -36
- package/vendor/theus-arsenal/commands/orq-cambiar-funcionalidad.md +0 -38
- package/vendor/theus-arsenal/commands/orq-construir-mvp.md +0 -36
- package/vendor/theus-arsenal/commands/orq-corregir-defecto.md +0 -40
- package/vendor/theus-arsenal/commands/orq-refinar-codigo.md +0 -44
- package/vendor/theus-arsenal/commands/orq-revisar.md +0 -135
- package/vendor/theus-arsenal/commands/plan-prd.md +0 -160
- package/vendor/theus-arsenal/commands/plan.md +0 -198
- package/vendor/theus-arsenal/commands/podar.md +0 -31
- package/vendor/theus-arsenal/commands/pr.md +0 -181
- package/vendor/theus-arsenal/commands/promover.md +0 -41
- package/vendor/theus-arsenal/commands/proyectos.md +0 -33
- package/vendor/theus-arsenal/commands/prp-commit.md +0 -112
- package/vendor/theus-arsenal/commands/prp-implementar.md +0 -385
- package/vendor/theus-arsenal/commands/prp-planificar.md +0 -501
- package/vendor/theus-arsenal/commands/reanudar-sesion.md +0 -160
- package/vendor/theus-arsenal/commands/revisar-codigo.md +0 -289
- package/vendor/theus-arsenal/commands/revisar-cpp.md +0 -132
- package/vendor/theus-arsenal/commands/revisar-fastapi.md +0 -39
- package/vendor/theus-arsenal/commands/revisar-flutter.md +0 -115
- package/vendor/theus-arsenal/commands/revisar-go.md +0 -148
- package/vendor/theus-arsenal/commands/revisar-kotlin.md +0 -140
- package/vendor/theus-arsenal/commands/revisar-pr.md +0 -37
- package/vendor/theus-arsenal/commands/revisar-python.md +0 -297
- package/vendor/theus-arsenal/commands/revisar-react.md +0 -170
- package/vendor/theus-arsenal/commands/revisar-rust.md +0 -142
- package/vendor/theus-arsenal/commands/revisar-vue.md +0 -174
- package/vendor/theus-arsenal/commands/salud-skills.md +0 -52
- package/vendor/theus-arsenal/commands/sesiones.md +0 -345
- package/vendor/theus-arsenal/commands/test-cpp.md +0 -252
- package/vendor/theus-arsenal/commands/test-flutter.md +0 -143
- package/vendor/theus-arsenal/commands/test-go.md +0 -268
- package/vendor/theus-arsenal/commands/test-kotlin.md +0 -312
- package/vendor/theus-arsenal/commands/test-react.md +0 -265
- package/vendor/theus-arsenal/commands/test-rust.md +0 -309
- package/vendor/theus-arsenal/commands/vigilancia-canary.md +0 -43
- package/vendor/theus-arsenal/hooks/hooks.json +0 -274
- package/vendor/theus-arsenal/package.json +0 -6
- package/vendor/theus-arsenal/rules/angular/coding-style.md +0 -182
- package/vendor/theus-arsenal/rules/angular/hooks.md +0 -25
- package/vendor/theus-arsenal/rules/angular/patterns.md +0 -249
- package/vendor/theus-arsenal/rules/angular/security.md +0 -87
- package/vendor/theus-arsenal/rules/angular/testing.md +0 -164
- package/vendor/theus-arsenal/rules/arkts/coding-style.md +0 -153
- package/vendor/theus-arsenal/rules/arkts/hooks.md +0 -80
- package/vendor/theus-arsenal/rules/arkts/patterns.md +0 -236
- package/vendor/theus-arsenal/rules/arkts/security.md +0 -141
- package/vendor/theus-arsenal/rules/arkts/testing.md +0 -126
- package/vendor/theus-arsenal/rules/common/agents.md +0 -49
- package/vendor/theus-arsenal/rules/common/code-review.md +0 -123
- package/vendor/theus-arsenal/rules/common/coding-style.md +0 -90
- package/vendor/theus-arsenal/rules/common/development-workflow.md +0 -44
- package/vendor/theus-arsenal/rules/common/git-workflow.md +0 -24
- package/vendor/theus-arsenal/rules/common/hooks.md +0 -32
- package/vendor/theus-arsenal/rules/common/patterns.md +0 -31
- package/vendor/theus-arsenal/rules/common/performance.md +0 -53
- package/vendor/theus-arsenal/rules/common/security.md +0 -29
- package/vendor/theus-arsenal/rules/common/testing.md +0 -57
- package/vendor/theus-arsenal/rules/cpp/coding-style.md +0 -44
- package/vendor/theus-arsenal/rules/cpp/hooks.md +0 -39
- package/vendor/theus-arsenal/rules/cpp/patterns.md +0 -51
- package/vendor/theus-arsenal/rules/cpp/security.md +0 -51
- package/vendor/theus-arsenal/rules/cpp/testing.md +0 -44
- package/vendor/theus-arsenal/rules/csharp/coding-style.md +0 -72
- package/vendor/theus-arsenal/rules/csharp/hooks.md +0 -25
- package/vendor/theus-arsenal/rules/csharp/patterns.md +0 -50
- package/vendor/theus-arsenal/rules/csharp/security.md +0 -58
- package/vendor/theus-arsenal/rules/csharp/testing.md +0 -50
- package/vendor/theus-arsenal/rules/dart/coding-style.md +0 -159
- package/vendor/theus-arsenal/rules/dart/hooks.md +0 -68
- package/vendor/theus-arsenal/rules/dart/patterns.md +0 -261
- package/vendor/theus-arsenal/rules/dart/security.md +0 -135
- package/vendor/theus-arsenal/rules/dart/testing.md +0 -215
- package/vendor/theus-arsenal/rules/fsharp/coding-style.md +0 -112
- package/vendor/theus-arsenal/rules/fsharp/hooks.md +0 -26
- package/vendor/theus-arsenal/rules/fsharp/patterns.md +0 -111
- package/vendor/theus-arsenal/rules/fsharp/security.md +0 -76
- package/vendor/theus-arsenal/rules/fsharp/testing.md +0 -62
- package/vendor/theus-arsenal/rules/golang/coding-style.md +0 -32
- package/vendor/theus-arsenal/rules/golang/hooks.md +0 -17
- package/vendor/theus-arsenal/rules/golang/patterns.md +0 -45
- package/vendor/theus-arsenal/rules/golang/security.md +0 -34
- package/vendor/theus-arsenal/rules/golang/testing.md +0 -31
- package/vendor/theus-arsenal/rules/java/coding-style.md +0 -114
- package/vendor/theus-arsenal/rules/java/hooks.md +0 -18
- package/vendor/theus-arsenal/rules/java/patterns.md +0 -147
- package/vendor/theus-arsenal/rules/java/security.md +0 -101
- package/vendor/theus-arsenal/rules/java/testing.md +0 -133
- package/vendor/theus-arsenal/rules/kotlin/coding-style.md +0 -86
- package/vendor/theus-arsenal/rules/kotlin/hooks.md +0 -17
- package/vendor/theus-arsenal/rules/kotlin/patterns.md +0 -146
- package/vendor/theus-arsenal/rules/kotlin/security.md +0 -82
- package/vendor/theus-arsenal/rules/kotlin/testing.md +0 -128
- package/vendor/theus-arsenal/rules/nuxt/coding-style.md +0 -47
- package/vendor/theus-arsenal/rules/nuxt/hooks.md +0 -39
- package/vendor/theus-arsenal/rules/nuxt/patterns.md +0 -54
- package/vendor/theus-arsenal/rules/nuxt/security.md +0 -48
- package/vendor/theus-arsenal/rules/nuxt/testing.md +0 -49
- package/vendor/theus-arsenal/rules/php/coding-style.md +0 -40
- package/vendor/theus-arsenal/rules/php/hooks.md +0 -24
- package/vendor/theus-arsenal/rules/php/patterns.md +0 -33
- package/vendor/theus-arsenal/rules/php/security.md +0 -37
- package/vendor/theus-arsenal/rules/php/testing.md +0 -38
- package/vendor/theus-arsenal/rules/python/coding-style.md +0 -42
- package/vendor/theus-arsenal/rules/python/fastapi.md +0 -58
- package/vendor/theus-arsenal/rules/python/hooks.md +0 -19
- package/vendor/theus-arsenal/rules/python/patterns.md +0 -39
- package/vendor/theus-arsenal/rules/python/security.md +0 -30
- package/vendor/theus-arsenal/rules/python/testing.md +0 -38
- package/vendor/theus-arsenal/rules/react/coding-style.md +0 -109
- package/vendor/theus-arsenal/rules/react/hooks.md +0 -187
- package/vendor/theus-arsenal/rules/react/patterns.md +0 -194
- package/vendor/theus-arsenal/rules/react/security.md +0 -180
- package/vendor/theus-arsenal/rules/react/testing.md +0 -208
- package/vendor/theus-arsenal/rules/react-native/accessibility.md +0 -55
- package/vendor/theus-arsenal/rules/react-native/coding-style.md +0 -71
- package/vendor/theus-arsenal/rules/react-native/hooks.md +0 -28
- package/vendor/theus-arsenal/rules/react-native/patterns.md +0 -88
- package/vendor/theus-arsenal/rules/react-native/performance.md +0 -45
- package/vendor/theus-arsenal/rules/react-native/production-readiness.md +0 -51
- package/vendor/theus-arsenal/rules/react-native/security.md +0 -43
- package/vendor/theus-arsenal/rules/react-native/testing.md +0 -52
- package/vendor/theus-arsenal/rules/ruby/coding-style.md +0 -46
- package/vendor/theus-arsenal/rules/ruby/hooks.md +0 -37
- package/vendor/theus-arsenal/rules/ruby/patterns.md +0 -44
- package/vendor/theus-arsenal/rules/ruby/security.md +0 -51
- package/vendor/theus-arsenal/rules/ruby/testing.md +0 -51
- package/vendor/theus-arsenal/rules/rust/coding-style.md +0 -151
- package/vendor/theus-arsenal/rules/rust/hooks.md +0 -16
- package/vendor/theus-arsenal/rules/rust/patterns.md +0 -168
- package/vendor/theus-arsenal/rules/rust/security.md +0 -141
- package/vendor/theus-arsenal/rules/rust/testing.md +0 -154
- package/vendor/theus-arsenal/rules/swift/coding-style.md +0 -47
- package/vendor/theus-arsenal/rules/swift/hooks.md +0 -20
- package/vendor/theus-arsenal/rules/swift/patterns.md +0 -66
- package/vendor/theus-arsenal/rules/swift/security.md +0 -33
- package/vendor/theus-arsenal/rules/swift/testing.md +0 -45
- package/vendor/theus-arsenal/rules/typescript/coding-style.md +0 -199
- package/vendor/theus-arsenal/rules/typescript/hooks.md +0 -22
- package/vendor/theus-arsenal/rules/typescript/patterns.md +0 -52
- package/vendor/theus-arsenal/rules/typescript/security.md +0 -28
- package/vendor/theus-arsenal/rules/typescript/testing.md +0 -18
- package/vendor/theus-arsenal/rules/vue/coding-style.md +0 -54
- package/vendor/theus-arsenal/rules/vue/hooks.md +0 -45
- package/vendor/theus-arsenal/rules/vue/patterns.md +0 -56
- package/vendor/theus-arsenal/rules/vue/security.md +0 -46
- package/vendor/theus-arsenal/rules/vue/testing.md +0 -53
- package/vendor/theus-arsenal/rules/web/coding-style.md +0 -108
- package/vendor/theus-arsenal/rules/web/design-quality.md +0 -75
- package/vendor/theus-arsenal/rules/web/hooks.md +0 -141
- package/vendor/theus-arsenal/rules/web/patterns.md +0 -91
- package/vendor/theus-arsenal/rules/web/performance.md +0 -76
- package/vendor/theus-arsenal/rules/web/security.md +0 -69
- package/vendor/theus-arsenal/rules/web/testing.md +0 -67
- package/vendor/theus-arsenal/scripts/hooks/bash-hook-dispatcher.js +0 -192
- package/vendor/theus-arsenal/scripts/hooks/block-no-verify.js +0 -556
- package/vendor/theus-arsenal/scripts/hooks/check-console-log.js +0 -92
- package/vendor/theus-arsenal/scripts/hooks/check-hook-enabled.js +0 -16
- package/vendor/theus-arsenal/scripts/hooks/config-protection.js +0 -171
- package/vendor/theus-arsenal/scripts/hooks/design-quality-check.js +0 -132
- package/vendor/theus-arsenal/scripts/hooks/doc-file-warning.js +0 -110
- package/vendor/theus-arsenal/scripts/hooks/modo-seguro.js +0 -158
- package/vendor/theus-arsenal/scripts/hooks/notificacion-escritorio.js +0 -208
- package/vendor/theus-arsenal/scripts/hooks/plugin-hook-bootstrap.js +0 -280
- package/vendor/theus-arsenal/scripts/hooks/post-bash-command-log.js +0 -87
- package/vendor/theus-arsenal/scripts/hooks/post-bash-dispatcher.js +0 -24
- package/vendor/theus-arsenal/scripts/hooks/post-bash-pr-created.js +0 -60
- package/vendor/theus-arsenal/scripts/hooks/post-edit-accumulator.js +0 -94
- package/vendor/theus-arsenal/scripts/hooks/post-edit-console-warn.js +0 -54
- package/vendor/theus-arsenal/scripts/hooks/post-edit-format.js +0 -110
- package/vendor/theus-arsenal/scripts/hooks/post-edit-typecheck.js +0 -98
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-commit-quality.js +0 -447
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dev-server-block.js +0 -232
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dispatcher.js +0 -27
- package/vendor/theus-arsenal/scripts/hooks/pre-compact.js +0 -101
- package/vendor/theus-arsenal/scripts/hooks/pretooluse-visible-output.js +0 -49
- package/vendor/theus-arsenal/scripts/hooks/quality-gate.js +0 -168
- package/vendor/theus-arsenal/scripts/hooks/run-with-flags.js +0 -271
- package/vendor/theus-arsenal/scripts/hooks/salud-mcp.js +0 -749
- package/vendor/theus-arsenal/scripts/hooks/seguimiento-costos.js +0 -161
- package/vendor/theus-arsenal/scripts/hooks/session-end.js +0 -340
- package/vendor/theus-arsenal/scripts/hooks/session-start.js +0 -906
- package/vendor/theus-arsenal/scripts/hooks/stop-format-typecheck.js +0 -263
- package/vendor/theus-arsenal/scripts/hooks/suggest-compact.js +0 -286
- package/vendor/theus-arsenal/scripts/hooks/theus-context-monitor.js +0 -289
- package/vendor/theus-arsenal/scripts/hooks/verificacion-factual.js +0 -1278
- package/vendor/theus-arsenal/scripts/lib/agent-data-home.js +0 -96
- package/vendor/theus-arsenal/scripts/lib/cost-estimate.js +0 -66
- package/vendor/theus-arsenal/scripts/lib/hook-flags.js +0 -79
- package/vendor/theus-arsenal/scripts/lib/llm-summary.js +0 -185
- package/vendor/theus-arsenal/scripts/lib/loopback-guard.js +0 -54
- package/vendor/theus-arsenal/scripts/lib/observer-sessions.js +0 -237
- package/vendor/theus-arsenal/scripts/lib/package-manager.d.ts +0 -120
- package/vendor/theus-arsenal/scripts/lib/package-manager.js +0 -434
- package/vendor/theus-arsenal/scripts/lib/path-safety.js +0 -86
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/markdown.js +0 -285
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sdk.js +0 -238
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/server.js +0 -534
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sessions.js +0 -274
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/ui.js +0 -546
- package/vendor/theus-arsenal/scripts/lib/project-detect.js +0 -451
- package/vendor/theus-arsenal/scripts/lib/resolve-formatter.js +0 -193
- package/vendor/theus-arsenal/scripts/lib/resolve-theus-root.js +0 -101
- package/vendor/theus-arsenal/scripts/lib/session-aliases.d.ts +0 -138
- package/vendor/theus-arsenal/scripts/lib/session-aliases.js +0 -483
- package/vendor/theus-arsenal/scripts/lib/session-bridge.js +0 -155
- package/vendor/theus-arsenal/scripts/lib/session-manager.d.ts +0 -137
- package/vendor/theus-arsenal/scripts/lib/session-manager.js +0 -555
- package/vendor/theus-arsenal/scripts/lib/shell-split.js +0 -86
- package/vendor/theus-arsenal/scripts/lib/shell-substitution.js +0 -501
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/dashboard.js +0 -414
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/health.js +0 -285
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/index.js +0 -22
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/provenance.js +0 -200
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/tracker.js +0 -157
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/versioning.js +0 -246
- package/vendor/theus-arsenal/scripts/lib/transcript-context.js +0 -232
- package/vendor/theus-arsenal/scripts/lib/utils.d.ts +0 -205
- package/vendor/theus-arsenal/scripts/lib/utils.js +0 -658
- package/vendor/theus-arsenal/scripts/plan-canvas.js +0 -341
- package/vendor/theus-arsenal/scripts/setup-package-manager.js +0 -46
- package/vendor/theus-arsenal/scripts/skills-health.js +0 -143
- package/vendor/theus-arsenal/skills/a11y-frontend/SKILL.md +0 -444
- package/vendor/theus-arsenal/skills/accesibilidad/SKILL.md +0 -144
- package/vendor/theus-arsenal/skills/acelerador-throughput-datos/SKILL.md +0 -72
- package/vendor/theus-arsenal/skills/agente-scraper-datos/SKILL.md +0 -771
- package/vendor/theus-arsenal/skills/analisis-plataformas-competencia/SKILL.md +0 -137
- package/vendor/theus-arsenal/skills/api-x/SKILL.md +0 -233
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/SKILL.md +0 -335
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer-loop.sh +0 -374
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer.md +0 -188
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/session-guardian.sh +0 -153
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/start-observer.sh +0 -253
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/config.json +0 -8
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/hooks/observe.sh +0 -594
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/detect-project.sh +0 -325
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/instinct-cli.py +0 -1918
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/lib/arsenal-dir.sh +0 -23
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/test_parse_instinct.py +0 -1420
- package/vendor/theus-arsenal/skills/arquitectura-hexagonal/SKILL.md +0 -275
- package/vendor/theus-arsenal/skills/arquitectura-limpia-android/SKILL.md +0 -340
- package/vendor/theus-arsenal/skills/arquitectura-pipelines-recomendacion/SKILL.md +0 -112
- package/vendor/theus-arsenal/skills/atlas-datos-prediccion/SKILL.md +0 -53
- package/vendor/theus-arsenal/skills/auditoria-arquitectura-agentes/SKILL.md +0 -257
- package/vendor/theus-arsenal/skills/auditoria-produccion/SKILL.md +0 -180
- package/vendor/theus-arsenal/skills/auditoria-rutas-clic/SKILL.md +0 -243
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/SKILL.md +0 -180
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/high-score-example.md +0 -89
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/low-score-example.md +0 -87
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/evaluation-criteria.md +0 -71
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/hook-integration.md +0 -90
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/scripts/evaluate.py +0 -409
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/templates/evaluation-report.md +0 -86
- package/vendor/theus-arsenal/skills/automatizacion-ssh-netmiko/SKILL.md +0 -176
- package/vendor/theus-arsenal/skills/base-datos-pubmed/SKILL.md +0 -174
- package/vendor/theus-arsenal/skills/base-datos-uspto/SKILL.md +0 -173
- package/vendor/theus-arsenal/skills/benchmark/SKILL.md +0 -92
- package/vendor/theus-arsenal/skills/bitacora-crecimiento/SKILL.md +0 -120
- package/vendor/theus-arsenal/skills/bucle-verificacion/SKILL.md +0 -125
- package/vendor/theus-arsenal/skills/buscar-primero/SKILL.md +0 -184
- package/vendor/theus-arsenal/skills/busqueda-exa/SKILL.md +0 -111
- package/vendor/theus-arsenal/skills/cache-por-hash/SKILL.md +0 -160
- package/vendor/theus-arsenal/skills/campana-marketing/SKILL.md +0 -118
- package/vendor/theus-arsenal/skills/capacidad-producto/SKILL.md +0 -138
- package/vendor/theus-arsenal/skills/cazador-vulnerabilidades/SKILL.md +0 -104
- package/vendor/theus-arsenal/skills/compactacion-estrategica/SKILL.md +0 -115
- package/vendor/theus-arsenal/skills/comparador-baskets-prediccion/SKILL.md +0 -69
- package/vendor/theus-arsenal/skills/compras-energia/SKILL.md +0 -206
- package/vendor/theus-arsenal/skills/concurrencia-swift-6-2/SKILL.md +0 -224
- package/vendor/theus-arsenal/skills/consejo/SKILL.md +0 -201
- package/vendor/theus-arsenal/skills/construccion-harness-agentes/SKILL.md +0 -78
- package/vendor/theus-arsenal/skills/constructor-conectores/SKILL.md +0 -119
- package/vendor/theus-arsenal/skills/constructor-equipos/SKILL.md +0 -169
- package/vendor/theus-arsenal/skills/consulta-documentacion/SKILL.md +0 -92
- package/vendor/theus-arsenal/skills/consultas-genomicas-gget/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/contacto-inversores/SKILL.md +0 -95
- package/vendor/theus-arsenal/skills/corrutinas-flows-kotlin/SKILL.md +0 -284
- package/vendor/theus-arsenal/skills/creacion-video-remotion/SKILL.md +0 -46
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/3d.md +0 -86
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/animations.md +0 -29
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/charts-bar-chart.tsx +0 -173
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-typewriter.tsx +0 -100
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-word-highlight.tsx +0 -108
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets.md +0 -78
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/audio.md +0 -172
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/calculate-metadata.md +0 -104
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/can-decode.md +0 -75
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/charts.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/compositions.md +0 -146
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/display-captions.md +0 -126
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/extract-frames.md +0 -229
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/fonts.md +0 -152
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-audio-duration.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-dimensions.md +0 -68
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-duration.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/gifs.md +0 -138
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/images.md +0 -130
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/import-srt-captions.md +0 -67
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/lottie.md +0 -67
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-dom-nodes.md +0 -34
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-text.md +0 -143
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/sequencing.md +0 -106
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/tailwind.md +0 -11
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/text-animations.md +0 -20
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/timing.md +0 -179
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transcribe-captions.md +0 -19
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transitions.md +0 -122
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/trimming.md +0 -52
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/videos.md +0 -171
- package/vendor/theus-arsenal/skills/cumplimiento-aduanero/SKILL.md +0 -270
- package/vendor/theus-arsenal/skills/cumplimiento-hipaa/SKILL.md +0 -78
- package/vendor/theus-arsenal/skills/datos-sensibles-salud/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/decimales-tokens-evm/SKILL.md +0 -128
- package/vendor/theus-arsenal/skills/decisiones-arquitectura/SKILL.md +0 -206
- package/vendor/theus-arsenal/skills/demos-ui/SKILL.md +0 -469
- package/vendor/theus-arsenal/skills/desarrollo-por-intencion/SKILL.md +0 -369
- package/vendor/theus-arsenal/skills/descubrimiento-marca/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/10_proposito-porque.md +0 -42
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/20_posicionamiento.md +0 -47
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/30_audiencia-nicho.md +0 -53
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/40_personalidad-arquetipo.md +0 -61
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/50_voz-tono.md +0 -62
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/60_narrativa-historia.md +0 -54
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/70_tension-fundador.md +0 -50
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/90_SINTESIS.md +0 -133
- package/vendor/theus-arsenal/skills/descubrimiento-plugins-laravel/SKILL.md +0 -230
- package/vendor/theus-arsenal/skills/destilado-reglas/SKILL.md +0 -263
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-rules.sh +0 -58
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-skills.sh +0 -129
- package/vendor/theus-arsenal/skills/diagnostico-bgp/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/direccion-estetica/SKILL.md +0 -220
- package/vendor/theus-arsenal/skills/direccion-estetica/references/taxonomia-generos.md +0 -89
- package/vendor/theus-arsenal/skills/diseno-api/SKILL.md +0 -522
- package/vendor/theus-arsenal/skills/diseno-liquid-glass/SKILL.md +0 -282
- package/vendor/theus-arsenal/skills/e2e-escritorio-windows/SKILL.md +0 -879
- package/vendor/theus-arsenal/skills/edicion-video/SKILL.md +0 -289
- package/vendor/theus-arsenal/skills/enfoque-producto/SKILL.md +0 -91
- package/vendor/theus-arsenal/skills/entornos-flox/SKILL.md +0 -493
- package/vendor/theus-arsenal/skills/estandares-codigo/SKILL.md +0 -548
- package/vendor/theus-arsenal/skills/estandares-cpp/SKILL.md +0 -727
- package/vendor/theus-arsenal/skills/estandares-java/SKILL.md +0 -389
- package/vendor/theus-arsenal/skills/estilo-legado/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/estructura-informes-competencia/SKILL.md +0 -95
- package/vendor/theus-arsenal/skills/evaluacion-academica/SKILL.md +0 -165
- package/vendor/theus-arsenal/skills/explorador-skills/SKILL.md +0 -129
- package/vendor/theus-arsenal/skills/flujo-git/SKILL.md +0 -714
- package/vendor/theus-arsenal/skills/flujo-ingenieria-ml/SKILL.md +0 -343
- package/vendor/theus-arsenal/skills/flujo-tdd/SKILL.md +0 -584
- package/vendor/theus-arsenal/skills/forja-personas/SKILL.md +0 -298
- package/vendor/theus-arsenal/skills/forja-personas/gacha.py +0 -224
- package/vendor/theus-arsenal/skills/forja-personas/gacha.sh +0 -5
- package/vendor/theus-arsenal/skills/forja-personas/references/avatar-style.md +0 -123
- package/vendor/theus-arsenal/skills/forja-personas/references/boundary-rules.md +0 -53
- package/vendor/theus-arsenal/skills/forja-personas/references/error-handling.md +0 -53
- package/vendor/theus-arsenal/skills/forja-personas/references/identity-tension.md +0 -48
- package/vendor/theus-arsenal/skills/forja-personas/references/naming-system.md +0 -39
- package/vendor/theus-arsenal/skills/forja-personas/references/output-template.md +0 -166
- package/vendor/theus-arsenal/skills/fundamentos-animacion/SKILL.md +0 -296
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/SKILL.md +0 -156
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/generate_icons.swift +0 -258
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/iconify_gen.sh +0 -235
- package/vendor/theus-arsenal/skills/gestion-excepciones-logisticas/SKILL.md +0 -208
- package/vendor/theus-arsenal/skills/gestion-transportistas/SKILL.md +0 -204
- package/vendor/theus-arsenal/skills/guia-adopcion-ml/SKILL.md +0 -64
- package/vendor/theus-arsenal/skills/harness-agente-autonomo/SKILL.md +0 -252
- package/vendor/theus-arsenal/skills/harness-eval-clinico/SKILL.md +0 -212
- package/vendor/theus-arsenal/skills/harness-evaluacion/SKILL.md +0 -296
- package/vendor/theus-arsenal/skills/harness-generador-evaluador/SKILL.md +0 -254
- package/vendor/theus-arsenal/skills/homelab-diseno-red/SKILL.md +0 -120
- package/vendor/theus-arsenal/skills/homelab-dns-pihole/SKILL.md +0 -264
- package/vendor/theus-arsenal/skills/homelab-preparacion-red/SKILL.md +0 -144
- package/vendor/theus-arsenal/skills/homelab-segmentacion-vlan/SKILL.md +0 -307
- package/vendor/theus-arsenal/skills/homelab-vpn-wireguard/SKILL.md +0 -299
- package/vendor/theus-arsenal/skills/ingenieria-agentica/SKILL.md +0 -96
- package/vendor/theus-arsenal/skills/inspeccion-animaciones-blender/SKILL.md +0 -164
- package/vendor/theus-arsenal/skills/instaladores-python/SKILL.md +0 -820
- package/vendor/theus-arsenal/skills/integracion-jira/SKILL.md +0 -307
- package/vendor/theus-arsenal/skills/inteligencia-leads/SKILL.md +0 -312
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/agente-enriquecimiento.md +0 -87
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/mapeador-mutuos.md +0 -76
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/puntuador-senales.md +0 -60
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/redactor-outreach.md +0 -102
- package/vendor/theus-arsenal/skills/inteligencia-mercados-prediccion/SKILL.md +0 -53
- package/vendor/theus-arsenal/skills/introspeccion-agente/SKILL.md +0 -150
- package/vendor/theus-arsenal/skills/inventario-skills/SKILL.md +0 -194
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/quick-diff.sh +0 -87
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/save-results.sh +0 -57
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/scan.sh +0 -170
- package/vendor/theus-arsenal/skills/investigacion-mercado/SKILL.md +0 -87
- package/vendor/theus-arsenal/skills/investigacion-oraculos-prediccion/SKILL.md +0 -59
- package/vendor/theus-arsenal/skills/investigacion-profunda/SKILL.md +0 -161
- package/vendor/theus-arsenal/skills/keccak256-nodejs/SKILL.md +0 -100
- package/vendor/theus-arsenal/skills/libro-decisiones-recursivo/SKILL.md +0 -82
- package/vendor/theus-arsenal/skills/lienzo-planes/SKILL.md +0 -111
- package/vendor/theus-arsenal/skills/limpieza-configuracion/SKILL.md +0 -116
- package/vendor/theus-arsenal/skills/logistica-inversa-devoluciones/SKILL.md +0 -241
- package/vendor/theus-arsenal/skills/manejo-errores/SKILL.md +0 -375
- package/vendor/theus-arsenal/skills/materiales-inversores/SKILL.md +0 -101
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/forget.mjs +0 -44
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/info.mjs +0 -24
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/init.mjs +0 -152
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/list.mjs +0 -40
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/migrate.mjs +0 -214
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/resume.mjs +0 -36
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/save.mjs +0 -210
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/shared.mjs +0 -402
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/hooks/session-start.mjs +0 -238
- package/vendor/theus-arsenal/skills/metodologia-benchmarks/SKILL.md +0 -131
- package/vendor/theus-arsenal/skills/migraciones-bd/SKILL.md +0 -430
- package/vendor/theus-arsenal/skills/modelos-fundacionales-en-dispositivo/SKILL.md +0 -244
- package/vendor/theus-arsenal/skills/modo-seguro/SKILL.md +0 -86
- package/vendor/theus-arsenal/skills/motion-avanzado/SKILL.md +0 -592
- package/vendor/theus-arsenal/skills/motor-de-contenido/SKILL.md +0 -136
- package/vendor/theus-arsenal/skills/no-conformidades-calidad/SKILL.md +0 -249
- package/vendor/theus-arsenal/skills/onboarding-codigo/SKILL.md +0 -244
- package/vendor/theus-arsenal/skills/operaciones-agentes-empresariales/SKILL.md +0 -51
- package/vendor/theus-arsenal/skills/operaciones-conocimiento/SKILL.md +0 -159
- package/vendor/theus-arsenal/skills/operaciones-correo/SKILL.md +0 -123
- package/vendor/theus-arsenal/skills/operaciones-facturacion/SKILL.md +0 -142
- package/vendor/theus-arsenal/skills/operaciones-flujo-proyectos/SKILL.md +0 -110
- package/vendor/theus-arsenal/skills/operaciones-github/SKILL.md +0 -143
- package/vendor/theus-arsenal/skills/operaciones-google-workspace/SKILL.md +0 -100
- package/vendor/theus-arsenal/skills/operaciones-investigacion/SKILL.md +0 -124
- package/vendor/theus-arsenal/skills/operaciones-mensajes/SKILL.md +0 -103
- package/vendor/theus-arsenal/skills/operaciones-terminal/SKILL.md +0 -110
- package/vendor/theus-arsenal/skills/optimizacion-benchmark/SKILL.md +0 -70
- package/vendor/theus-arsenal/skills/optimizacion-costos-llm/SKILL.md +0 -182
- package/vendor/theus-arsenal/skills/optimizador-conexiones/SKILL.md +0 -191
- package/vendor/theus-arsenal/skills/optimizador-paralelismo/SKILL.md +0 -75
- package/vendor/theus-arsenal/skills/optimizador-prompts/SKILL.md +0 -374
- package/vendor/theus-arsenal/skills/orq-agregar-funcionalidad/SKILL.md +0 -37
- package/vendor/theus-arsenal/skills/orq-cambiar-funcionalidad/SKILL.md +0 -36
- package/vendor/theus-arsenal/skills/orq-construir-mvp/SKILL.md +0 -38
- package/vendor/theus-arsenal/skills/orq-corregir-defecto/SKILL.md +0 -36
- package/vendor/theus-arsenal/skills/orq-pipeline/SKILL.md +0 -134
- package/vendor/theus-arsenal/skills/orq-refinar-codigo/SKILL.md +0 -49
- package/vendor/theus-arsenal/skills/orquestacion-equipos-agentes/SKILL.md +0 -117
- package/vendor/theus-arsenal/skills/pagos-agentes-x402/SKILL.md +0 -237
- package/vendor/theus-arsenal/skills/patrones-angular/SKILL.md +0 -153
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-animations.md +0 -160
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-aria.md +0 -410
- package/vendor/theus-arsenal/skills/patrones-angular/references/cli.md +0 -86
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-harnesses.md +0 -59
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-styling.md +0 -91
- package/vendor/theus-arsenal/skills/patrones-angular/references/components.md +0 -117
- package/vendor/theus-arsenal/skills/patrones-angular/references/creating-services.md +0 -97
- package/vendor/theus-arsenal/skills/patrones-angular/references/data-resolvers.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/define-routes.md +0 -67
- package/vendor/theus-arsenal/skills/patrones-angular/references/defining-providers.md +0 -72
- package/vendor/theus-arsenal/skills/patrones-angular/references/di-fundamentals.md +0 -120
- package/vendor/theus-arsenal/skills/patrones-angular/references/e2e-testing.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-angular/references/effects.md +0 -83
- package/vendor/theus-arsenal/skills/patrones-angular/references/hierarchical-injectors.md +0 -43
- package/vendor/theus-arsenal/skills/patrones-angular/references/host-elements.md +0 -80
- package/vendor/theus-arsenal/skills/patrones-angular/references/injection-context.md +0 -63
- package/vendor/theus-arsenal/skills/patrones-angular/references/inputs.md +0 -101
- package/vendor/theus-arsenal/skills/patrones-angular/references/linked-signal.md +0 -59
- package/vendor/theus-arsenal/skills/patrones-angular/references/loading-strategies.md +0 -61
- package/vendor/theus-arsenal/skills/patrones-angular/references/mcp.md +0 -67
- package/vendor/theus-arsenal/skills/patrones-angular/references/navigate-to-routes.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/outputs.md +0 -86
- package/vendor/theus-arsenal/skills/patrones-angular/references/reactive-forms.md +0 -122
- package/vendor/theus-arsenal/skills/patrones-angular/references/rendering-strategies.md +0 -44
- package/vendor/theus-arsenal/skills/patrones-angular/references/resource.md +0 -77
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-animations.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-guards.md +0 -52
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-lifecycle.md +0 -45
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-testing.md +0 -87
- package/vendor/theus-arsenal/skills/patrones-angular/references/show-routes-with-outlets.md +0 -68
- package/vendor/theus-arsenal/skills/patrones-angular/references/signal-forms.md +0 -795
- package/vendor/theus-arsenal/skills/patrones-angular/references/signals-overview.md +0 -94
- package/vendor/theus-arsenal/skills/patrones-angular/references/tailwind-css.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/template-driven-forms.md +0 -114
- package/vendor/theus-arsenal/skills/patrones-angular/references/testing-fundamentals.md +0 -65
- package/vendor/theus-arsenal/skills/patrones-animacion/SKILL.md +0 -432
- package/vendor/theus-arsenal/skills/patrones-backend/SKILL.md +0 -560
- package/vendor/theus-arsenal/skills/patrones-cdss-clinico/SKILL.md +0 -249
- package/vendor/theus-arsenal/skills/patrones-cisco-ios/SKILL.md +0 -148
- package/vendor/theus-arsenal/skills/patrones-clickhouse/SKILL.md +0 -443
- package/vendor/theus-arsenal/skills/patrones-compose-multiplatform/SKILL.md +0 -298
- package/vendor/theus-arsenal/skills/patrones-dart-flutter/SKILL.md +0 -566
- package/vendor/theus-arsenal/skills/patrones-despliegue/SKILL.md +0 -426
- package/vendor/theus-arsenal/skills/patrones-django/SKILL.md +0 -739
- package/vendor/theus-arsenal/skills/patrones-django-celery/SKILL.md +0 -456
- package/vendor/theus-arsenal/skills/patrones-docker/SKILL.md +0 -363
- package/vendor/theus-arsenal/skills/patrones-dotnet/SKILL.md +0 -321
- package/vendor/theus-arsenal/skills/patrones-emr-clinico/SKILL.md +0 -168
- package/vendor/theus-arsenal/skills/patrones-fastapi/SKILL.md +0 -513
- package/vendor/theus-arsenal/skills/patrones-frontend/SKILL.md +0 -655
- package/vendor/theus-arsenal/skills/patrones-go/SKILL.md +0 -674
- package/vendor/theus-arsenal/skills/patrones-jpa/SKILL.md +0 -156
- package/vendor/theus-arsenal/skills/patrones-kotlin/SKILL.md +0 -717
- package/vendor/theus-arsenal/skills/patrones-kotlin-exposed/SKILL.md +0 -724
- package/vendor/theus-arsenal/skills/patrones-kotlin-ktor/SKILL.md +0 -694
- package/vendor/theus-arsenal/skills/patrones-kubernetes/SKILL.md +0 -754
- package/vendor/theus-arsenal/skills/patrones-laravel/SKILL.md +0 -414
- package/vendor/theus-arsenal/skills/patrones-mcp/SKILL.md +0 -66
- package/vendor/theus-arsenal/skills/patrones-mysql/SKILL.md +0 -420
- package/vendor/theus-arsenal/skills/patrones-nestjs/SKILL.md +0 -229
- package/vendor/theus-arsenal/skills/patrones-nextjs/SKILL.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-nuxt4/SKILL.md +0 -99
- package/vendor/theus-arsenal/skills/patrones-perl/SKILL.md +0 -508
- package/vendor/theus-arsenal/skills/patrones-postgres/SKILL.md +0 -141
- package/vendor/theus-arsenal/skills/patrones-prisma/SKILL.md +0 -399
- package/vendor/theus-arsenal/skills/patrones-python/SKILL.md +0 -750
- package/vendor/theus-arsenal/skills/patrones-pytorch/SKILL.md +0 -400
- package/vendor/theus-arsenal/skills/patrones-quarkus/SKILL.md +0 -729
- package/vendor/theus-arsenal/skills/patrones-react/SKILL.md +0 -339
- package/vendor/theus-arsenal/skills/patrones-react-native/SKILL.md +0 -325
- package/vendor/theus-arsenal/skills/patrones-redis/SKILL.md +0 -401
- package/vendor/theus-arsenal/skills/patrones-rust/SKILL.md +0 -504
- package/vendor/theus-arsenal/skills/patrones-springboot/SKILL.md +0 -314
- package/vendor/theus-arsenal/skills/patrones-swiftui/SKILL.md +0 -261
- package/vendor/theus-arsenal/skills/patrones-tinystruct/SKILL.md +0 -281
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/architecture.md +0 -90
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/data-handling.md +0 -60
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/database.md +0 -99
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/routing.md +0 -64
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/system-usage.md +0 -97
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/testing.md +0 -72
- package/vendor/theus-arsenal/skills/patrones-vite/SKILL.md +0 -449
- package/vendor/theus-arsenal/skills/patrones-vue/SKILL.md +0 -469
- package/vendor/theus-arsenal/skills/persistencia-actores-swift/SKILL.md +0 -148
- package/vendor/theus-arsenal/skills/pipeline-opensource/SKILL.md +0 -254
- package/vendor/theus-arsenal/skills/planificacion-demanda-inventario/SKILL.md +0 -236
- package/vendor/theus-arsenal/skills/planificador-trades-prediccion/SKILL.md +0 -60
- package/vendor/theus-arsenal/skills/plano-tecnico/SKILL.md +0 -102
- package/vendor/theus-arsenal/skills/presentaciones-html/SKILL.md +0 -189
- package/vendor/theus-arsenal/skills/presentaciones-html/STYLE_PRESETS.md +0 -330
- package/vendor/theus-arsenal/skills/presentaciones-html/animation-patterns.md +0 -122
- package/vendor/theus-arsenal/skills/presentaciones-html/html-template.md +0 -419
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/export-pdf.sh +0 -418
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/extract-pptx.py +0 -96
- package/vendor/theus-arsenal/skills/presentaciones-html/viewport-base.css +0 -153
- package/vendor/theus-arsenal/skills/presupuesto-contexto/SKILL.md +0 -263
- package/vendor/theus-arsenal/skills/procesamiento-documentos-nutrient/SKILL.md +0 -168
- package/vendor/theus-arsenal/skills/programacion-produccion/SKILL.md +0 -220
- package/vendor/theus-arsenal/skills/publicacion-cruzada/SKILL.md +0 -117
- package/vendor/theus-arsenal/skills/publicador-social/SKILL.md +0 -121
- package/vendor/theus-arsenal/skills/puerta-de-entrega/SKILL.md +0 -164
- package/vendor/theus-arsenal/skills/puerta-de-entrega/hooks/puerta-entrega.py +0 -242
- package/vendor/theus-arsenal/skills/pulir-interfaces/SKILL.md +0 -126
- package/vendor/theus-arsenal/skills/qa-navegador/SKILL.md +0 -103
- package/vendor/theus-arsenal/skills/ranking-grafo-social/SKILL.md +0 -153
- package/vendor/theus-arsenal/skills/recuperacion-iterativa/SKILL.md +0 -236
- package/vendor/theus-arsenal/skills/redaccion-articulos/SKILL.md +0 -81
- package/vendor/theus-arsenal/skills/regex-vs-llm/SKILL.md +0 -221
- package/vendor/theus-arsenal/skills/regresion-codigo-ia/SKILL.md +0 -388
- package/vendor/theus-arsenal/skills/rendimiento-react/SKILL.md +0 -567
- package/vendor/theus-arsenal/skills/revision-codigo-flutter-dart/SKILL.md +0 -442
- package/vendor/theus-arsenal/skills/revision-literatura-cientifica/SKILL.md +0 -191
- package/vendor/theus-arsenal/skills/revision-multiperspectiva/SKILL.md +0 -302
- package/vendor/theus-arsenal/skills/revision-riesgo-prediccion/SKILL.md +0 -56
- package/vendor/theus-arsenal/skills/revision-seguridad/SKILL.md +0 -505
- package/vendor/theus-arsenal/skills/revision-seguridad/cloud-infrastructure-security.md +0 -361
- package/vendor/theus-arsenal/skills/runtime-bun/SKILL.md +0 -83
- package/vendor/theus-arsenal/skills/salud-codigo-codescene/SKILL.md +0 -163
- package/vendor/theus-arsenal/skills/salud-interfaces-red/SKILL.md +0 -143
- package/vendor/theus-arsenal/skills/seguimiento-costos/SKILL.md +0 -122
- package/vendor/theus-arsenal/skills/seguridad-agentes-trading/SKILL.md +0 -145
- package/vendor/theus-arsenal/skills/seguridad-amm-defi/SKILL.md +0 -166
- package/vendor/theus-arsenal/skills/seguridad-django/SKILL.md +0 -648
- package/vendor/theus-arsenal/skills/seguridad-laravel/SKILL.md +0 -945
- package/vendor/theus-arsenal/skills/seguridad-perl/SKILL.md +0 -507
- package/vendor/theus-arsenal/skills/seguridad-quarkus/SKILL.md +0 -474
- package/vendor/theus-arsenal/skills/seguridad-springboot/SKILL.md +0 -279
- package/vendor/theus-arsenal/skills/seo/SKILL.md +0 -166
- package/vendor/theus-arsenal/skills/sistema-diseno/SKILL.md +0 -81
- package/vendor/theus-arsenal/skills/sistema-operativo-agentico/SKILL.md +0 -375
- package/vendor/theus-arsenal/skills/sistemas-latencia-critica/SKILL.md +0 -65
- package/vendor/theus-arsenal/skills/tdd-django/SKILL.md +0 -735
- package/vendor/theus-arsenal/skills/tdd-laravel/SKILL.md +0 -673
- package/vendor/theus-arsenal/skills/tdd-quarkus/SKILL.md +0 -817
- package/vendor/theus-arsenal/skills/tdd-springboot/SKILL.md +0 -165
- package/vendor/theus-arsenal/skills/testing-cpp/SKILL.md +0 -328
- package/vendor/theus-arsenal/skills/testing-csharp/SKILL.md +0 -321
- package/vendor/theus-arsenal/skills/testing-e2e/SKILL.md +0 -325
- package/vendor/theus-arsenal/skills/testing-go/SKILL.md +0 -719
- package/vendor/theus-arsenal/skills/testing-kotlin/SKILL.md +0 -829
- package/vendor/theus-arsenal/skills/testing-perl/SKILL.md +0 -479
- package/vendor/theus-arsenal/skills/testing-protocolos-di-swift/SKILL.md +0 -196
- package/vendor/theus-arsenal/skills/testing-python/SKILL.md +0 -815
- package/vendor/theus-arsenal/skills/testing-react/SKILL.md +0 -421
- package/vendor/theus-arsenal/skills/testing-rust/SKILL.md +0 -506
- package/vendor/theus-arsenal/skills/tours-de-codigo/SKILL.md +0 -252
- package/vendor/theus-arsenal/skills/traduccion-documentos-visado/SKILL.md +0 -121
- package/vendor/theus-arsenal/skills/ui-a-vue/SKILL.md +0 -141
- package/vendor/theus-arsenal/skills/validacion-config-red/SKILL.md +0 -211
- package/vendor/theus-arsenal/skills/verificacion-django/SKILL.md +0 -470
- package/vendor/theus-arsenal/skills/verificacion-factual/SKILL.md +0 -142
- package/vendor/theus-arsenal/skills/verificacion-laravel/SKILL.md +0 -184
- package/vendor/theus-arsenal/skills/verificacion-quarkus/SKILL.md +0 -485
- package/vendor/theus-arsenal/skills/verificacion-springboot/SKILL.md +0 -237
- package/vendor/theus-arsenal/skills/videodb/SKILL.md +0 -374
- package/vendor/theus-arsenal/skills/videodb/reference/api-reference.md +0 -550
- package/vendor/theus-arsenal/skills/videodb/reference/capture-reference.md +0 -407
- package/vendor/theus-arsenal/skills/videodb/reference/capture.md +0 -101
- package/vendor/theus-arsenal/skills/videodb/reference/editor.md +0 -443
- package/vendor/theus-arsenal/skills/videodb/reference/generative.md +0 -331
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream-reference.md +0 -564
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream.md +0 -65
- package/vendor/theus-arsenal/skills/videodb/reference/search.md +0 -230
- package/vendor/theus-arsenal/skills/videodb/reference/streaming.md +0 -406
- package/vendor/theus-arsenal/skills/videodb/reference/use-cases.md +0 -118
- package/vendor/theus-arsenal/skills/videodb/scripts/ws_listener.py +0 -279
- package/vendor/theus-arsenal/skills/videos-manim/SKILL.md +0 -91
- package/vendor/theus-arsenal/skills/videos-manim/assets/network_graph_scene.py +0 -52
- package/vendor/theus-arsenal/skills/vigilancia-canary/SKILL.md +0 -108
- package/vendor/theus-arsenal/skills/voz-de-marca/SKILL.md +0 -106
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/app/**/*.py"
|
|
4
|
-
- "**/fastapi/**/*.py"
|
|
5
|
-
- "**/*_api.py"
|
|
6
|
-
---
|
|
7
|
-
# Reglas de FastAPI
|
|
8
|
-
|
|
9
|
-
Usa estas reglas en proyectos FastAPI junto con las reglas generales de Python.
|
|
10
|
-
|
|
11
|
-
## Estructura
|
|
12
|
-
|
|
13
|
-
- Coloca la construcción de la app en `create_app()`.
|
|
14
|
-
- Mantén los routers delgados; mueve la persistencia y la lógica de negocio a servicios o helpers CRUD.
|
|
15
|
-
- Mantén separados los esquemas de request, los esquemas de actualización y los esquemas de respuesta.
|
|
16
|
-
- Mantén las sesiones de base de datos y la autenticación en dependencias.
|
|
17
|
-
|
|
18
|
-
## Async
|
|
19
|
-
|
|
20
|
-
- Usa `async def` en los endpoints que realizan I/O.
|
|
21
|
-
- Usa clientes de base de datos y HTTP asíncronos desde endpoints asíncronos.
|
|
22
|
-
- No llames a `requests`, sesiones síncronas de SQLAlchemy ni operaciones bloqueantes de archivo/red desde rutas asíncronas.
|
|
23
|
-
|
|
24
|
-
## Inyección de dependencias
|
|
25
|
-
|
|
26
|
-
```python
|
|
27
|
-
@router.get("/users/{user_id}")
|
|
28
|
-
async def get_user(
|
|
29
|
-
user_id: str,
|
|
30
|
-
db: AsyncSession = Depends(get_db),
|
|
31
|
-
current_user: User = Depends(get_current_user),
|
|
32
|
-
):
|
|
33
|
-
...
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
No crees `SessionLocal()` ni clientes de larga vida dentro de los handlers de ruta.
|
|
37
|
-
|
|
38
|
-
## Esquemas
|
|
39
|
-
|
|
40
|
-
- Nunca incluyas contraseñas, hashes de contraseñas, access tokens, refresh tokens ni estado interno de autenticación en los modelos de respuesta.
|
|
41
|
-
- Usa `response_model` en los endpoints que devuelven datos de la aplicación.
|
|
42
|
-
- Usa restricciones de campo en lugar de validación escrita a mano cuando Pydantic pueda expresar la regla.
|
|
43
|
-
|
|
44
|
-
## Seguridad
|
|
45
|
-
|
|
46
|
-
- Mantén los orígenes CORS específicos por entorno.
|
|
47
|
-
- No combines orígenes comodín con CORS con credenciales.
|
|
48
|
-
- Valida la expiración, el issuer, la audience y el algoritmo del JWT.
|
|
49
|
-
- Aplica rate limiting a los endpoints de autenticación y a los de escritura intensiva.
|
|
50
|
-
- Redacta credenciales, cookies, cabeceras de autorización y tokens en los logs.
|
|
51
|
-
|
|
52
|
-
## Testing
|
|
53
|
-
|
|
54
|
-
- Sobrescribe exactamente la dependencia usada por `Depends`.
|
|
55
|
-
- Limpia `app.dependency_overrides` después de los tests.
|
|
56
|
-
- Prefiere clientes de test asíncronos para aplicaciones asíncronas.
|
|
57
|
-
|
|
58
|
-
Consulta la skill `patrones-fastapi`.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.py"
|
|
4
|
-
- "**/*.pyi"
|
|
5
|
-
---
|
|
6
|
-
# Hooks para Python
|
|
7
|
-
|
|
8
|
-
> Este archivo extiende [common/hooks.md](../common/hooks.md) con contenido específico de Python.
|
|
9
|
-
|
|
10
|
-
## Hooks PostToolUse
|
|
11
|
-
|
|
12
|
-
Configúralos en `~/.theus/settings.json`:
|
|
13
|
-
|
|
14
|
-
- **black/ruff**: autoformatear archivos `.py` después de editarlos
|
|
15
|
-
- **mypy/pyright**: ejecutar verificación de tipos después de editar archivos `.py`
|
|
16
|
-
|
|
17
|
-
## Advertencias
|
|
18
|
-
|
|
19
|
-
- Advertir sobre sentencias `print()` en los archivos editados (usa el módulo `logging` en su lugar)
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.py"
|
|
4
|
-
- "**/*.pyi"
|
|
5
|
-
---
|
|
6
|
-
# Patrones de Python
|
|
7
|
-
|
|
8
|
-
> Este archivo extiende [common/patterns.md](../common/patterns.md) con contenido específico de Python.
|
|
9
|
-
|
|
10
|
-
## Protocol (duck typing)
|
|
11
|
-
|
|
12
|
-
```python
|
|
13
|
-
from typing import Protocol
|
|
14
|
-
|
|
15
|
-
class Repository(Protocol):
|
|
16
|
-
def find_by_id(self, id: str) -> dict | None: ...
|
|
17
|
-
def save(self, entity: dict) -> dict: ...
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Dataclasses como DTOs
|
|
21
|
-
|
|
22
|
-
```python
|
|
23
|
-
from dataclasses import dataclass
|
|
24
|
-
|
|
25
|
-
@dataclass
|
|
26
|
-
class CreateUserRequest:
|
|
27
|
-
name: str
|
|
28
|
-
email: str
|
|
29
|
-
age: int | None = None
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Context managers y generadores
|
|
33
|
-
|
|
34
|
-
- Usa context managers (sentencia `with`) para la gestión de recursos
|
|
35
|
-
- Usa generadores para evaluación perezosa e iteración eficiente en memoria
|
|
36
|
-
|
|
37
|
-
## Referencia
|
|
38
|
-
|
|
39
|
-
Consulta la skill `patrones-python` para patrones en profundidad, incluidos decoradores, concurrencia y organización de paquetes.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.py"
|
|
4
|
-
- "**/*.pyi"
|
|
5
|
-
---
|
|
6
|
-
# Seguridad en Python
|
|
7
|
-
|
|
8
|
-
> Este archivo extiende [common/security.md](../common/security.md) con contenido específico de Python.
|
|
9
|
-
|
|
10
|
-
## Gestión de secretos
|
|
11
|
-
|
|
12
|
-
```python
|
|
13
|
-
import os
|
|
14
|
-
from dotenv import load_dotenv
|
|
15
|
-
|
|
16
|
-
load_dotenv()
|
|
17
|
-
|
|
18
|
-
api_key = os.environ["API_KEY"] # Lanza KeyError si falta
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Escaneo de seguridad
|
|
22
|
-
|
|
23
|
-
- Usa **bandit** para análisis estático de seguridad:
|
|
24
|
-
```bash
|
|
25
|
-
bandit -r src/
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Referencia
|
|
29
|
-
|
|
30
|
-
Consulta la skill `revision-seguridad` para pautas generales de revisión de seguridad.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.py"
|
|
4
|
-
- "**/*.pyi"
|
|
5
|
-
---
|
|
6
|
-
# Testing en Python
|
|
7
|
-
|
|
8
|
-
> Este archivo extiende [common/testing.md](../common/testing.md) con contenido específico de Python.
|
|
9
|
-
|
|
10
|
-
## Framework
|
|
11
|
-
|
|
12
|
-
Usa **pytest** como framework de testing.
|
|
13
|
-
|
|
14
|
-
## Cobertura
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
pytest --cov=src --cov-report=term-missing
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Organización de los tests
|
|
21
|
-
|
|
22
|
-
Usa `pytest.mark` para categorizar los tests:
|
|
23
|
-
|
|
24
|
-
```python
|
|
25
|
-
import pytest
|
|
26
|
-
|
|
27
|
-
@pytest.mark.unit
|
|
28
|
-
def test_calculate_total():
|
|
29
|
-
...
|
|
30
|
-
|
|
31
|
-
@pytest.mark.integration
|
|
32
|
-
def test_database_connection():
|
|
33
|
-
...
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Referencia
|
|
37
|
-
|
|
38
|
-
Consulta la skill `testing-python` para patrones detallados de pytest y fixtures.
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.tsx"
|
|
4
|
-
- "**/*.jsx"
|
|
5
|
-
- "**/components/**/*.ts"
|
|
6
|
-
- "**/components/**/*.js"
|
|
7
|
-
- "**/hooks/**/*.ts"
|
|
8
|
-
- "**/hooks/**/*.js"
|
|
9
|
-
---
|
|
10
|
-
# Estilo de código React
|
|
11
|
-
|
|
12
|
-
> Este archivo extiende [typescript/coding-style.md](../typescript/coding-style.md) y [common/coding-style.md](../common/coding-style.md) con contenido específico de React.
|
|
13
|
-
|
|
14
|
-
## Extensiones de archivo
|
|
15
|
-
|
|
16
|
-
- `.tsx` para cualquier archivo que contenga JSX, aunque sea un fragmento de una línea
|
|
17
|
-
- `.ts` para lógica pura, hooks personalizados sin JSX, definiciones de tipos y utilidades
|
|
18
|
-
- `.test.tsx` / `.test.ts` reflejando el archivo fuente
|
|
19
|
-
- Usa `.jsx` solo cuando el proyecto evita TypeScript de forma intencional — señala en la revisión cada archivo React nuevo sin tipos
|
|
20
|
-
|
|
21
|
-
## Nomenclatura
|
|
22
|
-
|
|
23
|
-
- Componentes: `PascalCase` tanto para el símbolo como para el archivo (`UserCard.tsx`, export por defecto `UserCard`)
|
|
24
|
-
- Hooks personalizados: `useCamelCase` para el símbolo, kebab-case para el archivo cuando la convención del proyecto es kebab-case (`use-debounce.ts` exporta `useDebounce`)
|
|
25
|
-
- Context: símbolo `<Dominio>Context`, componente proveedor `<Dominio>Provider`, hook consumidor `use<Dominio>`
|
|
26
|
-
- Manejadores de eventos: `handleClick`, `handleSubmit` dentro del componente; la prop que lo recibe es `onClick`, `onSubmit`
|
|
27
|
-
- Props booleanas: `isLoading`, `hasError`, `canSubmit` — nunca `loading` ni `error` a secas para booleanos
|
|
28
|
-
|
|
29
|
-
## Forma del componente
|
|
30
|
-
|
|
31
|
-
```tsx
|
|
32
|
-
type Props = {
|
|
33
|
-
user: User;
|
|
34
|
-
onSelect: (id: string) => void;
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export function UserCard({ user, onSelect }: Props) {
|
|
38
|
-
return (
|
|
39
|
-
<button type="button" onClick={() => onSelect(user.id)}>
|
|
40
|
-
{user.name}
|
|
41
|
-
</button>
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
- Prefiere `type Props = {}` para formas de props cerradas del componente
|
|
47
|
-
- Usa `interface` solo cuando el tipo de props se extiende vía declaration merging o se exporta como punto de extensión de una API pública
|
|
48
|
-
- Desestructura siempre las props en la lista de parámetros — nada de acceder a `props.user` dentro del cuerpo
|
|
49
|
-
- Tipa el retorno de forma implícita a través del JSX (`function Foo(): JSX.Element` solo cuando la función retorna condicionalmente y la unión confunde la inferencia)
|
|
50
|
-
|
|
51
|
-
## JSX
|
|
52
|
-
|
|
53
|
-
- Cierra en sí mismas las etiquetas sin hijos: `<img />`, `<UserCard user={u} />`
|
|
54
|
-
- Usa fragmentos `<>...</>` en lugar de un `<div>` envolvente cuando no se necesita un elemento del DOM
|
|
55
|
-
- Renderizado condicional: `{condition && <Foo />}` para booleanos, ternario para uno-u-otro, retorno temprano para cláusulas de guarda
|
|
56
|
-
- Nunca pongas lógica inline en el JSX cuando se lee como multilínea — extráela a una const encima del return o a una función
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
// Preferir
|
|
60
|
-
const greeting = user.isAdmin ? "Welcome, admin" : `Hello ${user.name}`;
|
|
61
|
-
return <h1>{greeting}</h1>;
|
|
62
|
-
|
|
63
|
-
// En lugar de
|
|
64
|
-
return <h1>{user.isAdmin ? "Welcome, admin" : `Hello ${user.name}`}</h1>;
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Frontera servidor / cliente (Next.js App Router, RSC)
|
|
68
|
-
|
|
69
|
-
- Por defecto un archivo nuevo es Server Component — añade `"use client"` solo cuando el archivo usa estado, efectos, refs, APIs del navegador o manejadores de eventos
|
|
70
|
-
- Coloca la directiva `"use client"` en la línea 1, antes de cualquier import
|
|
71
|
-
- Nunca importes un archivo de Client Component desde dentro de un archivo de acción `"use server"`
|
|
72
|
-
- Nunca re-exportes código exclusivo de servidor a través de un módulo cliente — el bundler lo incluirá silenciosamente
|
|
73
|
-
|
|
74
|
-
## Imports
|
|
75
|
-
|
|
76
|
-
- Primero los imports de React: `import { useState } from "react"`
|
|
77
|
-
- Luego librerías de terceros, después imports absolutos del proyecto y finalmente los relativos
|
|
78
|
-
- Imports solo de tipos: `import type { ReactNode } from "react"` — nunca mezcles imports de runtime y de tipos en una misma sentencia cuando `consistent-type-imports` de ESLint está configurado
|
|
79
|
-
|
|
80
|
-
## Disciplina de hooks
|
|
81
|
-
|
|
82
|
-
Consulta [hooks.md](./hooks.md) para el conjunto completo de reglas. Puntos de estilo destacados:
|
|
83
|
-
|
|
84
|
-
- Los hooks personalizados deben empezar con `use` — lo exige `eslint-plugin-react-hooks`
|
|
85
|
-
- Agrupa todas las llamadas a hooks al inicio del componente, antes de cualquier lógica condicional
|
|
86
|
-
- Evita crear hooks ad hoc para envoltorios de una línea — inserta la llamada directamente
|
|
87
|
-
|
|
88
|
-
## Estado
|
|
89
|
-
|
|
90
|
-
- Local primero (`useState`); elévalo solo cuando se comparte
|
|
91
|
-
- Context para estado transversal leído por muchos componentes (tema, autenticación, i18n) — no para actualizaciones de alta frecuencia
|
|
92
|
-
- Store externo (Zustand, Jotai, Redux Toolkit) cuando el estado debe persistir entre cambios de ruta, sincronizarse entre pestañas o depurarse vía devtools
|
|
93
|
-
- Nunca dupliques estado que pueda derivarse — calcúlalo durante el render
|
|
94
|
-
|
|
95
|
-
## Componentes de clase
|
|
96
|
-
|
|
97
|
-
Prohibidos en código nuevo. Convierte los componentes de clase heredados a componentes de función cuando los toques para cambios no triviales.
|
|
98
|
-
|
|
99
|
-
## Estructura de archivos por componente
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
components/UserCard/
|
|
103
|
-
UserCard.tsx
|
|
104
|
-
UserCard.module.css # o styled-components, o clases de Tailwind inline
|
|
105
|
-
UserCard.test.tsx
|
|
106
|
-
index.ts # solo re-export
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
Los componentes de archivo único inline son aceptables para piezas presentacionales triviales.
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.tsx"
|
|
4
|
-
- "**/*.jsx"
|
|
5
|
-
- "**/hooks/**/*.ts"
|
|
6
|
-
- "**/hooks/**/*.js"
|
|
7
|
-
- "**/use-*.ts"
|
|
8
|
-
- "**/use-*.tsx"
|
|
9
|
-
---
|
|
10
|
-
# Hooks de React
|
|
11
|
-
|
|
12
|
-
> Este archivo cubre los **hooks de React** (`useState`, `useEffect`, `useMemo`, `useCallback`, hooks personalizados) — NO el sistema de runtime `hooks/` de Theus. El nombre sigue la convención por lenguaje `rules/<lang>/hooks.md` usada en todo este repositorio.
|
|
13
|
-
>
|
|
14
|
-
> Extiende [typescript/patterns.md](../typescript/patterns.md) y [common/patterns.md](../common/patterns.md).
|
|
15
|
-
|
|
16
|
-
## Reglas de los hooks
|
|
17
|
-
|
|
18
|
-
Impón `eslint-plugin-react-hooks` con `react-hooks/rules-of-hooks` en nivel error.
|
|
19
|
-
|
|
20
|
-
1. Hooks solo en el nivel superior de un componente de función o de otro hook
|
|
21
|
-
2. Nunca en bucles, condicionales, funciones anidadas ni después de retornos tempranos
|
|
22
|
-
3. Siempre llamados en el mismo orden en cada render
|
|
23
|
-
4. Solo dentro de componentes de función de React o hooks personalizados (funciones que empiezan con `use`)
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
// INCORRECTO: hook condicional
|
|
27
|
-
function Foo({ enabled }: { enabled: boolean }) {
|
|
28
|
-
if (enabled) {
|
|
29
|
-
const [x, setX] = useState(0); // violación de la regla
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// CORRECTO: hook incondicional, condición dentro
|
|
34
|
-
function Foo({ enabled }: { enabled: boolean }) {
|
|
35
|
-
const [x, setX] = useState(0);
|
|
36
|
-
if (!enabled) return null;
|
|
37
|
-
return <span>{x}</span>;
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## `useEffect` — cuándo NO usarlo
|
|
42
|
-
|
|
43
|
-
`useEffect` sirve para sincronizarse con sistemas externos (suscripciones, APIs del navegador, librerías de terceros). **No** es la herramienta adecuada para:
|
|
44
|
-
|
|
45
|
-
- Estado derivado — calcúlalo durante el render
|
|
46
|
-
- Transformar datos para renderizar — calcúlalo durante el render
|
|
47
|
-
- Reiniciar estado cuando cambia una prop — usa una `key` en el padre o deriva desde las props
|
|
48
|
-
- Notificar a los padres de cambios de estado — llama al callback en el manejador de eventos
|
|
49
|
-
- Inicializar singletons a nivel de aplicación — llama a la función a nivel de módulo o en `main.tsx`
|
|
50
|
-
|
|
51
|
-
```tsx
|
|
52
|
-
// INCORRECTO: efecto para estado derivado
|
|
53
|
-
const [fullName, setFullName] = useState("");
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
setFullName(`${first} ${last}`);
|
|
56
|
-
}, [first, last]);
|
|
57
|
-
|
|
58
|
-
// CORRECTO: derivar durante el render
|
|
59
|
-
const fullName = `${first} ${last}`;
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Arrays de dependencias
|
|
63
|
-
|
|
64
|
-
- Incluye siempre todo valor reactivo referenciado dentro del efecto/callback
|
|
65
|
-
- Habilita la regla de lint `react-hooks/exhaustive-deps` — nunca la silencies sin un comentario que explique por qué
|
|
66
|
-
- Si el array de dependencias se vuelve inmanejable, el efecto hace demasiado — divídelo
|
|
67
|
-
- Identidad estable para funciones pasadas en deps: envuélvelas en `useCallback` solo cuando la función es a su vez dependencia de otro hook o se pasa a un hijo memoizado
|
|
68
|
-
|
|
69
|
-
## Limpieza
|
|
70
|
-
|
|
71
|
-
Toda suscripción, intervalo, listener o petición en curso debe limpiarse.
|
|
72
|
-
|
|
73
|
-
```tsx
|
|
74
|
-
useEffect(() => {
|
|
75
|
-
const controller = new AbortController();
|
|
76
|
-
fetch(url, { signal: controller.signal }).then(handleResponse);
|
|
77
|
-
return () => controller.abort();
|
|
78
|
-
}, [url]);
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
```tsx
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
const id = setInterval(tick, 1000);
|
|
84
|
-
return () => clearInterval(id);
|
|
85
|
-
}, []);
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Sin limpieza = condiciones de carrera cuando cambian las deps y fugas de memoria al desmontar.
|
|
89
|
-
|
|
90
|
-
## `useMemo` y `useCallback` — cuándo valen la pena
|
|
91
|
-
|
|
92
|
-
Postura por defecto: **no memoices**. Añade `useMemo` / `useCallback` solo cuando:
|
|
93
|
-
|
|
94
|
-
1. El valor se pasa como prop a un hijo envuelto en `React.memo`, y la identidad importa
|
|
95
|
-
2. El valor es dependencia de otro `useEffect` / `useMemo` / `useCallback`
|
|
96
|
-
3. El cálculo es costoso de forma medible (perfila antes de asumirlo)
|
|
97
|
-
|
|
98
|
-
La memoización prematura añade ruido, oculta bugs y puede ser más lenta que el recálculo que reemplaza.
|
|
99
|
-
|
|
100
|
-
## Hooks personalizados
|
|
101
|
-
|
|
102
|
-
Extrae un hook personalizado cuando:
|
|
103
|
-
|
|
104
|
-
- La misma secuencia de hooks (estado + efecto + calculado) aparece en 2 o más componentes
|
|
105
|
-
- La lógica tiene un propósito claro y nombrable (`useDebounce`, `useOnClickOutside`, `useLocalStorage`)
|
|
106
|
-
- Quieres probar la lógica de forma independiente de cualquier componente
|
|
107
|
-
|
|
108
|
-
NO lo extraigas cuando:
|
|
109
|
-
|
|
110
|
-
- Tendría un único llamador — insértalo inline
|
|
111
|
-
- El "hook" es solo `useState` con otro nombre — añade indirección sin aportar valor
|
|
112
|
-
|
|
113
|
-
```tsx
|
|
114
|
-
export function useDebounce<T>(value: T, delay: number): T {
|
|
115
|
-
const [debounced, setDebounced] = useState(value);
|
|
116
|
-
useEffect(() => {
|
|
117
|
-
const id = setTimeout(() => setDebounced(value), delay);
|
|
118
|
-
return () => clearTimeout(id);
|
|
119
|
-
}, [value, delay]);
|
|
120
|
-
return debounced;
|
|
121
|
-
}
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## Patrones de `useState`
|
|
125
|
-
|
|
126
|
-
- Estado inicial desde una prop solo al montar: pasa una función `useState(() => computeInitial(prop))` cuando el cálculo es costoso
|
|
127
|
-
- Actualizador funcional cuando el nuevo estado depende del anterior: `setCount(c => c + 1)` — nunca `setCount(count + 1)` dentro de contextos asíncronos o con batching
|
|
128
|
-
- Agrupa estado relacionado en un solo objeto solo cuando siempre cambian juntos; de lo contrario, divide en múltiples llamadas a `useState`
|
|
129
|
-
- Usa `useReducer` en cuanto las transiciones de estado dependen del estado previo o hay 3 o más valores relacionados
|
|
130
|
-
|
|
131
|
-
## Patrones de `useRef`
|
|
132
|
-
|
|
133
|
-
- Refs de DOM para APIs imperativas (focus, scroll, librerías de terceros)
|
|
134
|
-
- Contenedor mutable que no provoca re-render (ids de temporizadores, valores previos, banderas de "está montado")
|
|
135
|
-
- Nunca leas ni escribas `ref.current` durante el render — solo dentro de efectos o manejadores de eventos
|
|
136
|
-
- `useImperativeHandle` solo cuando expones la API de un hijo a un ref del padre — vía de escape de último recurso
|
|
137
|
-
|
|
138
|
-
## `useSyncExternalStore`
|
|
139
|
-
|
|
140
|
-
Usa este hook para suscribirte a cualquier store externo (API del navegador, librería de estado de terceros, emisor de eventos personalizado). Es la forma soportada de hacer que el estado externo sea seguro con el renderizado concurrente.
|
|
141
|
-
|
|
142
|
-
```tsx
|
|
143
|
-
const isOnline = useSyncExternalStore(
|
|
144
|
-
(cb) => {
|
|
145
|
-
window.addEventListener("online", cb);
|
|
146
|
-
window.addEventListener("offline", cb);
|
|
147
|
-
return () => {
|
|
148
|
-
window.removeEventListener("online", cb);
|
|
149
|
-
window.removeEventListener("offline", cb);
|
|
150
|
-
};
|
|
151
|
-
},
|
|
152
|
-
() => navigator.onLine,
|
|
153
|
-
() => true,
|
|
154
|
-
);
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Novedades de React 19
|
|
158
|
-
|
|
159
|
-
- `use()` — desenvuelve promesas y contextos inline; usable de forma condicional (el único hook con esa propiedad)
|
|
160
|
-
- `useFormStatus()` / `useFormState()` (o `useActionState`) — estado de envío de formularios sin prop drilling
|
|
161
|
-
- `useOptimistic()` — actualizaciones de UI optimistas mientras una acción de servidor está pendiente
|
|
162
|
-
- `useTransition()` — marca actualizaciones de estado no urgentes para que las urgentes sigan siendo responsivas
|
|
163
|
-
|
|
164
|
-
Cuando el proyecto apunta a React 19+, prefiere estos hooks sobre equivalentes hechos a mano.
|
|
165
|
-
|
|
166
|
-
## La trampa del closure obsoleto
|
|
167
|
-
|
|
168
|
-
Los manejadores asíncronos y los intervalos capturan los valores del render en el que fueron creados. Corrígelo así:
|
|
169
|
-
|
|
170
|
-
1. Usando la forma de actualizador funcional de `setState`
|
|
171
|
-
2. Poniendo el valor cambiante en el array de deps del `useEffect` y reconstruyendo el manejador
|
|
172
|
-
3. Leyendo desde un ref que se mantiene sincronizado
|
|
173
|
-
|
|
174
|
-
## Configuración de lint
|
|
175
|
-
|
|
176
|
-
Reglas requeridas:
|
|
177
|
-
|
|
178
|
-
```json
|
|
179
|
-
{
|
|
180
|
-
"rules": {
|
|
181
|
-
"react-hooks/rules-of-hooks": "error",
|
|
182
|
-
"react-hooks/exhaustive-deps": "warn"
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
Trata las advertencias de `exhaustive-deps` como errores en CI para código nuevo.
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.tsx"
|
|
4
|
-
- "**/*.jsx"
|
|
5
|
-
- "**/components/**/*.ts"
|
|
6
|
-
- "**/components/**/*.js"
|
|
7
|
-
- "**/app/**/*.tsx"
|
|
8
|
-
- "**/pages/**/*.tsx"
|
|
9
|
-
---
|
|
10
|
-
# Patrones de React
|
|
11
|
-
|
|
12
|
-
> Este archivo extiende [typescript/patterns.md](../typescript/patterns.md) y [common/patterns.md](../common/patterns.md) con contenido específico de React. Para reglas específicas de hooks, consulta [hooks.md](./hooks.md).
|
|
13
|
-
|
|
14
|
-
## Separación contenedor / presentacional
|
|
15
|
-
|
|
16
|
-
Los componentes contenedores son dueños del fetching de datos, el estado y los efectos secundarios. Los componentes presentacionales reciben props y renderizan — sin llamadas a servicios, sin hooks más allá del estado local de UI.
|
|
17
|
-
|
|
18
|
-
```tsx
|
|
19
|
-
// Contenedor — dueño de los datos
|
|
20
|
-
export function UserPage({ userId }: { userId: string }) {
|
|
21
|
-
const { data: user, isLoading } = useUser(userId);
|
|
22
|
-
if (isLoading) return <Spinner />;
|
|
23
|
-
if (!user) return <NotFound />;
|
|
24
|
-
return <UserCard user={user} onSelect={handleSelect} />;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Presentacional — puro
|
|
28
|
-
export function UserCard({ user, onSelect }: { user: User; onSelect: (id: string) => void }) {
|
|
29
|
-
return <button onClick={() => onSelect(user.id)}>{user.name}</button>;
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Árbol de decisión para la ubicación del estado
|
|
34
|
-
|
|
35
|
-
1. Usado por un solo componente → `useState` dentro de él
|
|
36
|
-
2. Usado por el padre + unos pocos hijos → elévalo al ancestro común más cercano y pásalo vía props
|
|
37
|
-
3. Usado en ramas distantes → React Context **solo para lecturas de baja frecuencia** (tema, autenticación, locale)
|
|
38
|
-
4. Actualizaciones de alta frecuencia compartidas por todo el árbol → store externo (Zustand, Jotai, Redux Toolkit)
|
|
39
|
-
5. Datos derivados del servidor → librería de server-state (TanStack Query, SWR, fetch en RSC) — no estado de aplicación
|
|
40
|
-
|
|
41
|
-
Context mal usado para valores que cambian con frecuencia provoca que cada consumidor se re-renderice en cada actualización.
|
|
42
|
-
|
|
43
|
-
## Frontera Server / Client Component (RSC, Next.js App Router)
|
|
44
|
-
|
|
45
|
-
- Los Server Components son el valor por defecto — se ejecutan en el servidor, no viajan al cliente y pueden usar `await` directamente
|
|
46
|
-
- Los Client Components optan explícitamente con `"use client"` al inicio del archivo
|
|
47
|
-
- Los datos fluyen hacia abajo: un Server Component puede renderizar un Client Component y pasarle props serializables
|
|
48
|
-
- Un Client Component no puede importar un Server Component, pero puede recibirlo vía `children` o slots con nombre
|
|
49
|
-
|
|
50
|
-
```tsx
|
|
51
|
-
// Servidor (por defecto)
|
|
52
|
-
export default async function Page() {
|
|
53
|
-
const user = await fetchUser();
|
|
54
|
-
return <UserClient user={user} />;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Cliente
|
|
58
|
-
"use client";
|
|
59
|
-
export function UserClient({ user }: { user: User }) {
|
|
60
|
-
const [tab, setTab] = useState("profile");
|
|
61
|
-
return <Tabs value={tab} onChange={setTab}>{user.name}</Tabs>;
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
- Nunca importes paquetes `"server-only"` (clientes de BD, secretos) desde un archivo de Client Component — envuélvelos en un Server Component o Server Action
|
|
66
|
-
- Marca los módulos sensibles con `import "server-only"` para que el bundler falle si un archivo cliente los importa
|
|
67
|
-
|
|
68
|
-
## Suspense + Error Boundaries
|
|
69
|
-
|
|
70
|
-
Toda frontera de Suspense necesita un Error Boundary por encima. El par cubre ambos estados.
|
|
71
|
-
|
|
72
|
-
```tsx
|
|
73
|
-
<ErrorBoundary fallback={<ErrorView />}>
|
|
74
|
-
<Suspense fallback={<Skeleton />}>
|
|
75
|
-
<UserDetails id={id} />
|
|
76
|
-
</Suspense>
|
|
77
|
-
</ErrorBoundary>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
- Coloca las fronteras de Suspense cerca de donde se necesitan los datos, no en la raíz de la ruta
|
|
81
|
-
- Múltiples fronteras más estrechas revelan el contenido cargado de forma progresiva
|
|
82
|
-
- El Error Boundary debe ser un componente de clase (React 19 aún no tiene equivalente funcional) O usar un wrapper de librería como `react-error-boundary`
|
|
83
|
-
|
|
84
|
-
## Formularios
|
|
85
|
-
|
|
86
|
-
### No controlados (React 19 + form actions)
|
|
87
|
-
|
|
88
|
-
Prefiere inputs no controlados con form actions cuando el formulario tiene un paso de envío claro. El navegador es dueño del valor; React lo lee vía `FormData` al enviar.
|
|
89
|
-
|
|
90
|
-
```tsx
|
|
91
|
-
async function action(formData: FormData) {
|
|
92
|
-
"use server";
|
|
93
|
-
await saveUser({ name: String(formData.get("name")) });
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export function UserForm() {
|
|
97
|
-
return (
|
|
98
|
-
<form action={action}>
|
|
99
|
-
<input name="name" required />
|
|
100
|
-
<button type="submit">Save</button>
|
|
101
|
-
</form>
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Controlados
|
|
107
|
-
|
|
108
|
-
Usa inputs controlados cuando el valor gobierna otra parte de la UI, requiere validación en tiempo real o formateo.
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
const [email, setEmail] = useState("");
|
|
112
|
-
return <input value={email} onChange={(e) => setEmail(e.target.value)} />;
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Librerías de formularios
|
|
116
|
-
|
|
117
|
-
Para formularios complejos (multi-paso, arrays de campos dinámicos, validación entre campos), usa una librería:
|
|
118
|
-
|
|
119
|
-
- React Hook Form — mínimos re-renders, enfoque no controlado primero
|
|
120
|
-
- TanStack Form — tipada, agnóstica de framework
|
|
121
|
-
- Final Form — cuando importan los re-renders basados en suscripciones
|
|
122
|
-
|
|
123
|
-
## Fetching de datos
|
|
124
|
-
|
|
125
|
-
| Estrategia | Cuándo |
|
|
126
|
-
|---|---|
|
|
127
|
-
| Fetch en RSC (`await` en un Server Component) | Datos por petición en Next.js App Router, sin necesidad de caché en el cliente |
|
|
128
|
-
| TanStack Query | Caché en el cliente, mutaciones, actualizaciones optimistas, polling |
|
|
129
|
-
| SWR | Caché ligera + revalidación, más simple que TanStack Query |
|
|
130
|
-
| `fetch` en `useEffect` | Evítalo — condiciones de carrera, sin caché, sin reintentos. Solo aceptable para casos puntuales de disparar-y-olvidar |
|
|
131
|
-
|
|
132
|
-
Nunca hagas fetch en un `useEffect` cuando hay una librería de caché real disponible — estas manejan deduplicación, invalidación de caché, reintento de errores e integración con Suspense.
|
|
133
|
-
|
|
134
|
-
## Listas y keys
|
|
135
|
-
|
|
136
|
-
- La `key` debe ser estable entre renders — nunca `index` para una lista que puede reordenarse, insertar o eliminar
|
|
137
|
-
- La `key` debe ser única entre hermanos, no globalmente
|
|
138
|
-
- Una lista reordenada con keys por índice hace que el estado de los componentes hijos se pegue a la fila equivocada
|
|
139
|
-
|
|
140
|
-
## Composición sobre herencia
|
|
141
|
-
|
|
142
|
-
- Pasa `children` para composición estilo slot
|
|
143
|
-
- Pasa funciones render-prop para renderizado parametrizado
|
|
144
|
-
- Pasa tipos de componente para puntos de extensión: `renderItem={UserRow}`
|
|
145
|
-
- Nunca extiendas una clase de componente para especializar comportamiento
|
|
146
|
-
|
|
147
|
-
## Componentes compuestos
|
|
148
|
-
|
|
149
|
-
Para controles relacionados (Tabs, Accordion, Menu), usa componentes compuestos que comparten estado vía Context:
|
|
150
|
-
|
|
151
|
-
```tsx
|
|
152
|
-
<Tabs defaultValue="profile">
|
|
153
|
-
<Tabs.List>
|
|
154
|
-
<Tabs.Trigger value="profile">Profile</Tabs.Trigger>
|
|
155
|
-
<Tabs.Trigger value="settings">Settings</Tabs.Trigger>
|
|
156
|
-
</Tabs.List>
|
|
157
|
-
<Tabs.Panel value="profile"><ProfileForm /></Tabs.Panel>
|
|
158
|
-
<Tabs.Panel value="settings"><SettingsForm /></Tabs.Panel>
|
|
159
|
-
</Tabs>
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Portales
|
|
163
|
-
|
|
164
|
-
Usa `createPortal` para modales, tooltips y contenedores de toasts — cualquier cosa que deba escapar del `overflow: hidden` del padre o del contexto de apilamiento de `z-index`. Renderiza hacia un nodo del DOM estable montado en `index.html`.
|
|
165
|
-
|
|
166
|
-
## Refs y forwarding (React 19+)
|
|
167
|
-
|
|
168
|
-
React 19 permite que los componentes de función acepten `ref` como una prop normal — `forwardRef` ya no es necesario.
|
|
169
|
-
|
|
170
|
-
```tsx
|
|
171
|
-
export function Input({ ref, ...rest }: { ref?: React.Ref<HTMLInputElement> } & InputProps) {
|
|
172
|
-
return <input ref={ref} {...rest} />;
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Las bases de código más antiguas en React 18 siguen necesitando `forwardRef`.
|
|
177
|
-
|
|
178
|
-
## Fuera de alcance (secciones puntero)
|
|
179
|
-
|
|
180
|
-
### Next.js (App Router)
|
|
181
|
-
|
|
182
|
-
- Server Actions, Route Handlers, Middleware, rutas paralelas/interceptadas, Metadata en streaming
|
|
183
|
-
- Se tratan como una preocupación de framework aparte — al añadir patrones profundos específicos de Next, propón una pista dedicada `rules/nextjs/`
|
|
184
|
-
- Por ahora, sigue la documentación oficial de Next.js para los detalles del App Router
|
|
185
|
-
|
|
186
|
-
### React Native
|
|
187
|
-
|
|
188
|
-
- Imports específicos de plataforma (`Platform.OS`, `.ios.tsx` / `.android.tsx`), `StyleSheet`, librerías de navegación (React Navigation, Expo Router)
|
|
189
|
-
- Se trata como una pista aparte — `rules/react-native/` aún no existe
|
|
190
|
-
- Los hooks y patrones core de React de este archivo siguen aplicando
|
|
191
|
-
|
|
192
|
-
## Referencia de skills
|
|
193
|
-
|
|
194
|
-
Para profundizar en React consulta `skills/patrones-react/SKILL.md`. Para preocupaciones de frontend entre frameworks consulta `skills/patrones-frontend/SKILL.md`. Para accesibilidad consulta `skills/accesibilidad/SKILL.md`.
|