Add managed provider keys: encrypted store + env>DB resolver

AES-256-GCM encryption (KeyCipher) with master key from NEXUS_MASTER_KEY,
never persisted. ProvidersStore in SQLite: CRUD, enable/disable, default,
encrypted api keys, masked views for UI. KeyResolver applies env>DB precedence
and supports multiple providers. context.ts registers providers dynamically
from resolved config; backward compatible with env-only setups.
This commit is contained in:
OpenCode
2026-08-17 17:12:26 +07:00
parent 02fc536e85
commit 62c692c5a1
9 changed files with 469 additions and 13 deletions
+10
View File
@@ -14,6 +14,16 @@ NEXUS_EMBED_MAX_BYTES=10485760
# Log level: debug | info | warn | error (logs go to stderr)
NEXUS_LOG_LEVEL=info
# --- Managed provider keys (optional, for admin-managed keys) ---
# Master secret used to encrypt provider API keys stored in SQLite (AES-256-GCM).
# Accepts a 64-char hex string or any passphrase. NEVER stored in the DB.
# If unset, only env keys (e.g. NORDROUTER_API_KEY) are used.
# Generate: openssl rand -hex 32
# NEXUS_MASTER_KEY=
# Optional separate DB for the providers store (defaults to NEXUS_DB_PATH)
# NEXUS_PROVIDERS_DB_PATH=./media-output/nexus.sqlite
# Key precedence: <NAME>_API_KEY env > encrypted DB entry
# --- Local STT (faster-whisper via uv sidecar) ---
# Launcher: "uv" (recommended, auto-installs deps) or a python interpreter path
NEXUS_STT_PYTHON=uv