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.
This commit is contained in:
+24
-2
@@ -16,8 +16,9 @@
|
||||
```
|
||||
NexusAI/
|
||||
├── packages/
|
||||
│ ├── core/ # провайдеры, media-storage, journal, типы, registry
|
||||
│ └── mcp-server/ # stdio MCP-сервер (10 инструментов)
|
||||
│ ├── core/ # провайдеры, media-storage, journal, ключи, типы, registry
|
||||
│ ├── mcp-server/ # stdio MCP-сервер (10 инструментов)
|
||||
│ └── admin/ # веб-админка (Fastify + лёгкий фронт)
|
||||
├── sidecar/ # faster-whisper STT (PEP 723, запуск через uv)
|
||||
├── .env.example
|
||||
└── .opencode/opencode.json
|
||||
@@ -148,6 +149,27 @@ faster-whisper скачивает модель с HuggingFace. Если `hugging
|
||||
- либо предзагрузить модель и указать путь: `NEXUS_STT_MODEL=/abs/model-dir` + `NEXUS_STT_LOCAL_ONLY=1`
|
||||
- либо кэш-директорию: `NEXUS_STT_DOWNLOAD_ROOT=./models`
|
||||
|
||||
## Веб-админка
|
||||
|
||||
Отдельный пакет `@nexusai/admin` (Fastify + одностраничный фронт) на общем `core`. Читает тот же SQLite и media-каталог.
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
NEXUS_MASTER_KEY=$(openssl rand -hex 32) \
|
||||
NEXUS_MEDIA_DIR=./media-output \
|
||||
npm run admin
|
||||
# → http://127.0.0.1:4123
|
||||
```
|
||||
|
||||
Возможности:
|
||||
- **Потребление** — дашборд трат: суммарно, по провайдерам, по возможностям, по дням (из журнала).
|
||||
- **Галерея** — просмотр сгенерированного контента (изображения/аудио/видео), фильтр по возможности.
|
||||
- **Провайдеры** — добавить/включить/выключить, назначить default, ввести ключ (шифруется), **проверить ключ** реальным вызовом. Ключи показываются только маской.
|
||||
|
||||
Переменные: `NEXUS_ADMIN_HOST` (default `127.0.0.1`), `NEXUS_ADMIN_PORT` (default `4123`), `NEXUS_MASTER_KEY` (для ключей).
|
||||
|
||||
> Важно: изменения провайдеров/ключей в админке подхватываются MCP-сервером **при рестарте** (hot-reload — в планах). По умолчанию админка слушает только localhost.
|
||||
|
||||
## Расширение: новый провайдер
|
||||
|
||||
1. Реализовать `MediaProvider` / `SearchProvider` / `SttProvider` из `@nexusai/core`.
|
||||
|
||||
Reference in New Issue
Block a user