Each tenant config now includes oidcClientId. Auth composable reads
client ID from tenant config instead of hardcoded fallback. Dev tenant
uses restricted Zitadel project (role-check enabled, developer grant).
Added NODE_ENV=production to env files to fix --mode dev builds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Build-time tenant config via VITE_TENANT env var (--mode loop42/dev).
Content pages moved to tenants/{name}/pages/ with dynamic imports and
loop42 fallback. Feature-gated routing (viewer/devTools per tenant).
Dockerfile parameterized with TENANT build arg. Deployed to separate
K8s namespaces: loop42.de → ns/loop42, loop42.dev → ns/dev.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Slim sidebar (Home, nyx, Impressum, Datenschutz, Sign-in/User), global
AppToolbar for system features, /agents→/nyx rename, agent auto-select,
OIDC user name extraction from id_token, theme-consistent content pages,
removed DevView and old system panel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- agents.ts: fallback agent list when server sends none, auto-select default
- useAgentSocket.ts: set connectionState=SYNCED + channelState=READY on
assay ready signal, unlocks chat input
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ws.ts: auth via query params (token + session), store session_id
from assay session_info, mark connected on ready signal
- useAgentSocket.ts: handlers for session_info, controls, artifacts, cleared
- auth.ts: auto-set dev service token for instant login
- Dockerfile + nginx.conf for K3s deployment
- .env.production: wss://assay.loop42.de/ws
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>