theus-cli-linux-x64 1.2.1 → 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/README.md +15 -0
- package/RELEASE.json +6 -6
- package/bin/theus +0 -0
- package/package.json +1 -1
- package/vendor/chrome-extension/README.md +142 -0
- package/vendor/chrome-extension/background.js +540 -0
- package/vendor/chrome-extension/cdp-core.js +400 -0
- package/vendor/chrome-extension/cdp-core.test.ts +321 -0
- package/vendor/chrome-extension/cdp.js +672 -0
- package/vendor/chrome-extension/icons/icon128.png +0 -0
- package/vendor/chrome-extension/icons/icon16.png +0 -0
- package/vendor/chrome-extension/icons/icon32.png +0 -0
- package/vendor/chrome-extension/icons/icon48.png +0 -0
- package/vendor/chrome-extension/manifest.json +36 -0
- package/vendor/chrome-extension/popup.html +78 -0
- package/vendor/chrome-extension/popup.js +47 -0
- package/vendor/chrome-extension/recorder.js +316 -0
- 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,469 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: patrones-vue
|
|
3
|
-
description: Patrones de la Composition API de Vue.js 3, arquitectura de componentes, buenas prácticas de reactividad, gestión de estado con Pinia, navegación con Vue Router y patrones SSR de Nuxt. Se activa en proyectos Vue, Nuxt, Vite o Pinia.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Patrones y buenas prácticas de Vue.js
|
|
7
|
-
|
|
8
|
-
Guía integral para el desarrollo con Vue.js 3 usando la Composition API (`<script setup>`), cubriendo diseño de componentes, reactividad, gestión de estado, enrutado, testing y patrones SSR. Se incluye orientación específica de Nuxt donde difiere de Vue puro.
|
|
9
|
-
|
|
10
|
-
## Cuándo activarla
|
|
11
|
-
|
|
12
|
-
Activa esta skill cuando:
|
|
13
|
-
- El proyecto use Vue.js (cualquier versión), Nuxt, Vite + Vue o Pinia.
|
|
14
|
-
- El usuario pregunte por arquitectura de componentes Vue, composables, reactividad o gestión de estado.
|
|
15
|
-
- Estés revisando Single-File Components de Vue (archivos `.vue`).
|
|
16
|
-
- Estés configurando Vue Router, stores de Pinia o la configuración de Vite/Vitest.
|
|
17
|
-
- Se discutan patrones de rendimiento, seguridad o SSR específicos de Vue.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 1. Estructura del proyecto
|
|
22
|
-
|
|
23
|
-
### Distribución recomendada (feature-first)
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
src/
|
|
27
|
-
├── api/ # Cliente de API y definición de endpoints
|
|
28
|
-
├── assets/ # Assets estáticos (imágenes, fuentes, iconos)
|
|
29
|
-
├── components/ # Componentes compartidos/reutilizables
|
|
30
|
-
│ ├── base/ # Primitivas de UI base (Button, Input, Modal)
|
|
31
|
-
│ └── features/ # Componentes compartidos específicos de una feature
|
|
32
|
-
├── composables/ # Lógica reutilizable de la Composition API
|
|
33
|
-
├── layouts/ # Layouts de página (opcional)
|
|
34
|
-
├── pages/ # Componentes de página a nivel de ruta
|
|
35
|
-
├── router/ # Configuración de Vue Router
|
|
36
|
-
├── stores/ # Stores de Pinia
|
|
37
|
-
├── types/ # Definiciones de tipos TypeScript
|
|
38
|
-
├── utils/ # Funciones utilitarias puras
|
|
39
|
-
└── App.vue # Componente raíz
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Nombres de archivo
|
|
43
|
-
|
|
44
|
-
| Convención | Cuándo usarla |
|
|
45
|
-
|-----------|-------------|
|
|
46
|
-
| `PascalCase.vue` | Todos los componentes (lo exige `vue/multi-word-component-names`) |
|
|
47
|
-
| `useCamelCase.ts` | Composables |
|
|
48
|
-
| `camelCase.ts` | Utilidades, clientes de API, tipos |
|
|
49
|
-
| Directorios en `kebab-case` | Segmentos de ruta, carpetas de features |
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## 2. Arquitectura de componentes
|
|
54
|
-
|
|
55
|
-
### Orden dentro del Single-File Component
|
|
56
|
-
|
|
57
|
-
```vue
|
|
58
|
-
<script setup lang="ts">
|
|
59
|
-
// 1. Imports (vue → ecosistema → absolutos → relativos)
|
|
60
|
-
// 2. Props, Emits y Slots
|
|
61
|
-
// 3. Composables
|
|
62
|
-
// 4. Estado local (ref/reactive)
|
|
63
|
-
// 5. Propiedades computadas
|
|
64
|
-
// 6. Métodos
|
|
65
|
-
// 7. Watchers
|
|
66
|
-
// 8. Hooks de ciclo de vida
|
|
67
|
-
</script>
|
|
68
|
-
|
|
69
|
-
<template>
|
|
70
|
-
<!-- Contenido del template -->
|
|
71
|
-
</template>
|
|
72
|
-
|
|
73
|
-
<style scoped>
|
|
74
|
-
/* Estilos con scope */
|
|
75
|
-
</style>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Presentacional vs contenedor
|
|
79
|
-
|
|
80
|
-
- **Componentes contenedores**: Poseen la obtención de datos, el estado y los efectos secundarios. Renderizan componentes presentacionales.
|
|
81
|
-
- **Componentes presentacionales**: Reciben props, emiten eventos. Sin llamadas a API, sin acceso al store. Renderizado puro.
|
|
82
|
-
|
|
83
|
-
### Buenas prácticas con props
|
|
84
|
-
|
|
85
|
-
```ts
|
|
86
|
-
// Props basadas en tipos con valores por defecto
|
|
87
|
-
interface Props {
|
|
88
|
-
label: string;
|
|
89
|
-
variant?: "primary" | "secondary";
|
|
90
|
-
disabled?: boolean;
|
|
91
|
-
items: Item[];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
95
|
-
variant: "primary",
|
|
96
|
-
disabled: false,
|
|
97
|
-
});
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
- Provee siempre `type`, y `required`/`default` cuando corresponda.
|
|
101
|
-
- Props booleanas: `isXxx`, `hasXxx`, `canXxx`.
|
|
102
|
-
- Nunca mutes las props — emite eventos en su lugar.
|
|
103
|
-
- Para el enlace v-model, usa `defineModel()` (Vue 3.4+) o `modelValue` + `update:modelValue`.
|
|
104
|
-
|
|
105
|
-
### Eventos
|
|
106
|
-
|
|
107
|
-
```ts
|
|
108
|
-
const emit = defineEmits<{
|
|
109
|
-
submit: [];
|
|
110
|
-
"update:modelValue": [value: string];
|
|
111
|
-
select: [id: string, index: number];
|
|
112
|
-
}>();
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
- Usa kebab-case en los templates (`@update:model-value`).
|
|
116
|
-
- Usa camelCase en el script (`emit("update:modelValue", val)`).
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## 3. Composables (lógica reutilizable)
|
|
121
|
-
|
|
122
|
-
### Estructura
|
|
123
|
-
|
|
124
|
-
```ts
|
|
125
|
-
// composables/useDebounce.ts
|
|
126
|
-
export function useDebounce<T>(value: MaybeRef<T>, delay: number): Ref<T> {
|
|
127
|
-
const debounced = ref(toValue(value)) as Ref<T>;
|
|
128
|
-
|
|
129
|
-
let timer: ReturnType<typeof setTimeout>;
|
|
130
|
-
watch(
|
|
131
|
-
() => toValue(value),
|
|
132
|
-
(newVal) => {
|
|
133
|
-
clearTimeout(timer);
|
|
134
|
-
timer = setTimeout(() => { debounced.value = newVal; }, delay);
|
|
135
|
-
}
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
onUnmounted(() => clearTimeout(timer));
|
|
139
|
-
return readonly(debounced);
|
|
140
|
-
}
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Reglas
|
|
144
|
-
|
|
145
|
-
- Deben comenzar con el prefijo `use`.
|
|
146
|
-
- Devuelve valores reactivos (`ref`, `computed`, `reactive`), nunca primitivos planos.
|
|
147
|
-
- Acepta entradas reactivas vía `MaybeRef` / `toRef()` / `toValue()`.
|
|
148
|
-
- Limpia los efectos secundarios en `onUnmounted` o en el `onCleanup` del watcher.
|
|
149
|
-
- Sin efectos secundarios a nivel de módulo.
|
|
150
|
-
|
|
151
|
-
### vs mixins
|
|
152
|
-
|
|
153
|
-
Los composables reemplazan por completo a los mixins de Vue 2:
|
|
154
|
-
- **Mixins**: Flujo de datos opaco, colisiones de fuente de verdad, conflictos de nombres.
|
|
155
|
-
- **Composables**: Imports explícitos, valores de retorno claros, componibles y aptos para tree-shaking.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## 4. Gestión de estado
|
|
160
|
-
|
|
161
|
-
### Cuándo usar cada opción
|
|
162
|
-
|
|
163
|
-
| Patrón | Caso de uso |
|
|
164
|
-
|---------|----------|
|
|
165
|
-
| `ref()` / `reactive()` | Estado local del componente |
|
|
166
|
-
| Props + Emits | Comunicación padre-hijo |
|
|
167
|
-
| Provide / Inject | Tema, configuración, API de plugin |
|
|
168
|
-
| Store de Pinia | Estado global, compartido y complejo |
|
|
169
|
-
| Composable de estado de servidor | Datos de API con caché (envolver `fetch`/TanStack Query) |
|
|
170
|
-
|
|
171
|
-
### Setup Store de Pinia (preferido)
|
|
172
|
-
|
|
173
|
-
```ts
|
|
174
|
-
// stores/useCartStore.ts
|
|
175
|
-
export const useCartStore = defineStore("cart", () => {
|
|
176
|
-
const items = ref<CartItem[]>([]);
|
|
177
|
-
const isLoading = ref(false);
|
|
178
|
-
|
|
179
|
-
const totalPrice = computed(() =>
|
|
180
|
-
items.value.reduce((sum, i) => sum + i.price * i.quantity, 0)
|
|
181
|
-
);
|
|
182
|
-
const itemCount = computed(() =>
|
|
183
|
-
items.value.reduce((sum, i) => sum + i.quantity, 0)
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
async function addItem(productId: string) {
|
|
187
|
-
isLoading.value = true;
|
|
188
|
-
try {
|
|
189
|
-
const item = await fetchProduct(productId);
|
|
190
|
-
const existing = items.value.find(i => i.id === item.id);
|
|
191
|
-
if (existing) existing.quantity++;
|
|
192
|
-
else items.value.push({ ...item, quantity: 1 });
|
|
193
|
-
} finally {
|
|
194
|
-
isLoading.value = false;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return { items, isLoading, totalPrice, itemCount, addItem };
|
|
199
|
-
});
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
- Usa la sintaxis Setup Store (no Options Store).
|
|
203
|
-
- Prefiere acciones para mutaciones de nivel de negocio y `$patch()` para actualizaciones agrupadas.
|
|
204
|
-
- Cada acción asíncrona: maneja carga + éxito + error.
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## 5. Vue Router
|
|
209
|
-
|
|
210
|
-
### Definición de rutas
|
|
211
|
-
|
|
212
|
-
```ts
|
|
213
|
-
const routes = [
|
|
214
|
-
{
|
|
215
|
-
path: "/users/:id",
|
|
216
|
-
name: "user-detail",
|
|
217
|
-
component: () => import("@/pages/UserDetail.vue"), // lazy
|
|
218
|
-
props: true, // pasar los params como props
|
|
219
|
-
meta: { requiresAuth: true },
|
|
220
|
-
},
|
|
221
|
-
];
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Guardias de navegación
|
|
225
|
-
|
|
226
|
-
```ts
|
|
227
|
-
router.beforeEach((to, from) => {
|
|
228
|
-
const { isLoggedIn } = useAuthStore();
|
|
229
|
-
if (to.meta.requiresAuth && !isLoggedIn) {
|
|
230
|
-
return { name: "login", query: { redirect: to.fullPath } };
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
### Params de ruta reactivos
|
|
236
|
-
|
|
237
|
-
Cuando un componente permanece montado pero los params de la ruta cambian:
|
|
238
|
-
|
|
239
|
-
```ts
|
|
240
|
-
const route = useRoute();
|
|
241
|
-
const id = computed(() => route.params.id as string);
|
|
242
|
-
watch(id, (newId) => fetchItem(newId));
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## 6. Patrones de template
|
|
248
|
-
|
|
249
|
-
### Sintaxis de template
|
|
250
|
-
|
|
251
|
-
```vue
|
|
252
|
-
<!-- v-if/v-else-if/v-else -->
|
|
253
|
-
<div v-if="isLoading">Cargando...</div>
|
|
254
|
-
<div v-else-if="error">Error: {{ error }}</div>
|
|
255
|
-
<div v-else>{{ content }}</div>
|
|
256
|
-
|
|
257
|
-
<!-- v-show para alternancias frecuentes -->
|
|
258
|
-
<div v-show="isOpen">Contenido alternado</div>
|
|
259
|
-
|
|
260
|
-
<!-- v-for con keys estables -->
|
|
261
|
-
<div v-for="item in items" :key="item.id">{{ item.name }}</div>
|
|
262
|
-
|
|
263
|
-
<!-- Lista filtrada por computed (no v-if + v-for en el mismo elemento) -->
|
|
264
|
-
<div v-for="item in activeItems" :key="item.id">{{ item.name }}</div>
|
|
265
|
-
|
|
266
|
-
<!-- Manejo de eventos -->
|
|
267
|
-
<form @submit.prevent="handleSubmit">
|
|
268
|
-
<button type="submit">Guardar</button>
|
|
269
|
-
</form>
|
|
270
|
-
|
|
271
|
-
<!-- v-model -->
|
|
272
|
-
<input v-model="name" />
|
|
273
|
-
<CustomInput v-model="value" v-model:title="title" />
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## 7. Rendimiento
|
|
279
|
-
|
|
280
|
-
| Técnica | Cuándo usarla |
|
|
281
|
-
|-----------|-------------|
|
|
282
|
-
| `v-memo` | Ítems de lista que rara vez cambian |
|
|
283
|
-
| `v-once` | Contenido renderizado una vez y estático para siempre |
|
|
284
|
-
| `shallowRef()` | Estructuras de datos grandes reemplazadas en bloque |
|
|
285
|
-
| `shallowReactive()` | Solo las propiedades de nivel superior son reactivas |
|
|
286
|
-
| `v-show` sobre `v-if` | Alternancias de visibilidad frecuentes |
|
|
287
|
-
| `<KeepAlive :max="10">` | Cachear vistas alternadas |
|
|
288
|
-
| Rutas lazy | `() => import(...)` para rutas no críticas |
|
|
289
|
-
| `Suspense` | Carga de componentes asíncronos con fallback |
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
|
-
## 8. Testing
|
|
294
|
-
|
|
295
|
-
### Stack
|
|
296
|
-
|
|
297
|
-
- **Vitest** para tests unitarios y de componentes
|
|
298
|
-
- **Vue Test Utils** para montaje e interacción
|
|
299
|
-
- **@pinia/testing** para mockear stores
|
|
300
|
-
- **Playwright** para E2E
|
|
301
|
-
|
|
302
|
-
### Patrón de test de componente
|
|
303
|
-
|
|
304
|
-
```ts
|
|
305
|
-
import { mount } from "@vue/test-utils";
|
|
306
|
-
import { createPinia, setActivePinia } from "pinia";
|
|
307
|
-
import UserCard from "./UserCard.vue";
|
|
308
|
-
|
|
309
|
-
beforeEach(() => { setActivePinia(createPinia()); });
|
|
310
|
-
|
|
311
|
-
it("renderiza y emite", async () => {
|
|
312
|
-
const wrapper = mount(UserCard, {
|
|
313
|
-
props: { user: { id: "1", name: "Alice" } },
|
|
314
|
-
});
|
|
315
|
-
expect(wrapper.text()).toContain("Alice");
|
|
316
|
-
await wrapper.find("button").trigger("click");
|
|
317
|
-
expect(wrapper.emitted("select")![0]).toEqual(["1"]);
|
|
318
|
-
});
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## 9. Patrones específicos de Nuxt
|
|
324
|
-
|
|
325
|
-
### Auto-imports
|
|
326
|
-
|
|
327
|
-
Nuxt auto-importa `ref`, `computed`, `watch`, `useFetch`, `useAsyncData`, etc. Úsalos directamente sin importarlos. En proyectos que no sean Nuxt, importa siempre de forma explícita.
|
|
328
|
-
|
|
329
|
-
### useAsyncData / useFetch
|
|
330
|
-
|
|
331
|
-
```ts
|
|
332
|
-
const { data: user, pending, error, refresh } = await useAsyncData(
|
|
333
|
-
"user", // clave única para el cacheo
|
|
334
|
-
() => $fetch(`/api/users/${id}`),
|
|
335
|
-
);
|
|
336
|
-
|
|
337
|
-
const { data: posts } = await useFetch("/api/posts", {
|
|
338
|
-
query: { page: 1 },
|
|
339
|
-
key: "posts-page-1", // deduplica peticiones
|
|
340
|
-
});
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
### Rutas de servidor
|
|
344
|
-
|
|
345
|
-
```ts
|
|
346
|
-
// server/api/users/[id].ts
|
|
347
|
-
export default defineEventHandler(async (event) => {
|
|
348
|
-
const { id } = await getValidatedRouterParams(event, z.object({
|
|
349
|
-
id: z.string().uuid(),
|
|
350
|
-
}).parse);
|
|
351
|
-
// ... obtener y devolver
|
|
352
|
-
});
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
### Runtime Config
|
|
356
|
-
|
|
357
|
-
```ts
|
|
358
|
-
// nuxt.config.ts
|
|
359
|
-
export default defineNuxtConfig({
|
|
360
|
-
runtimeConfig: {
|
|
361
|
-
// solo servidor
|
|
362
|
-
apiSecret: "",
|
|
363
|
-
// público (expuesto al cliente)
|
|
364
|
-
public: {
|
|
365
|
-
apiBase: "https://api.example.com",
|
|
366
|
-
},
|
|
367
|
-
},
|
|
368
|
-
});
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
---
|
|
372
|
-
|
|
373
|
-
## 10. Nuevas APIs de Vue 3.5+
|
|
374
|
-
|
|
375
|
-
### Desestructuración reactiva de props
|
|
376
|
-
|
|
377
|
-
Vue 3.5 estabilizó la desestructuración reactiva de props — las variables desestructuradas de `defineProps()` son reactivas automáticamente:
|
|
378
|
-
|
|
379
|
-
```ts
|
|
380
|
-
// Vue 3.5+: las props desestructuradas son reactivas (sin necesidad de toRefs)
|
|
381
|
-
const { count = 0, msg = "hello" } = defineProps<{
|
|
382
|
-
count?: number;
|
|
383
|
-
msg?: string;
|
|
384
|
-
}>();
|
|
385
|
-
|
|
386
|
-
// Limitación: no se puede observar una prop desestructurada directamente
|
|
387
|
-
watch(() => count, (newVal) => { ... }); // se requiere un getter
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
### `useTemplateRef()`
|
|
391
|
-
|
|
392
|
-
Reemplaza las refs planas emparejadas por nombre con `useTemplateRef()` para referencias de template:
|
|
393
|
-
|
|
394
|
-
```ts
|
|
395
|
-
import { useTemplateRef } from "vue";
|
|
396
|
-
const inputEl = useTemplateRef<HTMLInputElement>("input");
|
|
397
|
-
// "input" coincide con el atributo ref="input" del template, no con el nombre de la variable
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
Soporta IDs de ref dinámicos: `useTemplateRef(dynamicRefId)`.
|
|
401
|
-
|
|
402
|
-
### `onWatcherCleanup()`
|
|
403
|
-
|
|
404
|
-
API de limpieza de watchers importable globalmente (Vue 3.5+). Debe llamarse de forma síncrona dentro del callback del watcher:
|
|
405
|
-
|
|
406
|
-
```ts
|
|
407
|
-
import { watch, onWatcherCleanup } from "vue";
|
|
408
|
-
|
|
409
|
-
watch(userId, async (newId) => {
|
|
410
|
-
const controller = new AbortController();
|
|
411
|
-
onWatcherCleanup(() => controller.abort());
|
|
412
|
-
// ... fetch con signal
|
|
413
|
-
});
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
### `useId()`
|
|
417
|
-
|
|
418
|
-
Generación de IDs únicos estables en SSR para elementos de formulario y accesibilidad:
|
|
419
|
-
|
|
420
|
-
```ts
|
|
421
|
-
import { useId } from "vue";
|
|
422
|
-
const id = useId();
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Teleport con `defer`
|
|
426
|
-
|
|
427
|
-
`<Teleport defer>` permite teletransportar hacia destinos renderizados en el mismo ciclo:
|
|
428
|
-
|
|
429
|
-
```vue
|
|
430
|
-
<Teleport defer to="#container">Contenido</Teleport>
|
|
431
|
-
<div id="container"></div>
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
### Hidratación diferida (SSR)
|
|
435
|
-
|
|
436
|
-
`defineAsyncComponent()` ahora soporta la estrategia `hydrate`:
|
|
437
|
-
|
|
438
|
-
```ts
|
|
439
|
-
import { defineAsyncComponent, hydrateOnVisible } from "vue";
|
|
440
|
-
const AsyncComp = defineAsyncComponent({
|
|
441
|
-
loader: () => import("./Comp.vue"),
|
|
442
|
-
hydrate: hydrateOnVisible(),
|
|
443
|
-
});
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
---
|
|
447
|
-
|
|
448
|
-
## Antipatrones
|
|
449
|
-
|
|
450
|
-
| Antipatrón | Por qué está mal | La corrección |
|
|
451
|
-
|-------------|---------------|---------|
|
|
452
|
-
| Desestructurar `defineProps()` (Vue < 3.5) | Captura una instantánea, pierde la reactividad | Accede vía `props.xxx` o usa `toRefs()` |
|
|
453
|
-
| `watch()` sobre una prop desestructurada (Vue 3.5+) | Error en tiempo de compilación — las props desestructuradas no se pueden observar directamente | Usa un getter: `watch(() => count, ...)` |
|
|
454
|
-
| `v-if` + `v-for` en el mismo elemento | Orden de ejecución ambiguo | Usa un array filtrado por computed |
|
|
455
|
-
| Key de `v-for` = índice | Estado roto al reordenar | Usa IDs estables de la base de datos |
|
|
456
|
-
| Mutar props | Viola el flujo de datos unidireccional | Emite eventos o usa `v-model` |
|
|
457
|
-
| `v-html` con contenido de usuario | Vulnerabilidad XSS | Sanitiza con DOMPurify |
|
|
458
|
-
| Mixins en Vue 3 | Opacos, propensos a colisiones | Reemplázalos con composables |
|
|
459
|
-
| Efectos secundarios a nivel de módulo en un composable | Compartidos entre instancias | Acótalos en `onMounted` + `onUnmounted` |
|
|
460
|
-
| `reactive()` para estado reemplazable | El reemplazo rompe la reactividad | Usa `ref()` en su lugar |
|
|
461
|
-
| Watcher sin limpieza | Fugas de memoria, condiciones de carrera | Usa `onCleanup` u `onWatcherCleanup()` (Vue 3.5+) |
|
|
462
|
-
| Options API en código Vue 3 nuevo | El ecosistema migró a la Composition API | Usa `<script setup>` |
|
|
463
|
-
| Ref plana para referencias de template | Sin soporte de refs dinámicas, el emparejamiento por nombre es frágil | Usa `useTemplateRef()` (Vue 3.5+) |
|
|
464
|
-
|
|
465
|
-
## Skills relacionadas
|
|
466
|
-
|
|
467
|
-
- `accesibilidad` — ARIA, HTML semántico, gestión del foco
|
|
468
|
-
- `patrones-frontend` — Arquitectura frontend transversal a frameworks
|
|
469
|
-
- `estandares-codigo` — Estándares generales de calidad de código
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: persistencia-actores-swift
|
|
3
|
-
description: Persistencia de datos thread-safe en Swift usando actores — caché en memoria con almacenamiento respaldado en archivo, eliminando data races por diseño con el compilador como garante.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Actores de Swift para persistencia thread-safe
|
|
7
|
-
|
|
8
|
-
Patrones para construir capas de persistencia de datos thread-safe usando actores de Swift. Combina caché en memoria con almacenamiento respaldado en archivo, aprovechando el modelo de actores para eliminar los data races en tiempo de compilación.
|
|
9
|
-
|
|
10
|
-
## Cuándo activarla
|
|
11
|
-
|
|
12
|
-
- Construir una capa de persistencia de datos en Swift 5.5+
|
|
13
|
-
- Necesitar acceso thread-safe a estado mutable compartido
|
|
14
|
-
- Querer eliminar la sincronización manual (locks, DispatchQueues)
|
|
15
|
-
- Construir apps offline-first con almacenamiento local
|
|
16
|
-
|
|
17
|
-
## Patrón central
|
|
18
|
-
|
|
19
|
-
### Repositorio basado en actor
|
|
20
|
-
|
|
21
|
-
El modelo de actores garantiza acceso serializado — sin data races, con verificación del compilador.
|
|
22
|
-
|
|
23
|
-
```swift
|
|
24
|
-
public actor LocalRepository<T: Codable & Identifiable> where T.ID == String {
|
|
25
|
-
private var cache: [String: T] = [:]
|
|
26
|
-
private let fileURL: URL
|
|
27
|
-
|
|
28
|
-
public init(directory: URL = .documentsDirectory, filename: String = "data.json") {
|
|
29
|
-
self.fileURL = directory.appendingPathComponent(filename)
|
|
30
|
-
// Carga síncrona durante init (el aislamiento del actor aún no está activo)
|
|
31
|
-
self.cache = Self.loadSynchronously(from: fileURL)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// MARK: - API pública
|
|
35
|
-
|
|
36
|
-
public func save(_ item: T) throws {
|
|
37
|
-
cache[item.id] = item
|
|
38
|
-
try persistToFile()
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
public func delete(_ id: String) throws {
|
|
42
|
-
cache[id] = nil
|
|
43
|
-
try persistToFile()
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public func find(by id: String) -> T? {
|
|
47
|
-
cache[id]
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public func loadAll() -> [T] {
|
|
51
|
-
Array(cache.values)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// MARK: - Privado
|
|
55
|
-
|
|
56
|
-
private func persistToFile() throws {
|
|
57
|
-
let data = try JSONEncoder().encode(Array(cache.values))
|
|
58
|
-
try data.write(to: fileURL, options: .atomic)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private static func loadSynchronously(from url: URL) -> [String: T] {
|
|
62
|
-
guard let data = try? Data(contentsOf: url),
|
|
63
|
-
let items = try? JSONDecoder().decode([T].self, from: data) else {
|
|
64
|
-
return [:]
|
|
65
|
-
}
|
|
66
|
-
return Dictionary(uniqueKeysWithValues: items.map { ($0.id, $0) })
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Uso
|
|
72
|
-
|
|
73
|
-
Todas las llamadas son automáticamente async por el aislamiento del actor:
|
|
74
|
-
|
|
75
|
-
```swift
|
|
76
|
-
let repository = LocalRepository<Question>()
|
|
77
|
-
|
|
78
|
-
// Lectura — búsqueda O(1) rápida desde la caché en memoria
|
|
79
|
-
let question = await repository.find(by: "q-001")
|
|
80
|
-
let allQuestions = await repository.loadAll()
|
|
81
|
-
|
|
82
|
-
// Escritura — actualiza la caché y persiste al archivo de forma atómica
|
|
83
|
-
try await repository.save(newQuestion)
|
|
84
|
-
try await repository.delete("q-001")
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Combinación con un ViewModel @Observable
|
|
88
|
-
|
|
89
|
-
```swift
|
|
90
|
-
@Observable
|
|
91
|
-
final class QuestionListViewModel {
|
|
92
|
-
private(set) var questions: [Question] = []
|
|
93
|
-
private let repository: LocalRepository<Question>
|
|
94
|
-
|
|
95
|
-
init(repository: LocalRepository<Question> = LocalRepository()) {
|
|
96
|
-
self.repository = repository
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
func load() async {
|
|
100
|
-
questions = await repository.loadAll()
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
func add(_ question: Question) async throws {
|
|
104
|
-
try await repository.save(question)
|
|
105
|
-
questions = await repository.loadAll()
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## Decisiones de diseño clave
|
|
111
|
-
|
|
112
|
-
| Decisión | Justificación |
|
|
113
|
-
|----------|---------------|
|
|
114
|
-
| Actor (no clase + lock) | Thread safety verificada por el compilador, sin sincronización manual |
|
|
115
|
-
| Caché en memoria + persistencia en archivo | Lecturas rápidas desde caché, escrituras duraderas a disco |
|
|
116
|
-
| Carga síncrona en init | Evita la complejidad de la inicialización async |
|
|
117
|
-
| Diccionario indexado por ID | Búsquedas O(1) por identificador |
|
|
118
|
-
| Genérico sobre `Codable & Identifiable` | Reutilizable con cualquier tipo de modelo |
|
|
119
|
-
| Escrituras atómicas (`.atomic`) | Evita escrituras parciales ante un crash |
|
|
120
|
-
|
|
121
|
-
## Buenas prácticas
|
|
122
|
-
|
|
123
|
-
- **Usa tipos `Sendable`** para todos los datos que crucen fronteras de actores
|
|
124
|
-
- **Mantén mínima la API pública del actor** — expón solo operaciones de dominio, no detalles de persistencia
|
|
125
|
-
- **Usa escrituras `.atomic`** para evitar corrupción de datos si la app crashea a mitad de escritura
|
|
126
|
-
- **Carga de forma síncrona en `init`** — los inicializadores async añaden complejidad con beneficio mínimo para archivos locales
|
|
127
|
-
- **Combínalo con ViewModels `@Observable`** para actualizaciones reactivas de la UI
|
|
128
|
-
|
|
129
|
-
## Antipatrones a evitar
|
|
130
|
-
|
|
131
|
-
- Usar `DispatchQueue` o `NSLock` en lugar de actores en código nuevo de concurrencia Swift
|
|
132
|
-
- Exponer el diccionario de caché interno a llamadores externos
|
|
133
|
-
- Hacer configurable la URL del archivo sin validación
|
|
134
|
-
- Olvidar que toda llamada a un método del actor es `await` — los llamadores deben manejar el contexto async
|
|
135
|
-
- Usar `nonisolated` para saltarse el aislamiento del actor (anula su propósito)
|
|
136
|
-
|
|
137
|
-
## Cuándo usarla
|
|
138
|
-
|
|
139
|
-
- Almacenamiento local de datos en apps iOS/macOS (datos de usuario, ajustes, contenido cacheado)
|
|
140
|
-
- Arquitecturas offline-first que sincronizan con un servidor después
|
|
141
|
-
- Cualquier estado mutable compartido al que accedan concurrentemente varias partes de la app
|
|
142
|
-
- Reemplazar thread safety heredada basada en `DispatchQueue` con concurrencia Swift moderna
|
|
143
|
-
|
|
144
|
-
## Skills relacionadas
|
|
145
|
-
|
|
146
|
-
- `concurrencia-swift-6-2`
|
|
147
|
-
- `testing-protocolos-di-swift`
|
|
148
|
-
- `patrones-swiftui`
|