@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,513 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: typescript-diagnosticos
|
|
3
|
+
description: >
|
|
4
|
+
Guía canónica de códigos de error del compilador TypeScript (TS1xxx–TS7xxx).
|
|
5
|
+
Extraída de diagnosticMessages.json del repositorio microsoft/TypeScript.
|
|
6
|
+
Cubre los errores más frecuentes con causa, fix idiomático y anti-patrón a evitar.
|
|
7
|
+
Cargar cuando se revisa código TypeScript con errores de compilación o cuando
|
|
8
|
+
se necesita identificar la causa raíz de un error TSxxxx.
|
|
9
|
+
version: 1.0.0
|
|
10
|
+
herramientasPermitidas: [Read, Bash, Glob, Grep]
|
|
11
|
+
fuente: temp/TypeScript-main/src/compiler/diagnosticMessages.json
|
|
12
|
+
tags: [typescript, diagnósticos, errores, compilador, type-safety]
|
|
13
|
+
exclusiones:
|
|
14
|
+
- "No cargar para errores de runtime JavaScript que no involucran el compilador TypeScript — si el código compila pero falla en ejecución, no hay código TS#### que diagnosticar."
|
|
15
|
+
- "No cargar para errores de bundlers (Vite, webpack) que no son errores del compilador tsc — los errores de bundler tienen prefijos diferentes y causas de resolución de módulos; cargar `build-errors-typescript`."
|
|
16
|
+
- "No cargar para diseñar tipos avanzados (generics, mapped types, conditional types) — para diseño del sistema de tipos cargar `typescript-avanzado`."
|
|
17
|
+
- "No cargar para errores de ESLint o Prettier en archivos .ts — ESLint/Prettier no generan códigos TS####; sus códigos de error son de sus propias reglas."
|
|
18
|
+
evolvable: true # default para skill estandar
|
|
19
|
+
---
|
|
20
|
+
# Diagnósticos canónicos del compilador TypeScript
|
|
21
|
+
|
|
22
|
+
Guía de referencia rápida. Fuente: `diagnosticMessages.json` del compilador TypeScript oficial.
|
|
23
|
+
|
|
24
|
+
## Cuándo NO cargar
|
|
25
|
+
|
|
26
|
+
- La pregunta es sobre errores de runtime JavaScript que no involucran al compilador — si el código compila pero falla en ejecución, no hay código TS#### que diagnosticar.
|
|
27
|
+
- Los errores vienen de bundlers (Vite, webpack) con prefijos distintos a TS#### — esos son errores de resolución de módulos; cargar `build-errors-typescript`.
|
|
28
|
+
- La tarea es diseñar tipos avanzados (generics, mapped types, conditional types) — para diseño del sistema de tipos cargar `typescript-avanzado`.
|
|
29
|
+
- Los errores son de ESLint o Prettier en archivos `.ts` — ESLint/Prettier no generan códigos TS####; sus reglas tienen nombres propios como `@typescript-eslint/no-explicit-any`.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Errores de asignación de tipos (TS2xxx)
|
|
34
|
+
|
|
35
|
+
Los más frecuentes en proyectos con `strict: true`.
|
|
36
|
+
|
|
37
|
+
### TS2322 — Type '{0}' is not assignable to type '{1}'
|
|
38
|
+
|
|
39
|
+
**Causa:** Tipos incompatibles en asignación directa o retorno de función.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// MAL
|
|
43
|
+
const x: number = "hola"; // TS2322
|
|
44
|
+
function getId(): number { return "abc"; } // TS2322
|
|
45
|
+
|
|
46
|
+
// BIEN
|
|
47
|
+
const x: number = 42;
|
|
48
|
+
function getId(): number { return 123; }
|
|
49
|
+
|
|
50
|
+
// Caso literal — usar as const
|
|
51
|
+
const dir = "ltr" as const; // tipo: "ltr", no string
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Anti-patrón a evitar:** `const x = valor as any` para silenciar el error.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### TS2345 — Argument of type '{0}' is not assignable to parameter of type '{1}'
|
|
59
|
+
|
|
60
|
+
**Causa:** Tipo incorrecto al llamar una función.
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
function procesar(items: string[]) { ... }
|
|
64
|
+
procesar([1, 2, 3]); // TS2345 — number[] no es string[]
|
|
65
|
+
|
|
66
|
+
// BIEN — corregir el tipo del argumento
|
|
67
|
+
procesar(["a", "b"]);
|
|
68
|
+
// o corregir el parámetro si el diseño lo permite
|
|
69
|
+
function procesar(items: Array<string | number>) { ... }
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### TS2339 — Property '{0}' does not exist on type '{1}'
|
|
75
|
+
|
|
76
|
+
**Causa:** Acceso a propiedad inexistente en la interfaz/tipo.
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
interface Usuario { nombre: string; }
|
|
80
|
+
const u: Usuario = { nombre: "Ana" };
|
|
81
|
+
console.log(u.email); // TS2339
|
|
82
|
+
|
|
83
|
+
// BIEN — opción A: agregar al tipo
|
|
84
|
+
interface Usuario { nombre: string; email?: string; }
|
|
85
|
+
// BIEN — opción B: usar acceso indexado tipado
|
|
86
|
+
function getField<T, K extends keyof T>(obj: T, key: K): T[K] {
|
|
87
|
+
return obj[key];
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### TS2353 — Object literal may only specify known properties
|
|
94
|
+
|
|
95
|
+
**Causa:** Propiedad extra en object literal (excess property check).
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
interface Config { host: string; port: number; }
|
|
99
|
+
const cfg: Config = { host: "localhost", port: 3000, debug: true }; // TS2353
|
|
100
|
+
|
|
101
|
+
// BIEN — eliminar o agregar al tipo
|
|
102
|
+
// Nota: el excess property check solo aplica a object literals directos
|
|
103
|
+
const base = { host: "localhost", port: 3000, debug: true };
|
|
104
|
+
const cfg: Config = base; // Válido — asignación indirecta no aplica la regla
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### TS2540 — Cannot assign to '{0}' because it is a read-only property
|
|
110
|
+
|
|
111
|
+
**Causa:** Mutación de propiedad `readonly` o de `Readonly<T>`.
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
interface Config { readonly host: string; }
|
|
115
|
+
const cfg: Config = { host: "localhost" };
|
|
116
|
+
cfg.host = "prod"; // TS2540
|
|
117
|
+
|
|
118
|
+
// BIEN — crear nuevo objeto con spread
|
|
119
|
+
const prodCfg: Config = { ...cfg, host: "prod" };
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### TS2739 — Type '{0}' is missing the following properties from type '{1}'
|
|
125
|
+
|
|
126
|
+
**Causa:** Objeto incompleto — faltan propiedades requeridas.
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
interface Producto { id: number; nombre: string; precio: number; }
|
|
130
|
+
const p: Producto = { id: 1, nombre: "Widget" }; // TS2739 falta precio
|
|
131
|
+
|
|
132
|
+
// BIEN
|
|
133
|
+
const p: Producto = { id: 1, nombre: "Widget", precio: 9.99 };
|
|
134
|
+
// O si la construcción es parcial
|
|
135
|
+
const borrador: Partial<Producto> = { id: 1, nombre: "Widget" };
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### TS2741 — Property '{0}' is missing in type '{1}' but required in type '{2}'
|
|
141
|
+
|
|
142
|
+
**Causa:** Al extender o implementar una interfaz, falta implementar una propiedad requerida.
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
interface Animal { nombre: string; sonido: string; }
|
|
146
|
+
const perro: Animal = { nombre: "Rex" }; // TS2741 falta sonido
|
|
147
|
+
|
|
148
|
+
// BIEN — completar la implementación
|
|
149
|
+
const perro: Animal = { nombre: "Rex", sonido: "Guau" };
|
|
150
|
+
// O hacer la propiedad opcional si el diseño lo permite
|
|
151
|
+
interface Animal { nombre: string; sonido?: string; }
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Errores de null y undefined (TS2532, TS2533, TS2571)
|
|
157
|
+
|
|
158
|
+
Activos con `strictNullChecks: true`.
|
|
159
|
+
|
|
160
|
+
### TS2532 — Object is possibly 'undefined'
|
|
161
|
+
|
|
162
|
+
**Causa:** Acceso a una propiedad sin verificar que el objeto no sea `undefined`.
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
function getUser(id: number): User | undefined { ... }
|
|
166
|
+
const user = getUser(1);
|
|
167
|
+
console.log(user.nombre); // TS2532
|
|
168
|
+
|
|
169
|
+
// BIEN — opción A: narrowing explícito
|
|
170
|
+
if (user !== undefined) { console.log(user.nombre); }
|
|
171
|
+
|
|
172
|
+
// BIEN — opción B: optional chaining
|
|
173
|
+
console.log(user?.nombre);
|
|
174
|
+
|
|
175
|
+
// BIEN — opción C: non-null assertion SOLO cuando tienes garantía externa
|
|
176
|
+
console.log(user!.nombre); // Solo si sabes que no puede ser undefined
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### TS2533 — Object is possibly 'null' or 'undefined'
|
|
182
|
+
|
|
183
|
+
**Causa:** Acceso sin verificar que no sea ni `null` ni `undefined`.
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
const el = document.getElementById("app");
|
|
187
|
+
el.innerHTML = "hola"; // TS2533
|
|
188
|
+
|
|
189
|
+
// BIEN
|
|
190
|
+
if (el !== null) { el.innerHTML = "hola"; }
|
|
191
|
+
// O
|
|
192
|
+
el?.innerHTML; // Silencioso si el es null — cuidado con efectos secundarios
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### TS2571 — Object is of type 'unknown'
|
|
198
|
+
|
|
199
|
+
**Causa:** Intento de usar una variable de tipo `unknown` sin narrowing.
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
async function fetchData(): Promise<unknown> { ... }
|
|
203
|
+
const data = await fetchData();
|
|
204
|
+
console.log(data.nombre); // TS2571
|
|
205
|
+
|
|
206
|
+
// BIEN — type guard
|
|
207
|
+
function isUsuario(x: unknown): x is Usuario {
|
|
208
|
+
return typeof x === "object" && x !== null && "nombre" in x;
|
|
209
|
+
}
|
|
210
|
+
if (isUsuario(data)) { console.log(data.nombre); }
|
|
211
|
+
|
|
212
|
+
// BIEN — instanceof
|
|
213
|
+
try { ... } catch (e: unknown) {
|
|
214
|
+
if (e instanceof Error) { console.error(e.message); }
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Errores de módulo (TS2304, TS2305, TS2307)
|
|
221
|
+
|
|
222
|
+
### TS2304 — Cannot find name '{0}'
|
|
223
|
+
|
|
224
|
+
**Causa:** Variable, tipo o función no importado o no declarado.
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
const resultado = calcular(5); // TS2304 si calcular no está importado
|
|
228
|
+
|
|
229
|
+
// BIEN
|
|
230
|
+
import { calcular } from "./utils/calcular";
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
### TS2305 — Module '{0}' has no exported member '{1}'
|
|
236
|
+
|
|
237
|
+
**Causa:** Import de algo que no está exportado en el módulo de origen.
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
import { calcular, formatear } from "./utils"; // TS2305 si formatear no se exporta
|
|
241
|
+
|
|
242
|
+
// Verificar que el módulo lo exporta
|
|
243
|
+
export function formatear(n: number): string { ... }
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### TS2307 — Cannot find module '{0}' or its corresponding type declarations
|
|
249
|
+
|
|
250
|
+
**Causa:** Módulo sin declaraciones de tipos o ruta incorrecta.
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
import express from "express"; // TS2307 si @types/express no está instalado
|
|
254
|
+
import { algo } from "./ruta-inexistente"; // TS2307
|
|
255
|
+
|
|
256
|
+
// BIEN — instalar tipos
|
|
257
|
+
// npm install --save-dev @types/express
|
|
258
|
+
|
|
259
|
+
// BIEN — declaración manual para módulos sin @types
|
|
260
|
+
declare module "nombre-del-modulo" {
|
|
261
|
+
export function fn(): void;
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Errores de implicit any (TS7xxx)
|
|
268
|
+
|
|
269
|
+
Activos con `noImplicitAny: true` (incluido en `strict: true`).
|
|
270
|
+
|
|
271
|
+
### TS7006 — Parameter '{0}' implicitly has an '{1}' type
|
|
272
|
+
|
|
273
|
+
**Causa:** Parámetro de función sin anotación de tipo.
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
// MAL
|
|
277
|
+
function duplicar(n) { return n * 2; } // TS7006
|
|
278
|
+
|
|
279
|
+
// BIEN
|
|
280
|
+
function duplicar(n: number): number { return n * 2; }
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
### TS7010 — '{0}', which lacks return-type annotation, implicitly has an '{1}' return type
|
|
286
|
+
|
|
287
|
+
**Causa:** Función cuyo tipo de retorno no puede inferirse claramente.
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
// MAL — TypeScript infiere 'any' en casos ambiguos
|
|
291
|
+
function cargar(url) { return fetch(url).then(r => r.json()); }
|
|
292
|
+
|
|
293
|
+
// BIEN
|
|
294
|
+
async function cargar(url: string): Promise<unknown> {
|
|
295
|
+
const resp = await fetch(url);
|
|
296
|
+
return resp.json() as unknown;
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### TS7016 — Could not find a declaration file for module '{0}'
|
|
303
|
+
|
|
304
|
+
**Causa:** Módulo npm sin `@types/` ni declaraciones propias.
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
import algo from "libreria-sin-tipos"; // TS7016
|
|
308
|
+
|
|
309
|
+
// Solución A — instalar tipos comunitarios
|
|
310
|
+
// npm install --save-dev @types/libreria-sin-tipos
|
|
311
|
+
|
|
312
|
+
// Solución B — declaración mínima en src/types/libreria-sin-tipos.d.ts
|
|
313
|
+
declare module "libreria-sin-tipos" {
|
|
314
|
+
const value: unknown;
|
|
315
|
+
export default value;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Solución C — skipLibCheck (solo en casos excepcionales, documenta por qué)
|
|
319
|
+
// tsconfig.json: { "compilerOptions": { "skipLibCheck": true } }
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
### TS7017 — Element implicitly has an 'any' type because type '{0}' has no index signature
|
|
325
|
+
|
|
326
|
+
**Causa:** Acceso con key dinámica a un objeto sin index signature.
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
const config = { host: "localhost", port: 3000 };
|
|
330
|
+
const key = "host";
|
|
331
|
+
const value = config[key]; // TS7017
|
|
332
|
+
|
|
333
|
+
// BIEN — opción A: keyof
|
|
334
|
+
function getConfig<K extends keyof typeof config>(key: K): typeof config[K] {
|
|
335
|
+
return config[key];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// BIEN — opción B: Map con tipo explícito
|
|
339
|
+
const configMap = new Map<string, string | number>();
|
|
340
|
+
configMap.set("host", "localhost");
|
|
341
|
+
|
|
342
|
+
// BIEN — opción C: Record si los valores son homogéneos
|
|
343
|
+
const config: Record<string, string> = { host: "localhost" };
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
### TS7031 — Binding element '{0}' implicitly has an '{1}' type
|
|
349
|
+
|
|
350
|
+
**Causa:** Destructuring de parámetro sin anotación.
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
// MAL
|
|
354
|
+
function render({ nombre, edad }) { ... } // TS7031
|
|
355
|
+
|
|
356
|
+
// BIEN
|
|
357
|
+
interface Props { nombre: string; edad: number; }
|
|
358
|
+
function render({ nombre, edad }: Props) { ... }
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Errores de función y callable (TS2349, TS2355, TS2554, TS2769)
|
|
364
|
+
|
|
365
|
+
### TS2349 — This expression is not callable
|
|
366
|
+
|
|
367
|
+
**Causa:** Intentar llamar algo que no es una función según los tipos.
|
|
368
|
+
|
|
369
|
+
```typescript
|
|
370
|
+
const handler: string | (() => void) = "texto";
|
|
371
|
+
handler(); // TS2349 — podría ser string
|
|
372
|
+
|
|
373
|
+
// BIEN
|
|
374
|
+
if (typeof handler === "function") { handler(); }
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### TS2355 — A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value
|
|
380
|
+
|
|
381
|
+
**Causa:** No todos los branches de la función retornan un valor.
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
function dividir(a: number, b: number): number {
|
|
385
|
+
if (b !== 0) { return a / b; }
|
|
386
|
+
// TS2355 — no hay return en el else
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// BIEN
|
|
390
|
+
function dividir(a: number, b: number): number {
|
|
391
|
+
if (b === 0) throw new Error("División por cero");
|
|
392
|
+
return a / b;
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
### TS2554 — Expected {0} arguments, but got {1}
|
|
399
|
+
|
|
400
|
+
**Causa:** Número incorrecto de argumentos al llamar una función.
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
function sumar(a: number, b: number): number { return a + b; }
|
|
404
|
+
sumar(1); // TS2554 — faltan argumentos
|
|
405
|
+
sumar(1, 2, 3); // TS2554 — argumentos de más
|
|
406
|
+
|
|
407
|
+
// BIEN — si el tercer argumento es opcional
|
|
408
|
+
function sumar(a: number, b: number, c?: number): number {
|
|
409
|
+
return a + b + (c ?? 0);
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
### TS2769 — No overload matches this call
|
|
416
|
+
|
|
417
|
+
**Causa:** Ninguna de las sobrecargas de una función acepta los tipos de argumentos dados.
|
|
418
|
+
|
|
419
|
+
```typescript
|
|
420
|
+
// Función con sobrecargas
|
|
421
|
+
function procesar(x: string): string;
|
|
422
|
+
function procesar(x: number): number;
|
|
423
|
+
function procesar(x: string | number): string | number { return x; }
|
|
424
|
+
|
|
425
|
+
procesar(true); // TS2769 — boolean no coincide con ninguna sobrecarga
|
|
426
|
+
|
|
427
|
+
// BIEN — verificar qué sobrecargas existen y pasar el tipo correcto
|
|
428
|
+
procesar("texto"); // OK
|
|
429
|
+
procesar(42); // OK
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Errores de cast (TS2352, TS2693)
|
|
435
|
+
|
|
436
|
+
### TS2352 — Conversion of type '{0}' to type '{1}' may be a mistake
|
|
437
|
+
|
|
438
|
+
**Causa:** Cast (`as`) entre tipos sin superposición de propiedades.
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
const n = 42;
|
|
442
|
+
const s = n as string; // TS2352 — number y string no se superponen
|
|
443
|
+
|
|
444
|
+
// Anti-patrón — doble cast para evadir el error
|
|
445
|
+
const s = n as unknown as string; // Compila pero es inseguro
|
|
446
|
+
|
|
447
|
+
// BIEN — convertir correctamente
|
|
448
|
+
const s = String(n);
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
### TS2693 — '{0}' only refers to a type, but is being used as a value here
|
|
454
|
+
|
|
455
|
+
**Causa:** Usar una interfaz o tipo como valor en runtime.
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
interface Config { host: string; }
|
|
459
|
+
if (x instanceof Config) { ... } // TS2693 — interfaces no existen en runtime
|
|
460
|
+
|
|
461
|
+
// BIEN — usar type guard con validación de propiedades
|
|
462
|
+
function isConfig(x: unknown): x is Config {
|
|
463
|
+
return typeof x === "object" && x !== null && "host" in x;
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## Referencia rápida — códigos por categoría
|
|
470
|
+
|
|
471
|
+
| Categoría | Códigos frecuentes |
|
|
472
|
+
|-----------|-------------------|
|
|
473
|
+
| Asignación de tipos | TS2322, TS2345, TS2739, TS2741 |
|
|
474
|
+
| Null/undefined | TS2532, TS2533, TS2571 |
|
|
475
|
+
| Propiedades | TS2339, TS2353, TS2540 |
|
|
476
|
+
| Módulos | TS2304, TS2305, TS2307 |
|
|
477
|
+
| Implicit any | TS7006, TS7010, TS7016, TS7017, TS7031 |
|
|
478
|
+
| Función/callable | TS2349, TS2355, TS2554, TS2769 |
|
|
479
|
+
| Cast | TS2352, TS2693 |
|
|
480
|
+
|
|
481
|
+
## Comandos de diagnóstico
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
# Ver todos los errores del proyecto agrupados por código
|
|
485
|
+
npx tsc --noEmit 2>&1 | grep -oP 'TS\d+' | sort | uniq -c | sort -rn
|
|
486
|
+
|
|
487
|
+
# Ver el detalle de los primeros 20 errores
|
|
488
|
+
npx tsc --noEmit 2>&1 | head -60
|
|
489
|
+
|
|
490
|
+
# Buscar supresiones en el código fuente
|
|
491
|
+
grep -rn "@ts-ignore\|@ts-expect-error\|as any\|as unknown as" \
|
|
492
|
+
--include="*.ts" --include="*.tsx" \
|
|
493
|
+
--exclude-dir=node_modules --exclude-dir=dist | head -30
|
|
494
|
+
|
|
495
|
+
# Verificar strict mode activo
|
|
496
|
+
cat tsconfig.json | grep -E '"strict"|"noImplicitAny"|"strictNullChecks"'
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
## Gotchas / Errores comunes no obvios
|
|
500
|
+
|
|
501
|
+
**TS2339 en código correcto después de actualizar TypeScript**: un upgrade de TS 4.x a 5.x puede revelar TS2339 en código que antes compilaba porque las definiciones de tipo de `@types/node` o librerías cambiaron. Causa: librerías como `express` o `mongoose` actualizan sus `@types/*` con definiciones más estrictas — una propiedad que era `any` ahora tiene tipo concreto. Fix: actualizar las dependencias `@types/*` junto con TypeScript, no solo el compilador.
|
|
502
|
+
|
|
503
|
+
**TS2590 "Expression produces a union type that is too complex to represent"**: ocurre al hacer operaciones sobre uniones grandes (más de ~25 miembros) como `Partial<A & B & C>` donde A, B, C son interfaces con muchos campos. Causa: TypeScript tiene un límite interno de complejidad en la representación de tipos. Fix: dividir la unión en tipos intermedios nombrados, o usar `interface` con `extends` en lugar de intersección `&` para reducir la profundidad de evaluación.
|
|
504
|
+
|
|
505
|
+
**`// @ts-ignore` suprime el error siguiente pero también errores reales en la misma línea**: si una línea tiene dos errores y se pone `@ts-ignore`, ambos se suprimen — incluyendo uno legítimo que debería corregirse. Fix: preferir `// @ts-expect-error` que falla en CI si el error desaparece (señal de que la supresión ya no es necesaria), y anotar el código TS#### específico en el comentario.
|
|
506
|
+
|
|
507
|
+
**TS7031 en callbacks de arrays sin anotación de contexto**: `[1, 2, 3].reduce((acc, val) => acc + val)` falla con TS7031 "Binding element 'acc' implicitly has an 'any' type" si `noImplicitAny: true` y TypeScript no puede inferir el tipo inicial del acumulador. Fix: anotar el valor inicial explícitamente: `.reduce((acc, val) => acc + val, 0)` — el tipo del acumulador se infiere del valor inicial, no del callback.
|
|
508
|
+
|
|
509
|
+
## Fuente
|
|
510
|
+
|
|
511
|
+
- `temp/TypeScript-main/src/compiler/diagnosticMessages.json` — 8,559 líneas, fuente primaria
|
|
512
|
+
- Compilador TypeScript oficial: `microsoft/TypeScript` (modo mantenimiento; TS 7.0 se reescribe en Go)
|
|
513
|
+
- Documentación oficial: https://www.typescriptlang.org/tsconfig
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-diseno
|
|
3
|
+
description: Principios de UX design para desarrolladores. Heurísticas de Nielsen, Fitts's Law, Ley de Miller, Gestalt, jerarquía visual, micro-interacciones, feedback visual, estados vacíos, error states, loading states.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
herramientasPermitidas: [Read, Grep]
|
|
6
|
+
exclusiones:
|
|
7
|
+
- "No cargar para accesibilidad técnica (ARIA, contraste WCAG, navegación por teclado, lectores de pantalla) — para accesibilidad cargar `accesibilidad-a11y`."
|
|
8
|
+
- "No cargar para implementación CSS/Tailwind de los diseños — los principios aquí son conceptuales; para implementación cargar `css-moderno` o `tailwind-experto`."
|
|
9
|
+
- "No cargar para investigación de usuario, entrevistas o user research — este skill cubre decisiones de diseño de implementación, no metodología de research."
|
|
10
|
+
- "No cargar para diseño de sistemas de diseño (Design Tokens, Storybook, Figma) — este skill cubre principios UX aplicados al código, no herramientas de diseño."
|
|
11
|
+
evolvable: true # default para skill estandar
|
|
12
|
+
---
|
|
13
|
+
# UX Design para Desarrolladores
|
|
14
|
+
|
|
15
|
+
## Cuándo NO cargar
|
|
16
|
+
|
|
17
|
+
- La tarea es accesibilidad técnica: ARIA correcta, contraste WCAG 2.1, focus trap, lectores de pantalla — cargar `accesibilidad-a11y`.
|
|
18
|
+
- La implementación concreta es en CSS o Tailwind — los principios aquí son conceptuales; para implementación cargar `css-moderno` o `tailwind-experto`.
|
|
19
|
+
- La tarea es investigación de usuario, entrevistas o user testing — este skill cubre decisiones de diseño en el código, no metodología de research.
|
|
20
|
+
- El tema es sistemas de diseño: Design Tokens, Storybook, integración Figma — este skill cubre principios UX, no herramientas de diseño.
|
|
21
|
+
|
|
22
|
+
Un desarrollador que entiende UX toma mejores decisiones de implementación sin necesitar
|
|
23
|
+
validación en cada detalle visual. Estos principios reducen fricción y aumentan la usabilidad
|
|
24
|
+
sin depender de un diseñador para cada componente.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Las 10 Heurísticas de Nielsen (resumen activo)
|
|
29
|
+
|
|
30
|
+
- **H1 — Visibilidad del estado**: Feedback inmediato. Loading states: skeleton > spinner > texto.
|
|
31
|
+
- **H2 — Match con el mundo real**: Hablar el idioma del usuario, no del desarrollador. NUNCA mostrar "Error 500" o UUIDs.
|
|
32
|
+
- **H3 — Control y libertad**: Botón "Cancelar", "Deshacer", confirmación antes de eliminar, breadcrumbs.
|
|
33
|
+
- **H4 — Consistencia**: Mismas convenciones siempre. Azul subrayado = enlace. Logo = inicio. X = cerrar. Escape = cancelar.
|
|
34
|
+
- **H5 — Prevención de errores**: Deshabilitar botón hasta formulario válido. Máscaras de input. Confirmar acciones peligrosas.
|
|
35
|
+
- **H6 — Reconocimiento antes que recuerdo**: Mostrar contexto entre pasos. Autocompletar. Progreso visible.
|
|
36
|
+
- **H7 — Flexibilidad**: Keyboard shortcuts, acciones en masa, filtros guardados.
|
|
37
|
+
- **H8 — Diseño minimalista**: Eliminar texto que nadie lee, campos que nadie llena, iconos sin texto.
|
|
38
|
+
- **H9 — Recuperación de errores**: Mensaje = Qué pasó + Por qué + Qué hacer. Ejemplo: "El RFC debe tener 13 caracteres. Ejemplo: PEGJ850101GR5".
|
|
39
|
+
- **H10 — Ayuda**: Tooltips en campos técnicos, links a artículos, ejemplos reales en errores.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 2. Ley de Fitts — Tamaño y Distancia
|
|
44
|
+
|
|
45
|
+
Objetivos más grandes y más cercanos son más fáciles de alcanzar.
|
|
46
|
+
|
|
47
|
+
- Botones de acción principal: mínimo 44x44px de área táctil (estándar de accesibilidad)
|
|
48
|
+
- Acciones destructivas ALEJADAS de las primarias y con menor prominencia visual
|
|
49
|
+
- Acción principal prominente y a la derecha en formularios
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 3. Ley de Miller — 7 más o menos 2
|
|
54
|
+
|
|
55
|
+
- Menú de navegación: máximo 7 opciones de primer nivel
|
|
56
|
+
- Pasos de wizard: máximo 5-7 pasos
|
|
57
|
+
- Columnas en tabla: máximo 7 visibles sin scroll
|
|
58
|
+
- Opciones en dropdown: si hay más de 7, agregar búsqueda
|
|
59
|
+
- Formulario: agrupar campos en secciones (máximo 7 por sección)
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 4. Principios Gestalt
|
|
64
|
+
|
|
65
|
+
- **Proximidad**: Elementos cercanos parecen relacionados. Poco espacio dentro del grupo, mucho entre secciones.
|
|
66
|
+
- **Similitud**: Mismo color + estilo = misma función. NUNCA mismo color para funciones distintas.
|
|
67
|
+
- **Continuidad**: Alineación para guiar al ojo. Labels alineados, columnas numéricas a la derecha.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 5. Estados que Toda UI Debe Manejar
|
|
72
|
+
|
|
73
|
+
Toda pantalla con datos debe implementar estos 4 estados:
|
|
74
|
+
|
|
75
|
+
1. **Loading**: Skeleton loader para listas, spinner inline para acciones puntuales
|
|
76
|
+
2. **Empty state**: Contexto + acción ("No hay expedientes. Crear expediente")
|
|
77
|
+
3. **Error state**: Qué pasó + qué hacer + botón reintentar
|
|
78
|
+
4. **Success/Data**: El estado normal con datos
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 6. Checklist Pre-Entrega de UI
|
|
83
|
+
|
|
84
|
+
Antes de marcar cualquier feature de UI como terminada, verificar cada punto con
|
|
85
|
+
valores operativos concretos — no con criterios subjetivos como "se ve bien":
|
|
86
|
+
|
|
87
|
+
| Aspecto | Requisito operativo | Anti-patrón a evitar |
|
|
88
|
+
|---------|--------------------|-----------------------|
|
|
89
|
+
| **Iconos** | SVG de librería consistente (Heroicons, Lucide, Material Symbols). Un solo set por proyecto | Emojis como iconos funcionales — no se renderizan igual entre plataformas |
|
|
90
|
+
| **Cursores** | `cursor: pointer` en todo elemento clicable: botones, enlaces, toggles, tabs, cards clicables | Elementos clicables con cursor default — el usuario no sabe que puede interactuar |
|
|
91
|
+
| **Hover/Active** | Transición de 150–300ms. Hover muestra cambio visual; active muestra feedback de presión | Transiciones > 500ms (se sienten lentas) o 0ms (se sienten rotas) |
|
|
92
|
+
| **Contraste** | Texto normal 4.5:1, texto grande 3:1, componentes de UI 3:1 (WCAG 2.1 AA) | Texto gris claro sobre fondo blanco — falla contraste en todos los monitores |
|
|
93
|
+
| **Foco teclado** | `focus-visible` con anillo de 2px de contraste 3:1 contra el fondo. Tab order lógico | `outline: none` sin reemplazo — invisible para usuarios de teclado |
|
|
94
|
+
| **Movimiento** | `@media (prefers-reduced-motion: reduce)` desactiva animaciones no esenciales | Animaciones sin escape — usuarios con vértigo o epilepsia fotosensible |
|
|
95
|
+
| **Breakpoints** | Verificar en 375px (móvil), 768px (tablet), 1024px (laptop), 1440px (desktop) | Solo probar en 1 resolución — se rompe en el dispositivo del usuario |
|
|
96
|
+
| **Estados** | Loading (skeleton), empty, error (qué pasó + qué hacer), success — los 4 siempre | Solo el happy path — la primera interacción del usuario suele ser el empty state |
|
|
97
|
+
| **Touch targets** | Mínimo 44×44px de área táctil en móvil. Separación mínima de 8px entre targets | Botones de 24px — imposibles de presionar con precisión en pantalla táctil |
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Patrones de Referencia Completos
|
|
102
|
+
|
|
103
|
+
Para implementaciones de jerarquía visual (escala tipográfica), estados de UI
|
|
104
|
+
con código HTML/CSS, micro-interacciones, formularios UX, mobile first, y tabla
|
|
105
|
+
completa de anti-patrones UX, ver
|
|
106
|
+
[recursos/patrones-ux-referencia.md](recursos/patrones-ux-referencia.md).
|
|
107
|
+
|
|
108
|
+
## Gotchas / Errores comunes no obvios
|
|
109
|
+
|
|
110
|
+
**Los skeleton loaders que no coinciden con el layout real crean un "layout shift" perceptible al resolver**: si el skeleton muestra 3 líneas horizontales pero el contenido real es una tarjeta con imagen y botones, el usuario percibe un salto visual brusco al cargar. Causa: el skeleton debe ser una aproximación fiel del contenido real. Fix: construir el skeleton usando los mismos contenedores y proporciones del componente real, solo reemplazando el contenido con barras animadas — usar las mismas clases de grid/flex del componente original.
|
|
111
|
+
|
|
112
|
+
**Deshabilitar el botón de submit durante la validación de formulario frustran a usuarios mobile**: en dispositivos táctiles con teclado virtual, el usuario cierra el teclado y toca el botón — si el botón está deshabilitado porque el campo no pasó validación, el usuario no recibe feedback de por qué. Causa: la validación inline (campo por campo) no siempre es visible cuando el teclado oculta parte del formulario. Fix: permitir el submit siempre, mostrar todos los errores inline al enviar, y enfocar automáticamente el primer campo con error (`scrollIntoView()` + `focus()`).
|
|
113
|
+
|
|
114
|
+
**Mensajes de error genéricos ("Algo salió mal") bloquean al usuario más que los técnicos**: en producción es tentador mostrar mensajes genéricos para no exponer internos, pero el usuario no puede resolver un error sin saber qué hacer. Causa: confundir privacidad de implementación con utilidad del mensaje de error. Fix: separar el mensaje visible del usuario (qué pasó en términos de negocio + qué puede hacer) del log interno (detalles técnicos). El mensaje de error debe responder: ¿Qué pasó? + ¿Por qué? + ¿Qué hago ahora?
|
|
115
|
+
|
|
116
|
+
**El estado vacío (empty state) con solo texto "No hay resultados" no guía al usuario al siguiente paso**: el empty state es frecuentemente la primera pantalla que ve un usuario nuevo — si solo dice "No tienes facturas" sin una CTA clara, el usuario no sabe cómo empezar. Causa: el empty state se diseña como excepción en lugar de como estado de onboarding. Fix: el empty state debe tener: ícono/ilustración que contextualice, texto que explique qué puede hacer aquí, y un botón de acción primaria que lleve al siguiente paso ("Crear primera factura").
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../schemas/skill-evals.schema.json",
|
|
3
|
+
"skill_name": "ux-diseno",
|
|
4
|
+
"artifact_type": "skill",
|
|
5
|
+
"schema_version": 1,
|
|
6
|
+
"description": "Evals para ux-diseno — principios de diseño de interacción, jerarquía, affordances.",
|
|
7
|
+
"evals": [
|
|
8
|
+
{
|
|
9
|
+
"id": 0,
|
|
10
|
+
"prompt": "Un formulario tiene 15 campos y el usuario lo abandona. ¿Primer heurística a revisar?",
|
|
11
|
+
"files": [],
|
|
12
|
+
"expectations": [
|
|
13
|
+
"Reducir campos a los estrictamente necesarios.",
|
|
14
|
+
"La respuesta menciona que cada campo añade fricción medible.",
|
|
15
|
+
"Sugiere: progressive disclosure, auto-fill, valores por defecto razonables."
|
|
16
|
+
],
|
|
17
|
+
"tags": ["forms"]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "anti-modal-abuse",
|
|
21
|
+
"prompt": "La app tiene modal tras modal — ¿bien o mal?",
|
|
22
|
+
"files": [],
|
|
23
|
+
"expectations": [
|
|
24
|
+
"Anti-patrón — los modales interrumpen el flujo.",
|
|
25
|
+
"Reglas: reservar para confirmaciones críticas/bloqueantes o información focus-requerida.",
|
|
26
|
+
"Alternativas: drawer lateral, inline editing, toast."
|
|
27
|
+
],
|
|
28
|
+
"grading_guidance": "Failure si justifica modales sin restricciones.",
|
|
29
|
+
"tags": ["anti-pattern"]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "feedback",
|
|
33
|
+
"prompt": "Usuario presiona botón de submit y no pasa nada visible por 2 segundos. ¿Qué le falta?",
|
|
34
|
+
"files": [],
|
|
35
|
+
"expectations": [
|
|
36
|
+
"Feedback inmediato (<100ms): cambio de estado del botón (disabled, loading spinner).",
|
|
37
|
+
"La respuesta menciona que sin feedback el usuario vuelve a clickar → double submit.",
|
|
38
|
+
"Cita umbrales de percepción (100ms instantáneo, 1s tolerable)."
|
|
39
|
+
],
|
|
40
|
+
"tags": ["feedback"]
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|