@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,386 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: langchain-langraph
|
|
3
|
+
description: >
|
|
4
|
+
LangChain para chains y document loaders; LangGraph para agentes con estado
|
|
5
|
+
y flujos condicionales. Cargar cuando se construya un pipeline RAG, agente
|
|
6
|
+
con herramientas, cadena de prompts multi-paso, o grafo de estados para
|
|
7
|
+
workflows LLM complejos.
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
herramientasPermitidas: [Read, Glob]
|
|
10
|
+
evolvable: true # default para skill estandar
|
|
11
|
+
exclusiones:
|
|
12
|
+
- "No cargar para llamadas directas a la API de LLM sin pipeline (una sola llamada, sin RAG, sin estado) — para integraciones directas con Anthropic/OpenAI cargar `prompt-engineering` o usar el SDK directamente."
|
|
13
|
+
- "No cargar para RAG con arquitectura propia sin LangChain (vector stores directos con pgvector, embeddings manuales) — para RAG sin LangChain cargar `rag-arquitectura`."
|
|
14
|
+
- "No cargar para pipelines de datos ETL con LLM como paso de transformación masiva — para ETL con LLM cargar `datos-etl`."
|
|
15
|
+
- "No cargar para extracción de datos estructurados de documentos con LLM (function calling, structured outputs) sin estado ni grafo — para extracción estructurada cargar `structured-outputs`."
|
|
16
|
+
---
|
|
17
|
+
# LangChain y LangGraph
|
|
18
|
+
|
|
19
|
+
## Cuándo NO cargar
|
|
20
|
+
|
|
21
|
+
- La tarea es una llamada directa a la API del LLM sin cadena de pasos (una sola invocación): cargar `prompt-engineering` o usar el SDK directamente.
|
|
22
|
+
- La implementación de RAG no usa LangChain (pgvector directo, embeddings manuales): cargar `rag-arquitectura`.
|
|
23
|
+
- El LLM es un paso dentro de un pipeline ETL masivo (transformación de datos a escala): cargar `datos-etl`.
|
|
24
|
+
- La tarea es extracción de datos estructurados con function calling sin estado ni grafo: cargar `structured-outputs`.
|
|
25
|
+
|
|
26
|
+
## Cuándo usar cada herramienta
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
API directa Claude/OpenAI → Llamada única, sin estado, transformación simple.
|
|
30
|
+
Menos dependencias. Máxima simplicidad y control.
|
|
31
|
+
|
|
32
|
+
LangChain → Pipeline de pasos: load → split → embed → retrieve → generate.
|
|
33
|
+
Los pasos son lineales y predecibles. Document loaders integrados.
|
|
34
|
+
|
|
35
|
+
LangGraph → Flujo con estado, condicionales, loops, agentes autónomos.
|
|
36
|
+
El siguiente paso depende del resultado del anterior.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## LangChain: pipeline RAG mínimo funcional
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from langchain_community.document_loaders import PyPDFLoader
|
|
45
|
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
46
|
+
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
|
|
47
|
+
from langchain_community.vectorstores import PGVector
|
|
48
|
+
from langchain.chains import RetrievalQA
|
|
49
|
+
|
|
50
|
+
# 1. Cargar documentos
|
|
51
|
+
loader = PyPDFLoader("manual.pdf")
|
|
52
|
+
documentos = loader.load()
|
|
53
|
+
|
|
54
|
+
# 2. Dividir en chunks
|
|
55
|
+
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
|
|
56
|
+
chunks = splitter.split_documents(documentos)
|
|
57
|
+
|
|
58
|
+
# 3. Embeddings y vector store
|
|
59
|
+
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
|
|
60
|
+
vectorstore = PGVector.from_documents(
|
|
61
|
+
documents=chunks,
|
|
62
|
+
embedding=embeddings,
|
|
63
|
+
connection_string=DATABASE_URL,
|
|
64
|
+
collection_name="manual_chunks",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# 4. Chain de QA
|
|
68
|
+
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
|
|
69
|
+
chain = RetrievalQA.from_chain_type(
|
|
70
|
+
llm=llm,
|
|
71
|
+
retriever=vectorstore.as_retriever(search_kwargs={"k": 4}),
|
|
72
|
+
)
|
|
73
|
+
respuesta = chain.invoke({"query": "¿Cómo reiniciar el sistema?"})
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## LangChain: carga incremental de documentos
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
from langchain_community.document_loaders import DirectoryLoader, TextLoader
|
|
82
|
+
from langchain_community.document_loaders.csv_loader import CSVLoader
|
|
83
|
+
|
|
84
|
+
# Cargar todos los .txt de un directorio
|
|
85
|
+
loader = DirectoryLoader("docs/", glob="**/*.txt", loader_cls=TextLoader)
|
|
86
|
+
documentos = loader.load()
|
|
87
|
+
|
|
88
|
+
# Cargar CSV con metadata
|
|
89
|
+
loader_csv = CSVLoader(
|
|
90
|
+
file_path="productos.csv",
|
|
91
|
+
source_column="nombre", # columna usada como metadata["source"]
|
|
92
|
+
csv_args={"delimiter": ","},
|
|
93
|
+
)
|
|
94
|
+
documentos_csv = loader_csv.load()
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## LangChain: RAG con Claude (Anthropic)
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
from langchain_anthropic import ChatAnthropic
|
|
103
|
+
from langchain_core.prompts import ChatPromptTemplate
|
|
104
|
+
from langchain_core.output_parsers import StrOutputParser
|
|
105
|
+
from langchain_core.runnables import RunnablePassthrough
|
|
106
|
+
|
|
107
|
+
llm = ChatAnthropic(model="claude-3-5-haiku-20241022", temperature=0)
|
|
108
|
+
|
|
109
|
+
plantilla = ChatPromptTemplate.from_messages([
|
|
110
|
+
("system", "Responde únicamente usando el contexto proporcionado. "
|
|
111
|
+
"Si la respuesta no está en el contexto, di 'No lo sé'.\n\n"
|
|
112
|
+
"Contexto:\n{contexto}"),
|
|
113
|
+
("human", "{pregunta}"),
|
|
114
|
+
])
|
|
115
|
+
|
|
116
|
+
def formatear_docs(docs):
|
|
117
|
+
return "\n\n".join(doc.page_content for doc in docs)
|
|
118
|
+
|
|
119
|
+
cadena_rag = (
|
|
120
|
+
{"contexto": retriever | formatear_docs, "pregunta": RunnablePassthrough()}
|
|
121
|
+
| plantilla
|
|
122
|
+
| llm
|
|
123
|
+
| StrOutputParser()
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
respuesta = cadena_rag.invoke("¿Cuáles son los requisitos del sistema?")
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## LangChain: streaming de respuestas
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
# Usar streaming para mejorar la UX percibida en respuestas largas
|
|
135
|
+
async for trozo in cadena_rag.astream("¿Qué es el contrato de soporte?"):
|
|
136
|
+
print(trozo, end="", flush=True)
|
|
137
|
+
|
|
138
|
+
# En FastAPI con SSE
|
|
139
|
+
from fastapi.responses import StreamingResponse
|
|
140
|
+
|
|
141
|
+
async def generar_stream(pregunta: str):
|
|
142
|
+
async for trozo in cadena_rag.astream(pregunta):
|
|
143
|
+
yield f"data: {trozo}\n\n"
|
|
144
|
+
|
|
145
|
+
@router.get("/chat/stream")
|
|
146
|
+
async def chat_stream(pregunta: str):
|
|
147
|
+
return StreamingResponse(generar_stream(pregunta), media_type="text/event-stream")
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## LangGraph: agente con herramientas
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from langgraph.graph import StateGraph, END
|
|
156
|
+
from langgraph.prebuilt import ToolNode
|
|
157
|
+
from typing import TypedDict, Annotated
|
|
158
|
+
import operator
|
|
159
|
+
|
|
160
|
+
class EstadoAgente(TypedDict):
|
|
161
|
+
mensajes: Annotated[list, operator.add]
|
|
162
|
+
contexto: str
|
|
163
|
+
iteraciones: int
|
|
164
|
+
|
|
165
|
+
def nodo_razonamiento(estado: EstadoAgente) -> dict:
|
|
166
|
+
respuesta = llm_con_herramientas.invoke(estado["mensajes"])
|
|
167
|
+
return {"mensajes": [respuesta], "iteraciones": estado["iteraciones"] + 1}
|
|
168
|
+
|
|
169
|
+
def debe_continuar(estado: EstadoAgente) -> str:
|
|
170
|
+
ultimo = estado["mensajes"][-1]
|
|
171
|
+
if estado["iteraciones"] >= 10:
|
|
172
|
+
return END # Límite de seguridad — evita loops infinitos
|
|
173
|
+
if hasattr(ultimo, "tool_calls") and ultimo.tool_calls:
|
|
174
|
+
return "herramientas"
|
|
175
|
+
return END
|
|
176
|
+
|
|
177
|
+
grafo = StateGraph(EstadoAgente)
|
|
178
|
+
grafo.add_node("razonar", nodo_razonamiento)
|
|
179
|
+
grafo.add_node("herramientas", ToolNode(herramientas))
|
|
180
|
+
grafo.set_entry_point("razonar")
|
|
181
|
+
grafo.add_conditional_edges("razonar", debe_continuar)
|
|
182
|
+
grafo.add_edge("herramientas", "razonar")
|
|
183
|
+
|
|
184
|
+
# Compilar una sola vez — singleton
|
|
185
|
+
agente = grafo.compile()
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## LangGraph: estado con persistencia (human-in-the-loop)
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
from langgraph.checkpoint.memory import MemorySaver
|
|
194
|
+
from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
|
|
195
|
+
|
|
196
|
+
# En memoria — útil para desarrollo
|
|
197
|
+
checkpointer_dev = MemorySaver()
|
|
198
|
+
|
|
199
|
+
# En producción con PostgreSQL
|
|
200
|
+
async with AsyncPostgresSaver.from_conn_string(DATABASE_URL) as checkpointer:
|
|
201
|
+
agente = grafo.compile(
|
|
202
|
+
checkpointer=checkpointer,
|
|
203
|
+
interrupt_before=["herramientas"], # pausa antes de ejecutar herramientas
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# Continuar una conversación existente
|
|
207
|
+
config = {"configurable": {"thread_id": "sesion-usuario-123"}}
|
|
208
|
+
resultado = await agente.ainvoke({"mensajes": [mensaje_usuario]}, config=config)
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## LangGraph: nodo de RAG integrado en grafo
|
|
214
|
+
|
|
215
|
+
```python
|
|
216
|
+
from langchain_core.messages import HumanMessage, AIMessage
|
|
217
|
+
|
|
218
|
+
def nodo_recuperar(estado: EstadoAgente) -> dict:
|
|
219
|
+
"""Recupera contexto relevante del vector store."""
|
|
220
|
+
ultima_pregunta = estado["mensajes"][-1].content
|
|
221
|
+
docs = retriever.invoke(ultima_pregunta)
|
|
222
|
+
contexto = "\n\n".join(d.page_content for d in docs)
|
|
223
|
+
return {"contexto": contexto}
|
|
224
|
+
|
|
225
|
+
def nodo_generar(estado: EstadoAgente) -> dict:
|
|
226
|
+
"""Genera respuesta usando el contexto recuperado."""
|
|
227
|
+
prompt = f"Contexto:\n{estado['contexto']}\n\nPregunta: {estado['mensajes'][-1].content}"
|
|
228
|
+
respuesta = llm.invoke(prompt)
|
|
229
|
+
return {"mensajes": [AIMessage(content=respuesta.content)]}
|
|
230
|
+
|
|
231
|
+
grafo_rag = StateGraph(EstadoAgente)
|
|
232
|
+
grafo_rag.add_node("recuperar", nodo_recuperar)
|
|
233
|
+
grafo_rag.add_node("generar", nodo_generar)
|
|
234
|
+
grafo_rag.set_entry_point("recuperar")
|
|
235
|
+
grafo_rag.add_edge("recuperar", "generar")
|
|
236
|
+
grafo_rag.add_edge("generar", END)
|
|
237
|
+
pipeline_rag = grafo_rag.compile()
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Estrategias de chunking y por qué importan
|
|
243
|
+
|
|
244
|
+
| Tipo | Splitter | chunk_size | overlap | Cuándo usar |
|
|
245
|
+
|------|----------|------------|---------|-------------|
|
|
246
|
+
| Texto general | RecursiveCharacterTextSplitter | 1000 | 200 | Default seguro |
|
|
247
|
+
| Docs técnicos con headers | MarkdownHeaderTextSplitter | — | — | Preserva jerarquía |
|
|
248
|
+
| Código fuente | RecursiveCharacterTextSplitter (lenguaje) | 500 | 50 | AST-aware |
|
|
249
|
+
| Contratos/legal | RecursiveCharacterTextSplitter | 1500 | 300 | Párrafos largos |
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
import tiktoken
|
|
253
|
+
|
|
254
|
+
def contar_tokens(texto: str, modelo: str = "gpt-4o-mini") -> int:
|
|
255
|
+
"""Contar tokens reales, no caracteres."""
|
|
256
|
+
enc = tiktoken.encoding_for_model(modelo)
|
|
257
|
+
return len(enc.encode(texto))
|
|
258
|
+
|
|
259
|
+
# Verificar que los chunks no superan la ventana de contexto del modelo
|
|
260
|
+
for chunk in chunks:
|
|
261
|
+
tokens = contar_tokens(chunk.page_content)
|
|
262
|
+
assert tokens <= 8000, f"Chunk demasiado grande: {tokens} tokens"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Herramientas personalizadas para agentes
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
from langchain_core.tools import tool
|
|
271
|
+
from pydantic import BaseModel, Field
|
|
272
|
+
|
|
273
|
+
class BuscarProductoInput(BaseModel):
|
|
274
|
+
nombre: str = Field(description="Nombre o descripción del producto a buscar")
|
|
275
|
+
limite: int = Field(default=5, description="Número máximo de resultados")
|
|
276
|
+
|
|
277
|
+
@tool(args_schema=BuscarProductoInput)
|
|
278
|
+
def buscar_producto(nombre: str, limite: int = 5) -> list[dict]:
|
|
279
|
+
"""Busca productos en el catálogo de la empresa por nombre o descripción."""
|
|
280
|
+
# lógica real de búsqueda
|
|
281
|
+
return [{"id": 1, "nombre": nombre, "precio": 100.0}]
|
|
282
|
+
|
|
283
|
+
# Asociar herramientas al LLM
|
|
284
|
+
herramientas = [buscar_producto]
|
|
285
|
+
llm_con_herramientas = llm.bind_tools(herramientas)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Reranking — mejora de precisión post-retrieval
|
|
291
|
+
|
|
292
|
+
El semantic search devuelve los k vectores más cercanos, pero cercanía
|
|
293
|
+
vectorial no es lo mismo que relevancia semántica. El reranking aplica un
|
|
294
|
+
segundo modelo especializado para reordenar los resultados:
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
Semantic search (top-10) → Reranker → Reordenados por relevancia real (top-3)
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Implementación con threshold adaptativo
|
|
301
|
+
|
|
302
|
+
```python
|
|
303
|
+
import cohere
|
|
304
|
+
|
|
305
|
+
co = cohere.ClientV2()
|
|
306
|
+
|
|
307
|
+
def buscar_con_reranking(
|
|
308
|
+
query: str,
|
|
309
|
+
resultados_raw: list[str],
|
|
310
|
+
threshold: float = 0.9,
|
|
311
|
+
min_resultados: int = 3,
|
|
312
|
+
) -> list[dict]:
|
|
313
|
+
"""Reranking con threshold que baja si hay pocos resultados."""
|
|
314
|
+
reranked = co.rerank(
|
|
315
|
+
query=query,
|
|
316
|
+
documents=resultados_raw,
|
|
317
|
+
model="rerank-v3.5",
|
|
318
|
+
top_n=10,
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
filtrados = [
|
|
322
|
+
{"text": resultados_raw[r.index], "score": r.relevance_score}
|
|
323
|
+
for r in reranked.results
|
|
324
|
+
if r.relevance_score >= threshold
|
|
325
|
+
]
|
|
326
|
+
|
|
327
|
+
# Threshold adaptativo: garantiza mínimo de resultados
|
|
328
|
+
while len(filtrados) < min_resultados and threshold > 0.3:
|
|
329
|
+
threshold -= 0.05
|
|
330
|
+
filtrados = [
|
|
331
|
+
{"text": resultados_raw[r.index], "score": r.relevance_score}
|
|
332
|
+
for r in reranked.results
|
|
333
|
+
if r.relevance_score >= threshold
|
|
334
|
+
]
|
|
335
|
+
|
|
336
|
+
return filtrados
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Cuándo usar reranking
|
|
340
|
+
|
|
341
|
+
| Situación | Reranking necesario |
|
|
342
|
+
|-----------|-------------------|
|
|
343
|
+
| Prototipo / demo | No — semantic search directo es suficiente |
|
|
344
|
+
| Corpus > 10K documentos | Sí — aumenta precisión significativamente |
|
|
345
|
+
| Queries ambiguos | Sí — reranker entiende semántica mejor que distancia vectorial |
|
|
346
|
+
| Alta precisión requerida | Sí — reduce falsos positivos en top-k |
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## MUST DO / MUST NOT DO
|
|
351
|
+
|
|
352
|
+
### Obligatorio
|
|
353
|
+
- Definir límite de iteraciones en CADA agente LangGraph (`iteraciones >= 10 → END`)
|
|
354
|
+
- Usar streaming (`astream`) para respuestas largas — mejora UX percibida
|
|
355
|
+
- Sanitizar inputs del usuario antes de incluirlos en prompts
|
|
356
|
+
- Evaluar con RAGAS antes de desplegar RAG en producción
|
|
357
|
+
- Compilar el grafo una sola vez como singleton del módulo
|
|
358
|
+
- Contar tokens con `tiktoken` antes de procesar corpus grandes
|
|
359
|
+
|
|
360
|
+
### Prohibido
|
|
361
|
+
- NUNCA incluir datos sensibles (PII, tokens, contraseñas) en embeddings sin cifrar
|
|
362
|
+
- NUNCA usar temperatura alta (> 0.3) para tareas que requieren precisión factual
|
|
363
|
+
- NUNCA hacer embedding en loops uno a uno — usar `embed_documents(lista)` en lote
|
|
364
|
+
- NUNCA recompilar el grafo LangGraph por cada request HTTP
|
|
365
|
+
- NUNCA confiar en outputs LLM sin validar contra schema Pydantic cuando son estructurados
|
|
366
|
+
- NUNCA ejecutar código generado por un LLM sin sandbox
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Tabla de referencias
|
|
371
|
+
|
|
372
|
+
| Tema | Archivo |
|
|
373
|
+
|------|---------|
|
|
374
|
+
| Vectorstores: pgvector, Chroma, Pinecone, Weaviate | recursos/vectorstores.md |
|
|
375
|
+
| Evaluación RAG: RAGAS, hallucination detection | recursos/evaluacion-rag.md |
|
|
376
|
+
| Modelo de madurez RAG: Crawl → Walk → Run | recursos/rag-maturity-model.md |
|
|
377
|
+
|
|
378
|
+
## Gotchas / Errores comunes no obvios
|
|
379
|
+
|
|
380
|
+
**El grafo LangGraph recompilado en cada request HTTP no reutiliza el `checkpointer` y pierde la persistencia de estado entre llamadas**: si `grafo.compile(checkpointer=checkpointer)` se llama dentro de una función de endpoint (en lugar de como singleton del módulo), cada request crea un nuevo checkpointer en memoria y el estado de la conversación anterior se pierde. Causa: el checkpointer de `MemorySaver` almacena el estado en el objeto Python, no en disco. Fix: compilar el grafo una sola vez al iniciar la aplicación y guardarlo como variable de módulo. Para persistencia real entre reinicios, usar `AsyncPostgresSaver` con la connection string del proyecto.
|
|
381
|
+
|
|
382
|
+
**`RecursiveCharacterTextSplitter` con `chunk_overlap=200` produce chunks duplicados en documentos con secciones repetitivas (encabezados de página, footers de contrato)**: si el documento tiene un encabezado de 150 caracteres que se repite en cada página y el overlap es 200, ese encabezado aparece en el inicio de cada chunk de las páginas adyacentes, contaminando los embeddings con texto irrelevante. Causa: el splitter no tiene conciencia semántica de la estructura del documento. Fix: para documentos con headers/footers repetitivos, preprocesar el texto eliminando los patrones repetitivos con regex antes de pasar al splitter, o usar `MarkdownHeaderTextSplitter` que respeta la jerarquía semántica del documento.
|
|
383
|
+
|
|
384
|
+
**`LangChain` llama a `embed_documents([])` con una lista vacía cuando el loader no encuentra archivos, causando un error en algunos proveedores de embeddings (Cohere, local) que no aceptan listas vacías**: si el `DirectoryLoader` no encuentra archivos que coincidan con el glob, retorna `[]`, y la cadena RAG falla en el paso de embedding con un error críptico del proveedor en lugar de un mensaje claro. Causa: LangChain no valida que la lista de documentos sea no vacía antes de llamar al proveedor de embeddings. Fix: agregar `if not documentos: raise ValueError("No se encontraron documentos para indexar")` después de `loader.load()` para detectar el problema antes de llegar al proveedor.
|
|
385
|
+
|
|
386
|
+
**El threshold adaptativo del reranker puede devolver resultados irrelevantes cuando el corpus es pequeño y todos los documentos tienen puntuaciones bajas**: si el corpus tiene 50 documentos sobre un dominio específico y la query es sobre un tema diferente, todos los scores serán menores a 0.3. El threshold adaptativo baja indefinidamente hasta `0.3` y devuelve los `min_resultados` documentos menos malos, que son igualmente irrelevantes. Causa: el threshold adaptativo garantiza un mínimo de resultados pero no garantiza relevancia. Fix: agregar una condición de parada basada en el score absoluto mínimo aceptable: si todos los scores de `reranked.results` son menores a `0.2`, devolver lista vacía y responder al usuario "No encontré información relevante sobre este tema en el corpus disponible".
|