@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,321 @@
|
|
|
1
|
+
# AWS — Referencia Completa de Servicios
|
|
2
|
+
|
|
3
|
+
## S3 — Almacenamiento Seguro
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
import boto3
|
|
7
|
+
from botocore.exceptions import ClientError
|
|
8
|
+
|
|
9
|
+
cliente_s3 = boto3.client('s3')
|
|
10
|
+
|
|
11
|
+
# OBLIGATORIO: cifrado en reposo + versionado + bloquear acceso público
|
|
12
|
+
def configurar_bucket_seguro(nombre_bucket: str) -> None:
|
|
13
|
+
s3 = boto3.client('s3')
|
|
14
|
+
|
|
15
|
+
# Bloquear acceso público (SIEMPRE para datos sensibles)
|
|
16
|
+
s3.put_public_access_block(
|
|
17
|
+
Bucket=nombre_bucket,
|
|
18
|
+
PublicAccessBlockConfiguration={
|
|
19
|
+
'BlockPublicAcls': True,
|
|
20
|
+
'IgnorePublicAcls': True,
|
|
21
|
+
'BlockPublicPolicy': True,
|
|
22
|
+
'RestrictPublicBuckets': True,
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
# Cifrado AES-256 o KMS
|
|
27
|
+
s3.put_bucket_encryption(
|
|
28
|
+
Bucket=nombre_bucket,
|
|
29
|
+
ServerSideEncryptionConfiguration={
|
|
30
|
+
'Rules': [{'ApplyServerSideEncryptionByDefault': {
|
|
31
|
+
'SSEAlgorithm': 'aws:kms',
|
|
32
|
+
'KMSMasterKeyID': 'arn:aws:kms:...',
|
|
33
|
+
}}]
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Versionado (recuperación ante errores)
|
|
38
|
+
s3.put_bucket_versioning(
|
|
39
|
+
Bucket=nombre_bucket,
|
|
40
|
+
VersioningConfiguration={'Status': 'Enabled'}
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# URLs prefirmadas para descarga sin exponer bucket público
|
|
44
|
+
def generar_url_descarga(bucket: str, clave: str, segundos: int = 3600) -> str:
|
|
45
|
+
return cliente_s3.generate_presigned_url(
|
|
46
|
+
'get_object',
|
|
47
|
+
Params={'Bucket': bucket, 'Key': clave},
|
|
48
|
+
ExpiresIn=segundos,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Ciclo de vida — bajar costos moviendo a clases más baratas
|
|
52
|
+
lifecycle_policy = {
|
|
53
|
+
'Rules': [{
|
|
54
|
+
'ID': 'ArchivarDocumentosViejos',
|
|
55
|
+
'Status': 'Enabled',
|
|
56
|
+
'Transitions': [
|
|
57
|
+
{'Days': 30, 'StorageClass': 'STANDARD_IA'},
|
|
58
|
+
{'Days': 90, 'StorageClass': 'GLACIER'},
|
|
59
|
+
{'Days': 365, 'StorageClass': 'DEEP_ARCHIVE'},
|
|
60
|
+
],
|
|
61
|
+
'Expiration': {'Days': 2555}, # 7 años
|
|
62
|
+
}]
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## RDS — Base de Datos en Producción
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
# Configuración recomendada para PostgreSQL en RDS
|
|
72
|
+
rds_config = {
|
|
73
|
+
"DBInstanceClass": "db.t3.medium",
|
|
74
|
+
"Engine": "postgres",
|
|
75
|
+
"EngineVersion": "15.4",
|
|
76
|
+
"MultiAZ": True, # OBLIGATORIO en producción
|
|
77
|
+
"StorageEncrypted": True, # OBLIGATORIO
|
|
78
|
+
"BackupRetentionPeriod": 7,
|
|
79
|
+
"EnablePerformanceInsights": True,
|
|
80
|
+
"PerformanceInsightsRetentionPeriod": 7,
|
|
81
|
+
"MonitoringInterval": 60,
|
|
82
|
+
"DeletionProtection": True,
|
|
83
|
+
"StorageType": "gp3",
|
|
84
|
+
"Iops": 3000,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Connection pool recomendado para Python
|
|
88
|
+
DATABASE_URL = (
|
|
89
|
+
f"postgresql+asyncpg://{usuario}:{password}@{host}:{puerto}/{db}"
|
|
90
|
+
"?ssl=require"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Pool sizing: (núcleos_cpu * 2) + disco_efectivo
|
|
94
|
+
engine = create_async_engine(
|
|
95
|
+
DATABASE_URL,
|
|
96
|
+
pool_size=5,
|
|
97
|
+
max_overflow=10,
|
|
98
|
+
pool_pre_ping=True,
|
|
99
|
+
pool_recycle=3600,
|
|
100
|
+
)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Lambda — Funciones Serverless
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
import json
|
|
109
|
+
import logging
|
|
110
|
+
import os
|
|
111
|
+
from typing import Any
|
|
112
|
+
|
|
113
|
+
logger = logging.getLogger()
|
|
114
|
+
logger.setLevel(logging.INFO)
|
|
115
|
+
|
|
116
|
+
# Inicializar clientes FUERA del handler (reutilización en warm start)
|
|
117
|
+
import boto3
|
|
118
|
+
sqs = boto3.client('sqs')
|
|
119
|
+
s3 = boto3.client('s3')
|
|
120
|
+
|
|
121
|
+
def handler(event: dict, context: Any) -> dict:
|
|
122
|
+
"""Lambda handler para procesamiento de eventos SQS."""
|
|
123
|
+
logger.info("Evento recibido: %s registros", len(event.get('Records', [])))
|
|
124
|
+
|
|
125
|
+
errores = []
|
|
126
|
+
for record in event.get('Records', []):
|
|
127
|
+
try:
|
|
128
|
+
body = json.loads(record['body'])
|
|
129
|
+
procesar_registro(body)
|
|
130
|
+
except Exception as e:
|
|
131
|
+
logger.error("Error en record %s: %s", record['messageId'], e)
|
|
132
|
+
errores.append({'itemIdentifier': record['messageId']})
|
|
133
|
+
|
|
134
|
+
# Partial batch response — solo reintentar los que fallaron
|
|
135
|
+
return {'batchItemFailures': errores}
|
|
136
|
+
|
|
137
|
+
# Configuración recomendada
|
|
138
|
+
lambda_config = {
|
|
139
|
+
"timeout": 30,
|
|
140
|
+
"memory_size": 512,
|
|
141
|
+
"reserved_concurrency": 10,
|
|
142
|
+
"environment": {
|
|
143
|
+
"QUEUE_URL": "${ssm:/prod/cola-procesamiento}",
|
|
144
|
+
"LOG_LEVEL": "INFO",
|
|
145
|
+
},
|
|
146
|
+
"layers": ["arn:aws:lambda:us-east-1:...:layer:deps:5"],
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## ECS Fargate — Containers Administrados
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
# task-definition.json
|
|
156
|
+
{
|
|
157
|
+
"family": "api-nomina",
|
|
158
|
+
"networkMode": "awsvpc",
|
|
159
|
+
"requiresCompatibilities": ["FARGATE"],
|
|
160
|
+
"cpu": "512",
|
|
161
|
+
"memory": "1024",
|
|
162
|
+
"executionRoleArn": "arn:aws:iam::...:role/ecsTaskExecutionRole",
|
|
163
|
+
"taskRoleArn": "arn:aws:iam::...:role/ecsTaskRole",
|
|
164
|
+
"containerDefinitions": [{
|
|
165
|
+
"name": "api",
|
|
166
|
+
"image": "123456789.dkr.ecr.us-east-1.amazonaws.com/api-nomina:latest",
|
|
167
|
+
"portMappings": [{"containerPort": 8000, "protocol": "tcp"}],
|
|
168
|
+
"environment": [],
|
|
169
|
+
"secrets": [
|
|
170
|
+
{
|
|
171
|
+
"name": "DATABASE_URL",
|
|
172
|
+
"valueFrom": "arn:aws:secretsmanager:...:secret:prod/db-url"
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"logConfiguration": {
|
|
176
|
+
"logDriver": "awslogs",
|
|
177
|
+
"options": {
|
|
178
|
+
"awslogs-group": "/ecs/api-nomina",
|
|
179
|
+
"awslogs-region": "us-east-1",
|
|
180
|
+
"awslogs-stream-prefix": "ecs"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"healthCheck": {
|
|
184
|
+
"command": ["CMD-SHELL", "curl -f http://localhost:8000/health || exit 1"],
|
|
185
|
+
"interval": 30,
|
|
186
|
+
"timeout": 5,
|
|
187
|
+
"retries": 3,
|
|
188
|
+
"startPeriod": 60
|
|
189
|
+
}
|
|
190
|
+
}]
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## SQS/SNS — Mensajería Desacoplada
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
import boto3
|
|
200
|
+
import json
|
|
201
|
+
from typing import Any
|
|
202
|
+
|
|
203
|
+
sqs = boto3.client('sqs', region_name='us-east-1')
|
|
204
|
+
sns = boto3.client('sns', region_name='us-east-1')
|
|
205
|
+
|
|
206
|
+
QUEUE_URL = os.environ['QUEUE_URL']
|
|
207
|
+
|
|
208
|
+
def enviar_mensaje(payload: dict, grupo_id: str | None = None) -> str:
|
|
209
|
+
"""Enviar mensaje a SQS. grupo_id para FIFO queues."""
|
|
210
|
+
kwargs: dict[str, Any] = {
|
|
211
|
+
'QueueUrl': QUEUE_URL,
|
|
212
|
+
'MessageBody': json.dumps(payload, ensure_ascii=False),
|
|
213
|
+
'MessageAttributes': {
|
|
214
|
+
'ContentType': {
|
|
215
|
+
'StringValue': 'application/json',
|
|
216
|
+
'DataType': 'String',
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
}
|
|
220
|
+
if grupo_id:
|
|
221
|
+
import uuid
|
|
222
|
+
kwargs['MessageGroupId'] = grupo_id
|
|
223
|
+
kwargs['MessageDeduplicationId'] = str(uuid.uuid4())
|
|
224
|
+
|
|
225
|
+
respuesta = sqs.send_message(**kwargs)
|
|
226
|
+
return respuesta['MessageId']
|
|
227
|
+
|
|
228
|
+
def procesar_mensajes(max_mensajes: int = 10) -> None:
|
|
229
|
+
"""Polling de mensajes con visibilidad extendida."""
|
|
230
|
+
mensajes = sqs.receive_message(
|
|
231
|
+
QueueUrl=QUEUE_URL,
|
|
232
|
+
MaxNumberOfMessages=max_mensajes,
|
|
233
|
+
WaitTimeSeconds=20,
|
|
234
|
+
VisibilityTimeout=60,
|
|
235
|
+
AttributeNames=['All'],
|
|
236
|
+
).get('Messages', [])
|
|
237
|
+
|
|
238
|
+
for msg in mensajes:
|
|
239
|
+
try:
|
|
240
|
+
body = json.loads(msg['Body'])
|
|
241
|
+
procesar(body)
|
|
242
|
+
sqs.delete_message(
|
|
243
|
+
QueueUrl=QUEUE_URL,
|
|
244
|
+
ReceiptHandle=msg['ReceiptHandle'],
|
|
245
|
+
)
|
|
246
|
+
except Exception as e:
|
|
247
|
+
logger.error("Error procesando mensaje %s: %s", msg['MessageId'], e)
|
|
248
|
+
|
|
249
|
+
# Dead Letter Queue — SIEMPRE configurar para auditoría
|
|
250
|
+
dlq_config = {
|
|
251
|
+
'deadLetterTargetArn': 'arn:aws:sqs:...:cola-nomina-dlq',
|
|
252
|
+
'maxReceiveCount': '3',
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## CloudFront — CDN y Caché
|
|
259
|
+
|
|
260
|
+
```python
|
|
261
|
+
# Para frontend SPA en S3 + CloudFront
|
|
262
|
+
distribution_config = {
|
|
263
|
+
"Origins": [{
|
|
264
|
+
"DomainName": "mi-bucket.s3.amazonaws.com",
|
|
265
|
+
"S3OriginConfig": {"OriginAccessIdentity": "origin-access-identity/cloudfront/..."},
|
|
266
|
+
}],
|
|
267
|
+
"DefaultCacheBehavior": {
|
|
268
|
+
"ViewerProtocolPolicy": "redirect-to-https",
|
|
269
|
+
"CachePolicyId": "...",
|
|
270
|
+
"ResponseHeadersPolicyId": "...",
|
|
271
|
+
},
|
|
272
|
+
"CustomErrorResponses": [
|
|
273
|
+
{"ErrorCode": 404, "ResponseCode": 200, "ResponsePagePath": "/index.html"},
|
|
274
|
+
{"ErrorCode": 403, "ResponseCode": 200, "ResponsePagePath": "/index.html"},
|
|
275
|
+
],
|
|
276
|
+
"HttpVersion": "http2and3",
|
|
277
|
+
"PriceClass": "PriceClass_100",
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Optimización de Costos
|
|
284
|
+
|
|
285
|
+
### Estrategias principales
|
|
286
|
+
|
|
287
|
+
| Servicio | Optimización | Ahorro estimado |
|
|
288
|
+
|----------|-------------|-----------------|
|
|
289
|
+
| EC2/ECS | Spot instances para workers | 60-90% |
|
|
290
|
+
| EC2 | Reserved instances (1-3 años) | 30-60% |
|
|
291
|
+
| RDS | Stop en entornos de dev/staging | 60-70% |
|
|
292
|
+
| S3 | Lifecycle policies | 40-80% en archivos viejos |
|
|
293
|
+
| Lambda | Ajustar memoria (benchmark) | 20-50% |
|
|
294
|
+
| CloudFront | Comprimir respuestas | Reduce transferencia |
|
|
295
|
+
| Data Transfer | Mantener tráfico en misma AZ/región | Evita cargos |
|
|
296
|
+
|
|
297
|
+
```python
|
|
298
|
+
# AWS Cost Anomaly Detection — alertas automáticas
|
|
299
|
+
import boto3
|
|
300
|
+
|
|
301
|
+
ce = boto3.client('ce', region_name='us-east-1')
|
|
302
|
+
|
|
303
|
+
def crear_monitor_costos(email: str) -> None:
|
|
304
|
+
monitor = ce.create_anomaly_monitor(
|
|
305
|
+
AnomalyMonitor={
|
|
306
|
+
'MonitorName': 'MonitorGeneral',
|
|
307
|
+
'MonitorType': 'DIMENSIONAL',
|
|
308
|
+
'MonitorDimension': 'SERVICE',
|
|
309
|
+
}
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
ce.create_anomaly_subscription(
|
|
313
|
+
AnomalySubscription={
|
|
314
|
+
'MonitorArnList': [monitor['MonitorArn']],
|
|
315
|
+
'Subscribers': [{'Address': email, 'Type': 'EMAIL'}],
|
|
316
|
+
'Threshold': 20.0,
|
|
317
|
+
'Frequency': 'DAILY',
|
|
318
|
+
'SubscriptionName': 'AlertasCostoDiario',
|
|
319
|
+
}
|
|
320
|
+
)
|
|
321
|
+
```
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: compactacion-contexto
|
|
3
|
+
description: Anti-context-rot. Detectar cuándo compactar el contexto, guardar estado antes de compactar, técnicas de resumen progresivo y handoff limpio entre contextos. Recalibrado para el tokenizer de Opus 4.7 (+15-30% tokens vs 4.6).
|
|
4
|
+
version: "1.1.0"
|
|
5
|
+
herramientasPermitidas: [Read]
|
|
6
|
+
exclusiones:
|
|
7
|
+
- "No cargar si el contexto está por debajo del 50% y no hay señales cualitativas de degradación — compactar sin necesidad solo interrumpe el flujo."
|
|
8
|
+
- "No cargar para compactar archivos grandes de código fuente; los archivos se leen bajo demanda con Read, no se mantienen en contexto activo."
|
|
9
|
+
- "No cargar en medio de una tarea atómica que aún no terminó — la compactación debe ocurrir en puntos de completitud, no a mitad de una implementación."
|
|
10
|
+
- "No cargar para gestionar el presupuesto del context-builder entre sesiones; para eso usar `context-builder`."
|
|
11
|
+
evolvable: true # default para skill estandar
|
|
12
|
+
---
|
|
13
|
+
# Compactación de Contexto
|
|
14
|
+
|
|
15
|
+
## El problema: context-rot
|
|
16
|
+
|
|
17
|
+
Un contexto largo y sin estructura se degrada con el tiempo:
|
|
18
|
+
- Las instrucciones tempranas quedan enterradas y se olvidan.
|
|
19
|
+
- El modelo pierde el hilo de qué se hizo y qué falta.
|
|
20
|
+
- Las respuestas se vuelven repetitivas o contradictorias.
|
|
21
|
+
- El rendimiento cae porque el contexto útil se diluye en tokens de ruido.
|
|
22
|
+
|
|
23
|
+
**Context-rot** es el fenómeno donde un contexto largo produce peores resultados que
|
|
24
|
+
uno compacto y fresco con el estado correcto cargado.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Señales de que es hora de compactar
|
|
29
|
+
|
|
30
|
+
### Señales cuantitativas
|
|
31
|
+
- La ventana de contexto está al **50% o más** de su límite.
|
|
32
|
+
(Umbral bajado desde 60% por el tokenizer de Opus 4.7, que produce 1.0–1.35×
|
|
33
|
+
más tokens para el mismo contenido que Opus 4.6. El contexto útil se llena
|
|
34
|
+
antes aunque la conversación tenga el mismo tamaño aparente.)
|
|
35
|
+
- La conversación lleva más de **30 turnos** sobre el mismo proyecto.
|
|
36
|
+
(Bajado desde 40 por la misma razón — el volumen efectivo por turno es mayor.)
|
|
37
|
+
- Se han cargado más de 5 archivos grandes sin eliminar contexto anterior.
|
|
38
|
+
|
|
39
|
+
### Señales cualitativas
|
|
40
|
+
- El agente empieza a repetir preguntas ya respondidas.
|
|
41
|
+
- El agente olvida decisiones tomadas hace 10+ turnos.
|
|
42
|
+
- Las respuestas son más genéricas y menos específicas al proyecto.
|
|
43
|
+
- El agente contradice algo que él mismo propuso anteriormente.
|
|
44
|
+
- La latencia de respuesta aumenta notablemente.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Protocolo: guardar estado ANTES de compactar
|
|
49
|
+
|
|
50
|
+
Antes de iniciar cualquier compactación, el agente DEBE persistir el estado en archivos.
|
|
51
|
+
El estado en la memoria del contexto desaparece; el estado en disco persiste.
|
|
52
|
+
|
|
53
|
+
### Archivo ESTADO.md — estado de ejecución
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
# ESTADO.md — Estado del proyecto al 2026-03-25T14:32:00
|
|
57
|
+
|
|
58
|
+
## Fase actual
|
|
59
|
+
- Fase: 3 — Implementación de módulo de reportes
|
|
60
|
+
- Sprint: 2 de 3
|
|
61
|
+
- Última tarea completada: Endpoint GET /reportes/{id}
|
|
62
|
+
- Próxima tarea: Endpoint POST /reportes (slice 3.2)
|
|
63
|
+
|
|
64
|
+
## Decisiones arquitectónicas tomadas
|
|
65
|
+
- Se usa PostgreSQL con JSONB para metadatos de reportes (no MongoDB).
|
|
66
|
+
- Autenticación via JWT con refresh tokens, no sesiones.
|
|
67
|
+
- El frontend es Angular standalone, sin NgModules.
|
|
68
|
+
- Paginación por cursor, no por offset.
|
|
69
|
+
|
|
70
|
+
## Archivos modificados en esta sesión
|
|
71
|
+
- backend/app/routers/reportes.py (creado)
|
|
72
|
+
- backend/app/schemas/reporte.py (creado)
|
|
73
|
+
- backend/app/models/reporte.py (modificado: campo metadata JSONB)
|
|
74
|
+
- frontend/src/app/reportes/reportes.component.ts (creado)
|
|
75
|
+
|
|
76
|
+
## Problemas conocidos / deuda técnica
|
|
77
|
+
- El endpoint DELETE /reportes/{id} falta validación de permisos (ticket #47)
|
|
78
|
+
- La migración 003_reportes.py necesita revisión manual antes de producción
|
|
79
|
+
|
|
80
|
+
## Tests en estado rojo
|
|
81
|
+
- test_reporte_exportar_pdf → falta dependencia wkhtmltopdf en CI
|
|
82
|
+
|
|
83
|
+
## Contexto del negocio relevante
|
|
84
|
+
- Los reportes son propiedad del usuario que los crea (no del admin).
|
|
85
|
+
- Los reportes tienen un TTL de 30 días, luego se archivan.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Archivo DECISIONS.md — registro de decisiones
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
# DECISIONS.md
|
|
92
|
+
|
|
93
|
+
## 2026-03-25 — Paginación por cursor
|
|
94
|
+
**Contexto**: El endpoint GET /reportes necesitaba paginación.
|
|
95
|
+
**Opciones evaluadas**: offset/limit, cursor, keyset.
|
|
96
|
+
**Decisión**: Cursor basado en (created_at, id) para estabilidad con datos en tiempo real.
|
|
97
|
+
**Consecuencia**: Los clientes no pueden saltar a página N directamente.
|
|
98
|
+
|
|
99
|
+
## 2026-03-24 — JSONB para metadatos
|
|
100
|
+
**Contexto**: Los reportes tienen atributos variables por tipo.
|
|
101
|
+
**Decisión**: Un campo `metadata JSONB` en lugar de tabla EAV.
|
|
102
|
+
**Consecuencia**: Queries de metadatos requieren índices GIN.
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Técnicas de resumen progresivo
|
|
108
|
+
|
|
109
|
+
### Técnica 1: Resumen en capas
|
|
110
|
+
|
|
111
|
+
No resumir todo en un solo párrafo plano. Usar capas de detalle:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
Nivel 0 (1 línea): "Construyendo API REST de reportes con FastAPI + PostgreSQL."
|
|
115
|
+
Nivel 1 (5 líneas): qué fases hay, en cuál estamos, cuál es el siguiente paso.
|
|
116
|
+
Nivel 2 (20 líneas): decisiones clave, archivos importantes, problemas abiertos.
|
|
117
|
+
Nivel 3 (archivo completo): ESTADO.md detallado.
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Cargar el nivel de detalle apropiado según la tarea a realizar.
|
|
121
|
+
|
|
122
|
+
### Técnica 2: Resumen por dominios
|
|
123
|
+
|
|
124
|
+
Separar el contexto en dominios independientes:
|
|
125
|
+
|
|
126
|
+
```markdown
|
|
127
|
+
## Dominio: Backend API
|
|
128
|
+
- Rutas implementadas: GET/POST/DELETE /reportes
|
|
129
|
+
- Pendiente: PUT /reportes/{id}, webhooks
|
|
130
|
+
|
|
131
|
+
## Dominio: Frontend Angular
|
|
132
|
+
- Componentes: ReportesListComponent, ReporteDetalleComponent
|
|
133
|
+
- Pendiente: ReporteCrearComponent, filtros de búsqueda
|
|
134
|
+
|
|
135
|
+
## Dominio: Base de datos
|
|
136
|
+
- Migraciones aplicadas: 001, 002, 003
|
|
137
|
+
- Pendiente: índice GIN en metadata (pendiente de medir impacto)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Técnica 3: El "snapshot de trabajo"
|
|
141
|
+
|
|
142
|
+
Antes de compactar, crear un mensaje de handoff en lenguaje natural que un nuevo
|
|
143
|
+
contexto pueda leer y continuar sin perder información:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
Proyecto: Sistema de reportes SIGAF
|
|
147
|
+
Estoy implementando el módulo de reportes. Completé los endpoints de lectura
|
|
148
|
+
(GET /reportes y GET /reportes/{id}) con paginación por cursor y RBAC.
|
|
149
|
+
|
|
150
|
+
El siguiente paso ES implementar POST /reportes. El schema ReporteCreate ya está
|
|
151
|
+
en backend/app/schemas/reporte.py. El modelo ORM está en backend/app/models/reporte.py.
|
|
152
|
+
El servicio parcial está en backend/app/services/reporte_service.py (falta el método crear).
|
|
153
|
+
|
|
154
|
+
Importante: los reportes deben asociarse al usuario del JWT, nunca confiar en el
|
|
155
|
+
body del request para el owner_id.
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Protocolo de handoff entre contextos
|
|
161
|
+
|
|
162
|
+
### El contexto saliente (antes de compactar)
|
|
163
|
+
|
|
164
|
+
1. Escribir ESTADO.md actualizado con toda la información relevante.
|
|
165
|
+
2. Hacer commit de todos los cambios pendientes.
|
|
166
|
+
3. Anotar el hash del último commit en ESTADO.md.
|
|
167
|
+
4. Escribir el "snapshot de trabajo" como primer mensaje del nuevo contexto.
|
|
168
|
+
|
|
169
|
+
### El contexto entrante (después de compactar)
|
|
170
|
+
|
|
171
|
+
Protocolo de arranque:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
1. Leer ESTADO.md para entender el estado actual.
|
|
175
|
+
2. Leer DECISIONS.md para entender las decisiones ya tomadas.
|
|
176
|
+
3. Revisar los últimos 3 commits para entender qué se hizo recientemente.
|
|
177
|
+
4. Hacer git status para ver si hay cambios sin commitear.
|
|
178
|
+
5. Leer ÚNICAMENTE los archivos relevantes para la tarea actual.
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Nunca cargar todo el codebase en el nuevo contexto. Cargar solo lo necesario para
|
|
182
|
+
la tarea inmediata.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Estrategias de compactación activa
|
|
187
|
+
|
|
188
|
+
### Compactación por completitud de tarea
|
|
189
|
+
|
|
190
|
+
Compactar al terminar cada tarea atómica. Una tarea completada = contexto que ya
|
|
191
|
+
no necesita vivir en memoria activa.
|
|
192
|
+
|
|
193
|
+
### Compactación por fase del proyecto
|
|
194
|
+
|
|
195
|
+
Al pasar de una fase a otra (ej. del diseño a la implementación), compactar toda
|
|
196
|
+
la discusión de diseño y cargar solo las decisiones finales.
|
|
197
|
+
|
|
198
|
+
### Compactación de archivos grandes
|
|
199
|
+
|
|
200
|
+
Si se leyó un archivo de 500 líneas para extraer 3 funciones relevantes, compactar
|
|
201
|
+
el archivo completo y mantener solo los 3 fragmentos extraídos con sus firmas.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Verificación post-compactación
|
|
206
|
+
|
|
207
|
+
Toda compactación DEBE verificar que no destruyó información crítica. Antes de
|
|
208
|
+
descartar el contexto original, validar estas invariantes:
|
|
209
|
+
|
|
210
|
+
| Invariante | Verificación | Tolerancia |
|
|
211
|
+
|------------|-------------|------------|
|
|
212
|
+
| **Headings** | Contar `#` en original y compactado — deben coincidir exactamente | 0% — cada heading perdido es una sección desaparecida |
|
|
213
|
+
| **Bloques de código** | Contar delimitadores ``` — deben coincidir en pares | 0% — código perdido es irrecuperable |
|
|
214
|
+
| **Rutas de archivo** | Extraer paths (`src/`, `app/`, extensiones `.py`, `.ts`, etc.) — comparar sets | 0% — una ruta perdida rompe la navegabilidad |
|
|
215
|
+
| **URLs** | Extraer `http://` y `https://` — comparar sets | 0% — referencias externas irrecuperables |
|
|
216
|
+
| **Items de lista** | Contar bullets (`-`, `*`, numerados) en secciones críticas | ±15% — la compactación puede fusionar items redundantes |
|
|
217
|
+
| **Decisiones/ADRs** | Verificar que toda decisión del original aparece en el compactado | 0% — decisiones perdidas se re-debaten |
|
|
218
|
+
|
|
219
|
+
**Protocolo de validación**:
|
|
220
|
+
|
|
221
|
+
1. Extraer invariantes del contexto original ANTES de compactar
|
|
222
|
+
2. Compactar el contexto
|
|
223
|
+
3. Extraer las mismas invariantes del resultado
|
|
224
|
+
4. Comparar — si alguna invariante de tolerancia 0% falla, la compactación se rechaza
|
|
225
|
+
5. Si los items de lista exceden ±15%, revisar manualmente qué se fusionó
|
|
226
|
+
|
|
227
|
+
Si la compactación falla la validación: no descartar el original. Recompactar con
|
|
228
|
+
instrucción más conservadora o compactar por secciones individuales.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Gotchas / Errores comunes no obvios
|
|
233
|
+
|
|
234
|
+
- **Compactar sin escribir ESTADO.md primero**: el agente ejecuta `/compact` con la información del estado solo en el contexto de la conversación. Tras la compactación, el estado desaparece y la sesión siguiente parte de cero. Causa: se confundió la compactación del contexto con el guardado de estado. Solución: escribir ESTADO.md (y DECISIONS.md si corresponde) en disco ANTES de compactar — el protocolo lo establece en el primer paso.
|
|
235
|
+
- **Invariante de headings violada silenciosamente**: el contexto compactado pierde dos secciones `##` del original porque el modelo resumió párrafos en lugar de preservar la estructura. Causa: no se ejecutó la validación post-compactación. Solución: antes de descartar el contexto original, contar `#` en ambos con regex y comparar — tolerancia 0% para headings perdidos.
|
|
236
|
+
- **Compactar todo el codebase al inicio de sesión**: el agente lee 20 archivos en el nuevo contexto "para orientarse" y los compacta de inmediato. Causa: se interpretó "cargar contexto fresco" como cargar y compactar todo. Solución: en el contexto entrante, cargar ESTADO.md + DECISIONS.md + 3 últimos commits, y solo los archivos de la tarea inmediata — no más.
|
|
237
|
+
- **Umbral de 70% sin recalibrar para Opus 4.7**: en proyectos que migraron de Opus 4.6 a 4.7, el umbral de compactación sigue configurado al 70% del contexto cuando debe ser 50%. Causa: el tokenizer de 4.7 produce 1.0-1.35× más tokens y el umbral efectivo llega antes. Solución: al actualizar modelo, ajustar el umbral de compactación a 50% como documenta este skill en su sección de señales cuantitativas.
|
|
238
|
+
|
|
239
|
+
## Anti-patrones a evitar
|
|
240
|
+
|
|
241
|
+
- **Compactar sin guardar estado**: El estado debe estar en disco ANTES de compactar.
|
|
242
|
+
- **Cargar todo el codebase al nuevo contexto**: Cargar solo lo necesario para la tarea.
|
|
243
|
+
- **Hacer el handoff en lenguaje ambiguo**: El snapshot debe ser preciso y accionable.
|
|
244
|
+
- **No registrar decisiones tomadas**: Las decisiones no escritas se pierden al compactar.
|
|
245
|
+
- **Compactar en medio de una tarea**: Terminar la unidad atómica de trabajo primero.
|
|
246
|
+
- **Depender de la memoria del contexto para información crítica**: Todo lo crítico va a disco.
|
|
247
|
+
- **Compactar sin verificar invariantes**: Validar headings, código, rutas y URLs post-compactación.
|