@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,400 @@
|
|
|
1
|
+
# Regla: Diseño de APIs REST
|
|
2
|
+
|
|
3
|
+
Esta regla es OBLIGATORIA para toda API REST expuesta, ya sea pública o interna.
|
|
4
|
+
Una API mal diseñada es difícil de versionar, de mantener y de consumir.
|
|
5
|
+
El costo de corregir un contrato de API en producción es enormemente más alto
|
|
6
|
+
que diseñarlo bien desde el inicio. Ningún endpoint se considera listo si viola
|
|
7
|
+
cualquiera de los puntos aquí listados.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Versionado obligatorio con prefijo de URL
|
|
12
|
+
|
|
13
|
+
Toda API debe incluir el número de versión en la URL desde el primer endpoint.
|
|
14
|
+
|
|
15
|
+
- El versionado va en el prefijo de la URL como número entero:
|
|
16
|
+
`/v1/`, `/v2/`, `/v3/`, etc.
|
|
17
|
+
- Formato correcto:
|
|
18
|
+
```
|
|
19
|
+
https://api.miapp.com/v1/usuarios
|
|
20
|
+
https://api.miapp.com/v1/pedidos/123/items
|
|
21
|
+
```
|
|
22
|
+
- Formato incorrecto:
|
|
23
|
+
```
|
|
24
|
+
https://api.miapp.com/usuarios (sin versión — imposible de versionar después)
|
|
25
|
+
https://api.miapp.com/v1.2/usuarios (versión minor en URL — innecesariamente granular)
|
|
26
|
+
https://api.miapp.com/usuarios?v=1 (versión en query param — rompe el caching)
|
|
27
|
+
```
|
|
28
|
+
- El versionado en headers (`API-Version: 1`) se permite como mecanismo secundario
|
|
29
|
+
pero NUNCA como el único — los logs, el caching y los proxies operan sobre URLs.
|
|
30
|
+
- Al lanzar una nueva versión major (`/v2/`), mantener `/v1/` funcional con un
|
|
31
|
+
período de deprecación documentado de mínimo 6 meses.
|
|
32
|
+
- Comunicar la deprecación en los headers de respuesta:
|
|
33
|
+
`Deprecation: true`, `Sunset: [fecha]`, `Link: </v2/usuarios>; rel="successor-version"`
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Respuestas consistentes con envelope estándar
|
|
38
|
+
|
|
39
|
+
Todas las respuestas de la API deben seguir el mismo formato de envelope.
|
|
40
|
+
|
|
41
|
+
### Respuesta exitosa con un objeto
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"data": {
|
|
46
|
+
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
47
|
+
"nombre": "Juan Pérez",
|
|
48
|
+
"email": "juan@ejemplo.com"
|
|
49
|
+
},
|
|
50
|
+
"meta": {
|
|
51
|
+
"request_id": "req_abc123",
|
|
52
|
+
"timestamp": "2026-03-25T14:30:00Z",
|
|
53
|
+
"version": "1.0"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Respuesta exitosa con lista (paginada)
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"data": [...],
|
|
63
|
+
"meta": {
|
|
64
|
+
"request_id": "req_abc123",
|
|
65
|
+
"timestamp": "2026-03-25T14:30:00Z",
|
|
66
|
+
"total": 150,
|
|
67
|
+
"page": 1,
|
|
68
|
+
"per_page": 20,
|
|
69
|
+
"has_next": true,
|
|
70
|
+
"has_prev": false
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Respuesta de error
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"errors": [
|
|
80
|
+
{
|
|
81
|
+
"code": "VALIDATION_ERROR",
|
|
82
|
+
"message": "El campo 'email' no tiene formato válido",
|
|
83
|
+
"field": "email",
|
|
84
|
+
"detail": "El valor 'juan-sin-arroba' no es una dirección de correo electrónico"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"meta": {
|
|
88
|
+
"request_id": "req_abc123",
|
|
89
|
+
"timestamp": "2026-03-25T14:30:00Z"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- NUNCA devolver `{"success": true, "data": [...]}` — usar el status HTTP para indicar éxito.
|
|
95
|
+
- NUNCA devolver `{"error": "algo falló"}` sin código de error y detalle.
|
|
96
|
+
- El campo `meta.request_id` es OBLIGATORIO — permite correlacionar logs con errores reportados por clientes.
|
|
97
|
+
- El campo `data` puede ser `null` en respuestas 204 No Content.
|
|
98
|
+
- En FastAPI: crear un schema `APIResponse[T]` genérico y usarlo en todos los endpoints.
|
|
99
|
+
- En Express/NestJS: crear un interceptor o middleware que envuelva todas las respuestas.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Paginación obligatoria en endpoints de listado
|
|
104
|
+
|
|
105
|
+
Ningún endpoint que devuelva una colección puede hacerlo sin paginación.
|
|
106
|
+
|
|
107
|
+
- Todo endpoint que devuelva un array DEBE soportar paginación. Sin excepción.
|
|
108
|
+
Sin paginación, la base de datos crece y el endpoint eventualmente colapsa.
|
|
109
|
+
|
|
110
|
+
### Paginación basada en cursor (preferida para listas grandes o en tiempo real)
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
GET /v1/pedidos?cursor=eyJpZCI6MTIzfQ==&limit=20
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Ventajas: consistente bajo inserciones concurrentes, eficiente para grandes datasets.
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"data": [...],
|
|
121
|
+
"meta": {
|
|
122
|
+
"next_cursor": "eyJpZCI6MTQzfQ==",
|
|
123
|
+
"prev_cursor": "eyJpZCI6MTAzfQ==",
|
|
124
|
+
"has_next": true,
|
|
125
|
+
"has_prev": true,
|
|
126
|
+
"limit": 20
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Paginación por offset (aceptable para datasets pequeños y UIs con número de página)
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
GET /v1/productos?page=3&per_page=20
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"data": [...],
|
|
140
|
+
"meta": {
|
|
141
|
+
"page": 3,
|
|
142
|
+
"per_page": 20,
|
|
143
|
+
"total": 150,
|
|
144
|
+
"total_pages": 8,
|
|
145
|
+
"has_next": true,
|
|
146
|
+
"has_prev": true
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
- El `per_page` máximo es 100 registros. NUNCA permitir devolver registros ilimitados.
|
|
152
|
+
- El `per_page` por defecto es 20 si no se especifica.
|
|
153
|
+
- Si el cliente pide un `per_page` mayor al máximo, devolver el máximo silenciosamente
|
|
154
|
+
o devolver 400 Bad Request con mensaje explicativo. Documentar cuál de las dos.
|
|
155
|
+
- NUNCA usar `limit=0` para devolver todos los registros — eso rompe el propósito de la paginación.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Filtros y ordenamiento estandarizados
|
|
160
|
+
|
|
161
|
+
Los parámetros de filtrado y ordenamiento siguen convenciones uniformes en toda la API.
|
|
162
|
+
|
|
163
|
+
### Filtros
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
GET /v1/pedidos?estatus=pendiente&cliente_id=abc123&fecha_desde=2026-01-01&fecha_hasta=2026-03-31
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
- Los filtros van como query parameters en GET. NUNCA en el body de un GET.
|
|
170
|
+
- Los nombres de los filtros coinciden con los nombres de campo del recurso.
|
|
171
|
+
- Para rangos: usar sufijos `_desde` y `_hasta` (o `_min` / `_max` para números).
|
|
172
|
+
- Para múltiples valores del mismo campo: repetir el parámetro o usar coma como separador.
|
|
173
|
+
Documentar cuál se usa. No mezclar ambas convenciones:
|
|
174
|
+
```
|
|
175
|
+
?estatus=activo&estatus=pendiente (repetición — más estándar)
|
|
176
|
+
?estatus=activo,pendiente (coma — más compacto)
|
|
177
|
+
```
|
|
178
|
+
- Los filtros que no existen o tienen valores inválidos devuelven 400 Bad Request
|
|
179
|
+
con un mensaje que indica exactamente cuál parámetro es inválido.
|
|
180
|
+
|
|
181
|
+
### Ordenamiento
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
GET /v1/pedidos?sort=fecha_creacion&order=desc
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
- Parámetro `sort`: nombre del campo por el que ordenar.
|
|
188
|
+
- Parámetro `order`: `asc` (por defecto) o `desc`.
|
|
189
|
+
- Para ordenamiento multi-campo:
|
|
190
|
+
```
|
|
191
|
+
GET /v1/pedidos?sort=estatus,fecha_creacion&order=asc,desc
|
|
192
|
+
```
|
|
193
|
+
- Si se pide ordenar por un campo que no existe: 400 Bad Request.
|
|
194
|
+
- Si se pide ordenar por un campo que no es indexado y la tabla tiene >10k registros,
|
|
195
|
+
documentar esta limitación y devolver un error descriptivo.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## HTTP status codes correctos
|
|
200
|
+
|
|
201
|
+
El status code es la primera línea de comunicación del resultado. Usarlo correctamente.
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
200 OK — GET exitoso, PUT/PATCH exitoso con body en respuesta
|
|
205
|
+
201 Created — POST exitoso que crea un recurso. Incluir header Location con URL del nuevo recurso
|
|
206
|
+
204 No Content — DELETE exitoso, PUT/PATCH exitoso sin body
|
|
207
|
+
400 Bad Request — Error de validación, parámetro inválido, body malformado
|
|
208
|
+
401 Unauthorized — No autenticado (falta token o token inválido)
|
|
209
|
+
403 Forbidden — Autenticado pero sin permiso para este recurso/acción
|
|
210
|
+
404 Not Found — El recurso no existe
|
|
211
|
+
409 Conflict — Conflicto de estado (ej: email duplicado, stock insuficiente)
|
|
212
|
+
410 Gone — El recurso existió pero fue eliminado permanentemente
|
|
213
|
+
422 Unprocessable Entity — La sintaxis es válida pero la semántica falla (ej: fecha de inicio > fecha de fin)
|
|
214
|
+
429 Too Many Requests — Rate limit alcanzado
|
|
215
|
+
500 Internal Server Error — Error interno no esperado (con request_id para seguimiento)
|
|
216
|
+
503 Service Unavailable — Servicio temporalmente no disponible (mantenimiento, dependencia caída)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Errores comunes a EVITAR:
|
|
220
|
+
- NUNCA devolver 200 con `{"success": false}` — usar el status code correcto.
|
|
221
|
+
- NUNCA devolver 500 para errores de validación de input del cliente — esos son 400/422.
|
|
222
|
+
- NUNCA devolver 404 cuando el problema es falta de permisos — eso es 403.
|
|
223
|
+
(Excepción: cuando revelar la existencia del recurso es un problema de seguridad)
|
|
224
|
+
- NUNCA devolver 401 cuando el usuario está autenticado pero no tiene permiso — eso es 403.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Rate limiting obligatorio en endpoints públicos
|
|
229
|
+
|
|
230
|
+
Todo endpoint accesible sin autenticación o con autenticación débil debe tener rate limiting.
|
|
231
|
+
|
|
232
|
+
- Los endpoints públicos (sin autenticación) tienen rate limiting estricto:
|
|
233
|
+
Máximo 60 requests por minuto por IP como punto de partida.
|
|
234
|
+
Ajustar según el caso de uso real.
|
|
235
|
+
- Los endpoints autenticados tienen rate limiting por usuario/token:
|
|
236
|
+
Máximo 1000 requests por minuto por usuario autenticado.
|
|
237
|
+
- Los endpoints de autenticación (login, registro, recuperación de contraseña)
|
|
238
|
+
tienen rate limiting especialmente estricto:
|
|
239
|
+
Máximo 5 intentos por minuto por IP, con bloqueo temporal de 15 minutos al superar.
|
|
240
|
+
- Comunicar el rate limiting en headers de respuesta:
|
|
241
|
+
```
|
|
242
|
+
X-RateLimit-Limit: 60
|
|
243
|
+
X-RateLimit-Remaining: 45
|
|
244
|
+
X-RateLimit-Reset: 1711379400
|
|
245
|
+
Retry-After: 30 (solo en respuestas 429)
|
|
246
|
+
```
|
|
247
|
+
- La respuesta al superar el rate limit es siempre 429 Too Many Requests con body:
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"errors": [{
|
|
251
|
+
"code": "RATE_LIMIT_EXCEEDED",
|
|
252
|
+
"message": "Demasiadas solicitudes. Intenta de nuevo en 30 segundos.",
|
|
253
|
+
"detail": "Límite: 60 solicitudes por minuto"
|
|
254
|
+
}]
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
- El rate limiting se implementa en el gateway o proxy (nginx, Kong, AWS API Gateway),
|
|
258
|
+
no en la lógica de aplicación. La lógica de aplicación es el último recurso.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## CORS configurado explícitamente
|
|
263
|
+
|
|
264
|
+
El navegador solo permite requests cross-origin si el servidor lo autoriza explícitamente.
|
|
265
|
+
|
|
266
|
+
- La lista de orígenes permitidos se define por ambiente y se configura desde
|
|
267
|
+
variables de entorno, NUNCA hardcodeada en el código:
|
|
268
|
+
```python
|
|
269
|
+
# FastAPI
|
|
270
|
+
origins = os.getenv("CORS_ORIGINS", "").split(",")
|
|
271
|
+
app.add_middleware(CORSMiddleware, allow_origins=origins, ...)
|
|
272
|
+
```
|
|
273
|
+
- NUNCA usar `allow_origins=["*"]` en producción. Esto permite que cualquier sitio
|
|
274
|
+
haga requests a la API en nombre del usuario.
|
|
275
|
+
- `allow_credentials=True` solo cuando sea necesario (cuando se usan cookies de sesión).
|
|
276
|
+
Incompatible con `allow_origins=["*"]`.
|
|
277
|
+
- Los métodos permitidos deben ser los mínimos necesarios:
|
|
278
|
+
APIs de solo lectura: `["GET", "OPTIONS"]`
|
|
279
|
+
APIs completas: `["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]`
|
|
280
|
+
- Los headers permitidos deben listarse explícitamente si no se usan los estándar.
|
|
281
|
+
- El preflight request (OPTIONS) debe responder correctamente antes de que el browser
|
|
282
|
+
envíe el request real.
|
|
283
|
+
- En APIs públicas de lectura sin credenciales, `allow_origins=["*"]` puede ser
|
|
284
|
+
aceptable. Documentar explícitamente por qué se decidió así.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Documentación OpenAPI siempre actualizada
|
|
289
|
+
|
|
290
|
+
La documentación es parte del contrato de la API. Si está desactualizada, no es documentación.
|
|
291
|
+
|
|
292
|
+
- La especificación OpenAPI debe generarse desde el código, no escribirse manualmente.
|
|
293
|
+
En FastAPI: se genera automáticamente desde los schemas y decoradores.
|
|
294
|
+
En Express: usar `swagger-jsdoc` o `tsoa`.
|
|
295
|
+
- Cada endpoint debe tener:
|
|
296
|
+
- `summary`: descripción corta de qué hace
|
|
297
|
+
- `description`: detalles, casos edge, consideraciones de negocio
|
|
298
|
+
- `tags`: agrupación por dominio (`Usuarios`, `Pedidos`, `Auth`)
|
|
299
|
+
- Todos los parámetros documentados con tipo, formato y si son requeridos
|
|
300
|
+
- Todos los posibles status codes de respuesta con su schema
|
|
301
|
+
- Ejemplos de request y response para los casos principales
|
|
302
|
+
- Los schemas de request y response deben documentar:
|
|
303
|
+
- Qué campos son requeridos vs opcionales
|
|
304
|
+
- Restricciones de longitud, formato y dominio de valores
|
|
305
|
+
- Descripciones en español claras para cada campo
|
|
306
|
+
- La documentación está disponible en `/docs` (Swagger UI) y `/redoc` en ambientes
|
|
307
|
+
de desarrollo y staging. En producción, solo si la API es pública.
|
|
308
|
+
- Los cambios de API sin actualizar la documentación no pasan code review.
|
|
309
|
+
- Los schemas de OpenAPI se validan en CI para detectar documentación rota.
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Error responses con código, mensaje y detalle
|
|
314
|
+
|
|
315
|
+
Los errores deben ser diagnósticables por el cliente sin acceso a los logs del servidor.
|
|
316
|
+
|
|
317
|
+
Cada error response incluye:
|
|
318
|
+
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"errors": [
|
|
322
|
+
{
|
|
323
|
+
"code": "CÓDIGO_EN_SNAKE_CASE_MAYÚSCULAS",
|
|
324
|
+
"message": "Mensaje legible por humanos en español",
|
|
325
|
+
"field": "nombre_del_campo",
|
|
326
|
+
"detail": "Información adicional para debugging"
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
"meta": {
|
|
330
|
+
"request_id": "req_abc123",
|
|
331
|
+
"timestamp": "2026-03-25T14:30:00Z"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
- `code`: identificador de máquina para el tipo de error. En SCREAMING_SNAKE_CASE.
|
|
337
|
+
Ejemplos: `VALIDATION_ERROR`, `RESOURCE_NOT_FOUND`, `INSUFFICIENT_STOCK`,
|
|
338
|
+
`EMAIL_ALREADY_EXISTS`, `INVALID_CREDENTIALS`, `RATE_LIMIT_EXCEEDED`.
|
|
339
|
+
- `message`: mensaje en lenguaje natural, legible por el usuario final si aplica.
|
|
340
|
+
Sin jerga técnica. NUNCA exponer stack traces o nombres de tablas de BD.
|
|
341
|
+
- `field`: nombre del campo que causó el error (solo para errores de validación).
|
|
342
|
+
Si el error no está asociado a un campo específico, omitir este campo.
|
|
343
|
+
- `detail`: información técnica adicional para el desarrollador cliente. Puede ser
|
|
344
|
+
más técnico que `message`. Opcional.
|
|
345
|
+
- Para errores de validación con múltiples campos inválidos, devolver TODOS los errores
|
|
346
|
+
en el array, no solo el primero. El cliente necesita corregir todo de una vez.
|
|
347
|
+
- Para errores 500: el mensaje es genérico ("Error interno del servidor").
|
|
348
|
+
El `request_id` permite correlacionar con los logs del servidor donde está el detalle real.
|
|
349
|
+
NUNCA exponer detalles del error interno al cliente en producción.
|
|
350
|
+
- Los códigos de error deben estar documentados en la spec de OpenAPI.
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## Nomenclatura de recursos y endpoints
|
|
355
|
+
|
|
356
|
+
Las URLs deben ser predecibles, consistentes y orientadas a recursos, no a acciones.
|
|
357
|
+
|
|
358
|
+
- Los recursos se expresan en sustantivos en plural, en español (o inglés, pero consistente):
|
|
359
|
+
`/v1/usuarios`, `/v1/pedidos`, `/v1/productos`
|
|
360
|
+
- Las acciones CRUD mapean a métodos HTTP, no a verbos en la URL:
|
|
361
|
+
```
|
|
362
|
+
GET /v1/pedidos — listar pedidos
|
|
363
|
+
POST /v1/pedidos — crear pedido
|
|
364
|
+
GET /v1/pedidos/123 — obtener pedido específico
|
|
365
|
+
PUT /v1/pedidos/123 — reemplazar pedido completo
|
|
366
|
+
PATCH /v1/pedidos/123 — actualizar campos específicos del pedido
|
|
367
|
+
DELETE /v1/pedidos/123 — eliminar pedido
|
|
368
|
+
```
|
|
369
|
+
- Los sub-recursos se expresan anidando en la URL:
|
|
370
|
+
```
|
|
371
|
+
GET /v1/pedidos/123/items — items del pedido 123
|
|
372
|
+
POST /v1/pedidos/123/items — agregar item al pedido 123
|
|
373
|
+
```
|
|
374
|
+
- Para acciones que no mapean limpiamente a CRUD, usar sub-recursos orientados
|
|
375
|
+
a la acción como nombre:
|
|
376
|
+
```
|
|
377
|
+
POST /v1/pedidos/123/cancelar — cancelar el pedido 123
|
|
378
|
+
POST /v1/usuarios/123/activar — activar cuenta del usuario 123
|
|
379
|
+
```
|
|
380
|
+
Preferir esto a meter `?action=cancelar` en query params.
|
|
381
|
+
- Los IDs en las URLs deben ser UUIDs o IDs opacos. NUNCA IDs secuenciales que
|
|
382
|
+
exponen el volumen de datos del sistema.
|
|
383
|
+
- Las URLs son case-insensitive por convención, pero usar siempre minúsculas con guiones:
|
|
384
|
+
`/v1/tipos-de-pago` no `/v1/TiposDePago` ni `/v1/tipos_de_pago`.
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Checklist antes de exponer un endpoint nuevo
|
|
389
|
+
|
|
390
|
+
- [ ] La URL sigue la convención de recursos y tiene el prefijo `/v{N}/`
|
|
391
|
+
- [ ] El método HTTP es el correcto para la operación (GET no modifica datos)
|
|
392
|
+
- [ ] La respuesta usa el envelope estándar `{data, meta}` o `{errors, meta}`
|
|
393
|
+
- [ ] El endpoint de listado tiene paginación implementada
|
|
394
|
+
- [ ] El status code de respuesta es el correcto para cada caso
|
|
395
|
+
- [ ] Los errores de validación devuelven 400/422 con todos los campos inválidos
|
|
396
|
+
- [ ] El endpoint tiene autenticación si maneja datos no públicos
|
|
397
|
+
- [ ] El endpoint está documentado en OpenAPI con todos los parámetros y responses
|
|
398
|
+
- [ ] El rate limiting está configurado (si es público o de autenticación)
|
|
399
|
+
- [ ] El CORS está configurado correctamente para los orígenes esperados
|
|
400
|
+
- [ ] Los IDs expuestos son UUIDs u opacos, no IDs secuenciales
|