Saltar al contenido

Arquitectura

De la petición a la evidencia

Un proceso con un escritor y su propio WAL produce una secuencia ordenada. La wheel publicada es py3-none-any: todo funciona en Python puro, y la extensión aegis_rust acelera partes concretas cuando está instalada.
llamante ──────────►  gateway Aegis  ──────────────────────►  proveedor
                        │  admisión: auth · alcance · límites
                        │  WAF · rate limiting · sesión
                        │
                        │  (política superada) reenvío
                        │  ◄──────────── respuesta ──────────
                        │
                        │  redactar → hash → firmar → WAL + fsync → hoja MMR
                        │  (los rechazos se confirman en la misma cadena
                        │   firmada antes de devolver el error)
                        │
llamante ◄──────────  respuesta + X-Aegis-Evidence-Status
                        + X-Aegis-Request-ID + cabeceras de prueba X-Aegis-MMR-*
No-streaming

El registro de evidencia se confirma antes de que la respuesta sea observable por el llamante.

Streaming

Eventos saneados salen de forma incremental por una cola acotada mientras el estado es pending-terminal. Un resumen terminal exacto se confirma y sólo entonces se emite el marcador final; si el commit falla, el marcador se retiene.

Fail-closed

Sin firmante, sin limitador distribuido o con un ledger que no reproduce, no hay servicio.

Topología

Varios workers compartiendo un WAL no dan una cadena ordenada única; no hay orden total entre procesos ni regiones.

Ciclo de vida

La respuesta sale después de la evidencia, no antes

Pulse «Enviar petición» y siga el orden real del gateway en llamadas no-streaming: su aplicación sólo ve la respuesta cuando el registro ya es durable.

paso 0 / 8
  1. 01admisión
    Admisión

    Autenticación, alcance y límites del cuerpo.

  2. 02admisión
    WAF y rate limiting

    Regex normalizadas, sesión y limitador (Redis en producción).

  3. 03proveedor
    Reenvío al proveedor

    Sólo si la política se supera. Los rechazos saltan directamente al registro.

  4. 04proveedor
    Respuesta del proveedor

    El gateway la retiene: todavía no la ve su aplicación.

  5. 05evidencia
    Redactar y hashear

    Redacción opt-in; el WAL guarda hashes en el path declarado.

  6. 06evidencia
    Firmar y encadenar

    HMAC por defecto; Ed25519 o ML-DSA-65 si se configura.

  7. 07evidencia
    WAL + fsync → hoja MMR

    Commit durable (group commit). Si falla, 503 y ningún nodo sin confirmar.

  8. 08emisión
    Emisión

    Respuesta + X-Aegis-Evidence-Status + cabeceras de prueba MMR.

En streaming, los eventos saneados salen de forma incremental con estado pending-terminal; un resumen terminal exacto se confirma y sólo entonces se emite el marcador final.

Piezas del núcleo

Integración

Cambie un endpoint, no su código

Gateway compatible con OpenAI y con la API nativa de Anthropic. Para Python hay un drop-in; para TypeScript, integración nativa del proveedor.

.env
# Antes
OPENAI_BASE_URL=https://api.openai.com/v1
 
# Después — el tráfico pasa por Aegis
OPENAI_BASE_URL=http://aegis:8080/v1
shell
# Evaluación local (modo desarrollo: desactiva los controles
# que dan sentido a los registros; sólo para leer la API)
git clone https://github.com/JuanLunaIA/aegis-latent-core.git
cd aegis-latent-core && python3 -m venv .venv && . .venv/bin/activate
python -m pip install --require-hashes -r requirements.lock
python -m pip install --no-deps -e .
AEGIS_SECURITY_ENFORCEMENT_MODE=development AEGIS_AUTH_DISABLED=true \
AEGIS_BACKEND_URL=http://127.0.0.1:9999 aegis

Imagen firmada: ghcr.io/juanlunaia/aegis-latent-core:5.0.1. Aviso de canal:pip install aegis-latent-core instala hoy 4.1.2, no 5.0.1.

Árbol del repositorio

7444 tests pasando, 39 omitidos, 0 fallidos · cobertura de sentencias 91,3 % (2026-09-24) · el mínimo que exige CI es 65 %.

wal.rs
WAL con mmap; bloqueo exclusivo por segmento (UC-051).
mmr.rs · crdt_mmr.rs
MMR y CRDT Causal-Merkle (converge; no da orden global, UC-038).
pqc.rs · pqc_trait.rs
ML-DSA-65 detrás de un trait reemplazable.
zk_mmr.rs · zk_bindings.rs
Circuito de inclusión ZK opt-in (feature zk-spartan). Experimental.