API Key Proxy Vault (Ephemeral Secret Lease System)
Status: in_progress | Score: 65% | Γltima actualizaciΓ³n: 2026-06-29
VisiΓ³n General
Section titled βVisiΓ³n GeneralβXavier actΓΊa como proxy de confianza para API keys de terceros (LLM providers, servicios externos). Las claves se almacenan cifradas en el sistema, y cuando un agente necesita una, Xavier le presta una API key efΓmera con TTL que se revoca automΓ‘ticamente al finalizar la tarea o expirar su tiempo de vida. Esto previene:
- Robo/exfiltraciΓ³n: Si un agente es comprometido, su lease expira automΓ‘ticamente
- Uso no autorizado: Las keys nunca se exponen directamente; van inyectadas en el proxy HTTP
- AuditorΓa total: Cada lend, revoke y uso queda registrado
Arquitectura
Section titled βArquitecturaβ βββββββββββββββββββββββ β HardwareVault β (keyring/DPAPI) β (cifrado por SO) β ββββββββ¬βββββββββββββββ β ββββββββΌβββββββββββββββ β KeyLendingEngine β βββ KeyLeaseManager (nuevo) β leases + TTL β ββββ¬βββββββββββββ¬ββββββ β β ββββββββββββββΌβββ ββββββββΌββββββββββββ β Agent β β ProxyUseCase β β (Jules, etc) β β (secret injection) β βββββββββββββββββ βββββββββββββββββββββEstado Actual (65% implementado)
Section titled βEstado Actual (65% implementado)ββ COMPLETO (65 pts)
Section titled ββ COMPLETO (65 pts)β| Componente | % | Notas |
|---|---|---|
| HardwareVault (keyring) | 100% | DPAPI/Keychain funcional |
| LocalSecretsVault (AES-256-GCM) | 100% | Cifrado en disco con MasterKeyManager |
| SecretStore trait | 100% | AbstracciΓ³n backend lista |
| EphemeralLease struct | 100% | UUID + TTL + agente |
| KeyLendingEngine (coordination) | 100% | lend/revoke/list/cleanup_expired |
| SecretInjectionStrategy | 100% | Bearer, X-API-Key, GitHubToken |
| GenericProxyRequest.lease_token | 100% | InyecciΓ³n en proxy |
| AuditLogger (QmdAuditLogger) | 100% | Logging SQLite de operaciones |
CLI xavier secrets |
100% | lend, list-leases, revoke, status |
CLI xavier vault |
100% | set, get, delete |
| ModelProviderConfig (env/fallback vault) | 100% | Lee de vault si env var no existe |
| Secret injection en proxy_use_case | 100% | Lease token resuelve e inyecta key |
| Anomaly scanner | 30% | Existe scanner pero no conectado a leases |
| UI panel | 30% | SecurityConfigPanel para API Tokens (parcial) |
π‘ PARCIAL (15 pts)
Section titled βπ‘ PARCIAL (15 pts)β| Componente | % | Gap |
|---|---|---|
| ModelProviderClient β lease | 30% | Lee de env/vault directamente, NO usa KeyLendingEngine |
| Auto-revoke on task complete | 10% | No hay hook on_task_complete que revoque leases |
| Rate limit tracking β lease | 40% | RateLimitManager existe pero no integrado con leases |
| OpenBao/SecretStore | 20% | Existe stub de OpenBao pero no implementado |
β FALTANTE (20 pts)
Section titled ββ FALTANTE (20 pts)β| Componente | % | DescripciΓ³n |
|---|---|---|
| KeyLeaseManager (wrapper agente) | 0% | Capa que intercepta ModelProviderClient.generate_text() β solicita lease |
| Agent lifecycle hooks | 0% | on_task_start() β lend, on_task_complete() β revoke |
| Anti-exfiltraciΓ³n detector | 0% | Detecta si una API key se usa fuera del proxy |
| Dashboard UI leases | 0% | Panel admin con leases activos, revoke button, histΓ³rico |
| MCP tool secret resolution | 0% | MCP tools no usan el sistema de leases |
Sub-features Requeridas (Para Jules)
Section titled βSub-features Requeridas (Para Jules)βVer issues correspondientes:
- #F1: KeyLeaseManager β wrapper que intercepta ModelProviderClient
- #F2: Agent Lifecycle Hooks β on_task_start/complete
- #F3: Leak Detector β anti-exfiltraciΓ³n
- #F4: Dashboard UI β Leases activos + histΓ³rico
- #F5: MCP Secret Resolution β leases para MCP tools
- #F6: OpenBao backend implementaciΓ³n real
- #F7: z.ai / opencode provider (GLM + OpenCode CLI)
Providers Soportados (Target)
Section titled βProviders Soportados (Target)β| Provider | API Base | Status |
|---|---|---|
| OpenAI | api.openai.com/v1 | β |
| Anthropic | api.anthropic.com/v1 | β |
| DeepSeek | api.deepseek.com/v1 | β |
| Groq | api.groq.com/openai/v1 | β |
| MiniMax | api.minimax.chat/v1 | β |
| Gemini | generativelanguage.googleapis.com | β |
| z.ai (GLM) | api.z.ai/v1 | β NUEVO |
| OpenCode CLI | N/A (CLI call) | β NUEVO |
Target Score Post-ImplementaciΓ³n: ~100%
Section titled βTarget Score Post-ImplementaciΓ³n: ~100%βFunctional Encryption Example
Section titled βFunctional Encryption ExampleβEnable AES-256-GCM encryption in your .env configuration:
# Enable secure storage encryption at restXAVIER_ENCRYPTION_KEY="argon2-derived-base64-or-raw-32byte-hex-string"XAVIER_JWT_SECRET="secure-jwt-signing-secret"When active, database entries are transparently encrypted prior to persistence, ensuring data safety even in untrusted runtime environments.