@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,211 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Hook: check-update.js
|
|
6
|
+
* Tipo: UserPromptSubmit (aplica a todos los mensajes del usuario)
|
|
7
|
+
* Registrado en: UserPromptSubmit (matcher vacío)
|
|
8
|
+
*
|
|
9
|
+
* Verifica al inicio de cada sesión si existe una versión nueva de swl-ses
|
|
10
|
+
* publicada en npm. Si la hay, emite una notificación discreta en stderr.
|
|
11
|
+
*
|
|
12
|
+
* Comportamiento:
|
|
13
|
+
* - Throttled a 1 verificación cada 24h (flag en /tmp)
|
|
14
|
+
* - Usa `npm view swl-ses version --json` (non-blocking, timeout 5s)
|
|
15
|
+
* - Nunca bloquea (siempre exit 0)
|
|
16
|
+
* - Solo emite notificación si hay versión nueva, nunca molesta si está al día
|
|
17
|
+
*
|
|
18
|
+
* Patrón VS Code: detección silenciosa + notificación discreta.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const fs = require('fs');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
const os = require('os');
|
|
24
|
+
|
|
25
|
+
const { compararSemver, versionRemotaParalela } = require('../scripts/lib/npm-version');
|
|
26
|
+
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Constantes
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
|
|
31
|
+
/** Intervalo mínimo entre checks exitosos (24 horas en ms). */
|
|
32
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
33
|
+
|
|
34
|
+
/** Intervalo entre reintentos cuando el último check falló en resolver remota (1 hora). */
|
|
35
|
+
const RETRY_INTERVAL_MS = 60 * 60 * 1000;
|
|
36
|
+
|
|
37
|
+
/** Timeout para npm view (5 segundos). */
|
|
38
|
+
const NPM_TIMEOUT_MS = 5000;
|
|
39
|
+
|
|
40
|
+
/** Archivo flag para throttling entre sesiones. */
|
|
41
|
+
function flagPath() {
|
|
42
|
+
return path.join(os.tmpdir(), 'swl-ses-update-check.json');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Helpers
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Lee la versión local del sistema SWL.
|
|
51
|
+
*
|
|
52
|
+
* Orden de búsqueda:
|
|
53
|
+
* 1. package.json del repo madre (cuando se trabaja en swl-ses mismo) —
|
|
54
|
+
* se detecta por `name` que contenga "swl".
|
|
55
|
+
* 2. .swl-install-state.json de las ubicaciones conocidas —
|
|
56
|
+
* creado por el instalador, contiene `versionSistema`. Cubre tanto
|
|
57
|
+
* instalaciones locales al proyecto (.claude/ del proyecto) como
|
|
58
|
+
* globales (~/.claude/) y las de otros runtimes (.github/, .codex/,
|
|
59
|
+
* .gemini/, .opencode/). Si hay varias, toma la MÁS RECIENTE por
|
|
60
|
+
* mtime — el usuario suele actualizar la que usa más seguido.
|
|
61
|
+
* 3. package.json colocado junto a este hook (fallback cuando el hook
|
|
62
|
+
* se instaló como copia dentro de .claude/hooks del proyecto).
|
|
63
|
+
*/
|
|
64
|
+
function versionLocal() {
|
|
65
|
+
// Intento 1: repo madre swl-ses (package.json con name que incluye "swl")
|
|
66
|
+
const pkgsCandidatos = [
|
|
67
|
+
path.join(process.cwd(), 'package.json'),
|
|
68
|
+
path.join(__dirname, '..', 'package.json'),
|
|
69
|
+
];
|
|
70
|
+
for (const ruta of pkgsCandidatos) {
|
|
71
|
+
try {
|
|
72
|
+
const pkg = JSON.parse(fs.readFileSync(ruta, 'utf8'));
|
|
73
|
+
if (pkg.name && pkg.name.includes('swl') && pkg.version) return pkg.version;
|
|
74
|
+
} catch { /* continuar */ }
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Intento 2: state del instalador — global, local o de otros runtimes
|
|
78
|
+
const stateCandidatos = [
|
|
79
|
+
path.join(os.homedir(), '.claude', '.swl-install-state.json'), // global Claude
|
|
80
|
+
path.join(process.cwd(), '.claude', '.swl-install-state.json'), // local al proyecto
|
|
81
|
+
path.join(process.cwd(), '.github', '.swl-install-state.json'), // Copilot
|
|
82
|
+
path.join(process.cwd(), '.codex', '.swl-install-state.json'), // Codex CLI
|
|
83
|
+
path.join(process.cwd(), '.gemini', '.swl-install-state.json'), // Gemini CLI
|
|
84
|
+
path.join(process.cwd(), '.opencode', '.swl-install-state.json'), // OpenCode
|
|
85
|
+
path.join(__dirname, '..', '..', '.claude', '.swl-install-state.json'),
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
let mejorVersion = null;
|
|
89
|
+
let mejorMtime = 0;
|
|
90
|
+
for (const ruta of stateCandidatos) {
|
|
91
|
+
try {
|
|
92
|
+
const stat = fs.statSync(ruta);
|
|
93
|
+
const state = JSON.parse(fs.readFileSync(ruta, 'utf8'));
|
|
94
|
+
if (state.versionSistema && stat.mtimeMs > mejorMtime) {
|
|
95
|
+
mejorVersion = state.versionSistema;
|
|
96
|
+
mejorMtime = stat.mtimeMs;
|
|
97
|
+
}
|
|
98
|
+
} catch { /* continuar */ }
|
|
99
|
+
}
|
|
100
|
+
if (mejorVersion) return mejorVersion;
|
|
101
|
+
|
|
102
|
+
// Intento 3: fallback — package.json junto al hook sin filtro de nombre
|
|
103
|
+
try {
|
|
104
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
|
|
105
|
+
if (pkg.version) return pkg.version;
|
|
106
|
+
} catch { /* silencioso */ }
|
|
107
|
+
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* True si remota es mayor que local en SemVer (con tolerancia a pre-release).
|
|
113
|
+
*/
|
|
114
|
+
function esVersionNueva(local, remota) {
|
|
115
|
+
const cmp = compararSemver(local, remota);
|
|
116
|
+
return cmp !== null && cmp < 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Verifica si ya se hizo check recientemente.
|
|
121
|
+
*
|
|
122
|
+
* Usa dos intervalos distintos:
|
|
123
|
+
* - CHECK_INTERVAL_MS (24h) cuando el último check resolvió la versión remota.
|
|
124
|
+
* - RETRY_INTERVAL_MS (1h) cuando el último check falló en resolver remota.
|
|
125
|
+
* Esto evita cachear un "no pude verificar" por 24 horas completas — un npm
|
|
126
|
+
* lento o un PATH roto no debe silenciar la alerta hasta el día siguiente.
|
|
127
|
+
*/
|
|
128
|
+
function debeVerificar() {
|
|
129
|
+
try {
|
|
130
|
+
const data = JSON.parse(fs.readFileSync(flagPath(), 'utf8'));
|
|
131
|
+
const intervalo = data.remota ? CHECK_INTERVAL_MS : RETRY_INTERVAL_MS;
|
|
132
|
+
return (Date.now() - data.timestamp) > intervalo;
|
|
133
|
+
} catch {
|
|
134
|
+
return true; // Sin flag = primera vez
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Registra que se hizo un check.
|
|
140
|
+
*/
|
|
141
|
+
function registrarCheck(local, remota, hayNueva) {
|
|
142
|
+
try {
|
|
143
|
+
fs.writeFileSync(flagPath(), JSON.stringify({
|
|
144
|
+
timestamp: Date.now(),
|
|
145
|
+
local,
|
|
146
|
+
remota,
|
|
147
|
+
hayNueva,
|
|
148
|
+
}), 'utf8');
|
|
149
|
+
} catch { /* silencioso */ }
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
// Entrypoint
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
|
|
156
|
+
let inputRaw = '';
|
|
157
|
+
|
|
158
|
+
process.stdin.on('data', chunk => { inputRaw += chunk; });
|
|
159
|
+
|
|
160
|
+
process.stdin.on('end', async () => {
|
|
161
|
+
try {
|
|
162
|
+
// Throttle: solo verificar cada 24h
|
|
163
|
+
if (!debeVerificar()) {
|
|
164
|
+
// Si el último check detectó actualización, repetir notificación (1 vez)
|
|
165
|
+
try {
|
|
166
|
+
const data = JSON.parse(fs.readFileSync(flagPath(), 'utf8'));
|
|
167
|
+
if (data.hayNueva && data.notificado < 2) {
|
|
168
|
+
process.stderr.write(
|
|
169
|
+
`[swl-ses] Versión ${data.remota} disponible (actual: ${data.local}). ` +
|
|
170
|
+
`Ejecuta: npx @saulwade/swl-ses@latest update\n`
|
|
171
|
+
);
|
|
172
|
+
data.notificado = (data.notificado || 0) + 1;
|
|
173
|
+
fs.writeFileSync(flagPath(), JSON.stringify(data), 'utf8');
|
|
174
|
+
}
|
|
175
|
+
} catch (err) {
|
|
176
|
+
// No bloquear pero dejar señal de diagnóstico cuando el flag está corrupto
|
|
177
|
+
process.stderr.write(`[swl-ses/check-update] flag inválido: ${String(err.message).slice(0, 80)}\n`);
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const local = versionLocal();
|
|
183
|
+
if (!local) return; // No se pudo determinar versión local
|
|
184
|
+
|
|
185
|
+
const { version: remota } = await versionRemotaParalela({ timeoutMs: NPM_TIMEOUT_MS });
|
|
186
|
+
if (!remota) {
|
|
187
|
+
// Sin conectividad o npm no disponible — registrar intento y salir
|
|
188
|
+
registrarCheck(local, null, false);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const hayNueva = esVersionNueva(local, remota);
|
|
193
|
+
registrarCheck(local, remota, hayNueva);
|
|
194
|
+
|
|
195
|
+
if (hayNueva) {
|
|
196
|
+
const msg = [
|
|
197
|
+
'',
|
|
198
|
+
`[swl-ses] Nueva versión disponible: ${remota} (actual: ${local})`,
|
|
199
|
+
` Ejecuta: npx @saulwade/swl-ses@latest update`,
|
|
200
|
+
` O desde Claude Code: /swl:actualizar`,
|
|
201
|
+
'',
|
|
202
|
+
].join('\n');
|
|
203
|
+
process.stderr.write(msg);
|
|
204
|
+
}
|
|
205
|
+
} catch (err) {
|
|
206
|
+
// El hook NUNCA bloquea Claude Code, pero deja una traza diagnóstica.
|
|
207
|
+
// Sin esto, regresiones de lógica quedan silenciosas hasta que alguien
|
|
208
|
+
// se da cuenta de que el aviso de update no aparece.
|
|
209
|
+
process.stderr.write(`[swl-ses/check-update] error interno: ${String(err.message || err).slice(0, 120)}\n`);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Hook: clasificador-mensajes.js
|
|
6
|
+
* Tipo: UserPromptSubmit
|
|
7
|
+
*
|
|
8
|
+
* Analiza el mensaje del usuario antes de que Claude lo procese e inyecta
|
|
9
|
+
* hints de routing para el orquestador. Detecta señales por regex en español
|
|
10
|
+
* e inglés para clasificar la intención: decisión, bug, requisito,
|
|
11
|
+
* arquitectura, seguridad, performance, refactor, documentación.
|
|
12
|
+
*
|
|
13
|
+
* Inspirado en obsidian-mind classify-message.py.
|
|
14
|
+
* Zero-dependencies: regex puro en JS.
|
|
15
|
+
*
|
|
16
|
+
* Resultado:
|
|
17
|
+
* - Señales detectadas → hookSpecificOutput con hints de routing
|
|
18
|
+
* - Sin señales → exit 0 silencioso
|
|
19
|
+
* - Error interno → exit 0 silencioso (nunca bloquear)
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Mapa de complejidad de tarea → modelo recomendado
|
|
24
|
+
//
|
|
25
|
+
// Basado en el principio del PDF "A Practical Guide to Building Agents":
|
|
26
|
+
// "No todo requiere el modelo más capaz. Sustituir modelos menores donde sea posible."
|
|
27
|
+
//
|
|
28
|
+
// Lógica de asignación:
|
|
29
|
+
// haiku → tareas simples: documentación, formatting, consultas factuales
|
|
30
|
+
// sonnet → tareas medias: implementación, debug, testing, refactor
|
|
31
|
+
// opus → tareas complejas: arquitectura, decisiones estratégicas, seguridad crítica
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
const COMPLEJIDAD_POR_SIGNAL = {
|
|
35
|
+
'DECISIÓN DE ARQUITECTURA': 'opus',
|
|
36
|
+
'BUG / ERROR': 'sonnet',
|
|
37
|
+
'REQUISITO / FEATURE': 'sonnet',
|
|
38
|
+
'SEGURIDAD': 'opus',
|
|
39
|
+
'RENDIMIENTO': 'sonnet',
|
|
40
|
+
'REFACTOR': 'sonnet',
|
|
41
|
+
'DOCUMENTACIÓN': 'haiku',
|
|
42
|
+
'REVISIÓN DE CÓDIGO': 'sonnet',
|
|
43
|
+
'TESTING': 'sonnet',
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Determina el modelo recomendado a partir de las señales detectadas.
|
|
48
|
+
* Si hay múltiples señales, gana el modelo más capaz.
|
|
49
|
+
*
|
|
50
|
+
* @param {string[]} signalNames - Nombres de señales detectadas.
|
|
51
|
+
* @returns {{ modelo: string, razon: string }}
|
|
52
|
+
*/
|
|
53
|
+
function determinarModelo(signalNames) {
|
|
54
|
+
const JERARQUIA = ['opus', 'sonnet', 'haiku'];
|
|
55
|
+
let modeloElegido = 'sonnet'; // default seguro
|
|
56
|
+
|
|
57
|
+
for (const name of signalNames) {
|
|
58
|
+
const modeloSignal = COMPLEJIDAD_POR_SIGNAL[name];
|
|
59
|
+
if (!modeloSignal) continue;
|
|
60
|
+
const idxElegido = JERARQUIA.indexOf(modeloElegido);
|
|
61
|
+
const idxSignal = JERARQUIA.indexOf(modeloSignal);
|
|
62
|
+
// Menor índice = modelo más capaz; gana el más capaz
|
|
63
|
+
if (idxSignal < idxElegido) {
|
|
64
|
+
modeloElegido = modeloSignal;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const descripciones = {
|
|
69
|
+
haiku: 'Tarea simple (docs/formatting) — Haiku es suficiente y reduce costo ~75%',
|
|
70
|
+
sonnet: 'Tarea de implementación/análisis — Sonnet es el balance óptimo',
|
|
71
|
+
opus: 'Tarea de alta complejidad (arquitectura/seguridad) — Opus recomendado',
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
return { modelo: modeloElegido, razon: descripciones[modeloElegido] };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Señales con patrones en español e inglés
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
|
|
81
|
+
const SIGNALS = [
|
|
82
|
+
{
|
|
83
|
+
name: 'DECISIÓN DE ARQUITECTURA',
|
|
84
|
+
hint: 'Decisión arquitectónica detectada — considerar invocar arquitecto-swl y documentar como ADR en .planning/adrs/',
|
|
85
|
+
patterns: [
|
|
86
|
+
// Español
|
|
87
|
+
'decidimos', 'decidí', 'la decisión es', 'optamos por', 'elegimos',
|
|
88
|
+
'vamos con', 'cambiamos a', 'migramos a', 'reemplazamos',
|
|
89
|
+
'arquitectura', 'diseño del sistema', 'patrón de diseño',
|
|
90
|
+
// Inglés
|
|
91
|
+
'decided', 'decision', 'we chose', 'agreed to', 'architecture',
|
|
92
|
+
'system design', 'design pattern', 'trade-off', 'adr',
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'BUG / ERROR',
|
|
97
|
+
hint: 'Bug o error detectado — considerar invocar depurador-swl con método científico antes de corregir',
|
|
98
|
+
patterns: [
|
|
99
|
+
// Español
|
|
100
|
+
'bug', 'error', 'falla', 'fallo', 'no funciona', 'se rompe', 'roto',
|
|
101
|
+
'crashea', 'excepción', 'traceback', 'stack trace', 'no carga',
|
|
102
|
+
'regresión', 'se cayó', 'no responde', 'timeout',
|
|
103
|
+
// Inglés
|
|
104
|
+
'broken', 'crash', 'exception', 'failing', 'regression',
|
|
105
|
+
'not working', 'stacktrace',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'REQUISITO / FEATURE',
|
|
110
|
+
hint: 'Requisito o feature nueva detectada — considerar flujo completo: discutir-fase → planear-fase → ejecutar-fase',
|
|
111
|
+
patterns: [
|
|
112
|
+
// Español
|
|
113
|
+
'necesitamos', 'hay que agregar', 'falta', 'requiere', 'requisito',
|
|
114
|
+
'feature', 'funcionalidad', 'implementar', 'desarrollar', 'construir',
|
|
115
|
+
'crear', 'nuevo módulo', 'nueva pantalla', 'nuevo endpoint',
|
|
116
|
+
// Inglés
|
|
117
|
+
'implement', 'build', 'create', 'add feature', 'requirement',
|
|
118
|
+
'new module', 'new endpoint',
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'SEGURIDAD',
|
|
123
|
+
hint: 'Tema de seguridad detectado — considerar invocar revisor-seguridad-swl y cargar Skill("checklist-seguridad")',
|
|
124
|
+
patterns: [
|
|
125
|
+
// Español
|
|
126
|
+
'seguridad', 'vulnerabilidad', 'cve', 'inyección', 'xss', 'csrf',
|
|
127
|
+
'autenticación', 'autorización', 'token', 'secreto', 'credencial',
|
|
128
|
+
'owasp', 'penetración', 'auditoría de seguridad',
|
|
129
|
+
// Inglés
|
|
130
|
+
'security', 'vulnerability', 'injection', 'authentication',
|
|
131
|
+
'authorization', 'secret', 'credential', 'pentest',
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'RENDIMIENTO',
|
|
136
|
+
hint: 'Tema de rendimiento detectado — considerar invocar rendimiento-swl y cargar Skill("performance-baseline")',
|
|
137
|
+
patterns: [
|
|
138
|
+
// Español
|
|
139
|
+
'lento', 'rendimiento', 'performance', 'optimizar', 'latencia',
|
|
140
|
+
'cuello de botella', 'bottleneck', 'caché', 'indexar', 'n+1',
|
|
141
|
+
'memoria', 'cpu', 'profiling',
|
|
142
|
+
// Inglés
|
|
143
|
+
'slow', 'optimize', 'latency', 'throughput', 'caching',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'REFACTOR',
|
|
148
|
+
hint: 'Refactorización detectada — considerar revisor-codigo-swl primero para evaluar alcance, luego planificar',
|
|
149
|
+
patterns: [
|
|
150
|
+
// Español
|
|
151
|
+
'refactorizar', 'refactor', 'limpiar', 'simplificar', 'reorganizar',
|
|
152
|
+
'deuda técnica', 'código legacy', 'mejorar la estructura',
|
|
153
|
+
'extraer', 'separar en módulos',
|
|
154
|
+
// Inglés
|
|
155
|
+
'refactor', 'clean up', 'simplify', 'tech debt', 'legacy',
|
|
156
|
+
'restructure', 'extract',
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'DOCUMENTACIÓN',
|
|
161
|
+
hint: 'Documentación detectada — considerar invocar documentador-swl y actualizar docs según regla de documentación obligatoria',
|
|
162
|
+
patterns: [
|
|
163
|
+
// Español
|
|
164
|
+
'documentar', 'documentación', 'readme', 'manual', 'guía',
|
|
165
|
+
'changelog', 'api docs', 'runbook',
|
|
166
|
+
// Inglés
|
|
167
|
+
'document', 'documentation', 'readme',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'REVISIÓN DE CÓDIGO',
|
|
172
|
+
hint: 'Revisión de código detectada — considerar usar /swl:revisar con el lenguaje apropiado',
|
|
173
|
+
patterns: [
|
|
174
|
+
// Español
|
|
175
|
+
'revisar', 'revisión', 'code review', 'pr review', 'pull request',
|
|
176
|
+
'revisar código', 'revisar calidad', 'auditar',
|
|
177
|
+
// Inglés
|
|
178
|
+
'review', 'code review', 'pull request',
|
|
179
|
+
],
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'TESTING',
|
|
183
|
+
hint: 'Testing detectado — considerar invocar tdd-qa-swl y cargar Skill("tdd-workflow")',
|
|
184
|
+
patterns: [
|
|
185
|
+
// Español
|
|
186
|
+
'test', 'prueba', 'cobertura', 'coverage', 'tdd', 'unitario',
|
|
187
|
+
'integración', 'e2e', 'mock', 'fixture',
|
|
188
|
+
// Inglés
|
|
189
|
+
'test', 'coverage', 'unit test', 'integration test',
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
];
|
|
193
|
+
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// Detección
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Verifica si algún patrón aparece como palabra/frase en el texto.
|
|
200
|
+
* Usa lookaround de letras latinas para compatibilidad con texto mixto.
|
|
201
|
+
* @param {string[]} patterns
|
|
202
|
+
* @param {string} text - Texto en minúsculas.
|
|
203
|
+
* @returns {boolean}
|
|
204
|
+
*/
|
|
205
|
+
function anyMatch(patterns, text) {
|
|
206
|
+
for (const phrase of patterns) {
|
|
207
|
+
// Escapar caracteres especiales de regex
|
|
208
|
+
const escaped = phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
209
|
+
const re = new RegExp('(?<![a-záéíóúñü])' + escaped + '(?![a-záéíóúñü])', 'i');
|
|
210
|
+
if (re.test(text)) return true;
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Clasifica el mensaje del usuario.
|
|
217
|
+
* @param {string} prompt
|
|
218
|
+
* @returns {{ hints: string[], signalNames: string[] }}
|
|
219
|
+
*/
|
|
220
|
+
function classify(prompt) {
|
|
221
|
+
const text = (prompt || '').toLowerCase();
|
|
222
|
+
const hints = [];
|
|
223
|
+
const signalNames = [];
|
|
224
|
+
for (const sig of SIGNALS) {
|
|
225
|
+
if (anyMatch(sig.patterns, text)) {
|
|
226
|
+
hints.push(sig.hint);
|
|
227
|
+
signalNames.push(sig.name);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return { hints, signalNames };
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
// Entrypoint
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
|
|
237
|
+
let inputRaw = '';
|
|
238
|
+
|
|
239
|
+
process.stdin.on('data', chunk => { inputRaw += chunk; });
|
|
240
|
+
|
|
241
|
+
process.stdin.on('end', () => {
|
|
242
|
+
try {
|
|
243
|
+
const data = JSON.parse(inputRaw);
|
|
244
|
+
const prompt = data.prompt || '';
|
|
245
|
+
if (!prompt) return;
|
|
246
|
+
|
|
247
|
+
const { hints, signalNames } = classify(prompt);
|
|
248
|
+
if (hints.length === 0) return;
|
|
249
|
+
|
|
250
|
+
const hintList = hints.map(h => '- ' + h).join('\n');
|
|
251
|
+
|
|
252
|
+
// Determinar modelo recomendado según complejidad de las señales detectadas
|
|
253
|
+
const { modelo, razon } = determinarModelo(signalNames);
|
|
254
|
+
const modeloHint = `- Modelo sugerido para esta tarea: **${modelo}** — ${razon}`;
|
|
255
|
+
|
|
256
|
+
const output = {
|
|
257
|
+
hookSpecificOutput: {
|
|
258
|
+
hookEventName: 'UserPromptSubmit',
|
|
259
|
+
additionalContext:
|
|
260
|
+
'Clasificación del mensaje (actúa sobre estos hints si aplican):\n' +
|
|
261
|
+
hintList + '\n' +
|
|
262
|
+
modeloHint +
|
|
263
|
+
'\n\nRecuerda: usar agentes SWL especializados, cargar skills relevantes, seguir CLAUDE.md.',
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
process.stdout.write(JSON.stringify(output));
|
|
268
|
+
} catch (_) {
|
|
269
|
+
// Nunca bloquear por errores internos
|
|
270
|
+
}
|
|
271
|
+
});
|