@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,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../schemas/skill-evals.schema.json",
|
|
3
|
+
"skill_name": "swl-markitdown",
|
|
4
|
+
"artifact_type": "skill",
|
|
5
|
+
"schema_version": 1,
|
|
6
|
+
"description": "Evals para swl-markitdown — conversión de formatos no-Markdown a Markdown.",
|
|
7
|
+
"evals": [
|
|
8
|
+
{
|
|
9
|
+
"id": 0,
|
|
10
|
+
"prompt": "Comando minimal para leer el contenido de `docs/spec.docx`.",
|
|
11
|
+
"files": [],
|
|
12
|
+
"expectations": [
|
|
13
|
+
"Usa `python scripts/vendor/markitdown/cli.py docs/spec.docx` (o equivalente `markitdown docs/spec.docx`).",
|
|
14
|
+
"NO sugiere `cat`, `Read`, ni `head` para .docx.",
|
|
15
|
+
"Menciona que el Read tool NO soporta .docx."
|
|
16
|
+
],
|
|
17
|
+
"tags": ["primary-flow"],
|
|
18
|
+
"weight": 1.5
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "anti-substitution-pdf-small",
|
|
22
|
+
"prompt": "Tengo `docs/quickguide.pdf` de 3 páginas. ¿Qué herramienta uso?",
|
|
23
|
+
"files": [],
|
|
24
|
+
"expectations": [
|
|
25
|
+
"La respuesta sugiere Read tool con `pages:` (no markitdown).",
|
|
26
|
+
"La respuesta menciona que PDFs ≤20 páginas van por Read."
|
|
27
|
+
],
|
|
28
|
+
"grading_guidance": "Failure si sugiere markitdown para PDF pequeño.",
|
|
29
|
+
"tags": ["anti-pattern"]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "pdf-large",
|
|
33
|
+
"prompt": "Tengo `docs/manual.pdf` de 150 páginas con tablas. ¿Qué herramienta uso?",
|
|
34
|
+
"files": [],
|
|
35
|
+
"expectations": [
|
|
36
|
+
"La respuesta sugiere markitdown (no Read).",
|
|
37
|
+
"La respuesta menciona que markitdown extrae tablas como Markdown."
|
|
38
|
+
],
|
|
39
|
+
"tags": ["primary-flow"]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "jupyter",
|
|
43
|
+
"prompt": "¿Cómo leo un notebook Jupyter `.ipynb`?",
|
|
44
|
+
"files": [],
|
|
45
|
+
"expectations": [
|
|
46
|
+
"Usa markitdown (no Read).",
|
|
47
|
+
"Menciona que Read devuelve JSON crudo del notebook (no legible)."
|
|
48
|
+
],
|
|
49
|
+
"tags": ["primary-flow"]
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swl-revisar-impacto
|
|
3
|
+
description: >
|
|
4
|
+
Analiza el impacto de cambios en el codebase usando code-review-graph.
|
|
5
|
+
Ejecuta get_minimal_context → risk_score → get_impact_radius → detect_changes.
|
|
6
|
+
Activa cuando el usuario quiere saber qué se ve afectado por un cambio,
|
|
7
|
+
antes de modificar un componente crítico, o para análisis de riesgo pre-commit.
|
|
8
|
+
user-invocable: false
|
|
9
|
+
version: "1.0.0"
|
|
10
|
+
herramientasPermitidas: [Read, Bash]
|
|
11
|
+
exclusiones:
|
|
12
|
+
- "No cargar si el grafo `code-review-graph` no está disponible (`.code-review-graph/graph.db` ausente) — sin grafo construido el skill retorna MISSING en el prerequisito y no puede ejecutar ningún análisis."
|
|
13
|
+
- "No cargar para revisar calidad de código (linting, estilo, cobertura de tests) — eso es `calidad-pre-commit.js` o `/swl:revisar`; este skill evalúa impacto estructural en el grafo de dependencias."
|
|
14
|
+
- "No cargar en proyectos con codebase < 500 LOC o sin dependencias cruzadas significativas — el grafo de comunidades y blast radius no aportan información útil si el proyecto no tiene estructura modular suficiente."
|
|
15
|
+
- "No cargar para analizar impacto de cambios en documentación, SKILL.md o archivos de configuración que no tienen nodos en el grafo de código — el grafo solo indexa código fuente con llamadas/importaciones."
|
|
16
|
+
evolvable: true # default para skill estandar
|
|
17
|
+
---
|
|
18
|
+
# Skill: swl-revisar-impacto
|
|
19
|
+
|
|
20
|
+
Analiza el impacto estructural de cambios usando el knowledge graph persistente
|
|
21
|
+
del codebase (code-review-graph). Proporciona blast radius, risk score y flujos
|
|
22
|
+
afectados antes de aplicar modificaciones.
|
|
23
|
+
|
|
24
|
+
## Prerequisito — Verificar grafo disponible
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
|
28
|
+
python -c "
|
|
29
|
+
import sys, os
|
|
30
|
+
db = os.path.join('$PROJECT_ROOT', '.code-review-graph', 'graph.db')
|
|
31
|
+
print('OK' if os.path.exists(db) else 'MISSING')
|
|
32
|
+
"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Si dice MISSING:
|
|
36
|
+
```
|
|
37
|
+
⚠ El grafo de código no está inicializado.
|
|
38
|
+
Ejecuta primero: /swl:revisar-impacto build
|
|
39
|
+
O directamente: python -c "import sys; sys.argv=['crg','build']; from code_review_graph.cli import main; main()"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Subcomandos
|
|
43
|
+
|
|
44
|
+
### `build` — Construir/reconstruir el grafo
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
|
48
|
+
cd "$PROJECT_ROOT" && python -c "
|
|
49
|
+
import sys
|
|
50
|
+
sys.argv = ['code-review-graph', 'build']
|
|
51
|
+
from code_review_graph.cli import main
|
|
52
|
+
main()
|
|
53
|
+
"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Mostrar al usuario:
|
|
57
|
+
```
|
|
58
|
+
Grafo construido:
|
|
59
|
+
Archivos: {N}
|
|
60
|
+
Nodos: {N}
|
|
61
|
+
Edges: {N}
|
|
62
|
+
Lenguajes: {lista}
|
|
63
|
+
Actualizado: {ts}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### `status` — Estado actual del grafo
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
|
70
|
+
cd "$PROJECT_ROOT" && python -c "
|
|
71
|
+
import sys
|
|
72
|
+
sys.argv = ['code-review-graph', 'status']
|
|
73
|
+
from code_review_graph.cli import main
|
|
74
|
+
main()
|
|
75
|
+
"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### `contexto` (o vacío) — Análisis de riesgo general
|
|
79
|
+
|
|
80
|
+
Obtiene el contexto mínimo de riesgo actual (~100 tokens):
|
|
81
|
+
|
|
82
|
+
Usar la herramienta MCP `get_minimal_context` con:
|
|
83
|
+
```json
|
|
84
|
+
{ "task": "review", "detail_level": "minimal" }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Mostrar resultado al usuario:
|
|
88
|
+
```
|
|
89
|
+
Estado del grafo:
|
|
90
|
+
Nodos: {N} | Edges: {N} | Archivos: {N}
|
|
91
|
+
Lenguajes: {lista}
|
|
92
|
+
|
|
93
|
+
Riesgo actual: {low | medium | high} ({score:.2f})
|
|
94
|
+
|
|
95
|
+
Archivos afectados top:
|
|
96
|
+
- {nombre_función}: {razón}
|
|
97
|
+
|
|
98
|
+
Test gaps: {N} funciones sin cobertura de tests
|
|
99
|
+
|
|
100
|
+
Comunidades activas: {top 3}
|
|
101
|
+
Flujos críticos: {top 3}
|
|
102
|
+
|
|
103
|
+
Siguiente paso sugerido:
|
|
104
|
+
{tool_suggestion_1}
|
|
105
|
+
{tool_suggestion_2}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### `impacto <archivo_o_función>` — Blast radius de un componente
|
|
109
|
+
|
|
110
|
+
Determinar el nodo a analizar: si el usuario proveyó un nombre de archivo o función,
|
|
111
|
+
buscar su qualified_name en el grafo.
|
|
112
|
+
|
|
113
|
+
Usar la herramienta MCP `get_impact_radius` con:
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"node_name": "<qualified_name>",
|
|
117
|
+
"depth": 3,
|
|
118
|
+
"detail_level": "standard"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Mostrar al usuario:
|
|
123
|
+
```
|
|
124
|
+
Blast radius de {nombre}:
|
|
125
|
+
Impacto directo ({N} nodos):
|
|
126
|
+
- {nodo_1}: {tipo} ({archivo}:{línea})
|
|
127
|
+
- {nodo_2}: ...
|
|
128
|
+
|
|
129
|
+
Impacto transitivo (profundidad 3):
|
|
130
|
+
- {N} nodos adicionales
|
|
131
|
+
|
|
132
|
+
Tests que cubren este nodo: {N}
|
|
133
|
+
Tests en riesgo: {lista}
|
|
134
|
+
|
|
135
|
+
⚠ Modificar este nodo afecta {N_total} componentes del sistema.
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Si N_total > 20: mostrar advertencia de alto impacto y sugerir `/swl:checkpoint` antes de proceder.
|
|
139
|
+
|
|
140
|
+
### `cambios` — Análisis de riesgo de cambios actuales (pre-commit)
|
|
141
|
+
|
|
142
|
+
Usar la herramienta MCP `detect_changes` con:
|
|
143
|
+
```json
|
|
144
|
+
{ "detail_level": "standard" }
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Mostrar al usuario:
|
|
148
|
+
```
|
|
149
|
+
Análisis de cambios actuales:
|
|
150
|
+
Risk score: {score:.2f} ({low|medium|high})
|
|
151
|
+
|
|
152
|
+
Funciones modificadas ({N}):
|
|
153
|
+
- {función}: riesgo {score} — {razón}
|
|
154
|
+
|
|
155
|
+
Funciones sin tests ({N}):
|
|
156
|
+
- {función} ({archivo}:{línea})
|
|
157
|
+
|
|
158
|
+
Flujos afectados ({N}):
|
|
159
|
+
- {flujo}: criticidad {score}
|
|
160
|
+
|
|
161
|
+
{si risk_score > 0.7}
|
|
162
|
+
⛔ RIESGO ALTO — Se recomienda:
|
|
163
|
+
1. Ejecutar /swl:checkpoint antes de continuar
|
|
164
|
+
2. Revisar cobertura de tests en funciones modificadas
|
|
165
|
+
3. Confirmar con el usuario antes del commit
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### `comunidades` — Ver estructura modular del codebase
|
|
169
|
+
|
|
170
|
+
Usar la herramienta MCP `list_communities` con:
|
|
171
|
+
```json
|
|
172
|
+
{ "detail_level": "standard" }
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Mostrar tabla de comunidades:
|
|
176
|
+
```
|
|
177
|
+
Comunidades detectadas ({N}):
|
|
178
|
+
ID | Nombre | Nodos | Cohesión | Acoplamiento
|
|
179
|
+
----|---------------------|-------|----------|-------------
|
|
180
|
+
1 | gateway-core | 45 | 0.91 | 0.23
|
|
181
|
+
2 | hooks-observability | 38 | 0.87 | 0.31
|
|
182
|
+
...
|
|
183
|
+
|
|
184
|
+
Comunidades con alto acoplamiento (> 0.6): candidatas a refactor
|
|
185
|
+
Comunidades con alta cohesión (> 0.8): estables — no tocar sin análisis
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### `flujos` — Ver flujos de ejecución críticos
|
|
189
|
+
|
|
190
|
+
Usar la herramienta MCP `list_flows` con:
|
|
191
|
+
```json
|
|
192
|
+
{ "detail_level": "standard", "limit": 10 }
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Mostrar flujos ordenados por criticidad:
|
|
196
|
+
```
|
|
197
|
+
Flujos críticos del sistema (top 10):
|
|
198
|
+
1. {nombre_flujo} — criticidad: {score}
|
|
199
|
+
Entry point: {función}:{archivo}
|
|
200
|
+
Nodos: {N} | Terminales: {N}
|
|
201
|
+
...
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Integración con flujo de trabajo SWL
|
|
205
|
+
|
|
206
|
+
Invocar automáticamente este skill en estos momentos:
|
|
207
|
+
1. **Antes de modificar agentes críticos** (orquestador, implementador, ejecutar-fase)
|
|
208
|
+
2. **Antes de un release** (`/swl:release`) para detectar cambios riesgosos
|
|
209
|
+
3. **Cuando el pre-commit bloquea** con risk score alto
|
|
210
|
+
4. **Durante auto-evolución** para priorizar qué módulo optimizar primero
|
|
211
|
+
|
|
212
|
+
## Relación con otros componentes
|
|
213
|
+
|
|
214
|
+
| Componente | Scope | Complemento |
|
|
215
|
+
|------------------|--------------------------------|--------------------------------------|
|
|
216
|
+
| `/swl:metricas` | Costo/tokens de sesión actual | revisar-impacto agrega análisis estructural |
|
|
217
|
+
| `calidad-pre-commit.js` | Lint + secretos pre-commit | revisar-impacto agrega risk score semántico |
|
|
218
|
+
| `auto-evolucion-swl` | Mejora de agentes | revisar-impacto prioriza por comunidades |
|
|
219
|
+
| `run-log.js` | Observabilidad de sesión | revisar-impacto agrega contexto de código |
|
|
220
|
+
|
|
221
|
+
## Cuándo NO cargar
|
|
222
|
+
|
|
223
|
+
- El prerequisito del Paso 0 retorna MISSING — sin `graph.db` construido, ningún subcomando funciona; primero construir el grafo con `code-review-graph`.
|
|
224
|
+
- El objetivo es revisar calidad de código (lint, style, cobertura) — usar `/swl:revisar` o `calidad-pre-commit.js`; este skill evalúa blast radius estructural, no issues de calidad.
|
|
225
|
+
- El proyecto es pequeño (< 500 LOC, sin módulos bien separados) — el análisis de comunidades y flujos críticos no aporta información útil cuando casi todo el código está acoplado en un único módulo.
|
|
226
|
+
- Los archivos modificados son documentación, SKILL.md o configuración YAML — el grafo solo indexa código fuente con llamadas e importaciones; los cambios a archivos no-código no tienen nodos en el grafo.
|
|
227
|
+
|
|
228
|
+
## Gotchas / Errores comunes no obvios
|
|
229
|
+
|
|
230
|
+
- **`get_minimal_context` retorna nodos con `qualified_name` diferente al nombre de la función en el código**: el grafo indexa nombres calificados (ej. `api.routes.facturas.crear_factura`) mientras el código usa el nombre simple. Causa: el grafo usa el path completo como identificador de nodo. Solución: para el subcomando `impacto`, usar `get_minimal_context` primero para obtener el `qualified_name` correcto del nodo antes de pasar a `get_impact_radius` — nunca construir el qualified_name a mano.
|
|
231
|
+
- **Blast radius N_total inflado por nodos de tipo "import" sin dependencia real**: el grafo muestra 40 nodos afectados pero la mayoría son módulos que solo importan el paquete raíz, no que usan la función modificada. Causa: el grafo indexa importaciones como edges, incluyendo `from modulo import *`. Solución: filtrar los resultados de `get_impact_radius` por `tipo: "call"` para obtener el blast radius real de llamadas directas, no el inflado por importaciones transitivas.
|
|
232
|
+
- **Advertencia de alto impacto (N_total > 20) sin sugerir `/swl:checkpoint`**: el skill documenta que cuando N_total supera 20 se debe mostrar advertencia y sugerir checkpoint, pero el agente solo muestra el número sin la advertencia. Causa: omitir la condición `if N_total > 20` al construir el output del subcomando `impacto`. Solución: el bloque condicional de advertencia es parte del protocolo, no opcional — si N_total > 20, mostrar el aviso y sugerir checkpoint antes de continuar.
|
|
233
|
+
- **`risk_score` del subcomando `cambios` calculado con grafo desactualizado**: el grafo fue construido hace 3 semanas y el codebase cambió significativamente. Causa: `graph.db` no se reconstruye automáticamente con cada commit. Solución: si la última actualización del grafo (verificar metadata) supera 7 días o hay más de 50 commits desde la última build, reconstruir el grafo antes de confiar en el risk score.
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tailwind-experto
|
|
3
|
+
description: Tailwind CSS v4 mejores prácticas. Cubre configuración CSS-first con @theme y @custom-variant, design tokens en Tailwind, patrones de componentes, responsive con breakpoints, dark mode, plugins custom, compilación JIT y anti-patrones como utility soup y @apply abuse.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
herramientasPermitidas: [Read]
|
|
6
|
+
exclusiones:
|
|
7
|
+
- "No cargar para CSS nativo moderno (Container Queries, @layer, Nesting, View Transitions) — para CSS nativo cargar `css-moderno`."
|
|
8
|
+
- "No cargar para accesibilidad (ARIA, contraste WCAG, navegación por teclado) — para accesibilidad cargar `accesibilidad-a11y`."
|
|
9
|
+
- "No cargar para Tailwind v3 con `tailwind.config.js` — la configuración CSS-first de v4 es incompatible con v3."
|
|
10
|
+
- "No cargar para CSS-in-JS (styled-components, Emotion) o Bootstrap/MUI — son ecosistemas distintos sin utilidades atómicas."
|
|
11
|
+
evolvable: true # default para skill estandar
|
|
12
|
+
---
|
|
13
|
+
# Tailwind CSS v4 Experto
|
|
14
|
+
|
|
15
|
+
## Cuándo NO cargar
|
|
16
|
+
|
|
17
|
+
- El trabajo es CSS nativo moderno: Container Queries, `@layer`, Nesting, View Transitions — cargar `css-moderno`.
|
|
18
|
+
- El tema es accesibilidad: ARIA, contraste WCAG, focus trap, navegación por teclado — cargar `accesibilidad-a11y`.
|
|
19
|
+
- El proyecto usa Tailwind v3 con `tailwind.config.js` — la configuración CSS-first con `@theme` es específica de v4 e incompatible con v3.
|
|
20
|
+
- El proyecto usa CSS-in-JS, Bootstrap o Material UI sin Tailwind — son ecosistemas distintos.
|
|
21
|
+
|
|
22
|
+
## Cambio Fundamental en v4
|
|
23
|
+
|
|
24
|
+
Tailwind v4 abandona el archivo `tailwind.config.js` en favor de **configuración
|
|
25
|
+
directa en CSS**. No más archivo de configuración JavaScript — todo se define
|
|
26
|
+
con `@theme` y directivas CSS nativas.
|
|
27
|
+
|
|
28
|
+
```css
|
|
29
|
+
/* app/globals.css — la config ahora está aquí */
|
|
30
|
+
@import "tailwindcss";
|
|
31
|
+
|
|
32
|
+
@theme {
|
|
33
|
+
--font-sans: 'Inter', system-ui, sans-serif;
|
|
34
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
35
|
+
|
|
36
|
+
--color-primario: oklch(56% 0.2 250);
|
|
37
|
+
--color-primario-oscuro: oklch(46% 0.2 250);
|
|
38
|
+
--color-secundario: oklch(70% 0.15 160);
|
|
39
|
+
|
|
40
|
+
--radius-sm: 0.25rem;
|
|
41
|
+
--radius-md: 0.375rem;
|
|
42
|
+
--radius-lg: 0.5rem;
|
|
43
|
+
--radius-xl: 1rem;
|
|
44
|
+
|
|
45
|
+
--spacing-18: 4.5rem;
|
|
46
|
+
--spacing-88: 22rem;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Para tokens de color completos, tipografía fluida y escalas, ver [recursos/referencia-completa.md](recursos/referencia-completa.md).
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## @custom-variant
|
|
55
|
+
|
|
56
|
+
Define variantes personalizadas sin plugin:
|
|
57
|
+
|
|
58
|
+
```css
|
|
59
|
+
/* Variante para elementos con data attribute */
|
|
60
|
+
@custom-variant data-activo (&[data-activo='true']);
|
|
61
|
+
@custom-variant data-disabled (&[data-disabled='true']);
|
|
62
|
+
@custom-variant data-error (&[data-error='true']);
|
|
63
|
+
|
|
64
|
+
/* Uso en HTML */
|
|
65
|
+
/* <div data-activo="true" class="data-activo:bg-marca-100 data-activo:border-marca-500"> */
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```css
|
|
69
|
+
/* Variante para grupos custom */
|
|
70
|
+
@custom-variant sidebar-collapsed (.sidebar-collapsed &);
|
|
71
|
+
|
|
72
|
+
/* Uso */
|
|
73
|
+
/* <nav class="w-64 sidebar-collapsed:w-16 transition-all"> */
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Patrones de Componentes
|
|
79
|
+
|
|
80
|
+
### Patrón: clases base + variantes (cva)
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
// components/Button.tsx
|
|
84
|
+
import { cva, type VariantProps } from 'class-variance-authority';
|
|
85
|
+
|
|
86
|
+
const buttonVariants = cva(
|
|
87
|
+
// Clases base siempre presentes
|
|
88
|
+
'inline-flex items-center justify-center gap-2 rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-marca-500 disabled:pointer-events-none disabled:opacity-50',
|
|
89
|
+
{
|
|
90
|
+
variants: {
|
|
91
|
+
variante: {
|
|
92
|
+
primario: 'bg-marca-500 text-white hover:bg-marca-600 active:bg-marca-700',
|
|
93
|
+
secundario: 'bg-transparent border border-marca-500 text-marca-600 hover:bg-marca-50',
|
|
94
|
+
ghost: 'hover:bg-gray-100 text-gray-700',
|
|
95
|
+
destructivo: 'bg-error text-white hover:bg-red-700',
|
|
96
|
+
},
|
|
97
|
+
tamano: {
|
|
98
|
+
sm: 'h-8 px-3 text-sm',
|
|
99
|
+
md: 'h-10 px-4 text-base',
|
|
100
|
+
lg: 'h-12 px-6 text-lg',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
defaultVariants: {
|
|
104
|
+
variante: 'primario',
|
|
105
|
+
tamano: 'md',
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
export function Button({ variante, tamano, className, ...props }: ButtonProps) {
|
|
111
|
+
return (
|
|
112
|
+
<button className={buttonVariants({ variante, tamano, className })} {...props} />
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Para patrones adicionales (layouts, tarjetas, plugins custom), ver [recursos/referencia-completa.md](recursos/referencia-completa.md).
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Responsive con Breakpoints
|
|
122
|
+
|
|
123
|
+
### Sistema de breakpoints (v4 por defecto)
|
|
124
|
+
|
|
125
|
+
| Prefijo | Ancho mínimo | Dispositivo típico |
|
|
126
|
+
|---------|-------------|-------------------|
|
|
127
|
+
| `sm:` | 640px | Móvil grande |
|
|
128
|
+
| `md:` | 768px | Tablet |
|
|
129
|
+
| `lg:` | 1024px | Laptop |
|
|
130
|
+
| `xl:` | 1280px | Desktop |
|
|
131
|
+
| `2xl:` | 1536px | Pantalla grande |
|
|
132
|
+
|
|
133
|
+
### Mobile-first (siempre)
|
|
134
|
+
|
|
135
|
+
```html
|
|
136
|
+
<!-- Correcto: móvil base, desktop override -->
|
|
137
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
138
|
+
|
|
139
|
+
<!-- MAL: desktop base, móvil override (requiere sobreescribir) -->
|
|
140
|
+
<div class="grid grid-cols-3 max-md:grid-cols-1">
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Breakpoints personalizados en v4
|
|
144
|
+
|
|
145
|
+
```css
|
|
146
|
+
@theme {
|
|
147
|
+
--breakpoint-xs: 475px;
|
|
148
|
+
--breakpoint-3xl: 1920px;
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Dark Mode en v4
|
|
155
|
+
|
|
156
|
+
```css
|
|
157
|
+
/* globals.css */
|
|
158
|
+
@import "tailwindcss";
|
|
159
|
+
|
|
160
|
+
@theme {
|
|
161
|
+
--color-fondo: #ffffff;
|
|
162
|
+
--color-texto: #0f172a;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@media (prefers-color-scheme: dark) {
|
|
166
|
+
@theme {
|
|
167
|
+
--color-fondo: #0f172a;
|
|
168
|
+
--color-texto: #f1f5f9;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
// Dark mode con clase manual (toggle)
|
|
175
|
+
<html className={tema === 'oscuro' ? 'dark' : ''}>
|
|
176
|
+
|
|
177
|
+
// En el CSS
|
|
178
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Anti-patrones
|
|
184
|
+
|
|
185
|
+
### Utility Soup — demasiadas clases en un elemento
|
|
186
|
+
|
|
187
|
+
```html
|
|
188
|
+
<!-- MAL: ilegible, difícil de mantener -->
|
|
189
|
+
<button class="inline-flex items-center justify-center gap-2 rounded-md bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 active:bg-blue-800 disabled:cursor-not-allowed disabled:opacity-50">
|
|
190
|
+
|
|
191
|
+
<!-- BIEN: extraer componente con cva() -->
|
|
192
|
+
<Button variante="primario" tamano="sm">Guardar</Button>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### @apply Abuse — recrear Sass con Tailwind
|
|
196
|
+
|
|
197
|
+
```css
|
|
198
|
+
/* MAL: el propósito de @apply es crear un nuevo .scss, no reutilizar utilidades */
|
|
199
|
+
.card {
|
|
200
|
+
@apply rounded-lg border border-gray-200 bg-white p-6 shadow-sm;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* BIEN: si es reutilizable, hacer componente React/Vue/Angular */
|
|
204
|
+
/* Si es un patrón CSS puro, usar custom property o @layer */
|
|
205
|
+
@layer componentes {
|
|
206
|
+
.card {
|
|
207
|
+
border-radius: var(--radius-lg);
|
|
208
|
+
border: 1px solid var(--color-borde);
|
|
209
|
+
background: var(--color-superficie);
|
|
210
|
+
padding: var(--spacing-6);
|
|
211
|
+
box-shadow: var(--shadow-sm);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Clases condicionales con interpolación de string
|
|
217
|
+
|
|
218
|
+
```tsx
|
|
219
|
+
// MAL: Tailwind JIT no puede detectar clases dinámicas construidas con interpolación
|
|
220
|
+
const color = 'azul';
|
|
221
|
+
<div className={`bg-${color}-500`}> // 'bg-azul-500' no existe en el output
|
|
222
|
+
|
|
223
|
+
// BIEN: objeto de mapeo completo
|
|
224
|
+
const colorMap = {
|
|
225
|
+
azul: 'bg-blue-500',
|
|
226
|
+
rojo: 'bg-red-500',
|
|
227
|
+
verde: 'bg-green-500',
|
|
228
|
+
} as const;
|
|
229
|
+
<div className={colorMap[color]}>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Gotchas / Errores comunes no obvios
|
|
233
|
+
|
|
234
|
+
**En Tailwind v4, las variables de `@theme` no están disponibles en JavaScript**: a diferencia de v3 donde `tailwind.config.js` exporta los tokens directamente, en v4 los tokens son variables CSS (`--color-primario`) que solo viven en el CSS — no se pueden importar en componentes JavaScript para comparar valores programáticamente. Causa: el diseño CSS-first de v4 es intencional. Fix: para usar tokens en JavaScript (ej: en una librería de gráficas), leer las variables CSS en runtime con `getComputedStyle(document.documentElement).getPropertyValue('--color-primario')`.
|
|
235
|
+
|
|
236
|
+
**`@apply` con clases que incluyen variantes responsivas (`md:flex`) lanza error en Tailwind v4**: `@apply md:flex` dentro de un bloque CSS no es válido porque las variantes responsivas en v4 son media queries generadas — no se pueden aplicar con `@apply`. Causa: `@apply` solo funciona con clases base, no con variantes de contexto como `md:`, `hover:` o `dark:`. Fix: escribir la media query CSS nativa directamente (`@media (min-width: theme(--breakpoint-md)) { display: flex; }`) o usar el patrón de componente con `cva()`.
|
|
237
|
+
|
|
238
|
+
**La purga de clases de Tailwind v4 no detecta clases en archivos `.py`, `.rb` o templates de servidor no configurados**: si el backend genera HTML dinámicamente con strings de clases Tailwind, el compilador de v4 no las ve y las elimina del CSS final. Causa: la detección de contenido de v4 escanea archivos según la configuración de `content` — los templates de servidor no configurados están excluidos. Fix: agregar los paths de los templates al scanner de contenido en el `@import "tailwindcss"` con `source()` o en la config, o usar la directiva `@source` en el CSS.
|
|
239
|
+
|
|
240
|
+
**`clsx` o `cn()` con objetos condicionales y clases que se superponen no garantiza el orden correcto**: `cn('p-4', condicion && 'p-8')` puede resultar en `p-4 p-8` en el HTML, y el navegador aplica la última clase declarada en el CSS — que es la que aparece último en la hoja de estilos de Tailwind, no la última en el string. Causa: la cascada CSS depende del orden de declaración en la hoja de estilos, no del orden en el atributo `class`. Fix: usar `twMerge` (o `cn` basado en `tailwind-merge`) que resuelve conflictos de clases del mismo grupo utilitario correctamente.
|