✨ Features:
- Add admin portal thread viewer with pagination
- Display thread list with project names and public status
- Add clickable links to view threads via /share/{thread_id}
- Add admin bypass for accessing all threads (public and private)
🔧 Backend Refactoring:
- Consolidate admin APIs into admin_api.py and billing_admin_api.py
- Remove unused files: users_admin.py, admin/api.py
- Remove unused endpoints: user search, grant-bulk-credits, migrate-user
- Update admin thread endpoint to use share URLs
⚡ Performance:
- Remove message_count from UserThreadSummary (optimization)
- Remove N+1 query issue in thread listing
🔒 Authorization:
- Add admin role bypass in verify_and_authorize_thread_access
- Create RLS migration (20251005160000_admin_roles_access.sql)
- Update thread_select_policy for admin access
- Update message_select_policy for admin access
- Update project_select_policy for admin access
- Update agent_runs_select_policy for admin access
💻 Frontend:
- Add Threads tab to admin user details dialog
- Add useAdminUserThreads hook with pagination
- Remove unused admin hooks (useAdminUserSearch, useAdminAdvancedSearch)
- Display thread metadata with Open button and ExternalLink icon
🗃️ Database:
- Apply RLS policies allowing admin/super_admin roles to bypass restrictions
- Admins can now view any thread, message, project, or agent_run
This enables admins to view and debug any user's threads through the
share page interface, regardless of public/private status.
- Add OpenAI-compatible API support with custom endpoints
- Implement LiteLLM Router for multi-provider routing
- Add new config options: OPENAI_COMPATIBLE_API_KEY/BASE
- Update environment examples and self-hosting documentation
Enables support for local LLM services like Ollama, LM Studio, vLLM,
and third-party OpenAI-compatible providers.
- Removed references to QStash in documentation and codebase.
- Updated setup and configuration files to reflect the transition to Supabase Cron.
- Implemented new functions for scheduling and unscheduling jobs using Supabase Cron.
- Added webhook authentication using a shared secret for enhanced security.
- Cleaned up related dependencies and example configurations.
- Deleted RabbitMQ service from docker-compose configurations and related files.
- Updated environment variables and documentation to reflect the removal of RabbitMQ.
- Adjusted setup instructions and code to focus solely on Redis for backend operations.
- Added a new API keys service with endpoints for creating, listing, revoking, and deleting API keys.
- Integrated API key validation and caching for performance.
- Updated backend configuration to include API key secret and throttling settings.
- Created frontend components for managing API keys, including a user interface for creating and displaying keys.
- Introduced a new database migration for the API keys table with necessary constraints and security policies.
- Enhanced authentication methods to support API key usage alongside JWT.
- Introduced GEMINI_API_KEY in setup and environment files.
- Updated SetupWizard to include Google Gemini as a supported LLM provider.
- Adjusted model selection logic to accommodate Gemini models.
- Modified billing and configuration files to handle Gemini model pricing and aliases.
- Updated documentation to reflect the addition of GEMINI_API_KEY.
https://morphllm.com/api-keys
when setting up, user should be able to choose to go to morphllm to get a key; or provide open router apikey (if not already in the previous step)