⚠️ Nota: Este repositorio es un mirror público sincronizado automáticamente desde GitLab. El desarrollo activo, pipelines CI/CD, issues y discusiones técnicas se gestionan en https://gitlab.com/javiergalvez-ia
Caché ETag en 2 Niveles, Gobierno Granular HITL y Protección Anti-SSRF con DNS Pinning
Plugin oficial de ingesta dinámica de OpenAPI, gobierno granular de riesgos (HITL), caché en dos niveles (ETag) y simulación de APIs para el runtime cognitivo jg_agente, desarrollado sobre jg_agente_sdk.
jg_plugin_demoapi permite a clientes y prospectos conectar contratos OpenAPI/Swagger v3.x en tiempo de ejecución o evaluar el comportamiento del agente mediante un entorno mock integrado.
- Desacoplamiento Radical de la Interfaz: Cero uso de
jg_dashboard. Toda la experiencia de interacción, visualización y gobernanza HITL de cara al cliente se gestiona exclusivamente dentro dejg_hub(Livewire 3). - Acceso Determinista Permanente (Zero Fricción): Prohibido el uso de tokens temporales que expiren con errores 419 o 403. El acceso se autentica mediante hash HMAC-SHA256 firmado con la clave de la aplicación:
$accessHash = hash_hmac('sha256', $lead->email, config('app.key')); // Ruta: /demo/api/{accessHash}
- Gobierno Granular de Riesgos (No todos los GET son de bajo riesgo):
- Verbos Mutativos (
POST,PUT,PATCH,DELETE): Clasificados comoRiskLevel.HIGH,ToolType.MUTATIONy compuerta HITL obligatoria. - Lecturas Públicas (
GETestándar): Clasificadas comoRiskLevel.LOW,ToolType.READ, ejecución directa permitida. - Lecturas Sensibles / RBAC: Rutas coincidentes con
/admin/,/private/,/salaries,/billing,/audito con scopes OAuth/RBAC declarados en OpenAPI se catalogan comoRiskLevel.HIGHy escalan obligatoriamente a HITL o verificación de permisos explícitos.
- Verbos Mutativos (
- Seguridad de Red y Anti-SSRF: Toda resolución de dominio externa para descargar especificaciones o ejecutar endpoints pasa por
SSRFValidator.resolve_and_pin_url_async()con DNS Pinning a nivel de socket TCP, bloqueando metadatos de cloud (169.254.169.254), interfaces loopback y rangos privados RFC 1918. - Caché en Dos Niveles:
- Nivel 1 (Memoria en caliente): Reutiliza las instancias
AgentToolya parseadas en<1 mssi el TTL sigue vigente. - Nivel 2 (Revalidación HTTP condicional): Emite
If-None-Matchcon el último ETag. Ante respuesta304 Not Modified, extiende el TTL sin transferir ni re-parsear el documento.
- Nivel 1 (Memoria en caliente): Reutiliza las instancias
El plugin incluye un script que aprovisiona el entorno virtual .venv, vincula la copia local del SDK (jg-agente-sdk) e instala las dependencias:
./install.sh
source .venv/bin/activatepython3 -m venv .venv
source .venv/bin/activate
# 1. Instalar jg-agente-sdk local
pip install -e ../jg_agente_sdk
# 2. Instalar el plugin en modo editable con dependencias de desarrollo
pip install -e ".[dev]"El repositorio dispone de un pipeline local automatizado de calidad (scripts/check.sh):
./scripts/check.shO ejecución directa de la suite de pruebas:
pytest tests/ -vUna vez instalado en el entorno de jg_agente, el runtime detectará automáticamente el entry-point demoapi declarado en pyproject.toml.
Para activarlo en el runtime cognitivo:
ENABLED_PLUGINS=jg_plugin_demoapijg_plugin_demoapi/
├── jg_plugin_demoapi/
│ ├── cache.py # Caché Nivel 1 (Memoria) y Nivel 2 (ETag / 304)
│ ├── mock.py # Fixture OpenAPI 3.x canónico
│ ├── parser.py # Parser OpenAPI 3.x y generador de AgentTools
│ ├── plugin.py # Clase principal DemoApiPlugin (BasePlugin)
│ ├── risk.py # Clasificador determinista de riesgos y directivas HITL
│ ├── ssrf.py # Validador Anti-SSRF y resolución con DNS Pinning
│ └── tools.py # Herramientas canónicas y gestor de ingesta
├── tests/ # Suite de 21 tests unitarios
├── scripts/
│ └── check.sh # Pipeline de verificación (Ruff + Pytest)
├── install.sh # Script de instalación de entorno virtual
├── pyproject.toml # Configuración del paquete y reglas de linter
└── PROJECT_CONTEXT.md # Contexto técnico y especificaciones vivas del componente