Commit Graph
4 Commits
Author SHA1 Message Date
OpenCode 6ff2b27556 Fix MCP crash when DB key exists without NEXUS_MASTER_KEY
KeyResolver now wraps getApiKey in try/catch and falls back to env instead of
crashing startup. ProvidersStore.getApiKey returns undefined when the cipher is
disabled rather than throwing. Server starts cleanly with env-only, and uses the
encrypted DB key when the master key is present.
2026-08-17 18:02:35 +07:00
OpenCode 679e56424b Add admin web UI (Phase 2): spend dashboard, media gallery, provider management
Fastify + single-page frontend on shared @nexusai/core. Reads the same SQLite
journal and media dir. Features: usage stats (by provider/capability/day),
content gallery (image/audio/video with local file serving + path-traversal
guard), provider CRUD with encrypted keys (masked in UI), enable/disable,
set-default, and real key validation via zero-cost /media/models call.
Adds Journal.getById and NordRouterMediaProvider.checkKey to core.
2026-08-17 17:22:07 +07:00
OpenCode 62c692c5a1 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.
2026-08-17 17:12:26 +07:00
OpenCode 02fc536e85 Add NexusAI: universal MCP service (TTS/STT/image/video/music/web-search)
Monorepo-lite with shared @nexusai/core and @nexusai/mcp-server (stdio).
Provider-agnostic tools with explicit provider selection; NordRouter adapter
(media generate/poll/download, estimate, upload, models) and search via
perplexity/sonar. Local STT via faster-whisper uv sidecar. SQLite journal of
every generation for usage stats and future admin. 10 MCP tools.
2026-08-17 17:06:47 +07:00