@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,430 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Context Builder — Ensambla contexto inteligente con presupuesto de tokens.
|
|
5
|
+
*
|
|
6
|
+
* Genera un bloque de contexto optimizado para inyectar al inicio de sesion.
|
|
7
|
+
* Respeta un presupuesto de tokens configurable y prioriza por relevancia.
|
|
8
|
+
*
|
|
9
|
+
* Secciones (en orden de prioridad):
|
|
10
|
+
* 1. Header: proyecto, modo activo, metricas
|
|
11
|
+
* 2. Instintos: patrones con alta confianza
|
|
12
|
+
* 3. Sesion anterior: resumen y archivos
|
|
13
|
+
* 4. Aprendizajes recientes: ultimos N aprendizajes
|
|
14
|
+
* 5. Footer: advertencias si se trunco contenido
|
|
15
|
+
*
|
|
16
|
+
* Token budget: default 2000 tokens (~8000 caracteres en espanol)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
const DEFAULT_TOKEN_BUDGET = 2500; // Recalibrado para Opus 4.7 (tokenizer 1.0-1.35x vs 4.6)
|
|
23
|
+
const CHARS_POR_TOKEN = 4; // Heuristica para espanol
|
|
24
|
+
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Snapshot congelado — Prefix Cache Optimization
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Patrón adoptado de Hermes Agent: el contexto se congela como snapshot al
|
|
29
|
+
// inicio de sesión. Escrituras mid-session actualizan disco pero NO mutan
|
|
30
|
+
// el contexto inyectado. Esto preserva el prefix cache de Anthropic (~10x ahorro).
|
|
31
|
+
|
|
32
|
+
let _frozenSnapshot = null;
|
|
33
|
+
let _frozenSessionId = null;
|
|
34
|
+
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Utilidades
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Estima tokens de un texto usando la heuristica de 4 chars/token para espanol.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} texto
|
|
43
|
+
* @returns {number}
|
|
44
|
+
*/
|
|
45
|
+
function estimarTokens(texto) {
|
|
46
|
+
return Math.ceil((texto || '').length / CHARS_POR_TOKEN);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Constructores de secciones
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Seccion 1 — Header con nombre del proyecto y modo activo.
|
|
55
|
+
*
|
|
56
|
+
* Lee el modo desde .planning/CONTEXTO.md si existe.
|
|
57
|
+
* Fallback a 'dev' si el archivo no existe o no tiene el campo.
|
|
58
|
+
*
|
|
59
|
+
* @param {string} baseDir
|
|
60
|
+
* @returns {string}
|
|
61
|
+
*/
|
|
62
|
+
function buildHeader(baseDir) {
|
|
63
|
+
const ctxPath = path.join(baseDir, '.planning', 'CONTEXTO.md');
|
|
64
|
+
let modo = 'dev';
|
|
65
|
+
try {
|
|
66
|
+
const contenido = fs.readFileSync(ctxPath, 'utf8');
|
|
67
|
+
const match = contenido.match(/\*\*Modo\*\*:\s*(\w+)/);
|
|
68
|
+
if (match) modo = match[1];
|
|
69
|
+
} catch (_) {}
|
|
70
|
+
|
|
71
|
+
const projectName = path.basename(baseDir);
|
|
72
|
+
return `[SWL Context] Proyecto: ${projectName} | Modo: ${modo}`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Seccion 2 — Instintos activos con confianza >= 0.7.
|
|
77
|
+
*
|
|
78
|
+
* Lee instintos/proyecto.yaml con un regex simple (sin dependencia de yaml parser).
|
|
79
|
+
* Solo incluye instintos con status 'active'. Ordena por confianza descendente.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} baseDir
|
|
82
|
+
* @param {number} max - Numero maximo de instintos a incluir.
|
|
83
|
+
* @returns {string} Bloque de texto, o cadena vacia si no hay instintos.
|
|
84
|
+
*/
|
|
85
|
+
function buildInstintos(baseDir, max) {
|
|
86
|
+
const instPath = path.join(baseDir, 'instintos', 'proyecto.yaml');
|
|
87
|
+
if (!fs.existsSync(instPath)) return '';
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
const contenido = fs.readFileSync(instPath, 'utf8');
|
|
91
|
+
const instintos = [];
|
|
92
|
+
|
|
93
|
+
// Regex que captura pattern, confidence y status en un bloque YAML de instinto
|
|
94
|
+
const regex = /pattern:\s*"([^"]+)"[\s\S]*?confidence:\s*([\d.]+)[\s\S]*?status:\s*(\w+)/g;
|
|
95
|
+
let match;
|
|
96
|
+
while ((match = regex.exec(contenido)) !== null) {
|
|
97
|
+
const confidence = parseFloat(match[2]);
|
|
98
|
+
const status = match[3];
|
|
99
|
+
if (status === 'active' && confidence >= 0.7) {
|
|
100
|
+
instintos.push({ pattern: match[1], confidence });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (instintos.length === 0) return '';
|
|
105
|
+
|
|
106
|
+
// Ordenar por confianza descendente y limitar
|
|
107
|
+
const seleccionados = instintos
|
|
108
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
109
|
+
.slice(0, max);
|
|
110
|
+
|
|
111
|
+
const lineas = ['Instintos activos:'];
|
|
112
|
+
for (const inst of seleccionados) {
|
|
113
|
+
lineas.push(` - ${inst.pattern} (${(inst.confidence * 100).toFixed(0)}%)`);
|
|
114
|
+
}
|
|
115
|
+
return lineas.join('\n');
|
|
116
|
+
} catch (_) {
|
|
117
|
+
return '';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Seccion 3 — Resumen de la sesion anterior.
|
|
123
|
+
*
|
|
124
|
+
* Lee .planning/sessions/latest.json para obtener la ruta al JSON de sesion.
|
|
125
|
+
* No incluye sesiones activas ni sesiones con menos de 3 tool calls (muy cortas).
|
|
126
|
+
*
|
|
127
|
+
* @param {string} baseDir
|
|
128
|
+
* @returns {string} Bloque de texto, o cadena vacia si no hay sesion util.
|
|
129
|
+
*/
|
|
130
|
+
function buildSesionAnterior(baseDir) {
|
|
131
|
+
const latestPath = path.join(baseDir, '.planning', 'sessions', 'latest.json');
|
|
132
|
+
if (!fs.existsSync(latestPath)) return '';
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
const { path: sessionPath } = JSON.parse(fs.readFileSync(latestPath, 'utf8'));
|
|
136
|
+
if (!sessionPath || !fs.existsSync(sessionPath)) return '';
|
|
137
|
+
|
|
138
|
+
const sesion = JSON.parse(fs.readFileSync(sessionPath, 'utf8'));
|
|
139
|
+
|
|
140
|
+
// Filtrar sesiones activas o demasiado cortas para aportar contexto util
|
|
141
|
+
if (sesion.status === 'active' || sesion.toolCalls < 3) return '';
|
|
142
|
+
|
|
143
|
+
const lineas = [`Sesion anterior (${sesion.id}):`];
|
|
144
|
+
if (sesion.summary) {
|
|
145
|
+
lineas.push(` Resumen: ${sesion.summary.slice(0, 200)}`);
|
|
146
|
+
}
|
|
147
|
+
if (sesion.filesChanged && sesion.filesChanged.length > 0) {
|
|
148
|
+
lineas.push(` Archivos: ${sesion.filesChanged.slice(0, 5).join(', ')}`);
|
|
149
|
+
}
|
|
150
|
+
return lineas.join('\n');
|
|
151
|
+
} catch (_) {
|
|
152
|
+
return '';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Seccion 4 — Aprendizajes recientes desde .planning/APRENDIZAJES.md.
|
|
158
|
+
*
|
|
159
|
+
* Toma los ultimos `max` bloques H2 del archivo y los incluye como titulos.
|
|
160
|
+
* Respeta el presupuesto restante: deja de agregar si se agotaria.
|
|
161
|
+
*
|
|
162
|
+
* @param {string} baseDir
|
|
163
|
+
* @param {number} max - Numero maximo de aprendizajes a incluir.
|
|
164
|
+
* @param {number} budgetRestante - Tokens disponibles para esta seccion.
|
|
165
|
+
* @returns {string} Bloque de texto, o cadena vacia si no hay aprendizajes.
|
|
166
|
+
*/
|
|
167
|
+
function buildAprendizajes(baseDir, max, budgetRestante) {
|
|
168
|
+
const aprendizajesPath = path.join(baseDir, '.planning', 'APRENDIZAJES.md');
|
|
169
|
+
if (!fs.existsSync(aprendizajesPath)) return '';
|
|
170
|
+
|
|
171
|
+
try {
|
|
172
|
+
const contenido = fs.readFileSync(aprendizajesPath, 'utf8');
|
|
173
|
+
|
|
174
|
+
// Dividir por secciones H2 y filtrar el encabezado del documento
|
|
175
|
+
const bloques = contenido.split(/^## /m).filter(Boolean);
|
|
176
|
+
if (bloques.length === 0) return '';
|
|
177
|
+
|
|
178
|
+
// Tomar los ultimos N bloques (mas recientes) en orden descendente
|
|
179
|
+
const recientes = bloques.slice(-max).reverse();
|
|
180
|
+
const lineas = ['Aprendizajes recientes:'];
|
|
181
|
+
let tokensAcumulados = estimarTokens(lineas[0]);
|
|
182
|
+
|
|
183
|
+
for (const bloque of recientes) {
|
|
184
|
+
const titulo = bloque.split('\n')[0].trim();
|
|
185
|
+
const linea = ` - ${titulo.slice(0, 100)}`;
|
|
186
|
+
const lineaToks = estimarTokens(linea);
|
|
187
|
+
|
|
188
|
+
// Respetar el budget restante de forma estricta
|
|
189
|
+
if (tokensAcumulados + lineaToks > budgetRestante) break;
|
|
190
|
+
|
|
191
|
+
lineas.push(linea);
|
|
192
|
+
tokensAcumulados += lineaToks;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return lineas.length > 1 ? lineas.join('\n') : '';
|
|
196
|
+
} catch (_) {
|
|
197
|
+
return '';
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// API publica
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Construye el bloque de contexto respetando el presupuesto de tokens.
|
|
207
|
+
*
|
|
208
|
+
* Las secciones se ensamblan en orden de prioridad decreciente. Si al agregar
|
|
209
|
+
* una seccion el presupuesto se agotaria, esa seccion se omite y se registra
|
|
210
|
+
* en `seccionesTruncadas`.
|
|
211
|
+
*
|
|
212
|
+
* @param {string} baseDir - Directorio raiz del proyecto.
|
|
213
|
+
* @param {object} [opciones]
|
|
214
|
+
* @param {number} [opciones.tokenBudget=2500] - Presupuesto de tokens (default 2500 — recalibrado para Opus 4.7).
|
|
215
|
+
* @param {number} [opciones.maxAprendizajes=5] - Max aprendizajes a incluir.
|
|
216
|
+
* @param {number} [opciones.maxInstintos=5] - Max instintos a incluir.
|
|
217
|
+
* @returns {{ contexto: string, tokensUsados: number, seccionesTruncadas: string[] }}
|
|
218
|
+
*/
|
|
219
|
+
/**
|
|
220
|
+
* Construye un resumen de metadatos de cada sección sin incluir el contenido
|
|
221
|
+
* completo. Patrón inspirado en Zhang et al. 2026 ("Recursive Language Models",
|
|
222
|
+
* arXiv:2512.24601v2, §4.1 + Algoritmo 1) donde la raíz del REPL solo recibe
|
|
223
|
+
* metadata de la información disponible (cómo accederla), no la información
|
|
224
|
+
* en sí. El subagente decide si cargar el contenido completo según la tarea.
|
|
225
|
+
*
|
|
226
|
+
* Útil para tareas donde el agente padre/orquestador solo necesita saber
|
|
227
|
+
* "qué información hay disponible" antes de delegar, no leerla toda.
|
|
228
|
+
*
|
|
229
|
+
* @param {string} baseDir
|
|
230
|
+
* @param {object} opciones
|
|
231
|
+
* @returns {string}
|
|
232
|
+
*/
|
|
233
|
+
function buildMetadataResumen(baseDir, opciones = {}) {
|
|
234
|
+
const partes = [];
|
|
235
|
+
const path = require('path');
|
|
236
|
+
const fs = require('fs');
|
|
237
|
+
|
|
238
|
+
partes.push('## Contexto disponible (metadata-first)');
|
|
239
|
+
partes.push('');
|
|
240
|
+
partes.push('Información del proyecto disponible para consulta bajo demanda:');
|
|
241
|
+
partes.push('');
|
|
242
|
+
|
|
243
|
+
// Header siempre como metadata, no contenido
|
|
244
|
+
const claudeMd = path.join(baseDir, 'CLAUDE.md');
|
|
245
|
+
if (fs.existsSync(claudeMd)) {
|
|
246
|
+
try {
|
|
247
|
+
const lineas = fs.readFileSync(claudeMd, 'utf8').split('\n').length;
|
|
248
|
+
partes.push(`- **CLAUDE.md** (${lineas} líneas) — reglas y convenciones del proyecto. Leer si la tarea toca arquitectura, convenciones o decisiones globales.`);
|
|
249
|
+
} catch { /* ignore */ }
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Instintos: contar sin cargar
|
|
253
|
+
const instintosDir = path.join(baseDir, 'instintos');
|
|
254
|
+
if (fs.existsSync(instintosDir)) {
|
|
255
|
+
try {
|
|
256
|
+
const archivos = fs.readdirSync(instintosDir).filter(f => f.endsWith('.yaml'));
|
|
257
|
+
if (archivos.length > 0) {
|
|
258
|
+
partes.push(`- **instintos/** (${archivos.length} archivos YAML) — patrones aprendidos. Cargar con \`Skill("perfil-usuario")\` o lectura directa.`);
|
|
259
|
+
}
|
|
260
|
+
} catch { /* ignore */ }
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// APRENDIZAJES.md: contar entradas sin cargar contenido
|
|
264
|
+
const aprendizajes = path.join(baseDir, '.planning', 'APRENDIZAJES.md');
|
|
265
|
+
if (fs.existsSync(aprendizajes)) {
|
|
266
|
+
try {
|
|
267
|
+
const contenido = fs.readFileSync(aprendizajes, 'utf8');
|
|
268
|
+
const numEntradas = (contenido.match(/^## \[\d{4}/gm) || []).length;
|
|
269
|
+
partes.push(`- **.planning/APRENDIZAJES.md** (${numEntradas} entradas) — historial curado. Buscar con \`Skill("memoria-busqueda")\` por keyword.`);
|
|
270
|
+
} catch { /* ignore */ }
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Sesión anterior
|
|
274
|
+
const compactacion = path.join(baseDir, '.planning', 'COMPACTACION.md');
|
|
275
|
+
if (fs.existsSync(compactacion)) {
|
|
276
|
+
try {
|
|
277
|
+
const lineas = fs.readFileSync(compactacion, 'utf8').split('\n').length;
|
|
278
|
+
partes.push(`- **.planning/COMPACTACION.md** (${lineas} líneas) — snapshot de la sesión previa. Leer si se retoma trabajo en curso.`);
|
|
279
|
+
} catch { /* ignore */ }
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Estado actual
|
|
283
|
+
const estado = path.join(baseDir, '.planning', 'ESTADO.md');
|
|
284
|
+
if (fs.existsSync(estado)) {
|
|
285
|
+
partes.push(`- **.planning/ESTADO.md** — estado operativo del sistema. Leer si la tarea requiere conocer la versión actual o última actividad.`);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
partes.push('');
|
|
289
|
+
partes.push('**Estrategia recomendada**: cargar solo los archivos relevantes a la tarea. La información completa NO está pre-inyectada para preservar tokens.');
|
|
290
|
+
|
|
291
|
+
return partes.join('\n');
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function buildContext(baseDir, opciones = {}) {
|
|
295
|
+
const budget = opciones.tokenBudget || DEFAULT_TOKEN_BUDGET;
|
|
296
|
+
const maxAprendizajes = opciones.maxAprendizajes || 5;
|
|
297
|
+
const maxInstintos = opciones.maxInstintos || 5;
|
|
298
|
+
const metadataOnly = opciones.metadataOnly === true;
|
|
299
|
+
|
|
300
|
+
// ── Modo metadata-first (Zhang et al. 2026, §4.1) ─────────────────────────
|
|
301
|
+
// Inyecta SOLO metadata sobre el contexto disponible, no su contenido.
|
|
302
|
+
// El agente padre decide qué cargar según la tarea. Útil para tareas de
|
|
303
|
+
// exploración/orquestación en codebases grandes donde el contenido
|
|
304
|
+
// completo saturaría el contexto sin aportar información necesaria.
|
|
305
|
+
if (metadataOnly) {
|
|
306
|
+
const resumen = buildMetadataResumen(baseDir, opciones);
|
|
307
|
+
return {
|
|
308
|
+
contexto: resumen,
|
|
309
|
+
tokensUsados: estimarTokens(resumen),
|
|
310
|
+
seccionesTruncadas: [],
|
|
311
|
+
modo: 'metadata-only',
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
let tokensUsados = 0;
|
|
316
|
+
const secciones = [];
|
|
317
|
+
const truncadas = [];
|
|
318
|
+
|
|
319
|
+
// --- Seccion 1: Header (siempre incluido si cabe) ---
|
|
320
|
+
const header = buildHeader(baseDir);
|
|
321
|
+
const headerTokens = estimarTokens(header);
|
|
322
|
+
if (tokensUsados + headerTokens <= budget) {
|
|
323
|
+
secciones.push(header);
|
|
324
|
+
tokensUsados += headerTokens;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// --- Seccion 2: Instintos activos ---
|
|
328
|
+
const instintos = buildInstintos(baseDir, maxInstintos);
|
|
329
|
+
const instintosTokens = estimarTokens(instintos);
|
|
330
|
+
if (instintos && tokensUsados + instintosTokens <= budget) {
|
|
331
|
+
secciones.push(instintos);
|
|
332
|
+
tokensUsados += instintosTokens;
|
|
333
|
+
} else if (instintos) {
|
|
334
|
+
truncadas.push('instintos');
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// --- Seccion 3: Sesion anterior ---
|
|
338
|
+
const sesion = buildSesionAnterior(baseDir);
|
|
339
|
+
const sesionTokens = estimarTokens(sesion);
|
|
340
|
+
if (sesion && tokensUsados + sesionTokens <= budget) {
|
|
341
|
+
secciones.push(sesion);
|
|
342
|
+
tokensUsados += sesionTokens;
|
|
343
|
+
} else if (sesion) {
|
|
344
|
+
truncadas.push('sesion anterior');
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// --- Seccion 4: Aprendizajes recientes ---
|
|
348
|
+
// Pasa el budget restante para que buildAprendizajes pueda truncar internamente
|
|
349
|
+
const budgetRestante = budget - tokensUsados;
|
|
350
|
+
const aprendizajes = buildAprendizajes(baseDir, maxAprendizajes, budgetRestante);
|
|
351
|
+
const aprendizajesTokens = estimarTokens(aprendizajes);
|
|
352
|
+
if (aprendizajes && tokensUsados + aprendizajesTokens <= budget) {
|
|
353
|
+
secciones.push(aprendizajes);
|
|
354
|
+
tokensUsados += aprendizajesTokens;
|
|
355
|
+
} else if (aprendizajes) {
|
|
356
|
+
truncadas.push('aprendizajes');
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// --- Seccion 5: Footer (solo si se trunco algo) ---
|
|
360
|
+
if (truncadas.length > 0) {
|
|
361
|
+
const footer = `\n[Contexto truncado — secciones omitidas: ${truncadas.join(', ')}. Budget: ${budget} tokens]`;
|
|
362
|
+
secciones.push(footer);
|
|
363
|
+
tokensUsados += estimarTokens(footer);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
return {
|
|
367
|
+
contexto: secciones.join('\n'),
|
|
368
|
+
tokensUsados,
|
|
369
|
+
seccionesTruncadas: truncadas,
|
|
370
|
+
modo: 'completo',
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
// Snapshot congelado — API pública
|
|
376
|
+
// ---------------------------------------------------------------------------
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Obtiene o construye un snapshot congelado de contexto para la sesión.
|
|
380
|
+
*
|
|
381
|
+
* Si ya existe un snapshot para el sessionId dado, lo retorna sin recalcular.
|
|
382
|
+
* Esto maximiza el hit rate del prefix cache de Anthropic.
|
|
383
|
+
*
|
|
384
|
+
* @param {string} baseDir - Directorio raíz del proyecto.
|
|
385
|
+
* @param {string} sessionId - ID de la sesión activa.
|
|
386
|
+
* @param {object} [opciones] - Mismas opciones que buildContext().
|
|
387
|
+
* @returns {{ contexto: string, tokensUsados: number, seccionesTruncadas: string[], frozen: boolean }}
|
|
388
|
+
*/
|
|
389
|
+
function getOrBuildSnapshot(baseDir, sessionId, opciones = {}) {
|
|
390
|
+
if (_frozenSnapshot && _frozenSessionId === sessionId) {
|
|
391
|
+
return { ..._frozenSnapshot, frozen: true };
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
const contexto = buildContext(baseDir, opciones);
|
|
395
|
+
_frozenSnapshot = Object.freeze({ ...contexto });
|
|
396
|
+
_frozenSessionId = sessionId;
|
|
397
|
+
|
|
398
|
+
return { ...contexto, frozen: false };
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Invalida el snapshot congelado.
|
|
403
|
+
*
|
|
404
|
+
* Usar solo cuando se necesita recalcular el contexto explícitamente:
|
|
405
|
+
* - Cambio de modo con /swl:contexto
|
|
406
|
+
* - Compresión de contexto manual
|
|
407
|
+
* - Nueva sesión
|
|
408
|
+
*/
|
|
409
|
+
function invalidateSnapshot() {
|
|
410
|
+
_frozenSnapshot = null;
|
|
411
|
+
_frozenSessionId = null;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// ---------------------------------------------------------------------------
|
|
415
|
+
// Exports
|
|
416
|
+
// ---------------------------------------------------------------------------
|
|
417
|
+
|
|
418
|
+
module.exports = {
|
|
419
|
+
buildContext,
|
|
420
|
+
getOrBuildSnapshot,
|
|
421
|
+
invalidateSnapshot,
|
|
422
|
+
estimarTokens,
|
|
423
|
+
DEFAULT_TOKEN_BUDGET,
|
|
424
|
+
// Exportar constructores de secciones para tests unitarios
|
|
425
|
+
buildHeader,
|
|
426
|
+
buildInstintos,
|
|
427
|
+
buildSesionAnterior,
|
|
428
|
+
buildAprendizajes,
|
|
429
|
+
buildMetadataResumen,
|
|
430
|
+
};
|