theus-cli-linux-arm64 1.2.2 → 1.3.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/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,141 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: patrones-postgres
|
|
3
|
-
description: Patrones de base de datos PostgreSQL para optimización de consultas, diseño de esquemas, indexación y seguridad.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Patrones de PostgreSQL
|
|
7
|
-
|
|
8
|
-
Referencia rápida de buenas prácticas de PostgreSQL. Para orientación detallada, usa el agente `revisor-bd`.
|
|
9
|
-
|
|
10
|
-
## Cuándo activarla
|
|
11
|
-
|
|
12
|
-
- Escribir consultas SQL o migraciones
|
|
13
|
-
- Diseñar esquemas de base de datos
|
|
14
|
-
- Diagnosticar consultas lentas
|
|
15
|
-
- Implementar Row Level Security
|
|
16
|
-
- Configurar pooling de conexiones
|
|
17
|
-
|
|
18
|
-
## Referencia rápida
|
|
19
|
-
|
|
20
|
-
### Chuleta de índices
|
|
21
|
-
|
|
22
|
-
| Patrón de consulta | Tipo de índice | Ejemplo |
|
|
23
|
-
|--------------|------------|---------|
|
|
24
|
-
| `WHERE col = value` | B-tree (por defecto) | `CREATE INDEX idx ON t (col)` |
|
|
25
|
-
| `WHERE col > value` | B-tree | `CREATE INDEX idx ON t (col)` |
|
|
26
|
-
| `WHERE a = x AND b > y` | Compuesto | `CREATE INDEX idx ON t (a, b)` |
|
|
27
|
-
| `WHERE jsonb @> '{}'` | GIN | `CREATE INDEX idx ON t USING gin (col)` |
|
|
28
|
-
| `WHERE tsv @@ query` | GIN | `CREATE INDEX idx ON t USING gin (col)` |
|
|
29
|
-
| Rangos de series temporales | BRIN | `CREATE INDEX idx ON t USING brin (col)` |
|
|
30
|
-
|
|
31
|
-
### Referencia rápida de tipos de datos
|
|
32
|
-
|
|
33
|
-
| Caso de uso | Tipo correcto | Evita |
|
|
34
|
-
|----------|-------------|-------|
|
|
35
|
-
| IDs | `bigint` | `int`, UUID aleatorio |
|
|
36
|
-
| Cadenas | `text` | `varchar(255)` |
|
|
37
|
-
| Timestamps | `timestamptz` | `timestamp` |
|
|
38
|
-
| Dinero | `numeric(10,2)` | `float` |
|
|
39
|
-
| Flags | `boolean` | `varchar`, `int` |
|
|
40
|
-
|
|
41
|
-
### Patrones comunes
|
|
42
|
-
|
|
43
|
-
**Orden en índices compuestos:**
|
|
44
|
-
```sql
|
|
45
|
-
-- Primero las columnas de igualdad, luego las de rango
|
|
46
|
-
CREATE INDEX idx ON orders (status, created_at);
|
|
47
|
-
-- Sirve para: WHERE status = 'pending' AND created_at > '2024-01-01'
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
**Índice de cobertura (covering):**
|
|
51
|
-
```sql
|
|
52
|
-
CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
|
|
53
|
-
-- Evita la lectura de la tabla para SELECT email, name, created_at
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Índice parcial:**
|
|
57
|
-
```sql
|
|
58
|
-
CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;
|
|
59
|
-
-- Índice más pequeño, solo incluye usuarios activos
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**Política RLS (optimizada):**
|
|
63
|
-
```sql
|
|
64
|
-
CREATE POLICY policy ON orders
|
|
65
|
-
USING ((SELECT auth.uid()) = user_id); -- ¡Envuélvelo en SELECT!
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**UPSERT:**
|
|
69
|
-
```sql
|
|
70
|
-
INSERT INTO settings (user_id, key, value)
|
|
71
|
-
VALUES (123, 'theme', 'dark')
|
|
72
|
-
ON CONFLICT (user_id, key)
|
|
73
|
-
DO UPDATE SET value = EXCLUDED.value;
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Paginación por cursor:**
|
|
77
|
-
```sql
|
|
78
|
-
SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20;
|
|
79
|
-
-- O(1) frente a OFFSET, que es O(n)
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**Procesamiento de colas:**
|
|
83
|
-
```sql
|
|
84
|
-
UPDATE jobs SET status = 'processing'
|
|
85
|
-
WHERE id = (
|
|
86
|
-
SELECT id FROM jobs WHERE status = 'pending'
|
|
87
|
-
ORDER BY created_at LIMIT 1
|
|
88
|
-
FOR UPDATE SKIP LOCKED
|
|
89
|
-
) RETURNING *;
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Detección de antipatrones
|
|
93
|
-
|
|
94
|
-
```sql
|
|
95
|
-
-- Encontrar claves foráneas sin índice
|
|
96
|
-
SELECT conrelid::regclass, a.attname
|
|
97
|
-
FROM pg_constraint c
|
|
98
|
-
JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
|
|
99
|
-
WHERE c.contype = 'f'
|
|
100
|
-
AND NOT EXISTS (
|
|
101
|
-
SELECT 1 FROM pg_index i
|
|
102
|
-
WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey)
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
-- Encontrar consultas lentas
|
|
106
|
-
SELECT query, mean_exec_time, calls
|
|
107
|
-
FROM pg_stat_statements
|
|
108
|
-
WHERE mean_exec_time > 100
|
|
109
|
-
ORDER BY mean_exec_time DESC;
|
|
110
|
-
|
|
111
|
-
-- Comprobar el bloat de las tablas
|
|
112
|
-
SELECT relname, n_dead_tup, last_vacuum
|
|
113
|
-
FROM pg_stat_user_tables
|
|
114
|
-
WHERE n_dead_tup > 1000
|
|
115
|
-
ORDER BY n_dead_tup DESC;
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Plantilla de configuración
|
|
119
|
-
|
|
120
|
-
```sql
|
|
121
|
-
-- Límites de conexiones (ajustar según la RAM)
|
|
122
|
-
ALTER SYSTEM SET max_connections = 100;
|
|
123
|
-
ALTER SYSTEM SET work_mem = '8MB';
|
|
124
|
-
|
|
125
|
-
-- Timeouts
|
|
126
|
-
ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';
|
|
127
|
-
ALTER SYSTEM SET statement_timeout = '30s';
|
|
128
|
-
|
|
129
|
-
-- Monitoreo
|
|
130
|
-
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
131
|
-
|
|
132
|
-
-- Valores de seguridad por defecto
|
|
133
|
-
REVOKE ALL ON SCHEMA public FROM public;
|
|
134
|
-
|
|
135
|
-
SELECT pg_reload_conf();
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Relacionado
|
|
139
|
-
|
|
140
|
-
- Agente: `revisor-bd` — flujo completo de revisión de bases de datos
|
|
141
|
-
- Skill: `patrones-backend` — patrones de API y de backend
|
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: patrones-prisma
|
|
3
|
-
description: Patrones de Prisma ORM para backends TypeScript — diseño de schema, optimización de queries, transacciones, paginación y trampas críticas como updateMany devolviendo count en vez de registros, timeouts de $transaction, migrate dev reseteando la BD, @updatedAt omitido en escrituras masivas y agotamiento de conexiones en serverless.
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Patrones de Prisma
|
|
8
|
-
|
|
9
|
-
Patrones de producción y trampas no obvias de Prisma ORM en backends TypeScript.
|
|
10
|
-
|
|
11
|
-
> **Verifica tu versión antes de aplicar los patrones.** La superficie de API de Prisma ha evolucionado entre versiones mayores:
|
|
12
|
-
>
|
|
13
|
-
> ```bash
|
|
14
|
-
> npx prisma --version
|
|
15
|
-
> ```
|
|
16
|
-
>
|
|
17
|
-
> Diferencias notables de API entre versiones:
|
|
18
|
-
> - `relationJoins` puede cargar relaciones vía JOIN en lugar de queries separadas, pero puede causar explosión de filas en relaciones 1:N grandes o `include` profundos — haz benchmark de ambos enfoques
|
|
19
|
-
> - Se añadieron el modificador de campo `omit` y la API de Client Extensions `prisma.$extends`
|
|
20
|
-
> - **Instalaciones más recientes**: el paquete puede llamarse `prisma` en vez de `@prisma/client`; `PrismaClient` puede requerir un driver adapter (p. ej. `@prisma/adapter-pg`); `datasource.url` puede vivir en `prisma.config.ts` en lugar de `schema.prisma`
|
|
21
|
-
> - Los comandos del CLI (`migrate dev`, `migrate deploy`, `generate`) no han cambiado entre versiones
|
|
22
|
-
|
|
23
|
-
## Cuándo activar
|
|
24
|
-
|
|
25
|
-
- Al diseñar o modificar modelos y relaciones del schema de Prisma
|
|
26
|
-
- Al escribir queries, transacciones o lógica de paginación
|
|
27
|
-
- Al usar `updateMany`, `deleteMany` o cualquier operación masiva
|
|
28
|
-
- Al ejecutar o planificar migraciones de base de datos
|
|
29
|
-
- Al desplegar en entornos serverless (Vercel, Lambda, Cloudflare Workers)
|
|
30
|
-
- Al implementar soft delete o filtrado de filas multi-tenant
|
|
31
|
-
|
|
32
|
-
## Conceptos centrales
|
|
33
|
-
|
|
34
|
-
### Estrategia de IDs
|
|
35
|
-
|
|
36
|
-
| Estrategia | Úsala cuando | Evítala cuando |
|
|
37
|
-
|---|---|---|
|
|
38
|
-
| `@default(cuid())` | Opción por defecto — segura en URLs, ordenable, sin colisiones | Se necesitan IDs secuenciales para sistemas externos |
|
|
39
|
-
| `@default(uuid())` | Se requiere interoperabilidad con sistemas no-Prisma | Tablas con alta escritura (los UUID aleatorios fragmentan los índices B-tree) |
|
|
40
|
-
| `@default(autoincrement())` | Tablas de unión internas, logs de auditoría | IDs expuestos al público (revela el conteo de registros) |
|
|
41
|
-
|
|
42
|
-
### Defaults del schema
|
|
43
|
-
|
|
44
|
-
```prisma
|
|
45
|
-
model User {
|
|
46
|
-
id String @id @default(cuid())
|
|
47
|
-
email String @unique // @unique ya crea un índice — no hace falta @@index
|
|
48
|
-
name String
|
|
49
|
-
role Role @default(USER)
|
|
50
|
-
posts Post[]
|
|
51
|
-
createdAt DateTime @default(now())
|
|
52
|
-
updatedAt DateTime @updatedAt
|
|
53
|
-
deletedAt DateTime?
|
|
54
|
-
|
|
55
|
-
@@index([createdAt])
|
|
56
|
-
@@index([deletedAt, createdAt]) // compuesto para queries de soft-delete + ordenamiento
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
- Añade `@@index` en cada foreign key y en cada columna usada en `WHERE` u `ORDER BY`.
|
|
61
|
-
- Declara `deletedAt DateTime?` desde el inicio cuando el soft delete sea un requisito previsible — añadirlo después exige una migración sobre una tabla viva.
|
|
62
|
-
- Prisma establece `updatedAt @updatedAt` automáticamente solo en `update` y `upsert` (ver la trampa de actualizaciones masivas en Anti-patrones).
|
|
63
|
-
|
|
64
|
-
### `include` vs `select`
|
|
65
|
-
|
|
66
|
-
| | `include` | `select` |
|
|
67
|
-
|---|---|---|
|
|
68
|
-
| Devuelve | Todos los campos escalares + las relaciones indicadas | Solo los campos indicados |
|
|
69
|
-
| Úsalo cuando | Necesitas la mayoría de campos más una relación | Rutas calientes, tablas grandes, evitar sobre-lectura |
|
|
70
|
-
| Rendimiento | Puede sobre-leer en tablas anchas | Payload mínimo, más rápido en datasets grandes |
|
|
71
|
-
| Nota Prisma 5 | Usa JOIN por defecto (`relationJoins`) | Igual |
|
|
72
|
-
|
|
73
|
-
```ts
|
|
74
|
-
// include — todas las columnas + relación
|
|
75
|
-
const user = await prisma.user.findUnique({
|
|
76
|
-
where: { id },
|
|
77
|
-
include: { posts: { select: { id: true, title: true } } },
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
// select — allowlist explícita
|
|
81
|
-
const user = await prisma.user.findUnique({
|
|
82
|
-
where: { id },
|
|
83
|
-
select: { id: true, email: true, name: true },
|
|
84
|
-
});
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Nunca devuelvas entidades crudas de Prisma en respuestas de API — mapea a DTOs de respuesta para controlar los campos expuestos:
|
|
88
|
-
|
|
89
|
-
```ts
|
|
90
|
-
// MAL: filtra passwordHash, deletedAt y campos internos
|
|
91
|
-
return await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
92
|
-
|
|
93
|
-
// BIEN: mapeo explícito a DTO
|
|
94
|
-
const user = await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
95
|
-
return { id: user.id, name: user.name, email: user.email };
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Selección de la forma de transacción
|
|
99
|
-
|
|
100
|
-
| Situación | Usa |
|
|
101
|
-
|---|---|
|
|
102
|
-
| Operaciones independientes, sin interdependencia | Forma de array |
|
|
103
|
-
| Un paso posterior depende de un resultado anterior | Forma interactiva |
|
|
104
|
-
| Hay llamadas externas (email, HTTP) involucradas | Fuera de la transacción por completo |
|
|
105
|
-
|
|
106
|
-
```ts
|
|
107
|
-
// Forma de array — agrupada en un solo round trip
|
|
108
|
-
const [user, post] = await prisma.$transaction([
|
|
109
|
-
prisma.user.update({ where: { id }, data: { name } }),
|
|
110
|
-
prisma.post.create({ data: { title, authorId: id } }),
|
|
111
|
-
]);
|
|
112
|
-
|
|
113
|
-
// Forma interactiva — usa solo el cliente tx, nunca el cliente prisma externo
|
|
114
|
-
const post = await prisma.$transaction(async (tx) => {
|
|
115
|
-
const user = await tx.user.findUniqueOrThrow({ where: { id } });
|
|
116
|
-
if (user.role !== 'ADMIN') throw new Error('Forbidden');
|
|
117
|
-
return tx.post.create({ data: { title, authorId: user.id } });
|
|
118
|
-
});
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Singleton de PrismaClient
|
|
122
|
-
|
|
123
|
-
Cada instancia de `PrismaClient` abre su propio pool de conexiones. Instancia una sola vez.
|
|
124
|
-
|
|
125
|
-
```ts
|
|
126
|
-
// lib/prisma.ts
|
|
127
|
-
|
|
128
|
-
// Opción A — inicialización con adapter (requerida por instalaciones recientes de Prisma)
|
|
129
|
-
import { PrismaClient } from '@prisma/client'; // o la ruta del cliente generado en tu setup
|
|
130
|
-
import { PrismaPg } from '@prisma/adapter-pg';
|
|
131
|
-
|
|
132
|
-
function createPrismaClient() {
|
|
133
|
-
const adapter = new PrismaPg({
|
|
134
|
-
connectionString: process.env.DATABASE_URL!,
|
|
135
|
-
});
|
|
136
|
-
return new PrismaClient({
|
|
137
|
-
adapter,
|
|
138
|
-
log: process.env.NODE_ENV === 'development' ? ['query', 'error'] : ['error'],
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
|
|
143
|
-
|
|
144
|
-
export const prisma = globalForPrisma.prisma ?? createPrismaClient();
|
|
145
|
-
|
|
146
|
-
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
|
|
147
|
-
|
|
148
|
-
// Opción B — inicialización directa (instalaciones antiguas, sin adapter)
|
|
149
|
-
// import { PrismaClient } from '@prisma/client';
|
|
150
|
-
// export const prisma = globalForPrisma.prisma ?? new PrismaClient({ ... });
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Usa la Opción A si tu instalación de Prisma requiere el argumento `adapter` en el constructor de `PrismaClient`.
|
|
154
|
-
Usa la Opción B si `new PrismaClient()` funciona sin argumentos. Deja que el compilador te diga cuál es la correcta.
|
|
155
|
-
|
|
156
|
-
El patrón `globalThis` evita instancias duplicadas durante el hot reload (Next.js, nodemon, ts-node-dev).
|
|
157
|
-
|
|
158
|
-
### El problema N+1
|
|
159
|
-
|
|
160
|
-
Cargar relaciones dentro de un bucle emite una query por fila.
|
|
161
|
-
|
|
162
|
-
```ts
|
|
163
|
-
// MAL: N+1 — una query extra por usuario
|
|
164
|
-
const users = await prisma.user.findMany();
|
|
165
|
-
for (const user of users) {
|
|
166
|
-
const posts = await prisma.post.findMany({ where: { authorId: user.id } });
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// BIEN: una sola query
|
|
170
|
-
const users = await prisma.user.findMany({ include: { posts: true } });
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Con `relationJoins` de Prisma 5+, la forma con `include` usa un solo JOIN. En conjuntos 1:N grandes esto puede aumentar el tamaño del resultado — haz benchmark de ambos enfoques si la relación puede devolver muchas filas por padre.
|
|
174
|
-
|
|
175
|
-
## Ejemplos de código
|
|
176
|
-
|
|
177
|
-
### Paginación por cursor (preferida para feeds y datasets grandes)
|
|
178
|
-
|
|
179
|
-
```ts
|
|
180
|
-
async function getPosts(cursor?: string, limit = 20) {
|
|
181
|
-
const items = await prisma.post.findMany({
|
|
182
|
-
where: { published: true },
|
|
183
|
-
orderBy: [
|
|
184
|
-
{ createdAt: 'desc' },
|
|
185
|
-
{ id: 'desc' }, // orden secundario: evita paginación inestable con timestamps duplicados
|
|
186
|
-
],
|
|
187
|
-
take: limit + 1,
|
|
188
|
-
...(cursor && { cursor: { id: cursor }, skip: 1 }),
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
const hasNextPage = items.length > limit;
|
|
192
|
-
if (hasNextPage) items.pop();
|
|
193
|
-
|
|
194
|
-
return { items, nextCursor: hasNextPage ? items[items.length - 1].id : null };
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Pide `limit + 1` y haz pop — la forma canónica de detectar `hasNextPage` sin una query de conteo extra. Incluye siempre un campo único (p. ej. `id`) como `orderBy` secundario para evitar paginación inestable cuando varias filas comparten el mismo timestamp. Usa paginación por offset solo cuando los usuarios necesiten saltar a páginas arbitrarias (tablas de administración).
|
|
199
|
-
|
|
200
|
-
### Soft delete
|
|
201
|
-
|
|
202
|
-
```ts
|
|
203
|
-
// Filtra siempre de forma explícita — no dependas de middleware (oculta el comportamiento, difícil de depurar)
|
|
204
|
-
const activeUsers = await prisma.user.findMany({ where: { deletedAt: null } });
|
|
205
|
-
|
|
206
|
-
await prisma.user.update({ where: { id }, data: { deletedAt: new Date() } });
|
|
207
|
-
await prisma.user.update({ where: { id }, data: { deletedAt: null } }); // restaurar
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### Manejo de errores
|
|
211
|
-
|
|
212
|
-
```ts
|
|
213
|
-
import { Prisma } from '@prisma/client'; // o la ruta del cliente generado en tu setup
|
|
214
|
-
|
|
215
|
-
try {
|
|
216
|
-
await prisma.user.create({ data: { email } });
|
|
217
|
-
} catch (e) {
|
|
218
|
-
if (e instanceof Prisma.PrismaClientKnownRequestError) {
|
|
219
|
-
if (e.code === 'P2002') throw new ConflictError('El email ya existe');
|
|
220
|
-
if (e.code === 'P2025') throw new NotFoundError('Registro no encontrado');
|
|
221
|
-
if (e.code === 'P2003') throw new BadRequestError('El registro referenciado no existe');
|
|
222
|
-
}
|
|
223
|
-
throw e;
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
Códigos comunes: `P2002` violación de unicidad · `P2025` no encontrado · `P2003` violación de foreign key.
|
|
228
|
-
|
|
229
|
-
Captura en el límite del servicio y traduce a errores de dominio. Nunca expongas mensajes crudos de Prisma a los consumidores de la API.
|
|
230
|
-
|
|
231
|
-
### Pool de conexiones — serverless
|
|
232
|
-
|
|
233
|
-
Incrusta los parámetros de conexión directamente en `DATABASE_URL` — la concatenación de strings se rompe si la URL ya tiene parámetros de query (p. ej. `?schema=public`):
|
|
234
|
-
|
|
235
|
-
```bash
|
|
236
|
-
# .env — preferido: parámetros incrustados en la URL
|
|
237
|
-
DATABASE_URL="postgresql://user:pass@host/db?connection_limit=1&pool_timeout=20"
|
|
238
|
-
|
|
239
|
-
# Con un pooler externo (PgBouncer, pooler de Supabase)
|
|
240
|
-
DATABASE_URL="postgresql://user:pass@host/db?pgbouncer=true&connection_limit=1"
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
```ts
|
|
244
|
-
// Vercel, AWS Lambda y runtimes serverless similares:
|
|
245
|
-
// limita el pool a 1 por instancia; connection_limit y pool_timeout se controlan vía DATABASE_URL
|
|
246
|
-
|
|
247
|
-
// Setup con adapter (si tu instalación de Prisma requiere adapter):
|
|
248
|
-
import { PrismaClient } from '@prisma/client';
|
|
249
|
-
import { PrismaPg } from '@prisma/adapter-pg';
|
|
250
|
-
|
|
251
|
-
const prisma = new PrismaClient({
|
|
252
|
-
adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }),
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
// Setup directo (si tu instalación de Prisma no requiere adapter):
|
|
256
|
-
// const prisma = new PrismaClient();
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
## Anti-patrones
|
|
260
|
-
|
|
261
|
-
### `updateMany` devuelve un count, no registros
|
|
262
|
-
|
|
263
|
-
```ts
|
|
264
|
-
// MAL: el resultado es { count: 2 } — users[0] es undefined
|
|
265
|
-
const users = await prisma.user.updateMany({ where: { role: 'GUEST' }, data: { role: 'USER' } });
|
|
266
|
-
|
|
267
|
-
// BIEN: captura los IDs primero, luego actualiza, luego lee solo las filas afectadas
|
|
268
|
-
const targets = await prisma.user.findMany({
|
|
269
|
-
where: { role: 'GUEST' },
|
|
270
|
-
select: { id: true },
|
|
271
|
-
});
|
|
272
|
-
const ids = targets.map((u) => u.id);
|
|
273
|
-
await prisma.user.updateMany({ where: { id: { in: ids } }, data: { role: 'USER' } });
|
|
274
|
-
const updated = await prisma.user.findMany({ where: { id: { in: ids } } });
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
Lo mismo aplica a `deleteMany` — devuelve `{ count: n }`, nunca las filas eliminadas.
|
|
278
|
-
|
|
279
|
-
### La forma interactiva de `$transaction` expira a los 5 segundos
|
|
280
|
-
|
|
281
|
-
```ts
|
|
282
|
-
// MAL: una llamada externa dentro de la transacción excede los 5 s por defecto → "Transaction already closed"
|
|
283
|
-
await prisma.$transaction(async (tx) => {
|
|
284
|
-
const user = await tx.user.findUniqueOrThrow({ where: { id } });
|
|
285
|
-
await sendWelcomeEmail(user.email); // llamada externa
|
|
286
|
-
await tx.user.update({ where: { id }, data: { emailSent: true } });
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
// BIEN: las llamadas externas fuera de la transacción
|
|
290
|
-
const user = await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
291
|
-
await sendWelcomeEmail(user.email);
|
|
292
|
-
await prisma.user.update({ where: { id }, data: { emailSent: true } });
|
|
293
|
-
|
|
294
|
-
// Sube el timeout solo cuando el procesamiento masivo lo necesite de verdad
|
|
295
|
-
await prisma.$transaction(async (tx) => { ... }, { timeout: 30_000 });
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
### `migrate dev` puede resetear la base de datos
|
|
299
|
-
|
|
300
|
-
`migrate dev` detecta drift del schema y puede pedir resetear la BD, eliminando todos los datos.
|
|
301
|
-
|
|
302
|
-
```bash
|
|
303
|
-
# NUNCA en dev compartido, staging o producción
|
|
304
|
-
npx prisma migrate dev --name add_column
|
|
305
|
-
|
|
306
|
-
# Seguro en todas partes salvo dev local individual
|
|
307
|
-
npx prisma migrate deploy
|
|
308
|
-
|
|
309
|
-
# Verificar drift sin aplicar
|
|
310
|
-
npx prisma migrate diff \
|
|
311
|
-
--from-migrations ./prisma/migrations \
|
|
312
|
-
--to-schema-datamodel ./prisma/schema.prisma \
|
|
313
|
-
--shadow-database-url "$SHADOW_DATABASE_URL"
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
### Editar manualmente un archivo de migración rompe deploys futuros
|
|
317
|
-
|
|
318
|
-
Prisma calcula el checksum de cada archivo de migración. Editarlo después de aplicarlo causa `P3006 checksum mismatch` en cada entorno donde el original ya corrió. Crea una migración nueva en su lugar.
|
|
319
|
-
|
|
320
|
-
### Los cambios rupturistas de schema requieren migración en varios pasos
|
|
321
|
-
|
|
322
|
-
Añadir `NOT NULL` a una columna existente o renombrar una columna en una sola migración bloqueará la tabla o perderá datos. Usa expand-and-contract:
|
|
323
|
-
|
|
324
|
-
```bash
|
|
325
|
-
# Paso 1: crea la migración en local, luego despliega
|
|
326
|
-
npx prisma migrate dev --name add_new_column # solo local
|
|
327
|
-
npx prisma migrate deploy # staging / producción
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
```ts
|
|
331
|
-
// Paso 2: backfill de datos (en un script o job de migración, no en la shell)
|
|
332
|
-
await prisma.user.updateMany({ data: { newColumn: derivedValue } });
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
```bash
|
|
336
|
-
# Paso 3: crea la migración de la restricción NOT NULL en local, luego despliega
|
|
337
|
-
npx prisma migrate dev --name make_new_column_required # solo local
|
|
338
|
-
npx prisma migrate deploy # staging / producción
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
### `@updatedAt` no se dispara en `updateMany`
|
|
342
|
-
|
|
343
|
-
`@updatedAt` se establece automáticamente solo en `update` y `upsert`. Las escrituras masivas lo dejan desactualizado.
|
|
344
|
-
|
|
345
|
-
```ts
|
|
346
|
-
// MAL: updatedAt se queda con su valor viejo
|
|
347
|
-
await prisma.post.updateMany({ where: { authorId }, data: { published: true } });
|
|
348
|
-
|
|
349
|
-
// BIEN
|
|
350
|
-
await prisma.post.updateMany({
|
|
351
|
-
where: { authorId },
|
|
352
|
-
data: { published: true, updatedAt: new Date() },
|
|
353
|
-
});
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
### Soft delete + `findUniqueOrThrow` filtra registros eliminados
|
|
357
|
-
|
|
358
|
-
`findUniqueOrThrow` lanza `P2025` solo cuando la fila no existe en la BD. Las filas soft-deleted siguen existiendo y se devuelven sin error.
|
|
359
|
-
|
|
360
|
-
`findUniqueOrThrow` exige un campo con restricción única en `where` — añadir `deletedAt: null` junto a `id` rompe el tipo porque `{ id, deletedAt }` no es una restricción única compuesta. Usa `findFirstOrThrow` en su lugar.
|
|
361
|
-
|
|
362
|
-
```ts
|
|
363
|
-
// MAL: devuelve al usuario soft-deleted
|
|
364
|
-
const user = await prisma.user.findUniqueOrThrow({ where: { id } });
|
|
365
|
-
|
|
366
|
-
// MAL: error de tipos de Prisma — { id, deletedAt } no es una restricción única
|
|
367
|
-
const user = await prisma.user.findUniqueOrThrow({ where: { id, deletedAt: null } });
|
|
368
|
-
|
|
369
|
-
// BIEN: findFirstOrThrow admite condiciones where arbitrarias
|
|
370
|
-
const user = await prisma.user.findFirstOrThrow({ where: { id, deletedAt: null } });
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
### `deleteMany` sin `where` elimina todas las filas
|
|
374
|
-
|
|
375
|
-
```ts
|
|
376
|
-
// MAL: vacía la tabla silenciosamente
|
|
377
|
-
await prisma.post.deleteMany();
|
|
378
|
-
|
|
379
|
-
// BIEN
|
|
380
|
-
await prisma.post.deleteMany({ where: { authorId: userId } });
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
## Buenas prácticas
|
|
384
|
-
|
|
385
|
-
| Regla | Razón |
|
|
386
|
-
|---|---|
|
|
387
|
-
| `migrate deploy` en CI/CD, `migrate dev` solo en local | `migrate dev` puede resetear la BD ante drift |
|
|
388
|
-
| Mapea entidades a DTOs de respuesta | Evita filtrar campos internos |
|
|
389
|
-
| Captura `PrismaClientKnownRequestError` en el límite del servicio | Traduce a errores de dominio |
|
|
390
|
-
| Prefiere los métodos `*OrThrow` sobre chequeos manuales de null | Lanza P2025 automáticamente; usa `findFirstOrThrow` al filtrar por campos no únicos |
|
|
391
|
-
| `connection_limit=1` + pooler externo en serverless | Evita el agotamiento de conexiones |
|
|
392
|
-
| Proporciona siempre `where` en `deleteMany` | Evita vaciar la tabla por accidente |
|
|
393
|
-
| Establece `updatedAt: new Date()` manualmente en `updateMany` | `@updatedAt` omite las escrituras masivas |
|
|
394
|
-
|
|
395
|
-
## Skills relacionadas
|
|
396
|
-
|
|
397
|
-
- `patrones-postgres` — indexación y tuning de conexiones a nivel PostgreSQL
|
|
398
|
-
- `migraciones-bd` — planificación de migraciones en varios pasos para producción
|
|
399
|
-
- `patrones-backend` — diseño general de API y capa de servicios
|