{"signedIn":false,"memory":{"available":false},"ai":{"provider":"openai","model":"gpt-5.6-luna","configured":true,"fallback":{"provider":null,"configured":false}},"search":{"provider":"tavily","configured":true},"images":{"provider":"openai","model":"gpt-image-1","configured":true},"voice":{"provider":"openai","model":"gpt-transcribe","configured":true,"retention":"not_stored","maxBytes":26214400,"maxDurationSeconds":300},"email":{"provider":"resend","configured":true,"enabled":true,"apiKeyConfigured":true,"fromConfigured":true,"maxSubjectLength":200,"maxBodyLength":10000,"webhook":{"configured":true,"storage":"service_role"}},"google":{"configured":false,"credentialsConfigured":false,"identityStoreConfigured":true,"callbackUrl":"https://bdmai.cloud/auth/callback/google","origin":"https://bdmai.cloud","linked":false,"providers":[]},"quotas":{"store":"database","migration":"supabase/migrations/0002_usage_quotas.sql","migrationState":"unknown","limits":{"imageDaily":20,"imageBurst":5,"transcribeDaily":50,"transcribeBurst":10,"researchDaily":40,"researchBurst":10,"emailDaily":20,"emailDraftDaily":50,"verifyEmailDaily":5,"verifyAttemptHourly":10,"resetEmailDaily":5,"resetAttemptHourly":10},"windows":{"burst":"10 minutes (in-process guard)","image":"UTC day","transcribe":"UTC day","research":"UTC day","email":"UTC day","authEmail":"UTC day per address"}},"environment":[{"name":"AI_PROVIDER","present":true,"purpose":"Which assistant provider answers chat: ollama or openai.","kind":"required","group":"AI"},{"name":"OLLAMA_API_KEY","present":true,"purpose":"Ollama Cloud key. Required on Render, where a local Ollama cannot be reached.","kind":"alternative","group":"AI"},{"name":"OLLAMA_API_MODEL","present":true,"purpose":"The Ollama Cloud model to use, for example gemma4:31b.","kind":"alternative","group":"AI"},{"name":"OLLAMA_API_HOST","present":true,"purpose":"Ollama Cloud host. Optional; defaults to https://ollama.com.","kind":"optional","group":"AI"},{"name":"OLLAMA_HOST","present":true,"purpose":"Local Ollama host. Development only.","kind":"alternative","group":"AI"},{"name":"OLLAMA_MODEL","present":true,"purpose":"Local Ollama model. Development only.","kind":"alternative","group":"AI"},{"name":"OPENAI_API_KEY","present":true,"purpose":"OpenAI key. Used for chat when selected, and for images and voice transcription.","kind":"optional","group":"AI"},{"name":"OPENAI_MODEL","present":true,"purpose":"The OpenAI model used for chat.","kind":"optional","group":"AI"},{"name":"BDM_SEARCH_PROVIDER","present":false,"purpose":"Pins the search provider: brave, tavily or searxng. Auto-detected when empty.","kind":"optional","group":"Research"},{"name":"TAVILY_API_KEY","present":true,"purpose":"Tavily search key. One search provider key is enough.","kind":"alternative","group":"Research"},{"name":"BRAVE_SEARCH_API_KEY","present":false,"purpose":"Brave Search key. One search provider key is enough.","kind":"alternative","group":"Research"},{"name":"SEARXNG_URL","present":false,"purpose":"Base URL of a self-hosted SearXNG instance with the JSON API enabled.","kind":"alternative","group":"Research"},{"name":"BDM_TRANSCRIBE_MODEL","present":false,"purpose":"Voice transcription model. Defaults to gpt-transcribe.","kind":"optional","group":"Voice"},{"name":"BDM_IMAGE_MODEL","present":false,"purpose":"Image generation model. Defaults to gpt-image-1.","kind":"optional","group":"Images"},{"name":"NEXT_PUBLIC_SUPABASE_URL","present":true,"purpose":"Supabase project URL. Required for accounts, history and memory.","kind":"required","group":"Auth"},{"name":"NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY","present":true,"purpose":"Supabase publishable key used by the browser client.","kind":"required","group":"Auth"},{"name":"SUPABASE_SERVICE_ROLE_KEY","present":true,"purpose":"Server-only key. Required for the Google linking guard and durable quotas.","kind":"optional","group":"Auth"},{"name":"GOOGLE_CLIENT_ID","present":false,"purpose":"Google OAuth client ID. Required for Continue with Google.","kind":"optional","group":"Google"},{"name":"GOOGLE_CLIENT_SECRET","present":false,"purpose":"Google OAuth client secret. Never reaches the browser.","kind":"optional","group":"Google"},{"name":"GOOGLE_REDIRECT_URI","present":true,"purpose":"Exact authorized redirect URI. Derived from the request when empty.","kind":"optional","group":"Google"},{"name":"BDM_EMAIL_ENABLED","present":true,"purpose":"Must be exactly true before any email is sent.","kind":"optional","group":"Email"},{"name":"RESEND_API_KEY","present":true,"purpose":"Resend server-side key for transactional email.","kind":"optional","group":"Email"},{"name":"RESEND_FROM_EMAIL","present":true,"purpose":"The verified sender address, for example BDM <ai@yourdomain.com>.","kind":"optional","group":"Email"},{"name":"RESEND_WEBHOOK_SECRET","present":true,"purpose":"Signing secret for the Resend webhook.","kind":"optional","group":"Email"}]}