theus-cli-linux-arm64 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,275 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: arquitectura-hexagonal
|
|
3
|
-
description: Diseña, implementa y refactoriza sistemas de Puertos y Adaptadores con límites de dominio claros, inversión de dependencias y orquestación de casos de uso testeable en servicios TypeScript, Java, Kotlin y Go.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Arquitectura Hexagonal
|
|
7
|
-
|
|
8
|
-
La arquitectura hexagonal (Puertos y Adaptadores) mantiene la lógica de negocio independiente de frameworks, transporte y detalles de persistencia. El núcleo de la aplicación depende de puertos abstractos, y los adaptadores implementan esos puertos en los bordes.
|
|
9
|
-
|
|
10
|
-
## Cuándo usarla
|
|
11
|
-
|
|
12
|
-
- Al construir funcionalidades nuevas donde importan la mantenibilidad y la testeabilidad a largo plazo.
|
|
13
|
-
- Al refactorizar código en capas o cargado de framework donde la lógica de dominio está mezclada con asuntos de E/S.
|
|
14
|
-
- Al soportar múltiples interfaces para el mismo caso de uso (HTTP, CLI, workers de cola, tareas cron).
|
|
15
|
-
- Al reemplazar infraestructura (base de datos, APIs externas, bus de mensajes) sin reescribir las reglas de negocio.
|
|
16
|
-
|
|
17
|
-
Usa esta skill cuando la petición involucre límites, diseño centrado en el dominio, refactorización de servicios fuertemente acoplados o desacople de la lógica de aplicación respecto de librerías específicas.
|
|
18
|
-
|
|
19
|
-
## Conceptos centrales
|
|
20
|
-
|
|
21
|
-
- **Modelo de dominio**: reglas de negocio y entidades/objetos de valor. Sin imports de frameworks.
|
|
22
|
-
- **Casos de uso (capa de aplicación)**: orquestan el comportamiento del dominio y los pasos del flujo de trabajo.
|
|
23
|
-
- **Puertos de entrada (inbound)**: contratos que describen lo que la aplicación puede hacer (comandos/consultas/interfaces de casos de uso).
|
|
24
|
-
- **Puertos de salida (outbound)**: contratos para las dependencias que la aplicación necesita (repositorios, gateways, publicadores de eventos, reloj, UUID, etc.).
|
|
25
|
-
- **Adaptadores**: implementaciones de infraestructura y de entrega de los puertos (controladores HTTP, repositorios de BD, consumidores de cola, envoltorios de SDK).
|
|
26
|
-
- **Raíz de composición (composition root)**: ubicación única de cableado donde los adaptadores concretos se vinculan a los casos de uso.
|
|
27
|
-
|
|
28
|
-
Las interfaces de los puertos de salida suelen vivir en la capa de aplicación (o en el dominio solo cuando la abstracción es genuinamente de nivel de dominio), mientras que los adaptadores de infraestructura las implementan.
|
|
29
|
-
|
|
30
|
-
La dirección de las dependencias siempre apunta hacia adentro:
|
|
31
|
-
|
|
32
|
-
- Adaptadores -> aplicación/dominio
|
|
33
|
-
- Aplicación -> interfaces de puertos (contratos de entrada/salida)
|
|
34
|
-
- Dominio -> abstracciones exclusivas del dominio (sin dependencias de framework ni infraestructura)
|
|
35
|
-
- Dominio -> nada externo
|
|
36
|
-
|
|
37
|
-
## Cómo funciona
|
|
38
|
-
|
|
39
|
-
### Paso 1: Modela el límite de un caso de uso
|
|
40
|
-
|
|
41
|
-
Define un único caso de uso con un DTO de entrada y otro de salida claros. Mantén los detalles de transporte (el `req` de Express, el `context` de GraphQL, envoltorios de payload de jobs) fuera de este límite.
|
|
42
|
-
|
|
43
|
-
### Paso 2: Define primero los puertos de salida
|
|
44
|
-
|
|
45
|
-
Identifica cada efecto secundario como un puerto:
|
|
46
|
-
|
|
47
|
-
- persistencia (`UserRepositoryPort`)
|
|
48
|
-
- llamadas externas (`BillingGatewayPort`)
|
|
49
|
-
- transversales (`LoggerPort`, `ClockPort`)
|
|
50
|
-
|
|
51
|
-
Los puertos deben modelar capacidades, no tecnologías.
|
|
52
|
-
|
|
53
|
-
### Paso 3: Implementa el caso de uso con orquestación pura
|
|
54
|
-
|
|
55
|
-
La clase/función del caso de uso recibe los puertos por constructor/argumentos. Valida invariantes de nivel de aplicación, coordina las reglas de dominio y devuelve estructuras de datos planas.
|
|
56
|
-
|
|
57
|
-
### Paso 4: Construye adaptadores en el borde
|
|
58
|
-
|
|
59
|
-
- El adaptador de entrada convierte la entrada del protocolo a la entrada del caso de uso.
|
|
60
|
-
- El adaptador de salida mapea los contratos de la aplicación a APIs concretas/ORM/query builders.
|
|
61
|
-
- El mapeo permanece en los adaptadores, no dentro de los casos de uso.
|
|
62
|
-
|
|
63
|
-
### Paso 5: Cablea todo en una raíz de composición
|
|
64
|
-
|
|
65
|
-
Instancia los adaptadores y luego inyéctalos en los casos de uso. Mantén este cableado centralizado para evitar comportamientos ocultos de service locator.
|
|
66
|
-
|
|
67
|
-
### Paso 6: Testea por límite
|
|
68
|
-
|
|
69
|
-
- Tests unitarios de casos de uso con puertos falsos (fakes).
|
|
70
|
-
- Tests de integración de adaptadores contra dependencias de infraestructura reales.
|
|
71
|
-
- Tests E2E de flujos de cara al usuario a través de los adaptadores de entrada.
|
|
72
|
-
|
|
73
|
-
## Diagrama de arquitectura
|
|
74
|
-
|
|
75
|
-
```mermaid
|
|
76
|
-
flowchart LR
|
|
77
|
-
Client["Cliente (HTTP/CLI/Worker)"] --> InboundAdapter["Adaptador de entrada"]
|
|
78
|
-
InboundAdapter -->|"llama"| UseCase["Caso de uso (capa de aplicación)"]
|
|
79
|
-
UseCase -->|"usa"| OutboundPort["Puerto de salida (interfaz)"]
|
|
80
|
-
OutboundAdapter["Adaptador de salida"] -->|"implementa"| OutboundPort
|
|
81
|
-
OutboundAdapter --> ExternalSystem["BD/API/Cola"]
|
|
82
|
-
UseCase --> DomainModel["Modelo de dominio"]
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Distribución de módulos sugerida
|
|
86
|
-
|
|
87
|
-
Usa una organización orientada a funcionalidades (feature-first) con límites explícitos:
|
|
88
|
-
|
|
89
|
-
```text
|
|
90
|
-
src/
|
|
91
|
-
features/
|
|
92
|
-
orders/
|
|
93
|
-
domain/
|
|
94
|
-
Order.ts
|
|
95
|
-
OrderPolicy.ts
|
|
96
|
-
application/
|
|
97
|
-
ports/
|
|
98
|
-
inbound/
|
|
99
|
-
CreateOrder.ts
|
|
100
|
-
outbound/
|
|
101
|
-
OrderRepositoryPort.ts
|
|
102
|
-
PaymentGatewayPort.ts
|
|
103
|
-
use-cases/
|
|
104
|
-
CreateOrderUseCase.ts
|
|
105
|
-
adapters/
|
|
106
|
-
inbound/
|
|
107
|
-
http/
|
|
108
|
-
createOrderRoute.ts
|
|
109
|
-
outbound/
|
|
110
|
-
postgres/
|
|
111
|
-
PostgresOrderRepository.ts
|
|
112
|
-
stripe/
|
|
113
|
-
StripePaymentGateway.ts
|
|
114
|
-
composition/
|
|
115
|
-
ordersContainer.ts
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Ejemplo en TypeScript
|
|
119
|
-
|
|
120
|
-
### Definición de puertos
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
export interface OrderRepositoryPort {
|
|
124
|
-
save(order: Order): Promise<void>;
|
|
125
|
-
findById(orderId: string): Promise<Order | null>;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export interface PaymentGatewayPort {
|
|
129
|
-
authorize(input: { orderId: string; amountCents: number }): Promise<{ authorizationId: string }>;
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### Caso de uso
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
type CreateOrderInput = {
|
|
137
|
-
orderId: string;
|
|
138
|
-
amountCents: number;
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
type CreateOrderOutput = {
|
|
142
|
-
orderId: string;
|
|
143
|
-
authorizationId: string;
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
export class CreateOrderUseCase {
|
|
147
|
-
constructor(
|
|
148
|
-
private readonly orderRepository: OrderRepositoryPort,
|
|
149
|
-
private readonly paymentGateway: PaymentGatewayPort
|
|
150
|
-
) {}
|
|
151
|
-
|
|
152
|
-
async execute(input: CreateOrderInput): Promise<CreateOrderOutput> {
|
|
153
|
-
const order = Order.create({ id: input.orderId, amountCents: input.amountCents });
|
|
154
|
-
|
|
155
|
-
const auth = await this.paymentGateway.authorize({
|
|
156
|
-
orderId: order.id,
|
|
157
|
-
amountCents: order.amountCents,
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
// markAuthorized devuelve una nueva instancia de Order; no muta en el lugar.
|
|
161
|
-
const authorizedOrder = order.markAuthorized(auth.authorizationId);
|
|
162
|
-
await this.orderRepository.save(authorizedOrder);
|
|
163
|
-
|
|
164
|
-
return {
|
|
165
|
-
orderId: order.id,
|
|
166
|
-
authorizationId: auth.authorizationId,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Adaptador de salida
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
export class PostgresOrderRepository implements OrderRepositoryPort {
|
|
176
|
-
constructor(private readonly db: SqlClient) {}
|
|
177
|
-
|
|
178
|
-
async save(order: Order): Promise<void> {
|
|
179
|
-
await this.db.query(
|
|
180
|
-
"insert into orders (id, amount_cents, status, authorization_id) values ($1, $2, $3, $4)",
|
|
181
|
-
[order.id, order.amountCents, order.status, order.authorizationId]
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
async findById(orderId: string): Promise<Order | null> {
|
|
186
|
-
const row = await this.db.oneOrNone("select * from orders where id = $1", [orderId]);
|
|
187
|
-
return row ? Order.rehydrate(row) : null;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### Raíz de composición
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
export const buildCreateOrderUseCase = (deps: { db: SqlClient; stripe: StripeClient }) => {
|
|
196
|
-
const orderRepository = new PostgresOrderRepository(deps.db);
|
|
197
|
-
const paymentGateway = new StripePaymentGateway(deps.stripe);
|
|
198
|
-
|
|
199
|
-
return new CreateOrderUseCase(orderRepository, paymentGateway);
|
|
200
|
-
};
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
## Mapeo multilenguaje
|
|
204
|
-
|
|
205
|
-
Usa las mismas reglas de límites en todos los ecosistemas; solo cambian la sintaxis y el estilo de cableado.
|
|
206
|
-
|
|
207
|
-
- **TypeScript/JavaScript**
|
|
208
|
-
- Puertos: `application/ports/*` como interfaces/types.
|
|
209
|
-
- Casos de uso: clases/funciones con inyección por constructor/argumentos.
|
|
210
|
-
- Adaptadores: `adapters/inbound/*`, `adapters/outbound/*`.
|
|
211
|
-
- Composición: módulo factory/contenedor explícito (sin globales ocultos).
|
|
212
|
-
- **Java**
|
|
213
|
-
- Paquetes: `domain`, `application.port.in`, `application.port.out`, `application.usecase`, `adapter.in`, `adapter.out`.
|
|
214
|
-
- Puertos: interfaces en `application.port.*`.
|
|
215
|
-
- Casos de uso: clases planas (el `@Service` de Spring es opcional, no obligatorio).
|
|
216
|
-
- Composición: configuración de Spring o clase de cableado manual; mantén el cableado fuera de las clases de dominio y de casos de uso.
|
|
217
|
-
- **Kotlin**
|
|
218
|
-
- Los módulos/paquetes reflejan la división de Java (`domain`, `application.port`, `application.usecase`, `adapter`).
|
|
219
|
-
- Puertos: interfaces de Kotlin.
|
|
220
|
-
- Casos de uso: clases con inyección por constructor (Koin/Dagger/Spring/manual).
|
|
221
|
-
- Composición: definiciones de módulos o funciones de composición dedicadas; evita patrones de service locator.
|
|
222
|
-
- **Go**
|
|
223
|
-
- Paquetes: `internal/<feature>/domain`, `application`, `ports`, `adapters/inbound`, `adapters/outbound`.
|
|
224
|
-
- Puertos: interfaces pequeñas propiedad del paquete de aplicación que las consume.
|
|
225
|
-
- Casos de uso: structs con campos de interfaz más constructores explícitos `New...`.
|
|
226
|
-
- Composición: cablea en `cmd/<app>/main.go` (o un paquete de cableado dedicado); mantén los constructores explícitos.
|
|
227
|
-
|
|
228
|
-
## Antipatrones a evitar
|
|
229
|
-
|
|
230
|
-
- Entidades de dominio que importan modelos de ORM, tipos de framework web o clientes de SDK.
|
|
231
|
-
- Casos de uso que leen directamente de `req`, `res` o metadatos de la cola.
|
|
232
|
-
- Devolver filas de la base de datos directamente desde los casos de uso sin mapeo de dominio/aplicación.
|
|
233
|
-
- Permitir que los adaptadores se llamen entre sí directamente en lugar de fluir a través de los puertos del caso de uso.
|
|
234
|
-
- Repartir el cableado de dependencias en muchos archivos con singletons globales ocultos.
|
|
235
|
-
|
|
236
|
-
## Manual de migración
|
|
237
|
-
|
|
238
|
-
1. Elige un corte vertical (un único endpoint/job) con dolor de cambio frecuente.
|
|
239
|
-
2. Extrae un límite de caso de uso con tipos de entrada/salida explícitos.
|
|
240
|
-
3. Introduce puertos de salida alrededor de las llamadas de infraestructura existentes.
|
|
241
|
-
4. Mueve la lógica de orquestación de los controladores/servicios al caso de uso.
|
|
242
|
-
5. Conserva los adaptadores antiguos, pero haz que deleguen en el nuevo caso de uso.
|
|
243
|
-
6. Añade tests alrededor del nuevo límite (unitarios + integración de adaptadores).
|
|
244
|
-
7. Repite corte por corte; evita reescrituras completas.
|
|
245
|
-
|
|
246
|
-
### Refactorización de sistemas existentes
|
|
247
|
-
|
|
248
|
-
- **Enfoque estrangulador (strangler)**: conserva los endpoints actuales y enruta un caso de uso a la vez a través de los nuevos puertos/adaptadores.
|
|
249
|
-
- **Sin reescrituras big-bang**: migra por corte de funcionalidad y preserva el comportamiento con tests de caracterización.
|
|
250
|
-
- **Fachada primero**: envuelve los servicios legados detrás de puertos de salida antes de reemplazar sus internos.
|
|
251
|
-
- **Congelamiento de composición**: centraliza el cableado desde el inicio para que las dependencias nuevas no se filtren a las capas de dominio/casos de uso.
|
|
252
|
-
- **Regla de selección de cortes**: prioriza primero los flujos de alta rotación (churn) y bajo radio de impacto.
|
|
253
|
-
- **Ruta de reversión**: mantén un toggle o conmutador de ruta reversible por corte migrado hasta verificar el comportamiento en producción.
|
|
254
|
-
|
|
255
|
-
## Guía de testing (mismos límites hexagonales)
|
|
256
|
-
|
|
257
|
-
- **Tests de dominio**: testea entidades/objetos de valor como reglas de negocio puras (sin mocks, sin setup de framework).
|
|
258
|
-
- **Tests unitarios de casos de uso**: testea la orquestación con fakes/stubs para los puertos de salida; verifica resultados de negocio e interacciones con los puertos.
|
|
259
|
-
- **Tests de contrato de adaptadores de salida**: define suites de contrato compartidas a nivel de puerto y ejecútalas contra cada implementación de adaptador.
|
|
260
|
-
- **Tests de adaptadores de entrada**: verifica el mapeo de protocolo (payload HTTP/CLI/cola a entrada del caso de uso, y mapeo de salida/errores de vuelta al protocolo).
|
|
261
|
-
- **Tests de integración de adaptadores**: ejecuta contra infraestructura real (BD/API/cola) para serialización, comportamiento de esquema/consultas, reintentos y timeouts.
|
|
262
|
-
- **Tests end-to-end**: cubre los recorridos críticos del usuario a través de adaptador de entrada -> caso de uso -> adaptador de salida.
|
|
263
|
-
- **Seguridad al refactorizar**: añade tests de caracterización antes de la extracción; consérvalos hasta que el comportamiento del nuevo límite sea estable y equivalente.
|
|
264
|
-
|
|
265
|
-
## Lista de verificación de buenas prácticas
|
|
266
|
-
|
|
267
|
-
- Las capas de dominio y casos de uso solo importan tipos internos y puertos.
|
|
268
|
-
- Cada dependencia externa está representada por un puerto de salida.
|
|
269
|
-
- La validación ocurre en los límites (adaptador de entrada + invariantes del caso de uso).
|
|
270
|
-
- Usa transformaciones inmutables (devuelve valores/entidades nuevos en lugar de mutar estado compartido).
|
|
271
|
-
- Los errores se traducen entre límites (errores de infraestructura -> errores de aplicación/dominio).
|
|
272
|
-
- La raíz de composición es explícita y fácil de auditar.
|
|
273
|
-
- Los casos de uso son testeables con fakes en memoria simples para los puertos.
|
|
274
|
-
- La refactorización comienza desde un corte vertical con tests que preservan el comportamiento.
|
|
275
|
-
- Las particularidades de lenguaje/framework se quedan en los adaptadores, nunca en las reglas de dominio.
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: arquitectura-limpia-android
|
|
3
|
-
description: Patrones de Clean Architecture para proyectos Android y Kotlin Multiplatform — estructura
|
|
4
|
-
de módulos, reglas de dependencias, UseCases, Repositories y patrones de capa de datos con Room,
|
|
5
|
-
SQLDelight y Ktor.
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Arquitectura limpia en Android
|
|
9
|
-
|
|
10
|
-
Patrones de Clean Architecture para proyectos Android y KMP. Cubre fronteras de módulos, inversión de dependencias, patrones UseCase/Repository y diseño de la capa de datos con Room, SQLDelight y Ktor.
|
|
11
|
-
|
|
12
|
-
## Cuándo activarla
|
|
13
|
-
|
|
14
|
-
- Estructurar los módulos de un proyecto Android o KMP
|
|
15
|
-
- Implementar UseCases, Repositories o DataSources
|
|
16
|
-
- Diseñar el flujo de datos entre capas (dominio, datos, presentación)
|
|
17
|
-
- Configurar inyección de dependencias con Koin o Hilt
|
|
18
|
-
- Trabajar con Room, SQLDelight o Ktor en una arquitectura por capas
|
|
19
|
-
|
|
20
|
-
## Estructura de módulos
|
|
21
|
-
|
|
22
|
-
### Distribución recomendada
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
proyecto/
|
|
26
|
-
├── app/ # Punto de entrada Android, cableado de DI, clase Application
|
|
27
|
-
├── core/ # Utilidades compartidas, clases base, tipos de error
|
|
28
|
-
├── domain/ # UseCases, modelos de dominio, interfaces de repositorio (Kotlin puro)
|
|
29
|
-
├── data/ # Implementaciones de repositorio, DataSources, BD, red
|
|
30
|
-
├── presentation/ # Pantallas, ViewModels, modelos de UI, navegación
|
|
31
|
-
├── design-system/ # Componentes Compose reutilizables, tema, tipografía
|
|
32
|
-
└── feature/ # Módulos de feature (opcional, para proyectos grandes)
|
|
33
|
-
├── auth/
|
|
34
|
-
├── settings/
|
|
35
|
-
└── profile/
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Reglas de dependencias
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
app → presentation, domain, data, core
|
|
42
|
-
presentation → domain, design-system, core
|
|
43
|
-
data → domain, core
|
|
44
|
-
domain → core (o sin dependencias)
|
|
45
|
-
core → (nada)
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Crítico**: `domain` NUNCA debe depender de `data`, `presentation` ni de ningún framework. Contiene solo Kotlin puro.
|
|
49
|
-
|
|
50
|
-
## Capa de dominio
|
|
51
|
-
|
|
52
|
-
### Patrón UseCase
|
|
53
|
-
|
|
54
|
-
Cada UseCase representa una operación de negocio. Usa `operator fun invoke` para llamadas limpias:
|
|
55
|
-
|
|
56
|
-
```kotlin
|
|
57
|
-
class GetItemsByCategoryUseCase(
|
|
58
|
-
private val repository: ItemRepository
|
|
59
|
-
) {
|
|
60
|
-
suspend operator fun invoke(category: String): Result<List<Item>> {
|
|
61
|
-
return repository.getItemsByCategory(category)
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// UseCase basado en Flow para flujos reactivos
|
|
66
|
-
class ObserveUserProgressUseCase(
|
|
67
|
-
private val repository: UserRepository
|
|
68
|
-
) {
|
|
69
|
-
operator fun invoke(userId: String): Flow<UserProgress> {
|
|
70
|
-
return repository.observeProgress(userId)
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Modelos de dominio
|
|
76
|
-
|
|
77
|
-
Los modelos de dominio son data classes de Kotlin puro — sin anotaciones de framework:
|
|
78
|
-
|
|
79
|
-
```kotlin
|
|
80
|
-
data class Item(
|
|
81
|
-
val id: String,
|
|
82
|
-
val title: String,
|
|
83
|
-
val description: String,
|
|
84
|
-
val tags: List<String>,
|
|
85
|
-
val status: Status,
|
|
86
|
-
val category: String
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
enum class Status { DRAFT, ACTIVE, ARCHIVED }
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Interfaces de repositorio
|
|
93
|
-
|
|
94
|
-
Se definen en dominio y se implementan en datos:
|
|
95
|
-
|
|
96
|
-
```kotlin
|
|
97
|
-
interface ItemRepository {
|
|
98
|
-
suspend fun getItemsByCategory(category: String): Result<List<Item>>
|
|
99
|
-
suspend fun saveItem(item: Item): Result<Unit>
|
|
100
|
-
fun observeItems(): Flow<List<Item>>
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Capa de datos
|
|
105
|
-
|
|
106
|
-
### Implementación del repositorio
|
|
107
|
-
|
|
108
|
-
Coordina entre las fuentes de datos local y remota:
|
|
109
|
-
|
|
110
|
-
```kotlin
|
|
111
|
-
class ItemRepositoryImpl(
|
|
112
|
-
private val localDataSource: ItemLocalDataSource,
|
|
113
|
-
private val remoteDataSource: ItemRemoteDataSource
|
|
114
|
-
) : ItemRepository {
|
|
115
|
-
|
|
116
|
-
override suspend fun getItemsByCategory(category: String): Result<List<Item>> {
|
|
117
|
-
return runCatching {
|
|
118
|
-
val remote = remoteDataSource.fetchItems(category)
|
|
119
|
-
localDataSource.insertItems(remote.map { it.toEntity() })
|
|
120
|
-
localDataSource.getItemsByCategory(category).map { it.toDomain() }
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
override suspend fun saveItem(item: Item): Result<Unit> {
|
|
125
|
-
return runCatching {
|
|
126
|
-
localDataSource.insertItems(listOf(item.toEntity()))
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
override fun observeItems(): Flow<List<Item>> {
|
|
131
|
-
return localDataSource.observeAll().map { entities ->
|
|
132
|
-
entities.map { it.toDomain() }
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### Patrón de mappers
|
|
139
|
-
|
|
140
|
-
Mantén los mappers como funciones de extensión cerca de los modelos de datos:
|
|
141
|
-
|
|
142
|
-
```kotlin
|
|
143
|
-
// En la capa de datos
|
|
144
|
-
fun ItemEntity.toDomain() = Item(
|
|
145
|
-
id = id,
|
|
146
|
-
title = title,
|
|
147
|
-
description = description,
|
|
148
|
-
tags = tags.split("|"),
|
|
149
|
-
status = Status.valueOf(status),
|
|
150
|
-
category = category
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
fun ItemDto.toEntity() = ItemEntity(
|
|
154
|
-
id = id,
|
|
155
|
-
title = title,
|
|
156
|
-
description = description,
|
|
157
|
-
tags = tags.joinToString("|"),
|
|
158
|
-
status = status,
|
|
159
|
-
category = category
|
|
160
|
-
)
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Base de datos Room (Android)
|
|
164
|
-
|
|
165
|
-
```kotlin
|
|
166
|
-
@Entity(tableName = "items")
|
|
167
|
-
data class ItemEntity(
|
|
168
|
-
@PrimaryKey val id: String,
|
|
169
|
-
val title: String,
|
|
170
|
-
val description: String,
|
|
171
|
-
val tags: String,
|
|
172
|
-
val status: String,
|
|
173
|
-
val category: String
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
@Dao
|
|
177
|
-
interface ItemDao {
|
|
178
|
-
@Query("SELECT * FROM items WHERE category = :category")
|
|
179
|
-
suspend fun getByCategory(category: String): List<ItemEntity>
|
|
180
|
-
|
|
181
|
-
@Upsert
|
|
182
|
-
suspend fun upsert(items: List<ItemEntity>)
|
|
183
|
-
|
|
184
|
-
@Query("SELECT * FROM items")
|
|
185
|
-
fun observeAll(): Flow<List<ItemEntity>>
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### SQLDelight (KMP)
|
|
190
|
-
|
|
191
|
-
```sql
|
|
192
|
-
-- Item.sq
|
|
193
|
-
CREATE TABLE ItemEntity (
|
|
194
|
-
id TEXT NOT NULL PRIMARY KEY,
|
|
195
|
-
title TEXT NOT NULL,
|
|
196
|
-
description TEXT NOT NULL,
|
|
197
|
-
tags TEXT NOT NULL,
|
|
198
|
-
status TEXT NOT NULL,
|
|
199
|
-
category TEXT NOT NULL
|
|
200
|
-
);
|
|
201
|
-
|
|
202
|
-
getByCategory:
|
|
203
|
-
SELECT * FROM ItemEntity WHERE category = ?;
|
|
204
|
-
|
|
205
|
-
upsert:
|
|
206
|
-
INSERT OR REPLACE INTO ItemEntity (id, title, description, tags, status, category)
|
|
207
|
-
VALUES (?, ?, ?, ?, ?, ?);
|
|
208
|
-
|
|
209
|
-
observeAll:
|
|
210
|
-
SELECT * FROM ItemEntity;
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Cliente de red Ktor (KMP)
|
|
214
|
-
|
|
215
|
-
```kotlin
|
|
216
|
-
class ItemRemoteDataSource(private val client: HttpClient) {
|
|
217
|
-
|
|
218
|
-
suspend fun fetchItems(category: String): List<ItemDto> {
|
|
219
|
-
return client.get("api/items") {
|
|
220
|
-
parameter("category", category)
|
|
221
|
-
}.body()
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Configuración del HttpClient con negociación de contenido
|
|
226
|
-
val httpClient = HttpClient {
|
|
227
|
-
install(ContentNegotiation) { json(Json { ignoreUnknownKeys = true }) }
|
|
228
|
-
install(Logging) { level = LogLevel.HEADERS }
|
|
229
|
-
defaultRequest { url("https://api.example.com/") }
|
|
230
|
-
}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
## Inyección de dependencias
|
|
234
|
-
|
|
235
|
-
### Koin (amigable con KMP)
|
|
236
|
-
|
|
237
|
-
```kotlin
|
|
238
|
-
// Módulo de dominio
|
|
239
|
-
val domainModule = module {
|
|
240
|
-
factory { GetItemsByCategoryUseCase(get()) }
|
|
241
|
-
factory { ObserveUserProgressUseCase(get()) }
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Módulo de datos
|
|
245
|
-
val dataModule = module {
|
|
246
|
-
single<ItemRepository> { ItemRepositoryImpl(get(), get()) }
|
|
247
|
-
single { ItemLocalDataSource(get()) }
|
|
248
|
-
single { ItemRemoteDataSource(get()) }
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Módulo de presentación
|
|
252
|
-
val presentationModule = module {
|
|
253
|
-
viewModelOf(::ItemListViewModel)
|
|
254
|
-
viewModelOf(::DashboardViewModel)
|
|
255
|
-
}
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
### Hilt (solo Android)
|
|
259
|
-
|
|
260
|
-
```kotlin
|
|
261
|
-
@Module
|
|
262
|
-
@InstallIn(SingletonComponent::class)
|
|
263
|
-
abstract class RepositoryModule {
|
|
264
|
-
@Binds
|
|
265
|
-
abstract fun bindItemRepository(impl: ItemRepositoryImpl): ItemRepository
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
@HiltViewModel
|
|
269
|
-
class ItemListViewModel @Inject constructor(
|
|
270
|
-
private val getItems: GetItemsByCategoryUseCase
|
|
271
|
-
) : ViewModel()
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
## Manejo de errores
|
|
275
|
-
|
|
276
|
-
### Patrón Result/Try
|
|
277
|
-
|
|
278
|
-
Usa `Result<T>` o un sealed type propio para propagar errores:
|
|
279
|
-
|
|
280
|
-
```kotlin
|
|
281
|
-
sealed interface Try<out T> {
|
|
282
|
-
data class Success<T>(val value: T) : Try<T>
|
|
283
|
-
data class Failure(val error: AppError) : Try<Nothing>
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
sealed interface AppError {
|
|
287
|
-
data class Network(val message: String) : AppError
|
|
288
|
-
data class Database(val message: String) : AppError
|
|
289
|
-
data object Unauthorized : AppError
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// En el ViewModel — mapear a estado de UI
|
|
293
|
-
viewModelScope.launch {
|
|
294
|
-
when (val result = getItems(category)) {
|
|
295
|
-
is Try.Success -> _state.update { it.copy(items = result.value, isLoading = false) }
|
|
296
|
-
is Try.Failure -> _state.update { it.copy(error = result.error.toMessage(), isLoading = false) }
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
## Convention plugins (Gradle)
|
|
302
|
-
|
|
303
|
-
Para proyectos KMP, usa convention plugins para reducir la duplicación en los archivos de build:
|
|
304
|
-
|
|
305
|
-
```kotlin
|
|
306
|
-
// build-logic/src/main/kotlin/kmp-library.gradle.kts
|
|
307
|
-
plugins {
|
|
308
|
-
id("org.jetbrains.kotlin.multiplatform")
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
kotlin {
|
|
312
|
-
androidTarget()
|
|
313
|
-
iosX64(); iosArm64(); iosSimulatorArm64()
|
|
314
|
-
sourceSets {
|
|
315
|
-
commonMain.dependencies { /* dependencias compartidas */ }
|
|
316
|
-
commonTest.dependencies { implementation(kotlin("test")) }
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
Aplícalo en los módulos:
|
|
322
|
-
|
|
323
|
-
```kotlin
|
|
324
|
-
// domain/build.gradle.kts
|
|
325
|
-
plugins { id("kmp-library") }
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
## Antipatrones a evitar
|
|
329
|
-
|
|
330
|
-
- Importar clases del framework Android en `domain` — mantenlo Kotlin puro
|
|
331
|
-
- Exponer entidades de BD o DTOs a la capa de UI — mapea siempre a modelos de dominio
|
|
332
|
-
- Poner lógica de negocio en los ViewModels — extráela a UseCases
|
|
333
|
-
- Usar `GlobalScope` o corrutinas sin estructura — usa `viewModelScope` o concurrencia estructurada
|
|
334
|
-
- Implementaciones de repositorio infladas — divídelas en DataSources enfocados
|
|
335
|
-
- Dependencias circulares entre módulos — si A depende de B, B no debe depender de A
|
|
336
|
-
|
|
337
|
-
## Skills relacionadas
|
|
338
|
-
|
|
339
|
-
- `patrones-compose-multiplatform` — patrones de UI.
|
|
340
|
-
- `corrutinas-flows-kotlin` — patrones asíncronos.
|