@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,363 @@
|
|
|
1
|
+
# Design Tokens — Tokens Completos y Configuración de Referencia
|
|
2
|
+
|
|
3
|
+
Definiciones completas de tokens primitivos, semánticos, temas, Style Dictionary e integraciones.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Tokens Primitivos Completos
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"color": {
|
|
12
|
+
"azul": {
|
|
13
|
+
"50": { "value": "#eff6ff" },
|
|
14
|
+
"100": { "value": "#dbeafe" },
|
|
15
|
+
"200": { "value": "#bfdbfe" },
|
|
16
|
+
"300": { "value": "#93c5fd" },
|
|
17
|
+
"400": { "value": "#60a5fa" },
|
|
18
|
+
"500": { "value": "#3b82f6" },
|
|
19
|
+
"600": { "value": "#2563eb" },
|
|
20
|
+
"700": { "value": "#1d4ed8" },
|
|
21
|
+
"800": { "value": "#1e40af" },
|
|
22
|
+
"900": { "value": "#1e3a8a" }
|
|
23
|
+
},
|
|
24
|
+
"gris": {
|
|
25
|
+
"50": { "value": "#f8fafc" },
|
|
26
|
+
"100": { "value": "#f1f5f9" },
|
|
27
|
+
"900": { "value": "#0f172a" }
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"espacio": {
|
|
31
|
+
"1": { "value": "4px" },
|
|
32
|
+
"2": { "value": "8px" },
|
|
33
|
+
"3": { "value": "12px" },
|
|
34
|
+
"4": { "value": "16px" },
|
|
35
|
+
"6": { "value": "24px" },
|
|
36
|
+
"8": { "value": "32px" },
|
|
37
|
+
"12": { "value": "48px" },
|
|
38
|
+
"16": { "value": "64px" }
|
|
39
|
+
},
|
|
40
|
+
"fuente": {
|
|
41
|
+
"sans": { "value": "'Inter', system-ui, -apple-system, sans-serif" },
|
|
42
|
+
"mono": { "value": "'JetBrains Mono', 'Fira Code', monospace" }
|
|
43
|
+
},
|
|
44
|
+
"tamano": {
|
|
45
|
+
"xs": { "value": "12px" },
|
|
46
|
+
"sm": { "value": "14px" },
|
|
47
|
+
"base": { "value": "16px" },
|
|
48
|
+
"lg": { "value": "18px" },
|
|
49
|
+
"xl": { "value": "20px" },
|
|
50
|
+
"2xl": { "value": "24px" },
|
|
51
|
+
"3xl": { "value": "30px" },
|
|
52
|
+
"4xl": { "value": "36px" }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Tokens Semánticos Completos
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"color": {
|
|
64
|
+
"fondo": {
|
|
65
|
+
"pagina": { "value": "{color.gris.50}" },
|
|
66
|
+
"superficie": { "value": "{color.blanco}" },
|
|
67
|
+
"elevado": { "value": "{color.blanco}" }
|
|
68
|
+
},
|
|
69
|
+
"texto": {
|
|
70
|
+
"primario": { "value": "{color.gris.900}" },
|
|
71
|
+
"secundario": { "value": "{color.gris.600}" },
|
|
72
|
+
"deshabilitado": { "value": "{color.gris.400}" },
|
|
73
|
+
"inverso": { "value": "{color.blanco}" }
|
|
74
|
+
},
|
|
75
|
+
"borde": {
|
|
76
|
+
"sutil": { "value": "{color.gris.200}" },
|
|
77
|
+
"normal": { "value": "{color.gris.300}" },
|
|
78
|
+
"fuerte": { "value": "{color.gris.500}" }
|
|
79
|
+
},
|
|
80
|
+
"marca": {
|
|
81
|
+
"primario": { "value": "{color.azul.600}" },
|
|
82
|
+
"primario-hover": { "value": "{color.azul.700}" },
|
|
83
|
+
"primario-texto": { "value": "{color.blanco}" }
|
|
84
|
+
},
|
|
85
|
+
"estado": {
|
|
86
|
+
"exito": { "value": "{color.verde.600}" },
|
|
87
|
+
"error": { "value": "{color.rojo.600}" },
|
|
88
|
+
"advertencia": { "value": "{color.ambar.500}" },
|
|
89
|
+
"info": { "value": "{color.azul.600}" }
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"espacio": {
|
|
93
|
+
"componente": {
|
|
94
|
+
"padding-sm": { "value": "{espacio.2}" },
|
|
95
|
+
"padding-md": { "value": "{espacio.4}" },
|
|
96
|
+
"padding-lg": { "value": "{espacio.6}" },
|
|
97
|
+
"gap-sm": { "value": "{espacio.2}" },
|
|
98
|
+
"gap-md": { "value": "{espacio.4}" }
|
|
99
|
+
},
|
|
100
|
+
"layout": {
|
|
101
|
+
"contenedor-max": { "value": "1280px" },
|
|
102
|
+
"sidebar-ancho": { "value": "256px" },
|
|
103
|
+
"header-alto": { "value": "64px" }
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"tipografia": {
|
|
107
|
+
"cuerpo": {
|
|
108
|
+
"familia": { "value": "{fuente.sans}" },
|
|
109
|
+
"tamano": { "value": "{tamano.base}" },
|
|
110
|
+
"altura-linea": { "value": "1.5" }
|
|
111
|
+
},
|
|
112
|
+
"encabezado": {
|
|
113
|
+
"familia": { "value": "{fuente.sans}" },
|
|
114
|
+
"peso": { "value": "700" }
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"borde": {
|
|
118
|
+
"radio": {
|
|
119
|
+
"sm": { "value": "4px" },
|
|
120
|
+
"md": { "value": "8px" },
|
|
121
|
+
"lg": { "value": "12px" },
|
|
122
|
+
"xl": { "value": "16px" },
|
|
123
|
+
"full": { "value": "9999px" }
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"sombra": {
|
|
127
|
+
"sm": { "value": "0 1px 2px 0 rgb(0 0 0 / 0.05)" },
|
|
128
|
+
"md": { "value": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)" },
|
|
129
|
+
"lg": { "value": "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)" }
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Formato W3C Design Tokens
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"$schema": "https://design-tokens.org/schema/draft-8",
|
|
141
|
+
"color": {
|
|
142
|
+
"$type": "color",
|
|
143
|
+
"marca": {
|
|
144
|
+
"primario": {
|
|
145
|
+
"$value": "#3b82f6",
|
|
146
|
+
"$description": "Color primario de marca, usar para CTAs principales",
|
|
147
|
+
"$extensions": {
|
|
148
|
+
"figma": { "collectionId": "VariableCollectionId:1:1" }
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Temas: Light / Dark / Brand
|
|
159
|
+
|
|
160
|
+
### Tema claro
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"color": {
|
|
165
|
+
"fondo": {
|
|
166
|
+
"pagina": { "value": "#f8fafc" },
|
|
167
|
+
"superficie": { "value": "#ffffff" }
|
|
168
|
+
},
|
|
169
|
+
"texto": {
|
|
170
|
+
"primario": { "value": "#0f172a" },
|
|
171
|
+
"secundario": { "value": "#475569" }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Tema oscuro
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"color": {
|
|
182
|
+
"fondo": {
|
|
183
|
+
"pagina": { "value": "#0f172a" },
|
|
184
|
+
"superficie": { "value": "#1e293b" }
|
|
185
|
+
},
|
|
186
|
+
"texto": {
|
|
187
|
+
"primario": { "value": "#f1f5f9" },
|
|
188
|
+
"secundario": { "value": "#94a3b8" }
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### CSS de temas
|
|
195
|
+
|
|
196
|
+
```css
|
|
197
|
+
:root, [data-tema="claro"] {
|
|
198
|
+
--color-fondo-pagina: #f8fafc;
|
|
199
|
+
--color-texto-primario: #0f172a;
|
|
200
|
+
}
|
|
201
|
+
[data-tema="oscuro"] {
|
|
202
|
+
--color-fondo-pagina: #0f172a;
|
|
203
|
+
--color-texto-primario: #f1f5f9;
|
|
204
|
+
}
|
|
205
|
+
@media (prefers-color-scheme: dark) {
|
|
206
|
+
:root:not([data-tema]) {
|
|
207
|
+
--color-fondo-pagina: #0f172a;
|
|
208
|
+
--color-texto-primario: #f1f5f9;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Multi-tenant
|
|
214
|
+
|
|
215
|
+
```json
|
|
216
|
+
// tokens/marcas/empresa-a.json
|
|
217
|
+
{ "color": { "marca": { "primario": { "value": "#6366f1" } } } }
|
|
218
|
+
|
|
219
|
+
// tokens/marcas/empresa-b.json
|
|
220
|
+
{ "color": { "marca": { "primario": { "value": "#10b981" } } } }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Style Dictionary — Configuración Completa
|
|
226
|
+
|
|
227
|
+
```javascript
|
|
228
|
+
// style-dictionary.config.js
|
|
229
|
+
import StyleDictionary from 'style-dictionary';
|
|
230
|
+
|
|
231
|
+
export default {
|
|
232
|
+
source: ['tokens/**/*.json'],
|
|
233
|
+
platforms: {
|
|
234
|
+
css: {
|
|
235
|
+
transformGroup: 'css',
|
|
236
|
+
prefix: '',
|
|
237
|
+
buildPath: 'dist/css/',
|
|
238
|
+
files: [{
|
|
239
|
+
destination: 'tokens.css',
|
|
240
|
+
format: 'css/variables',
|
|
241
|
+
options: { selector: ':root' },
|
|
242
|
+
}],
|
|
243
|
+
},
|
|
244
|
+
js: {
|
|
245
|
+
transformGroup: 'js',
|
|
246
|
+
buildPath: 'dist/js/',
|
|
247
|
+
files: [
|
|
248
|
+
{ destination: 'tokens.js', format: 'javascript/es6' },
|
|
249
|
+
{ destination: 'tokens.d.ts', format: 'typescript/es6-declarations' },
|
|
250
|
+
],
|
|
251
|
+
},
|
|
252
|
+
android: {
|
|
253
|
+
transformGroup: 'android',
|
|
254
|
+
buildPath: 'dist/android/',
|
|
255
|
+
files: [{
|
|
256
|
+
destination: 'colors.xml',
|
|
257
|
+
format: 'android/colors',
|
|
258
|
+
filter: { type: 'color' },
|
|
259
|
+
}],
|
|
260
|
+
},
|
|
261
|
+
ios_swift: {
|
|
262
|
+
transformGroup: 'ios-swift',
|
|
263
|
+
buildPath: 'dist/ios/',
|
|
264
|
+
files: [{
|
|
265
|
+
destination: 'DesignTokens.swift',
|
|
266
|
+
format: 'ios-swift/class.swift',
|
|
267
|
+
}],
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Integraciones con Frameworks
|
|
276
|
+
|
|
277
|
+
### Tailwind CSS v4
|
|
278
|
+
|
|
279
|
+
```css
|
|
280
|
+
@import "tailwindcss";
|
|
281
|
+
@import "./dist/css/tokens.css";
|
|
282
|
+
|
|
283
|
+
@theme {
|
|
284
|
+
--color-primario: var(--color-marca-primario);
|
|
285
|
+
--color-superficie: var(--color-fondo-superficie);
|
|
286
|
+
--font-sans: var(--fuente-sans);
|
|
287
|
+
--radius-md: var(--borde-radio-md);
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Angular Material
|
|
292
|
+
|
|
293
|
+
```scss
|
|
294
|
+
@use '@angular/material' as mat;
|
|
295
|
+
|
|
296
|
+
$paleta-primaria: mat.define-palette((
|
|
297
|
+
50: #eff6ff, 100: #dbeafe, 500: #3b82f6, 600: #2563eb, 700: #1d4ed8,
|
|
298
|
+
contrast: (500: white, 600: white, 700: white)
|
|
299
|
+
));
|
|
300
|
+
|
|
301
|
+
$tema: mat.define-light-theme((
|
|
302
|
+
color: (primary: $paleta-primaria, accent: $paleta-acento),
|
|
303
|
+
typography: mat.define-typography-config($font-family: var(--fuente-sans)),
|
|
304
|
+
));
|
|
305
|
+
|
|
306
|
+
@include mat.all-component-themes($tema);
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### CSS-in-JS (Emotion/Styled Components)
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
export const tema = {
|
|
313
|
+
colores: {
|
|
314
|
+
marca: {
|
|
315
|
+
primario: 'var(--color-marca-primario)',
|
|
316
|
+
primarioHover: 'var(--color-marca-primario-hover)',
|
|
317
|
+
},
|
|
318
|
+
texto: {
|
|
319
|
+
primario: 'var(--color-texto-primario)',
|
|
320
|
+
secundario: 'var(--color-texto-secundario)',
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
espacio: { sm: 'var(--espacio-2)', md: 'var(--espacio-4)', lg: 'var(--espacio-6)' },
|
|
324
|
+
radio: { md: 'var(--borde-radio-md)', lg: 'var(--borde-radio-lg)' },
|
|
325
|
+
} as const;
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Versionado — CHANGELOG de Tokens
|
|
331
|
+
|
|
332
|
+
```markdown
|
|
333
|
+
## [2.1.0] — 2024-03-20
|
|
334
|
+
|
|
335
|
+
### Agregado
|
|
336
|
+
- `color.estado.advertencia-suave` para alertas inline
|
|
337
|
+
- `espacio.layout.contenedor-ancho-xl` para layouts anchos
|
|
338
|
+
|
|
339
|
+
### Cambiado
|
|
340
|
+
- `color.marca.primario` de `#3b82f6` a `#2563eb` (mayor contraste WCAG AA)
|
|
341
|
+
|
|
342
|
+
## [2.0.0] — 2024-02-01
|
|
343
|
+
|
|
344
|
+
### BREAKING
|
|
345
|
+
- Renombrado `color.principal.*` -> `color.marca.*`
|
|
346
|
+
- Eliminado `espacio.legacy.*`
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Deprecated tokens
|
|
350
|
+
|
|
351
|
+
```json
|
|
352
|
+
{
|
|
353
|
+
"color": {
|
|
354
|
+
"principal": {
|
|
355
|
+
"primario": {
|
|
356
|
+
"value": "{color.marca.primario}",
|
|
357
|
+
"$deprecated": true,
|
|
358
|
+
"$description": "Deprecated en v2.0. Usar color.marca.primario"
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
```
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devsecops-pipeline-security
|
|
3
|
+
description: Integración de gates de seguridad en el pipeline CI/CD. Cubre SAST (CodeQL, Semgrep con reglas custom, output SARIF), DAST (OWASP ZAP baseline + autenticado), secret scanning (gitleaks pre-commit + CI), container scanning (Trivy para imágenes y SBOM), supply chain (dependency review, license checks), y diseño de quality gates en PR (bloquear por severidad, no por hallazgos totales). Consolida los 5 controles defensivos que deben existir en todo pipeline productivo. Cargar al diseñar CI/CD para un proyecto nuevo, al auditar seguridad del pipeline existente, o al reforzar una release con controles antes de producción.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
herramientasPermitidas: [Read, Bash, Grep]
|
|
6
|
+
evolvable: true # default para skill estandar
|
|
7
|
+
nist_csf: [ID.RA-01, GV.SC-07, PR.PS-01, PR.PS-06, DE.CM-09, RS.MI-01]
|
|
8
|
+
nist_ai_rmf: [MAP-1.6]
|
|
9
|
+
attack_techniques: [T1195.002, T1190, T1552.001]
|
|
10
|
+
exclusiones:
|
|
11
|
+
- "No cargar para revisión manual de código buscando vulnerabilidades (OWASP Top 10 en un endpoint concreto) — para revisión dirigida cargar `checklist-seguridad` o el skill de revisión del lenguaje."
|
|
12
|
+
- "No cargar para hardening de runtime de aplicaciones (WAF, rate limiting, configuración TLS en load balancer) — este skill cubre gates pre-deploy, no runtime en producción. Para runtime ver skills de cloud-aws/azure-cloud/gcp-cloud."
|
|
13
|
+
- "No cargar para respuesta a incidentes o análisis forense post-breach — este skill es preventivo en el pipeline, no investigación. Ese dominio está fuera del scope de swl-ses."
|
|
14
|
+
- "No cargar para pentesting ofensivo o red teaming — el foco es defensa automatizada del pipeline, no evaluación adversaria activa con autorización formal."
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# DevSecOps — Gates de Seguridad en Pipeline CI/CD
|
|
18
|
+
|
|
19
|
+
Integración sistemática de controles de seguridad antes del despliegue. Cinco
|
|
20
|
+
gates que toda aplicación productiva debe tener, con el trade-off de que
|
|
21
|
+
implementarlos mal genera ruido y fatiga de alertas — y los equipos los
|
|
22
|
+
desactivan en lugar de arreglarlos.
|
|
23
|
+
|
|
24
|
+
## Cuándo cargar
|
|
25
|
+
|
|
26
|
+
- Al diseñar el CI/CD para un proyecto nuevo (fase de scaffolding)
|
|
27
|
+
- Al auditar la seguridad del pipeline existente y encontrar gaps (ej: sin SAST, sin scanning de contenedores)
|
|
28
|
+
- Al preparar una release con requerimientos de compliance (SOC 2, ISO 27001, PCI-DSS exigen la mayoría de estos controles)
|
|
29
|
+
- Al configurar gates de PR que bloqueen merge por severidad de hallazgos
|
|
30
|
+
- Al incorporar un proyecto externo al sistema y validar que su pipeline cumple el estándar mínimo
|
|
31
|
+
|
|
32
|
+
## Cuándo NO cargar
|
|
33
|
+
|
|
34
|
+
- La tarea es revisión manual de código para un endpoint específico: usar `checklist-seguridad` o el skill del lenguaje
|
|
35
|
+
- La tarea es hardening de runtime en producción (WAF, TLS en load balancer): usar skills de cloud
|
|
36
|
+
- La tarea es respuesta a incidentes o forensia: fuera del scope de swl-ses
|
|
37
|
+
- La tarea es pentesting ofensivo con autorización formal: fuera del scope (dominio red team)
|
|
38
|
+
|
|
39
|
+
## Los 5 gates obligatorios
|
|
40
|
+
|
|
41
|
+
El pipeline productivo mínimo tiene estos 5 gates en el orden siguiente:
|
|
42
|
+
|
|
43
|
+
| # | Gate | Momento | Herramienta recomendada | Bloqueo |
|
|
44
|
+
|---|------|---------|-------------------------|---------|
|
|
45
|
+
| 1 | Secrets scanning | Pre-commit + CI | gitleaks | Sí — cualquier secret detectado |
|
|
46
|
+
| 2 | SAST | PR en CI | Semgrep + CodeQL | Condicional — solo CRITICAL/HIGH |
|
|
47
|
+
| 3 | Dependency audit | PR en CI | pip-audit / npm audit / osv-scanner | Condicional — CVE ≥ HIGH sin fix |
|
|
48
|
+
| 4 | Container scanning | Post-build | Trivy | Condicional — CRITICAL sin workaround |
|
|
49
|
+
| 5 | DAST (baseline) | Post-deploy a staging | OWASP ZAP | Condicional — new HIGH findings |
|
|
50
|
+
|
|
51
|
+
## Gate 1 — Secret scanning
|
|
52
|
+
|
|
53
|
+
### Herramienta base: gitleaks
|
|
54
|
+
|
|
55
|
+
Detección de credenciales hardcodeadas, API keys, tokens, claves privadas.
|
|
56
|
+
|
|
57
|
+
**Pre-commit hook** (ejecuta localmente antes del push):
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# .pre-commit-config.yaml
|
|
61
|
+
repos:
|
|
62
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
63
|
+
rev: v8.18.0
|
|
64
|
+
hooks:
|
|
65
|
+
- id: gitleaks
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**CI gate** (GitHub Actions):
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
- name: Secret scan (gitleaks)
|
|
72
|
+
uses: gitleaks/gitleaks-action@v2
|
|
73
|
+
env:
|
|
74
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
75
|
+
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Configuración**: `.gitleaks.toml` con reglas custom del dominio (ej: detectar patrones de tokens internos que no están en el default de gitleaks).
|
|
79
|
+
|
|
80
|
+
**Decisión de bloqueo**: SÍ — cualquier secret detectado. Sin excepción. Si aparece un falso positivo, documentarlo en `.gitleaksignore` con justificación comentada.
|
|
81
|
+
|
|
82
|
+
## Gate 2 — SAST (Static Application Security Testing)
|
|
83
|
+
|
|
84
|
+
### Herramienta base: Semgrep + CodeQL (complementarios)
|
|
85
|
+
|
|
86
|
+
- **Semgrep**: rápido, reglas custom en YAML, cobertura amplia de lenguajes, comunidad activa con rule packs (r2c, OWASP)
|
|
87
|
+
- **CodeQL** (GitHub): análisis profundo, data flow taint tracking, mejor para C/C++/Java. Viene gratis con GitHub public repos.
|
|
88
|
+
|
|
89
|
+
**Workflow recomendado** (GitHub Actions):
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
jobs:
|
|
93
|
+
sast:
|
|
94
|
+
runs-on: ubuntu-latest
|
|
95
|
+
permissions:
|
|
96
|
+
security-events: write # para SARIF upload
|
|
97
|
+
steps:
|
|
98
|
+
- uses: actions/checkout@v4
|
|
99
|
+
|
|
100
|
+
- name: Semgrep
|
|
101
|
+
uses: semgrep/semgrep-action@v1
|
|
102
|
+
with:
|
|
103
|
+
config: >-
|
|
104
|
+
p/security-audit
|
|
105
|
+
p/owasp-top-ten
|
|
106
|
+
p/secrets
|
|
107
|
+
.semgrep/custom-rules/
|
|
108
|
+
generateSarif: true
|
|
109
|
+
|
|
110
|
+
- name: Upload SARIF
|
|
111
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
112
|
+
with:
|
|
113
|
+
sarif_file: semgrep.sarif
|
|
114
|
+
|
|
115
|
+
- name: CodeQL init
|
|
116
|
+
uses: github/codeql-action/init@v3
|
|
117
|
+
- name: CodeQL analyze
|
|
118
|
+
uses: github/codeql-action/analyze@v3
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Reglas custom**: mantener en `.semgrep/custom-rules/` con reglas específicas del dominio (ej: prohibir `eval()` en Node, prohibir `shell=True` en Python subprocess, detectar patrones de inyección propios).
|
|
122
|
+
|
|
123
|
+
**Decisión de bloqueo**: CRITICAL y HIGH → bloquear PR. MEDIUM y LOW → comentario en PR pero no bloquean. INFO → solo dashboard.
|
|
124
|
+
|
|
125
|
+
## Gate 3 — Dependency audit (supply chain)
|
|
126
|
+
|
|
127
|
+
### Herramientas por ecosistema
|
|
128
|
+
|
|
129
|
+
| Lenguaje | Herramienta | Comando |
|
|
130
|
+
|----------|-------------|---------|
|
|
131
|
+
| Python | pip-audit | `pip-audit --format json --output audit.json` |
|
|
132
|
+
| Node.js | npm audit / osv-scanner | `npm audit --audit-level=high --json` |
|
|
133
|
+
| Java | OWASP Dependency-Check | Maven/Gradle plugin |
|
|
134
|
+
| Go | govulncheck | `govulncheck ./...` |
|
|
135
|
+
| Rust | cargo-audit | `cargo audit --format json` |
|
|
136
|
+
| Cross-lang | osv-scanner (Google) | `osv-scanner --lockfile=X -r .` |
|
|
137
|
+
|
|
138
|
+
**Política**: dependencia con CVE HIGH/CRITICAL sin fix disponible → bloquear
|
|
139
|
+
merge hasta mitigación documentada; con fix disponible → autofix por Dependabot/Renovate.
|
|
140
|
+
|
|
141
|
+
**License compliance**: complementar con checker de licencias. Incompatibles
|
|
142
|
+
con el uso del proyecto (GPL en código cerrado) → bloquear.
|
|
143
|
+
|
|
144
|
+
**Decisión de bloqueo**: CVE HIGH/CRITICAL sin workaround documentado →
|
|
145
|
+
bloquear. Licencia incompatible → bloquear sin excepción.
|
|
146
|
+
|
|
147
|
+
## Gate 4 — Container scanning
|
|
148
|
+
|
|
149
|
+
### Herramienta base: Trivy
|
|
150
|
+
|
|
151
|
+
Escáner gratuito de contenedores con cobertura OS packages + dependencies +
|
|
152
|
+
IaC + secrets.
|
|
153
|
+
|
|
154
|
+
**Integración en build** (GitHub Actions):
|
|
155
|
+
|
|
156
|
+
```yaml
|
|
157
|
+
- name: Build image
|
|
158
|
+
run: docker build -t app:$GITHUB_SHA .
|
|
159
|
+
|
|
160
|
+
- name: Trivy scan
|
|
161
|
+
uses: aquasecurity/trivy-action@master
|
|
162
|
+
with:
|
|
163
|
+
image-ref: app:${{ github.sha }}
|
|
164
|
+
format: sarif
|
|
165
|
+
output: trivy-results.sarif
|
|
166
|
+
severity: CRITICAL,HIGH
|
|
167
|
+
exit-code: 1 # falla el job si encuentra CRITICAL/HIGH
|
|
168
|
+
|
|
169
|
+
- name: Upload SARIF
|
|
170
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
171
|
+
with:
|
|
172
|
+
sarif_file: trivy-results.sarif
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**SBOM generation**: Trivy también genera SBOM (SPDX o CycloneDX) útil para
|
|
176
|
+
compliance:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
trivy image --format cyclonedx --output sbom.json app:latest
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Política**: CRITICAL sin workaround → bloquear push a registry. HIGH con
|
|
183
|
+
workaround documentado en issue → permitir con TODO.
|
|
184
|
+
|
|
185
|
+
## Gate 5 — DAST en staging
|
|
186
|
+
|
|
187
|
+
### Herramienta base: OWASP ZAP
|
|
188
|
+
|
|
189
|
+
Análisis dinámico sobre la aplicación desplegada en staging (no producción).
|
|
190
|
+
|
|
191
|
+
**Baseline scan** (pasivo, rápido):
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
- name: ZAP Baseline Scan
|
|
195
|
+
uses: zaproxy/action-baseline@v0.10.0
|
|
196
|
+
with:
|
|
197
|
+
target: 'https://staging.example.com'
|
|
198
|
+
fail_action: true
|
|
199
|
+
cmd_options: '-a -j -l WARN'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Full scan** (activo, lento — solo en release):
|
|
203
|
+
|
|
204
|
+
```yaml
|
|
205
|
+
- name: ZAP Full Scan
|
|
206
|
+
uses: zaproxy/action-full-scan@v0.10.0
|
|
207
|
+
with:
|
|
208
|
+
target: 'https://staging.example.com'
|
|
209
|
+
cmd_options: '-z "-config api.key=${{ secrets.ZAP_API_KEY }}"'
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Autenticación**: configurar ZAP con session token o flujo de auth para
|
|
213
|
+
scanear endpoints protegidos. Sin auth configurada, solo se cubre la capa
|
|
214
|
+
pública.
|
|
215
|
+
|
|
216
|
+
**Decisión de bloqueo**: NEW HIGH findings (no regresiones conocidas) →
|
|
217
|
+
bloquear promoción a producción. Los hallazgos conocidos deben tener
|
|
218
|
+
excepciones documentadas con fecha de revisión.
|
|
219
|
+
|
|
220
|
+
## Diseño de quality gates en PR
|
|
221
|
+
|
|
222
|
+
### Principio: bloquear por severidad, no por cantidad
|
|
223
|
+
|
|
224
|
+
Un PR con 50 hallazgos INFO y 0 HIGH es aceptable. Un PR con 1 CRITICAL es
|
|
225
|
+
bloqueante.
|
|
226
|
+
|
|
227
|
+
### Thresholds recomendados
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
# .github/workflows/security-gates.yml
|
|
231
|
+
- name: Check severity
|
|
232
|
+
run: |
|
|
233
|
+
critical=$(jq '[.runs[].results[] | select(.level=="error" and .properties.severity=="critical")] | length' results.sarif)
|
|
234
|
+
if [ "$critical" -gt 0 ]; then
|
|
235
|
+
echo "FAIL: $critical critical findings"
|
|
236
|
+
exit 1
|
|
237
|
+
fi
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Fatigue avoidance
|
|
241
|
+
|
|
242
|
+
- Suppresiones deben tener fecha de revisión y justificación en commit message
|
|
243
|
+
- Dashboard de tendencias de hallazgos (no solo gates) para visibilidad a largo plazo
|
|
244
|
+
- Alertas solo en hallazgos NEW, no en los ya conocidos; los conocidos van a backlog
|
|
245
|
+
- Rotación periódica de reglas personalizadas para eliminar las que nunca disparan o siempre lo hacen en falso positivo
|
|
246
|
+
|
|
247
|
+
## Integración incremental para un proyecto existente
|
|
248
|
+
|
|
249
|
+
Adoptar los 5 gates de golpe genera parálisis. Orden sugerido:
|
|
250
|
+
|
|
251
|
+
1. **Semana 1** — Gate 1 (secrets): pre-commit + CI con gitleaks. Alto ROI, bajo esfuerzo.
|
|
252
|
+
2. **Semana 2** — Gate 3 (deps): auto-audit del ecosistema del proyecto. Dependabot/Renovate.
|
|
253
|
+
3. **Semana 3-4** — Gate 2 (SAST): Semgrep con reglas comunitarias; reglas custom más tarde.
|
|
254
|
+
4. **Semana 5-6** — Gate 4 (containers): Trivy solo en imágenes de producción.
|
|
255
|
+
5. **Semana 8+** — Gate 5 (DAST): ZAP baseline una vez que staging es estable.
|
|
256
|
+
|
|
257
|
+
Cada gate activado en modo "observación" (no bloquea) 2-3 semanas antes de
|
|
258
|
+
volverse bloqueante. Durante observación, limpiar falsos positivos.
|
|
259
|
+
|
|
260
|
+
## Gotchas / Errores comunes no obvios
|
|
261
|
+
|
|
262
|
+
- **Activar todos los gates como bloqueantes desde día 1**: genera fatiga de alertas masiva, suppresiones indiscriminadas y eventualmente desactivación del pipeline. Causa: sin dataset de falsos positivos del dominio específico, las reglas genéricas generan ruido insoportable. Solución: cada gate arranca en modo observación (no bloquea); calibrar 2-3 semanas; luego volverse bloqueante. Si un gate siempre genera más de 20 hallazgos por PR, la señal está rota.
|
|
263
|
+
- **Suppresiones sin fecha de revisión**: agregar `# nosemgrep` o `.gitleaksignore` permanente sin revisarlo convierte el gate en teatro. Causa: las suppresiones acumuladas dejan de ser excepciones y se vuelven la regla. Solución: exigir comentario en toda suppresión con fecha de revisión (ej: `# nosemgrep: justificado 2026-04-20, revisar 2026-10-20`); script mensual que lista suppresiones vencidas.
|
|
264
|
+
- **DAST sin autenticación configurada**: scanear solo la capa pública no detecta vulnerabilidades en endpoints autenticados — donde está la mayoría de datos sensibles. Causa: configurar auth en ZAP requiere trabajo adicional y se salta. Solución: no declarar DAST "hecho" hasta que cubra endpoints autenticados; si el proyecto no tiene auth, documentarlo explícitamente como excepción.
|
|
265
|
+
- **Confiar en SARIF upload como sustituto de revisión humana**: SARIF al GitHub Security tab es útil para visibilidad pero no genera acción si nadie lo revisa. Causa: los dashboards aumentan la sensación de cobertura sin necesariamente mejorar la respuesta. Solución: complementar SARIF con alertas activas a un canal (Slack/email) para hallazgos NEW de severidad alta; no confundir "upload exitoso" con "hallazgo atendido".
|
|
266
|
+
- **Escanear contenedores solo en prod, no en dev**: los entornos de desarrollo tienen dependencias más permisivas y sirven de superficie de ataque si se despliegan accidentalmente. Causa: los equipos asumen que "solo prod importa" y pasan por alto staging/dev. Solución: aplicar Trivy a todas las imágenes que se suben a un registry — dev, staging, prod. El criterio de bloqueo puede ser más laxo en dev, pero el gate debe existir.
|
|
267
|
+
- **Dependabot/Renovate sin merge automático bajo condiciones**: los PRs de bump acumulan sin merge, y cuando se necesitan todos a la vez, romper cosas se vuelve inevitable. Causa: revisar cada bump manualmente es alta fricción; sin automatización los PRs se estancan. Solución: auto-merge bump de patch + tests pasando; bump de minor/major requiere revisión; bump de security → auto-merge si CVE HIGH/CRITICAL independiente del tipo.
|
|
268
|
+
- **Reglas custom de Semgrep sin tests**: escribir una regla custom sin fixtures positivas y negativas genera detecciones incorrectas. Causa: los patrones AST son sutiles; un regex mal calibrado atrapa casos irrelevantes. Solución: toda regla custom incluye archivo `rule-test.yml` con casos positivos (debe detectar) y negativos (no debe detectar); Semgrep tiene `semgrep --test` para validación automática.
|
|
269
|
+
- **Reportar DAST findings como críticos sin verificar explotabilidad**: ZAP marca "High" por patrones que pueden no ser explotables en el contexto real (ej: header missing que la app no usa). Causa: los scanners son conservadores por diseño. Solución: triage de findings HIGH con verificación de explotabilidad antes de bloquear; los hallazgos con "Information Disclosure" raramente justifican bloqueo de release sin contexto adicional.
|
|
270
|
+
|
|
271
|
+
## Integración con skills SWL existentes
|
|
272
|
+
|
|
273
|
+
| Skill SWL | Relación con este skill |
|
|
274
|
+
|-----------|-------------------------|
|
|
275
|
+
| `checklist-seguridad` | Revisión manual; este skill automatiza parte del checklist en CI |
|
|
276
|
+
| `dependencias-auditoria` | Gate 3; este skill lo integra en pipeline con política de bloqueo |
|
|
277
|
+
| `iam-secretos` | Gate 1; este skill implementa detección automatizada de secrets |
|
|
278
|
+
| `ci-cd-pipelines` | Este skill complementa con capa de seguridad sobre el pipeline genérico |
|
|
279
|
+
| `contenedores-docker` | Gate 4; este skill agrega capa de scanning |
|
|
280
|
+
| `ai-runtime-security` | Skill hermano — runtime security (post-deploy) vs pipeline security (pre-deploy) |
|
|
281
|
+
|
|
282
|
+
## Referencias
|
|
283
|
+
|
|
284
|
+
- NIST CSF 2.0 PR.PS (Platform Security): https://www.nist.gov/cyberframework
|
|
285
|
+
- OWASP DevSecOps Maturity Model: https://owasp.org/www-project-devsecops-maturity-model/
|
|
286
|
+
- Semgrep rule registry: https://semgrep.dev/explore
|
|
287
|
+
- CodeQL (GitHub): https://codeql.github.com/
|
|
288
|
+
- OWASP ZAP: https://www.zaproxy.org/
|
|
289
|
+
- Trivy (Aqua Security): https://aquasecurity.github.io/trivy/
|
|
290
|
+
- gitleaks: https://github.com/gitleaks/gitleaks
|
|
291
|
+
- Skills origen (Apache 2.0) en `temp/Anthropic-Cybersecurity-Skills-main/skills/`:
|
|
292
|
+
- `integrating-sast-into-github-actions-pipeline/`
|
|
293
|
+
- `implementing-semgrep-for-custom-sast-rules/`
|
|
294
|
+
- `integrating-dast-with-owasp-zap-in-pipeline/`
|
|
295
|
+
- `implementing-secret-scanning-with-gitleaks/`
|
|
296
|
+
- `scanning-containers-with-trivy-in-cicd/`
|
|
297
|
+
|
|
298
|
+
## Checklist de verificación
|
|
299
|
+
|
|
300
|
+
- [ ] Gate 1 (secrets) activo en pre-commit + CI
|
|
301
|
+
- [ ] Gate 2 (SAST) con Semgrep + CodeQL, SARIF upload a GitHub Security
|
|
302
|
+
- [ ] Gate 3 (deps) con scanner del ecosistema + Dependabot/Renovate + license check
|
|
303
|
+
- [ ] Gate 4 (containers) con Trivy en todas las imágenes (dev/staging/prod)
|
|
304
|
+
- [ ] Gate 5 (DAST) con ZAP baseline en staging, autenticación configurada
|
|
305
|
+
- [ ] Quality gates bloquean por severidad (CRITICAL/HIGH), no por cantidad total
|
|
306
|
+
- [ ] Reglas custom de Semgrep con fixtures positivas y negativas verificables con `semgrep --test`
|
|
307
|
+
- [ ] Suppresiones con fecha de revisión y justificación
|
|
308
|
+
- [ ] Dashboard de tendencias (no solo gates) para visibilidad a largo plazo
|
|
309
|
+
- [ ] Alertas activas de hallazgos NEW (no solo dashboards pasivos)
|