@saulwade/swl-ses 1.0.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/CLAUDE.md +238 -0
- package/README.md +560 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/.evolved.json +9 -0
- package/agentes/accesibilidad-wcag-swl.md +692 -0
- package/agentes/arquitecto-swl.md +238 -0
- package/agentes/auto-evolucion-swl.md +854 -0
- package/agentes/backend-api-swl.md +470 -0
- package/agentes/backend-csharp-swl.md +418 -0
- package/agentes/backend-go-swl.md +388 -0
- package/agentes/backend-java-swl.md +279 -0
- package/agentes/backend-node-swl.md +477 -0
- package/agentes/backend-python-swl.md +608 -0
- package/agentes/backend-rust-swl.md +362 -0
- package/agentes/backend-workers-swl.md +480 -0
- package/agentes/cloud-infra-swl.md +485 -0
- package/agentes/consolidador-swl.md +539 -0
- package/agentes/datos-swl.md +584 -0
- package/agentes/depurador-swl.md +349 -0
- package/agentes/devops-ci-swl.md +374 -0
- package/agentes/disenador-ui-swl.md +558 -0
- package/agentes/documentador-swl.md +343 -0
- package/agentes/evals/arquitecto-swl.evals.json +56 -0
- package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
- package/agentes/evals/implementador-swl.evals.json +56 -0
- package/agentes/evals/orquestador-swl.evals.json +60 -0
- package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
- package/agentes/evals/red-team-swl.evals.json +59 -0
- package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
- package/agentes/frontend-angular-swl.md +627 -0
- package/agentes/frontend-css-swl.md +720 -0
- package/agentes/frontend-react-swl.md +696 -0
- package/agentes/frontend-swl.md +500 -0
- package/agentes/frontend-tailwind-swl.md +830 -0
- package/agentes/implementador-swl.md +328 -0
- package/agentes/investigador-swl.md +430 -0
- package/agentes/investigador-ux-swl.md +500 -0
- package/agentes/llm-apps-swl.md +276 -0
- package/agentes/migrador-swl.md +417 -0
- package/agentes/mobile-android-swl.md +509 -0
- package/agentes/mobile-cross-swl.md +539 -0
- package/agentes/mobile-ios-swl.md +500 -0
- package/agentes/mobile-testing-swl.md +300 -0
- package/agentes/notificador-swl.md +916 -0
- package/agentes/observabilidad-swl.md +436 -0
- package/agentes/orquestador-swl.md +884 -0
- package/agentes/pagos-swl.md +283 -0
- package/agentes/perfilador-usuario-swl.md +306 -0
- package/agentes/planificador-swl.md +402 -0
- package/agentes/producto-prd-swl.md +587 -0
- package/agentes/red-team-swl.md +216 -0
- package/agentes/release-manager-swl.md +568 -0
- package/agentes/rendimiento-swl.md +714 -0
- package/agentes/resolutor-build-swl.md +243 -0
- package/agentes/revisor-angular-swl.md +276 -0
- package/agentes/revisor-codigo-swl.md +348 -0
- package/agentes/revisor-csharp-swl.md +262 -0
- package/agentes/revisor-go-swl.md +257 -0
- package/agentes/revisor-java-swl.md +255 -0
- package/agentes/revisor-kotlin-swl.md +271 -0
- package/agentes/revisor-nextjs-swl.md +279 -0
- package/agentes/revisor-php-swl.md +269 -0
- package/agentes/revisor-react-swl.md +276 -0
- package/agentes/revisor-rust-swl.md +344 -0
- package/agentes/revisor-seguridad-swl.md +390 -0
- package/agentes/revisor-swift-swl.md +266 -0
- package/agentes/revisor-typescript-swl.md +344 -0
- package/agentes/sre-swl.md +265 -0
- package/agentes/tdd-qa-swl.md +354 -0
- package/agentes/ux-disenador-swl.md +501 -0
- package/bin/lib/bot-comandos.js +1030 -0
- package/bin/lib/bot-discovery.js +182 -0
- package/bin/lib/bot-git.js +142 -0
- package/bin/swl-ses.js +325 -0
- package/bin/swl-telegram-bot.js +442 -0
- package/bin/swl-telegram-bot.plist +21 -0
- package/bin/swl-telegram-bot.service +14 -0
- package/comandos/swl/.evolved.json +23 -0
- package/comandos/swl/actualizar.md +174 -0
- package/comandos/swl/adoptar-proyecto.md +207 -0
- package/comandos/swl/aprender.md +701 -0
- package/comandos/swl/auditar-deps.md +134 -0
- package/comandos/swl/autoresearch.md +170 -0
- package/comandos/swl/ayuda.md +224 -0
- package/comandos/swl/brainstorm.md +50 -0
- package/comandos/swl/checkpoint.md +330 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/configurar-ci.md +227 -0
- package/comandos/swl/contexto.md +112 -0
- package/comandos/swl/contribuir.md +233 -0
- package/comandos/swl/crear-skill.md +292 -0
- package/comandos/swl/cron.md +196 -0
- package/comandos/swl/dashboard.md +146 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +135 -0
- package/comandos/swl/evaluar-skill.md +487 -0
- package/comandos/swl/evolucion-estado.md +142 -0
- package/comandos/swl/evolucionar.md +259 -0
- package/comandos/swl/exportar-vault.md +189 -0
- package/comandos/swl/gateway.md +158 -0
- package/comandos/swl/inbox.md +116 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/instintos.md +86 -0
- package/comandos/swl/mapear-codebase.md +312 -0
- package/comandos/swl/mcp-status.md +175 -0
- package/comandos/swl/metricas.md +270 -0
- package/comandos/swl/modelo.md +102 -0
- package/comandos/swl/notificaciones.md +396 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/plugins.md +256 -0
- package/comandos/swl/reflect-skills.md +125 -0
- package/comandos/swl/release.md +217 -0
- package/comandos/swl/revisar-impacto.md +206 -0
- package/comandos/swl/revisar.md +330 -0
- package/comandos/swl/salud.md +363 -0
- package/comandos/swl/sesiones.md +200 -0
- package/comandos/swl/skill-search.md +113 -0
- package/comandos/swl/verificar.md +585 -0
- package/comandos/swl/wiki.md +620 -0
- package/contextos/dev.md +32 -0
- package/contextos/research.md +30 -0
- package/contextos/review.md +31 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
- package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
- package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
- package/habilidades/agent-browser/SKILL.md +218 -0
- package/habilidades/agentes-como-servicio/SKILL.md +218 -0
- package/habilidades/ai-runtime-security/SKILL.md +273 -0
- package/habilidades/angular-avanzado/SKILL.md +164 -0
- package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
- package/habilidades/angular-moderno/SKILL.md +186 -0
- package/habilidades/angular-moderno/evals/evals.json +45 -0
- package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
- package/habilidades/api-rest-diseno/SKILL.md +191 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
- package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
- package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
- package/habilidades/async-python/SKILL.md +149 -0
- package/habilidades/async-python/evals/evals.json +47 -0
- package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
- package/habilidades/auth-patrones/.evolved.json +9 -0
- package/habilidades/auth-patrones/SKILL.md +413 -0
- package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
- package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
- package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
- package/habilidades/autoresearch/SKILL.md +268 -0
- package/habilidades/autoresearch/evals/evals.json +41 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/azure-cloud/SKILL.md +308 -0
- package/habilidades/azure-cloud/recursos/aks.md +327 -0
- package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
- package/habilidades/backend-production-resilience/SKILL.md +288 -0
- package/habilidades/brainstorming/SKILL.md +295 -0
- package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
- package/habilidades/build-errors-cpp/SKILL.md +270 -0
- package/habilidades/build-errors-csharp/SKILL.md +265 -0
- package/habilidades/build-errors-go/SKILL.md +306 -0
- package/habilidades/build-errors-java/SKILL.md +278 -0
- package/habilidades/build-errors-kotlin/SKILL.md +303 -0
- package/habilidades/build-errors-nextjs/SKILL.md +312 -0
- package/habilidades/build-errors-php/SKILL.md +270 -0
- package/habilidades/build-errors-python/SKILL.md +292 -0
- package/habilidades/build-errors-rust/SKILL.md +284 -0
- package/habilidades/build-errors-swift/SKILL.md +272 -0
- package/habilidades/build-errors-typescript/SKILL.md +369 -0
- package/habilidades/checklist-calidad/SKILL.md +271 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +285 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
- package/habilidades/cloud-aws/SKILL.md +142 -0
- package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
- package/habilidades/compactacion-contexto/SKILL.md +247 -0
- package/habilidades/contenedores-docker/SKILL.md +137 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
- package/habilidades/context-builder/SKILL.md +170 -0
- package/habilidades/control-profundidad/SKILL.md +128 -0
- package/habilidades/csharp-experto/SKILL.md +322 -0
- package/habilidades/csharp-patrones/SKILL.md +316 -0
- package/habilidades/csharp-testing/SKILL.md +286 -0
- package/habilidades/css-moderno/SKILL.md +166 -0
- package/habilidades/css-moderno/evals/evals.json +43 -0
- package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
- package/habilidades/datos-etl/SKILL.md +129 -0
- package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
- package/habilidades/dbml-experto/SKILL.md +339 -0
- package/habilidades/dbml-experto/evals/evals.json +56 -0
- package/habilidades/dependencias-auditoria/SKILL.md +320 -0
- package/habilidades/deprecacion-migracion/SKILL.md +169 -0
- package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
- package/habilidades/design-tokens/SKILL.md +158 -0
- package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
- package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
- package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
- package/habilidades/discutir-fase/SKILL.md +188 -0
- package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
- package/habilidades/diseno-responsivo/SKILL.md +186 -0
- package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
- package/habilidades/django-experto/SKILL.md +205 -0
- package/habilidades/django-experto/recursos/async-django.md +390 -0
- package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
- package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
- package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
- package/habilidades/django-experto/recursos/testing-django.md +415 -0
- package/habilidades/doc-sync/SKILL.md +280 -0
- package/habilidades/drift-detection/SKILL.md +179 -0
- package/habilidades/ejecutar-fase/SKILL.md +468 -0
- package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
- package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
- package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/evaluacion-agentes/SKILL.md +314 -0
- package/habilidades/event-driven/SKILL.md +153 -0
- package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
- package/habilidades/extraccion-documentos/SKILL.md +221 -0
- package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
- package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
- package/habilidades/fastapi-experto/SKILL.md +221 -0
- package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
- package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
- package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
- package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
- package/habilidades/filament-admin/SKILL.md +290 -0
- package/habilidades/frontend-avanzado/SKILL.md +257 -0
- package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
- package/habilidades/gcp-cloud/SKILL.md +260 -0
- package/habilidades/gcp-cloud/recursos/gke.md +234 -0
- package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
- package/habilidades/generacion-mermaid/SKILL.md +229 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
- package/habilidades/go-experto/SKILL.md +305 -0
- package/habilidades/go-patrones/SKILL.md +299 -0
- package/habilidades/go-testing/SKILL.md +291 -0
- package/habilidades/graphql-experto/SKILL.md +323 -0
- package/habilidades/guardrail-semantico/SKILL.md +282 -0
- package/habilidades/harness-claude-code/SKILL.md +299 -0
- package/habilidades/iam-secretos/SKILL.md +265 -0
- package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
- package/habilidades/infra-github-actions/SKILL.md +166 -0
- package/habilidades/instalar-sistema/.evolved.json +9 -0
- package/habilidades/instalar-sistema/SKILL.md +221 -0
- package/habilidades/java-experto/SKILL.md +290 -0
- package/habilidades/java-patrones/SKILL.md +275 -0
- package/habilidades/java-testing/SKILL.md +288 -0
- package/habilidades/kotlin-compose/SKILL.md +278 -0
- package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
- package/habilidades/kotlin-experto/SKILL.md +318 -0
- package/habilidades/kotlin-testing/SKILL.md +267 -0
- package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
- package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
- package/habilidades/langchain-langraph/SKILL.md +386 -0
- package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
- package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
- package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
- package/habilidades/legacy-code-rescue/SKILL.md +267 -0
- package/habilidades/likec4-experto/SKILL.md +412 -0
- package/habilidades/likec4-experto/evals/evals.json +69 -0
- package/habilidades/manejo-errores/.evolved.json +9 -0
- package/habilidades/manejo-errores/SKILL.md +407 -0
- package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
- package/habilidades/mapear-codebase/SKILL.md +275 -0
- package/habilidades/memoria-busqueda/SKILL.md +194 -0
- package/habilidades/memoria-busqueda/evals/evals.json +44 -0
- package/habilidades/meta-skills-estandar/SKILL.md +298 -0
- package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
- package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
- package/habilidades/microservicios/SKILL.md +155 -0
- package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
- package/habilidades/mobile-flutter/SKILL.md +199 -0
- package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
- package/habilidades/mobile-react-native/SKILL.md +176 -0
- package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
- package/habilidades/mongodb-experto/SKILL.md +302 -0
- package/habilidades/monitoring-alertas/SKILL.md +201 -0
- package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
- package/habilidades/nestjs-experto/SKILL.md +307 -0
- package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
- package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
- package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
- package/habilidades/nextjs-experto/SKILL.md +335 -0
- package/habilidades/nextjs-patrones/SKILL.md +303 -0
- package/habilidades/nextjs-testing/SKILL.md +331 -0
- package/habilidades/node-experto/.evolved.json +9 -0
- package/habilidades/node-experto/SKILL.md +266 -0
- package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
- package/habilidades/nuevo-proyecto/SKILL.md +204 -0
- package/habilidades/orquestacion-async/SKILL.md +303 -0
- package/habilidades/paid-media-tracking/SKILL.md +269 -0
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
- package/habilidades/patrones-python/SKILL.md +228 -0
- package/habilidades/patrones-python/evals/evals.json +56 -0
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
- package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
- package/habilidades/perfil-usuario/SKILL.md +200 -0
- package/habilidades/perfil-usuario/evals/evals.json +55 -0
- package/habilidades/performance-baseline/SKILL.md +297 -0
- package/habilidades/php-experto/SKILL.md +291 -0
- package/habilidades/php-patrones/SKILL.md +306 -0
- package/habilidades/php-testing/SKILL.md +280 -0
- package/habilidades/planear-fase/SKILL.md +269 -0
- package/habilidades/postgresql-experto/SKILL.md +151 -0
- package/habilidades/postgresql-experto/evals/evals.json +53 -0
- package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
- package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
- package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
- package/habilidades/privacy-memoria/SKILL.md +141 -0
- package/habilidades/privacy-memoria/evals/evals.json +43 -0
- package/habilidades/prompt-engineering/SKILL.md +518 -0
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
- package/habilidades/rag-arquitectura/SKILL.md +338 -0
- package/habilidades/rails-experto/SKILL.md +237 -0
- package/habilidades/rails-experto/recursos/active-record.md +260 -0
- package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
- package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
- package/habilidades/react-experto/SKILL.md +209 -0
- package/habilidades/react-experto/evals/evals.json +55 -0
- package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
- package/habilidades/react-optimizacion/SKILL.md +174 -0
- package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
- package/habilidades/redis-experto/SKILL.md +305 -0
- package/habilidades/release-semver/.evolved.json +9 -0
- package/habilidades/release-semver/SKILL.md +248 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/rust-experto/SKILL.md +400 -0
- package/habilidades/rust-patrones/SKILL.md +296 -0
- package/habilidades/rust-testing/SKILL.md +311 -0
- package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
- package/habilidades/sql-optimizacion/SKILL.md +200 -0
- package/habilidades/sql-optimizacion/evals/evals.json +54 -0
- package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
- package/habilidades/sre-patrones/SKILL.md +333 -0
- package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
- package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
- package/habilidades/stripe-pagos/SKILL.md +550 -0
- package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
- package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
- package/habilidades/structured-outputs/SKILL.md +343 -0
- package/habilidades/swift-experto/SKILL.md +320 -0
- package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
- package/habilidades/swift-patrones/SKILL.md +313 -0
- package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
- package/habilidades/swift-testing/SKILL.md +254 -0
- package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
- package/habilidades/swl-dashboard/SKILL.md +370 -0
- package/habilidades/swl-markitdown/SKILL.md +285 -0
- package/habilidades/swl-markitdown/evals/evals.json +52 -0
- package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
- package/habilidades/tailwind-experto/SKILL.md +240 -0
- package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
- package/habilidades/tdd-workflow/SKILL.md +293 -0
- package/habilidades/terraform-experto/SKILL.md +321 -0
- package/habilidades/testing-python/SKILL.md +340 -0
- package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
- package/habilidades/threat-model-lite/SKILL.md +246 -0
- package/habilidades/tracing-processor/SKILL.md +212 -0
- package/habilidades/tracking-measurement/SKILL.md +239 -0
- package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
- package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
- package/habilidades/typescript-avanzado/SKILL.md +144 -0
- package/habilidades/typescript-avanzado/evals/evals.json +55 -0
- package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
- package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
- package/habilidades/ux-diseno/SKILL.md +116 -0
- package/habilidades/ux-diseno/evals/evals.json +43 -0
- package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificacion-evidencia/SKILL.md +160 -0
- package/habilidades/verificar-trabajo/SKILL.md +303 -0
- package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
- package/habilidades/wiki-conocimiento/SKILL.md +276 -0
- package/habilidades/wireframes-flujos/SKILL.md +212 -0
- package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
- package/habilidades/workflow-claude-code/SKILL.md +260 -0
- package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
- package/hooks/_run-hook.sh +57 -0
- package/hooks/actualizar-perfil-usuario.js +364 -0
- package/hooks/agente-lifecycle.js +71 -0
- package/hooks/aiisms-detector.js +173 -0
- package/hooks/audit-trail.js +204 -0
- package/hooks/auto-background.js +97 -0
- package/hooks/auto-consolidacion.js +178 -0
- package/hooks/auto-evolucion.js +666 -0
- package/hooks/auto-restaurar-settings.js +360 -0
- package/hooks/calidad-pre-commit.js +929 -0
- package/hooks/calidad-typescript.js +511 -0
- package/hooks/captura-feedback-usuario.js +148 -0
- package/hooks/check-update.js +211 -0
- package/hooks/clasificador-mensajes.js +271 -0
- package/hooks/degradacion-instintos.js +272 -0
- package/hooks/escaneo-secretos.js +389 -0
- package/hooks/extraccion-aprendizajes.js +763 -0
- package/hooks/grafo-contexto.js +129 -0
- package/hooks/graph-update.js +67 -0
- package/hooks/guardrail-modelo.js +247 -0
- package/hooks/inbox-aviso.js +75 -0
- package/hooks/inyeccion-contexto.js +246 -0
- package/hooks/lib/abort-registry.js +214 -0
- package/hooks/lib/agent-backend.js +210 -0
- package/hooks/lib/agent-comms.js +263 -0
- package/hooks/lib/agent-issue-codes.js +284 -0
- package/hooks/lib/agent-matcher.js +189 -0
- package/hooks/lib/async-hook-registry.js +252 -0
- package/hooks/lib/atomic-write.js +130 -0
- package/hooks/lib/auto-consolidator.js +335 -0
- package/hooks/lib/canary-skills.js +187 -0
- package/hooks/lib/consolidation-lock.js +291 -0
- package/hooks/lib/context-builder.js +430 -0
- package/hooks/lib/context-compressor.js +657 -0
- package/hooks/lib/convergence-detector.js +105 -0
- package/hooks/lib/delegation-tracker.js +198 -0
- package/hooks/lib/detectar-package-manager.js +423 -0
- package/hooks/lib/edit-accumulator.js +171 -0
- package/hooks/lib/error-classifier.js +308 -0
- package/hooks/lib/event-bus.js +112 -0
- package/hooks/lib/evolution-tracker.js +442 -0
- package/hooks/lib/execution-state.js +316 -0
- package/hooks/lib/fingerprint-id.js +135 -0
- package/hooks/lib/gateway-notify.js +116 -0
- package/hooks/lib/graph-security.js +75 -0
- package/hooks/lib/guardrail-metrics.js +202 -0
- package/hooks/lib/hook-circuit-breaker.js +206 -0
- package/hooks/lib/loop-detector.js +267 -0
- package/hooks/lib/mcp-health.js +184 -0
- package/hooks/lib/mcp-pool.js +436 -0
- package/hooks/lib/memory-search.js +506 -0
- package/hooks/lib/merkle-audit.js +96 -0
- package/hooks/lib/model-router.js +222 -0
- package/hooks/lib/normalize-error.js +324 -0
- package/hooks/lib/normalize-input.js +65 -0
- package/hooks/lib/nudge-tracker.js +306 -0
- package/hooks/lib/otlp-exporter.js +365 -0
- package/hooks/lib/performance-marks.js +239 -0
- package/hooks/lib/privacy-filter.js +128 -0
- package/hooks/lib/prompt-injection-scanner.js +209 -0
- package/hooks/lib/provenance-tracker.js +183 -0
- package/hooks/lib/rate-limit-tracker.js +253 -0
- package/hooks/lib/reflect-classifier.js +164 -0
- package/hooks/lib/resource-quota.js +122 -0
- package/hooks/lib/retry-jitter.js +165 -0
- package/hooks/lib/risk-engine.js +368 -0
- package/hooks/lib/run-log.js +408 -0
- package/hooks/lib/session-fts.js +379 -0
- package/hooks/lib/session-store.js +293 -0
- package/hooks/lib/singleton-guard.js +159 -0
- package/hooks/lib/skill-auditor.js +588 -0
- package/hooks/lib/sync-status.js +228 -0
- package/hooks/lib/taint-tracker.js +107 -0
- package/hooks/lib/task-service.js +295 -0
- package/hooks/lib/tech-skills-map.js +146 -0
- package/hooks/lib/telegram-cliente.js +159 -0
- package/hooks/lib/telegram-config.js +170 -0
- package/hooks/lib/token-budget.js +156 -0
- package/hooks/lib/token-estimator.js +420 -0
- package/hooks/lib/toon-compressor.js +245 -0
- package/hooks/lib/usage-model.js +183 -0
- package/hooks/lib/variable-resolver.js +230 -0
- package/hooks/linea-estado.js +324 -0
- package/hooks/metricas-evolucion.js +209 -0
- package/hooks/monitor-contexto.js +325 -0
- package/hooks/notificacion-sesion-stop.js +198 -0
- package/hooks/notificacion-telegram-notification.js +4 -0
- package/hooks/notificacion-telegram-subagent.js +4 -0
- package/hooks/notificacion-telegram.js +267 -0
- package/hooks/preservar-estado-pre-compact.js +150 -0
- package/hooks/proteccion-rutas.js +366 -0
- package/hooks/registro-turnos.js +209 -0
- package/hooks/resumen-sesion.js +249 -0
- package/hooks/risk-scoring.js +323 -0
- package/hooks/rotar-audit-auto.js +122 -0
- package/hooks/sugerir-regenerar-inventario.js +170 -0
- package/hooks/telemetria-agentes.js +167 -0
- package/hooks/tracking-costos.js +688 -0
- package/instintos/global.yaml +8 -0
- package/instintos/perfil-usuario.yaml +53 -0
- package/instintos/prompt-appendices.yaml +57 -0
- package/instintos/proyecto.yaml +372 -0
- package/manifiestos/gateway-config.json +77 -0
- package/manifiestos/handoff-context.json +223 -0
- package/manifiestos/hook-profiles.json +44 -0
- package/manifiestos/hooks-config.json +360 -0
- package/manifiestos/modulos.json +1173 -0
- package/manifiestos/perfiles.json +404 -0
- package/package.json +86 -0
- package/plantillas/ESTADO.md +109 -0
- package/plantillas/HOJA-RUTA.md +143 -0
- package/plantillas/PROYECTO.md +122 -0
- package/plantillas/REQUISITOS.md +132 -0
- package/plantillas/auditor-veto-template.md +105 -0
- package/plantillas/github-workflows/README.md +47 -0
- package/plantillas/github-workflows/release-please.yml +44 -0
- package/plantillas/github-workflows/swl-ci.yml +107 -0
- package/plantillas/github-workflows/swl-security.yml +51 -0
- package/plantillas/mcp-mineru.json +13 -0
- package/plantillas/research/ARQUITECTURA.md +220 -0
- package/plantillas/research/FUNCIONALIDADES.md +175 -0
- package/plantillas/research/RESUMEN.md +165 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/TRAMPAS.md +299 -0
- package/plantillas/skill-evals-template.json +44 -0
- package/plugin.json +343 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +352 -0
- package/reglas/brevedad-output.md +124 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +201 -0
- package/reglas/git-workflow.md +245 -0
- package/reglas/gobernanza.md +271 -0
- package/reglas/harness-claude-code.md +213 -0
- package/reglas/hooks.md +186 -0
- package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
- package/reglas/lenguajes/csharp/hooks.md +281 -0
- package/reglas/lenguajes/csharp/patrones.md +226 -0
- package/reglas/lenguajes/csharp/seguridad.md +258 -0
- package/reglas/lenguajes/csharp/testing.md +176 -0
- package/reglas/lenguajes/go/estilo-codigo.md +195 -0
- package/reglas/lenguajes/go/hooks.md +249 -0
- package/reglas/lenguajes/go/patrones.md +249 -0
- package/reglas/lenguajes/go/seguridad.md +225 -0
- package/reglas/lenguajes/go/testing.md +272 -0
- package/reglas/lenguajes/java/estilo-codigo.md +217 -0
- package/reglas/lenguajes/java/hooks.md +251 -0
- package/reglas/lenguajes/java/patrones.md +226 -0
- package/reglas/lenguajes/java/seguridad.md +233 -0
- package/reglas/lenguajes/java/testing.md +238 -0
- package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
- package/reglas/lenguajes/kotlin/hooks.md +245 -0
- package/reglas/lenguajes/kotlin/patrones.md +201 -0
- package/reglas/lenguajes/kotlin/seguridad.md +202 -0
- package/reglas/lenguajes/kotlin/testing.md +236 -0
- package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
- package/reglas/lenguajes/nextjs/hooks.md +186 -0
- package/reglas/lenguajes/nextjs/patrones.md +225 -0
- package/reglas/lenguajes/nextjs/seguridad.md +216 -0
- package/reglas/lenguajes/nextjs/testing.md +193 -0
- package/reglas/lenguajes/php/estilo-codigo.md +228 -0
- package/reglas/lenguajes/php/hooks.md +165 -0
- package/reglas/lenguajes/php/patrones.md +233 -0
- package/reglas/lenguajes/php/seguridad.md +186 -0
- package/reglas/lenguajes/php/testing.md +205 -0
- package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
- package/reglas/lenguajes/rust/hooks.md +240 -0
- package/reglas/lenguajes/rust/patrones.md +250 -0
- package/reglas/lenguajes/rust/seguridad.md +221 -0
- package/reglas/lenguajes/rust/testing.md +194 -0
- package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
- package/reglas/lenguajes/swift/hooks.md +257 -0
- package/reglas/lenguajes/swift/patrones.md +235 -0
- package/reglas/lenguajes/swift/seguridad.md +248 -0
- package/reglas/lenguajes/swift/testing.md +242 -0
- package/reglas/markitdown.md +60 -0
- package/reglas/memoria-consolidada.md +209 -0
- package/reglas/patrones.md +225 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad-agentes.md +351 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +373 -0
- package/reglas/testing.md +193 -0
- package/schemas/agent-contract.json +176 -0
- package/schemas/agent-frontmatter.schema.json +149 -0
- package/schemas/agent-message.schema.json +53 -0
- package/schemas/agent-output-implementacion.schema.json +85 -0
- package/schemas/agent-output-planificacion.schema.json +113 -0
- package/schemas/agent-output-review.schema.json +78 -0
- package/schemas/diary-entry.schema.json +80 -0
- package/schemas/hook-profiles.schema.json +39 -0
- package/schemas/hooks-config.schema.json +74 -0
- package/schemas/instinct.schema.json +115 -0
- package/schemas/modulos.schema.json +29 -0
- package/schemas/perfiles.schema.json +28 -0
- package/schemas/plugin.schema.json +64 -0
- package/schemas/skill-evals.schema.json +95 -0
- package/schemas/skill-frontmatter.schema.json +170 -0
- package/scripts/actualizar.js +145 -0
- package/scripts/audit-skills.sh +78 -0
- package/scripts/auditar-agentes-gaps.js +149 -0
- package/scripts/auditar-cobertura-frameworks.js +241 -0
- package/scripts/auditar-skills-gaps.js +206 -0
- package/scripts/bootstrap-instintos.js +259 -0
- package/scripts/check-update.js +109 -0
- package/scripts/comandos/agents.js +105 -0
- package/scripts/comandos/info.js +108 -0
- package/scripts/comandos/install-asistido.js +186 -0
- package/scripts/comandos/skills.js +211 -0
- package/scripts/configurar-branch-protection.js +418 -0
- package/scripts/daemon-swl.py +388 -0
- package/scripts/desinstalar.js +130 -0
- package/scripts/doctor.js +559 -0
- package/scripts/field-report.js +199 -0
- package/scripts/generar-inventario.js +317 -0
- package/scripts/inbox-tmux-inject.js +161 -0
- package/scripts/inferir-herramientas-permitidas.js +586 -0
- package/scripts/inicializar.js +133 -0
- package/scripts/instalador.js +1031 -0
- package/scripts/instalar-git-hook.js +122 -0
- package/scripts/lib/agp-frontmatter.js +222 -0
- package/scripts/lib/append-con-marcadores.js +199 -0
- package/scripts/lib/artefactos-python.js +43 -0
- package/scripts/lib/audit-query.js +221 -0
- package/scripts/lib/autostart-linux.js +347 -0
- package/scripts/lib/autostart-macos.js +360 -0
- package/scripts/lib/autostart-windows.js +307 -0
- package/scripts/lib/budget-enforcer.js +252 -0
- package/scripts/lib/claude-sessions.js +285 -0
- package/scripts/lib/configurar-ci.js +380 -0
- package/scripts/lib/console-span-exporter.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -0
- package/scripts/lib/dashboard-widgets.js +290 -0
- package/scripts/lib/detectar-runtime.js +279 -0
- package/scripts/lib/detectar-stack.js +187 -0
- package/scripts/lib/diary-entry.js +234 -0
- package/scripts/lib/drift-detector.js +545 -0
- package/scripts/lib/estado.js +124 -0
- package/scripts/lib/gestor-componentes.js +243 -0
- package/scripts/lib/gitignore-manifest.js +305 -0
- package/scripts/lib/graph-analyze.py +556 -0
- package/scripts/lib/graph-builder.py +485 -0
- package/scripts/lib/graph-cluster.py +259 -0
- package/scripts/lib/health-row.js +168 -0
- package/scripts/lib/hooks-settings.js +789 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/mc-client.js +137 -0
- package/scripts/lib/notificaciones-telegram.js +1107 -0
- package/scripts/lib/npm-version.js +261 -0
- package/scripts/lib/paquetes-conocidos.js +50 -0
- package/scripts/lib/preservar-usuario.js +586 -0
- package/scripts/lib/prompt-builder.js +264 -0
- package/scripts/lib/resolver-externo.js +332 -0
- package/scripts/lib/schedule-parser.js +305 -0
- package/scripts/lib/scoring-instintos.js +240 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/lib/selector-interactivo.js +152 -0
- package/scripts/lib/semantic-search.js +242 -0
- package/scripts/lib/skill-discovery.js +234 -0
- package/scripts/lib/skill-metrics.js +246 -0
- package/scripts/lib/skill-normalizer.js +112 -0
- package/scripts/lib/skills-hub.js +340 -0
- package/scripts/lib/span-schema.js +134 -0
- package/scripts/lib/tool-cost-analyzer.js +255 -0
- package/scripts/lib/tracing-processor-interface.js +286 -0
- package/scripts/lib/transformadores/base.js +80 -0
- package/scripts/lib/transformadores/claude.js +124 -0
- package/scripts/lib/transformadores/codex.js +115 -0
- package/scripts/lib/transformadores/copilot.js +106 -0
- package/scripts/lib/transformadores/gemini.js +74 -0
- package/scripts/lib/transformadores/index.js +35 -0
- package/scripts/lib/transformadores/opencode.js +75 -0
- package/scripts/lib/ui.js +259 -0
- package/scripts/limpiar-artefactos-python.js +131 -0
- package/scripts/mcp-orchestrator.py +386 -0
- package/scripts/mcp-pool-manager.py +352 -0
- package/scripts/mcp-telemetry.py +378 -0
- package/scripts/poblar-evolvable.js +226 -0
- package/scripts/publicar.js +287 -0
- package/scripts/reflect-skills.js +403 -0
- package/scripts/rotar-audit-logs.js +185 -0
- package/scripts/run-skill-evals.js +242 -0
- package/scripts/smoke-test.js +374 -0
- package/scripts/token-analysis.py +471 -0
- package/scripts/validar-manifest.js +195 -0
- package/scripts/validar-memoria.js +321 -0
- package/scripts/validar-tests-aislamiento.js +184 -0
- package/scripts/validar-tokens-test.js +208 -0
- package/scripts/validar.js +147 -0
- package/scripts/validate-markdown.py +339 -0
- package/scripts/validate-skills.py +385 -0
- package/scripts/vendor/claude-usage/README.md +116 -0
- package/scripts/vendor/claude-usage/cli.py +334 -0
- package/scripts/vendor/claude-usage/dashboard.py +795 -0
- package/scripts/vendor/claude-usage/scanner.py +467 -0
- package/scripts/vendor/markitdown/cli.py +194 -0
- package/scripts/verificar-evolucion.js +289 -0
- package/scripts/verificar-release.js +494 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-errors-kotlin
|
|
3
|
+
description: >
|
|
4
|
+
Resolución de errores de compilación Kotlin: kotlinc, Gradle KTS, Android
|
|
5
|
+
build y Jetpack Compose. Incluye errores de Hilt, recursos Android y
|
|
6
|
+
conflictos de versiones en Gradle.
|
|
7
|
+
Cargar cuando un build Kotlin/Android falle o haya errores de compilación.
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
herramientasPermitidas: [Read, Bash, Grep]
|
|
10
|
+
exclusiones:
|
|
11
|
+
- "No cargar para bugs de UI en Compose en runtime (composables que renderizan mal) cuando el build pasa — si `./gradlew assembleDebug` compila pero la pantalla no se ve bien, es un error de lógica de UI; cargar `kotlin-compose`."
|
|
12
|
+
- "No cargar para fallos de tests unitarios Kotlin (JUnit, Kotest assertions) cuando el build compila — si el build pasa pero los tests fallan por valores incorrectos, es un error de lógica de tests."
|
|
13
|
+
- "No cargar para errores de Hilt en runtime (NullPointerException al inyectar en producción) cuando el build compila — si el APK se genera pero crashea por DI en runtime, revisar la configuración de Hilt directamente."
|
|
14
|
+
- "No cargar para diseñar la arquitectura del proyecto Android/Kotlin desde cero — si la pregunta es cómo organizar módulos, capas y features en un proyecto multi-módulo, cargar `kotlin-experto` o `kotlin-patrones`."
|
|
15
|
+
evolvable: true # default para skill estandar
|
|
16
|
+
---
|
|
17
|
+
# Build Errors Kotlin — Diagnóstico y Solución
|
|
18
|
+
|
|
19
|
+
## Cuándo NO cargar
|
|
20
|
+
|
|
21
|
+
- El build compila pero los Composables renderizan mal en pantalla — es un error de lógica de UI; cargar `kotlin-compose`.
|
|
22
|
+
- Los tests Kotest/JUnit fallan en assertions aunque compilan — es un error de lógica de tests.
|
|
23
|
+
- La pregunta es cómo organizar la arquitectura Android multi-módulo — para diseño cargar `kotlin-experto`.
|
|
24
|
+
|
|
25
|
+
## Cuándo cargar
|
|
26
|
+
|
|
27
|
+
- `./gradlew build` o `./gradlew assembleDebug` falla
|
|
28
|
+
- Errores de kotlinc (type mismatch, unresolved reference)
|
|
29
|
+
- Errores del compilador de Compose (stability, composable context)
|
|
30
|
+
- Conflictos de versiones en Gradle KTS (`buildscript`, `plugin resolution`)
|
|
31
|
+
- Errores de Hilt (missing binding, component hierarchy)
|
|
32
|
+
- Errores de recursos Android (R class, manifest merge)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Kotlinc — Errores del Compilador
|
|
37
|
+
|
|
38
|
+
### `type mismatch: inferred type is X but Y was expected`
|
|
39
|
+
|
|
40
|
+
**Causa**: el tipo inferido no coincide con el esperado. Frecuente con nullable vs non-null.
|
|
41
|
+
|
|
42
|
+
```kotlin
|
|
43
|
+
// MAL
|
|
44
|
+
fun obtenerNombre(): String {
|
|
45
|
+
val nombre: String? = buscarEnDB()
|
|
46
|
+
return nombre // error: String? no es String
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// BIEN — opcion 1: null check con throw
|
|
50
|
+
fun obtenerNombre(): String {
|
|
51
|
+
return buscarEnDB() ?: throw IllegalStateException("Nombre no encontrado")
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// BIEN — opcion 2: retornar nullable en la firma
|
|
55
|
+
fun obtenerNombre(): String? = buscarEnDB()
|
|
56
|
+
|
|
57
|
+
// BIEN — opcion 3: valor por defecto
|
|
58
|
+
fun obtenerNombre(): String = buscarEnDB() ?: "Sin nombre"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### `unresolved reference: X`
|
|
62
|
+
|
|
63
|
+
**Causa**: clase, función o propiedad no importada, o dependencia Gradle faltante.
|
|
64
|
+
|
|
65
|
+
```kotlin
|
|
66
|
+
// MAL — usar Flow sin import ni dependencia
|
|
67
|
+
val flujo: Flow<Int> = flow { emit(1) } // unresolved: Flow
|
|
68
|
+
|
|
69
|
+
// BIEN — agregar import explícito
|
|
70
|
+
import kotlinx.coroutines.flow.Flow
|
|
71
|
+
import kotlinx.coroutines.flow.flow
|
|
72
|
+
|
|
73
|
+
// En build.gradle.kts si falta la dependencia:
|
|
74
|
+
dependencies {
|
|
75
|
+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### `none of the following candidates is applicable because of receiver type mismatch`
|
|
80
|
+
|
|
81
|
+
**Causa**: se llama una función de extensión sobre el tipo incorrecto.
|
|
82
|
+
|
|
83
|
+
```kotlin
|
|
84
|
+
// MAL — trim() es para String, no para String?
|
|
85
|
+
fun limpiar(texto: String?): String {
|
|
86
|
+
return texto.trim() // error: trim() no existe en String?
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// BIEN
|
|
90
|
+
fun limpiar(texto: String?): String {
|
|
91
|
+
return texto?.trim() ?: ""
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Gradle KTS — Errores de Configuración
|
|
98
|
+
|
|
99
|
+
### `Unresolved reference` en build.gradle.kts
|
|
100
|
+
|
|
101
|
+
**Causa**: el DSL de Gradle KTS es estricto con tipos. Diferencias respecto a Groovy.
|
|
102
|
+
|
|
103
|
+
```kotlin
|
|
104
|
+
// MAL — sintaxis Groovy en KTS
|
|
105
|
+
android {
|
|
106
|
+
compileSdkVersion 34 // error: funcion deprecated en KTS
|
|
107
|
+
buildToolsVersion "34.0" // puede fallar
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// BIEN — DSL moderno en KTS
|
|
111
|
+
android {
|
|
112
|
+
compileSdk = 34
|
|
113
|
+
defaultConfig {
|
|
114
|
+
minSdk = 24
|
|
115
|
+
targetSdk = 34
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Plugin no encontrado en `plugins {}` block
|
|
121
|
+
|
|
122
|
+
```kotlin
|
|
123
|
+
// MAL — plugin sin version ni alias de catalog
|
|
124
|
+
plugins {
|
|
125
|
+
id("com.google.dagger.hilt.android") // error si no hay version
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// BIEN — con versión explícita
|
|
129
|
+
plugins {
|
|
130
|
+
id("com.google.dagger.hilt.android") version "2.51.1" apply false
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// BIEN — con version catalog (libs.versions.toml)
|
|
134
|
+
plugins {
|
|
135
|
+
alias(libs.plugins.hilt)
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### `Could not resolve com.example:lib:1.0` — dependencia no encontrada
|
|
140
|
+
|
|
141
|
+
```kotlin
|
|
142
|
+
// Verificar repositorios en settings.gradle.kts
|
|
143
|
+
dependencyResolutionManagement {
|
|
144
|
+
repositories {
|
|
145
|
+
google()
|
|
146
|
+
mavenCentral()
|
|
147
|
+
// Si es repositorio privado:
|
|
148
|
+
maven {
|
|
149
|
+
url = uri("https://repo.empresa.com/maven")
|
|
150
|
+
credentials {
|
|
151
|
+
username = providers.gradleProperty("repoUser").get()
|
|
152
|
+
password = providers.gradleProperty("repoPass").get()
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Android Build — Errores de Recursos y Manifest
|
|
162
|
+
|
|
163
|
+
### `error: cannot find symbol class R`
|
|
164
|
+
|
|
165
|
+
**Causa**: el archivo R.java no se generó correctamente o hay error en un recurso XML.
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Diagnostico: limpiar y reconstruir
|
|
169
|
+
./gradlew clean assembleDebug
|
|
170
|
+
|
|
171
|
+
# Ver error raiz del recurso XML
|
|
172
|
+
./gradlew assembleDebug --stacktrace 2>&1 | grep "error:"
|
|
173
|
+
|
|
174
|
+
# Causas comunes:
|
|
175
|
+
# - Nombre de recurso con guion (usar guion_bajo en su lugar)
|
|
176
|
+
# - Etiqueta XML mal cerrada en layout
|
|
177
|
+
# - Valor de color/dimension con formato incorrecto
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Manifest merge conflict
|
|
181
|
+
|
|
182
|
+
```xml
|
|
183
|
+
<!-- Error típico: herramientas:node="merge" conflicto de atributo -->
|
|
184
|
+
<!-- En el AndroidManifest.xml de la app, forzar valor -->
|
|
185
|
+
<activity
|
|
186
|
+
android:name=".MainActivity"
|
|
187
|
+
tools:node="merge"
|
|
188
|
+
tools:replace="android:theme">
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### `D8: Dex file larger than 64K methods` (MultiDex)
|
|
192
|
+
|
|
193
|
+
```kotlin
|
|
194
|
+
// En build.gradle.kts del modulo app:
|
|
195
|
+
android {
|
|
196
|
+
defaultConfig {
|
|
197
|
+
multiDexEnabled = true
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
dependencies {
|
|
201
|
+
implementation("androidx.multidex:multidex:2.0.1")
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Jetpack Compose — Errores del Compilador
|
|
208
|
+
|
|
209
|
+
### `@Composable invocations can only happen from the context of a @Composable function`
|
|
210
|
+
|
|
211
|
+
**Causa**: se llama un Composable desde una lambda no anotada o desde código no-Compose.
|
|
212
|
+
|
|
213
|
+
```kotlin
|
|
214
|
+
// MAL
|
|
215
|
+
fun configurarUI() {
|
|
216
|
+
MiComponente() // error: no es contexto Composable
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// MAL — lambda sin anotación
|
|
220
|
+
val accion: () -> Unit = {
|
|
221
|
+
MiComponente() // error
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// BIEN — solo dentro de funciones @Composable
|
|
225
|
+
@Composable
|
|
226
|
+
fun PantallaInicio() {
|
|
227
|
+
MiComponente() // correcto
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Stability issues — `Parameter X is not stable`
|
|
232
|
+
|
|
233
|
+
**Causa**: el compilador de Compose no puede inferir la estabilidad de un tipo,
|
|
234
|
+
lo que deshabilita el smart recomposition.
|
|
235
|
+
|
|
236
|
+
```kotlin
|
|
237
|
+
// MAL — clase mutable sin anotación
|
|
238
|
+
data class Estado(var contador: Int) // var hace al tipo inestable
|
|
239
|
+
|
|
240
|
+
// BIEN — opción 1: usar val (inmutable)
|
|
241
|
+
data class Estado(val contador: Int)
|
|
242
|
+
|
|
243
|
+
// BIEN — opción 2: anotación explícita si la clase es external
|
|
244
|
+
@Stable
|
|
245
|
+
class EstadoExterno(private val wrapped: ExternalClass)
|
|
246
|
+
|
|
247
|
+
// BIEN — opcion 3: en compose_compiler_config.conf marcar clases externas
|
|
248
|
+
// ver: https://developer.android.com/develop/ui/compose/performance/stability/fix
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Hilt — Errores de Inyección de Dependencias
|
|
254
|
+
|
|
255
|
+
### `[Hilt] Missing binding for X`
|
|
256
|
+
|
|
257
|
+
**Causa**: Hilt no sabe cómo proveer el tipo solicitado.
|
|
258
|
+
|
|
259
|
+
```kotlin
|
|
260
|
+
// MAL — interfaz sin @Binds ni @Provides
|
|
261
|
+
interface Repositorio
|
|
262
|
+
class RepositorioImpl @Inject constructor() : Repositorio
|
|
263
|
+
|
|
264
|
+
// Para que Hilt resuelva la interfaz, se necesita un modulo:
|
|
265
|
+
@Module
|
|
266
|
+
@InstallIn(SingletonComponent::class)
|
|
267
|
+
abstract class RepositorioModule {
|
|
268
|
+
@Binds
|
|
269
|
+
@Singleton
|
|
270
|
+
abstract fun bindRepositorio(impl: RepositorioImpl): Repositorio
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### `@HiltAndroidApp` no encontrado
|
|
275
|
+
|
|
276
|
+
```kotlin
|
|
277
|
+
// En Application class — sin esto Hilt no inicializa
|
|
278
|
+
@HiltAndroidApp
|
|
279
|
+
class MiAplicacion : Application()
|
|
280
|
+
|
|
281
|
+
// En AndroidManifest.xml:
|
|
282
|
+
// <application android:name=".MiAplicacion" ...>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Gotchas / Errores comunes no obvios
|
|
288
|
+
|
|
289
|
+
- **`./gradlew build` falla con "Could not resolve com.android.tools.build:gradle:X.Y.Z"** aunque la versión existe en Maven Central: el repositorio `google()` no está declarado en `settings.gradle.kts` antes de `mavenCentral()`. Causa: AGP (Android Gradle Plugin) está en el repositorio de Google, no en Maven Central; si `google()` no está o está en el orden incorrecto, la resolución falla. Solución: asegurarse que `settings.gradle.kts` tiene `google()` primero en el bloque `pluginManagement.repositories` Y en `dependencyResolutionManagement.repositories`.
|
|
290
|
+
- **Compose BOM actualizado produce error `Unresolved reference: LazyColumn`** aunque la función existe en la misma versión de Compose UI: el BOM alinea versiones pero el IDE puede cachear las versiones antiguas del árbol de dependencias. Causa: el cache de Gradle tiene la versión anterior del artefacto `compose.foundation` sin invalidar. Solución: ejecutar `./gradlew cleanBuildCache` y sincronizar el proyecto en Android Studio — si persiste, verificar con `./gradlew :app:dependencies | grep compose-foundation` que la versión del BOM es la que se espera.
|
|
291
|
+
- **Hilt `@Binds` en un módulo abstracto produce "MissingBinding" aunque la implementación existe**: la clase `RepositorioImpl` está en un feature module diferente al módulo donde está instalado el componente Hilt. Causa: los módulos Hilt solo ven las dependencias del componente en el que están instalados (`SingletonComponent`, `ActivityComponent`, etc.) — las dependencias entre feature modules no se ven automáticamente. Solución: instalar el módulo de Hilt con `@InstallIn(SingletonComponent::class)` en el feature module que provee la implementación, asegurando que ese módulo tiene dependencia del módulo que lo necesita.
|
|
292
|
+
- **`kotlinc` compila el módulo de library pero el módulo de app falla con "unresolved reference"** apuntando a una clase de la library**: la library tiene `internal` en la clase en lugar de `public`. Causa: `internal` en Kotlin restringe la visibilidad al mismo módulo de Kotlin — una clase `internal` en `:core` no es visible en `:app`. Solución: cambiar la visibilidad a `public` (o dejar sin modificador, que es `public` por defecto en Kotlin) y revisar que la clase no tiene restricciones de API pública que justifiquen `internal`.
|
|
293
|
+
|
|
294
|
+
## Checklist de Diagnóstico
|
|
295
|
+
|
|
296
|
+
- [ ] Ejecutar `./gradlew build --stacktrace` para ver la causa raíz del error.
|
|
297
|
+
- [ ] `./gradlew dependencies` para ver el árbol de dependencias y conflictos.
|
|
298
|
+
- [ ] Limpiar caché de Gradle si hay errores inexplicables: `./gradlew cleanBuildCache`.
|
|
299
|
+
- [ ] Verificar compatibilidad de versiones en `libs.versions.toml` (Kotlin, AGP, Compose BOM).
|
|
300
|
+
- [ ] Para errores de Compose: habilitar reportes del compilador con `reportsDestination`.
|
|
301
|
+
- [ ] Si el error es de Hilt: revisar que `@HiltAndroidApp` está en Application.
|
|
302
|
+
- [ ] Para R class: revisar XMLs de recursos por errores de sintaxis o nombres inválidos.
|
|
303
|
+
- [ ] `./gradlew lint` para detectar problemas antes de compilar.
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-errors-nextjs
|
|
3
|
+
description: >
|
|
4
|
+
Resolución de errores de compilación Next.js: next build, React Server
|
|
5
|
+
Components, hydration mismatch, Turbopack y middleware. Incluye errores de
|
|
6
|
+
ISR, optimización de imágenes, CSS modules y variables de entorno.
|
|
7
|
+
Cargar cuando un build Next.js falle o haya errores de renderizado.
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
herramientasPermitidas: [Read, Bash, Grep]
|
|
10
|
+
exclusiones:
|
|
11
|
+
- "No cargar para errores de TypeScript puros en un proyecto Next.js (TS2322, TS2345, errores de tipos en archivos .ts/.tsx) — para esos cargar `build-errors-typescript`; este skill cubre errores específicos de la plataforma Next.js."
|
|
12
|
+
- "No cargar para bugs de lógica de la aplicación en runtime cuando `next build` compila (fetch que retorna datos incorrectos, routing que no funciona como se espera) — si el build pasa, es un error de lógica, no de build."
|
|
13
|
+
- "No cargar para diseñar la arquitectura App Router de un proyecto nuevo (estructura de rutas, layouts, data fetching patterns) — para eso cargar `nextjs-experto` o `nextjs-patrones`."
|
|
14
|
+
- "No cargar para errores de estado de React (useState, useReducer, Zustand) en componentes que ya compilan — si el build pasa pero el estado no se actualiza correctamente, es un bug de lógica de state management."
|
|
15
|
+
evolvable: true # default para skill estandar
|
|
16
|
+
---
|
|
17
|
+
# Build Errors Next.js — Diagnóstico y Solución
|
|
18
|
+
|
|
19
|
+
## Cuándo NO cargar
|
|
20
|
+
|
|
21
|
+
- El error es de TypeScript puro (TS2322, TS2345) sin relación con Next.js — cargar `build-errors-typescript` para esos.
|
|
22
|
+
- `next build` compila pero la app falla en lógica de negocio — es un bug de lógica, no de build.
|
|
23
|
+
- La pregunta es cómo diseñar la estructura de App Router — para arquitectura cargar `nextjs-experto`.
|
|
24
|
+
|
|
25
|
+
## Cuándo cargar
|
|
26
|
+
|
|
27
|
+
- `next build` falla con errores de compilación o runtime
|
|
28
|
+
- Hydration mismatch en producción o desarrollo
|
|
29
|
+
- Errores de React Server Components (`"use client"` faltante o incorrecto)
|
|
30
|
+
- Errores de Turbopack (incompatibilidad de plugins, loaders)
|
|
31
|
+
- Errores de middleware, ISR revalidation o image optimization
|
|
32
|
+
- Variables de entorno no disponibles en el cliente o en build time
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Hydration Mismatch
|
|
37
|
+
|
|
38
|
+
### `Error: Hydration failed because the initial UI does not match what was rendered on the server`
|
|
39
|
+
|
|
40
|
+
**Causa**: el HTML generado en el servidor difiere del que React intenta hidratar en el cliente.
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
// MAL — acceso a APIs del browser en render (solo existen en cliente)
|
|
44
|
+
export default function Componente() {
|
|
45
|
+
const ancho = window.innerWidth; // window no existe en servidor
|
|
46
|
+
return <div>Ancho: {ancho}</div>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// MAL — Date() produce valores distintos en servidor y cliente
|
|
50
|
+
export default function Timestamp() {
|
|
51
|
+
return <span>{new Date().toLocaleString()}</span>; // mismatch
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// BIEN — usar useEffect para lógica solo-cliente
|
|
55
|
+
"use client";
|
|
56
|
+
import { useState, useEffect } from "react";
|
|
57
|
+
|
|
58
|
+
export default function Timestamp() {
|
|
59
|
+
const [fecha, setFecha] = useState<string>("");
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
setFecha(new Date().toLocaleString());
|
|
62
|
+
}, []);
|
|
63
|
+
return <span>{fecha || "Cargando..."}</span>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// BIEN — suppressHydrationWarning para diferencias inevitables
|
|
67
|
+
<time suppressHydrationWarning>{new Date().toISOString()}</time>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Hydration mismatch por nesting HTML inválido
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
// MAL — <p> no puede contener <div>
|
|
74
|
+
function Tarjeta() {
|
|
75
|
+
return (
|
|
76
|
+
<p>
|
|
77
|
+
<div>Contenido</div> {/* inválido: div dentro de p */}
|
|
78
|
+
</p>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// BIEN
|
|
83
|
+
function Tarjeta() {
|
|
84
|
+
return (
|
|
85
|
+
<div>
|
|
86
|
+
<p>Contenido</p>
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## React Server Components — Errores de Directivas
|
|
95
|
+
|
|
96
|
+
### `You're importing a component that needs "use client"`
|
|
97
|
+
|
|
98
|
+
**Causa**: un Server Component importa un módulo que usa APIs del browser o hooks de React.
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
// MAL — ServerPage.tsx (Server Component) importa componente con estado
|
|
102
|
+
import Contador from "./Contador"; // Contador usa useState
|
|
103
|
+
|
|
104
|
+
export default function ServerPage() {
|
|
105
|
+
return <Contador />; // error en build
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// BIEN — agregar "use client" al componente que necesita estado/browser APIs
|
|
109
|
+
// Contador.tsx
|
|
110
|
+
"use client";
|
|
111
|
+
import { useState } from "react";
|
|
112
|
+
|
|
113
|
+
export default function Contador() {
|
|
114
|
+
const [n, setN] = useState(0);
|
|
115
|
+
return <button onClick={() => setN(n + 1)}>{n}</button>;
|
|
116
|
+
}
|
|
117
|
+
// ServerPage.tsx no necesita cambios
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### `Server Component cannot use client-only hooks`
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
// MAL — useRouter, usePathname, useSearchParams en Server Component
|
|
124
|
+
// app/pagina/page.tsx (Server Component por defecto)
|
|
125
|
+
import { useRouter } from "next/navigation"; // error: hook de cliente
|
|
126
|
+
|
|
127
|
+
export default function Pagina() {
|
|
128
|
+
const router = useRouter(); // solo funciona en Client Components
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// BIEN — si se necesita router: extraer a Client Component
|
|
132
|
+
// app/pagina/BotonNavegar.tsx
|
|
133
|
+
"use client";
|
|
134
|
+
import { useRouter } from "next/navigation";
|
|
135
|
+
|
|
136
|
+
export function BotonNavegar() {
|
|
137
|
+
const router = useRouter();
|
|
138
|
+
return <button onClick={() => router.push("/")}>Inicio</button>;
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Variables de Entorno — Errores Comunes
|
|
145
|
+
|
|
146
|
+
### Variable undefined en el cliente
|
|
147
|
+
|
|
148
|
+
**Causa**: variable sin prefijo `NEXT_PUBLIC_` usada en Client Component.
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# MAL — variable privada referenciada en cliente
|
|
152
|
+
# .env.local
|
|
153
|
+
DATABASE_URL=postgres://...
|
|
154
|
+
API_SECRET=clave_secreta
|
|
155
|
+
|
|
156
|
+
# componente-cliente.tsx
|
|
157
|
+
"use client"
|
|
158
|
+
const url = process.env.DATABASE_URL // undefined en cliente — correcto por seguridad
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
// BIEN — variables publicas con prefijo NEXT_PUBLIC_
|
|
163
|
+
// .env.local
|
|
164
|
+
NEXT_PUBLIC_API_URL=https://api.ejemplo.com
|
|
165
|
+
|
|
166
|
+
// componente-cliente.tsx
|
|
167
|
+
"use client"
|
|
168
|
+
const apiUrl = process.env.NEXT_PUBLIC_API_URL // disponible en cliente
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Variable undefined en build time (Static Generation)
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
// BIEN — verificar presencia en build y lanzar error descriptivo
|
|
175
|
+
// lib/config.ts
|
|
176
|
+
export function getConfig() {
|
|
177
|
+
const apiKey = process.env.API_KEY;
|
|
178
|
+
if (!apiKey) {
|
|
179
|
+
throw new Error(
|
|
180
|
+
"API_KEY no está definida. " +
|
|
181
|
+
"Agregar al archivo .env.local o a las variables de entorno del servidor."
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
return { apiKey };
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Dynamic Import y Carga Diferida
|
|
191
|
+
|
|
192
|
+
### `Module not found` con dynamic import en Server Component
|
|
193
|
+
|
|
194
|
+
```tsx
|
|
195
|
+
// MAL — dynamic import de módulo solo-cliente en Server Component
|
|
196
|
+
import dynamic from "next/dynamic";
|
|
197
|
+
const Mapa = dynamic(() => import("leaflet-maps"), { ssr: false });
|
|
198
|
+
// Si Mapa se usa en Server Component el { ssr: false } no tiene efecto completo
|
|
199
|
+
|
|
200
|
+
// BIEN — dynamic con ssr:false solo en Client Components
|
|
201
|
+
"use client";
|
|
202
|
+
import dynamic from "next/dynamic";
|
|
203
|
+
|
|
204
|
+
const MapaDinamico = dynamic(
|
|
205
|
+
() => import("./MapaInteractivo"),
|
|
206
|
+
{
|
|
207
|
+
ssr: false,
|
|
208
|
+
loading: () => <div>Cargando mapa...</div>,
|
|
209
|
+
}
|
|
210
|
+
);
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## ISR y Revalidación
|
|
216
|
+
|
|
217
|
+
### `revalidatePath` / `revalidateTag` no funciona como se espera
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
// MAL — revalidar desde Client Component
|
|
221
|
+
"use client";
|
|
222
|
+
import { revalidatePath } from "next/cache"; // error: solo en Server Actions/Route Handlers
|
|
223
|
+
|
|
224
|
+
// BIEN — revalidar en Server Action
|
|
225
|
+
// app/actions.ts
|
|
226
|
+
"use server";
|
|
227
|
+
import { revalidatePath } from "next/cache";
|
|
228
|
+
|
|
229
|
+
export async function actualizarDatos() {
|
|
230
|
+
await db.actualizar(/* ... */);
|
|
231
|
+
revalidatePath("/dashboard"); // correcto: Server Action
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Turbopack — Problemas de Compatibilidad
|
|
238
|
+
|
|
239
|
+
### Plugin de webpack no compatible con Turbopack
|
|
240
|
+
|
|
241
|
+
```js
|
|
242
|
+
// next.config.js
|
|
243
|
+
// MAL — plugin de webpack que no tiene equivalente en Turbopack
|
|
244
|
+
const withBundleAnalyzer = require("@next/bundle-analyzer")({ enabled: true });
|
|
245
|
+
module.exports = withBundleAnalyzer({
|
|
246
|
+
experimental: { turbo: true } // conflicto probable
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// BIEN — verificar compatibilidad en https://nextjs.org/docs/app/api-reference/turbopack
|
|
250
|
+
// Usar loaders Turbopack para transformaciones custom
|
|
251
|
+
module.exports = {
|
|
252
|
+
experimental: {
|
|
253
|
+
turbo: {
|
|
254
|
+
rules: {
|
|
255
|
+
"*.svg": {
|
|
256
|
+
loaders: ["@svgr/webpack"],
|
|
257
|
+
as: "*.js",
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Optimización de Imágenes
|
|
268
|
+
|
|
269
|
+
### `Error: Invalid src prop on next/image`
|
|
270
|
+
|
|
271
|
+
```tsx
|
|
272
|
+
// MAL — dominio externo no configurado
|
|
273
|
+
import Image from "next/image";
|
|
274
|
+
<Image src="https://imagenes-externas.com/foto.jpg" ... />
|
|
275
|
+
// Error: hostname no está en la lista permitida
|
|
276
|
+
|
|
277
|
+
// BIEN — agregar en next.config.js
|
|
278
|
+
/** @type {import('next').NextConfig} */
|
|
279
|
+
const nextConfig = {
|
|
280
|
+
images: {
|
|
281
|
+
remotePatterns: [
|
|
282
|
+
{
|
|
283
|
+
protocol: "https",
|
|
284
|
+
hostname: "imagenes-externas.com",
|
|
285
|
+
port: "",
|
|
286
|
+
pathname: "/**",
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
module.exports = nextConfig;
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Gotchas / Errores comunes no obvios
|
|
297
|
+
|
|
298
|
+
- **Hydration mismatch solo en producción, no en desarrollo**: `next dev` no detecta el mismatch porque usa renderizado del lado del cliente más permisivo, pero `next build` + `next start` (o producción) aplica comparación estricta del HTML. Causa: el componente usa `new Date()`, `Math.random()`, o `window` en el render inicial, que producen valores diferentes entre servidor y cliente. Solución: mover las llamadas a `new Date()` y valores dinámicos a `useEffect` o `useState` con valor inicial `null`, renderizando el contenido dinámico solo en cliente.
|
|
299
|
+
- **`"use client"` en un componente que importa un Server Component produce error "cannot import Server Component in Client Component"**: el grafo de importaciones tiene un Client Component importando un Server Component directamente. Causa: en el App Router, los Server Components no pueden ser importados por Client Components — el componente debe pasarse como `children` o prop. Solución: reestructurar para que el Server Component sea un padre que pase el Client Component como children, o usar `Suspense` con `lazy()` para la porción cliente.
|
|
300
|
+
- **Variables de entorno NEXT_PUBLIC_* configuradas en Vercel pero no disponibles en el bundle**: las variables se definieron en el proyecto de Vercel pero no se volvió a hacer deploy después de agregarlas. Causa: `NEXT_PUBLIC_*` se embeben en el bundle durante `next build` — si se agregan después del build, el build existente no las contiene. Solución: hacer un redeploy completo después de agregar o cambiar variables `NEXT_PUBLIC_*`; para variables solo de servidor (sin prefijo) basta con un restart sin rebuild.
|
|
301
|
+
- **`next build` falla con "Module not found" para un alias de path configurado en `tsconfig.json`**: tsconfig paths no se propagan automáticamente a la resolución de módulos de Next.js. Causa: Next.js lee `tsconfig.json` para paths solo si hay configuración explícita en `next.config.js` o si el alias está bajo `@/`. Solución: agregar el alias también en `next.config.js` bajo `webpack.resolve.alias` (o en la sección `experimental.turbo.resolveAlias` para Turbopack) — los tsconfig paths solos no son suficientes para el bundler de Next.js.
|
|
302
|
+
|
|
303
|
+
## Checklist de Diagnóstico
|
|
304
|
+
|
|
305
|
+
- [ ] `next build 2>&1 | grep "Error"` para filtrar solo errores en el output completo.
|
|
306
|
+
- [ ] Para hydration: revisar si el componente usa `window`, `document`, `localStorage` o `Date` en render inicial.
|
|
307
|
+
- [ ] Verificar que todo componente con hooks o event handlers tiene `"use client"` al inicio.
|
|
308
|
+
- [ ] Variables de entorno en cliente: deben tener prefijo `NEXT_PUBLIC_`.
|
|
309
|
+
- [ ] Para ISR: `revalidatePath` y `revalidateTag` solo funcionan en Server Actions y Route Handlers.
|
|
310
|
+
- [ ] `next build --debug` para diagnóstico verbose de la compilación.
|
|
311
|
+
- [ ] Revisar `next.config.js` al migrar de Pages Router a App Router: algunas opciones cambian.
|
|
312
|
+
- [ ] Para Turbopack: verificar en la documentación oficial si el plugin/loader tiene equivalente.
|