Spaces:
Running
Running
| // Application Configuration | |
| // This file contains all configurable settings for the application | |
| export const appConfig = { | |
| // Vercel Sandbox Configuration | |
| vercelSandbox: { | |
| // Sandbox timeout in minutes | |
| timeoutMinutes: 15, | |
| // Convert to milliseconds for Vercel Sandbox API | |
| get timeoutMs() { | |
| return this.timeoutMinutes * 60 * 1000; | |
| }, | |
| // Development server port (Vercel Sandbox typically uses 3000 for Next.js/React) | |
| devPort: 3000, | |
| // Time to wait for dev server to be ready (in milliseconds) | |
| devServerStartupDelay: 7000, | |
| // Time to wait for CSS rebuild (in milliseconds) | |
| cssRebuildDelay: 2000, | |
| // Working directory in sandbox | |
| workingDirectory: '/app', | |
| // Default runtime for sandbox | |
| runtime: 'node22' // Available: node22, python3.13, v0-next-shadcn, cua-ubuntu-xfce | |
| }, | |
| // E2B Sandbox Configuration | |
| e2b: { | |
| // Sandbox timeout in minutes | |
| timeoutMinutes: 30, | |
| // Convert to milliseconds for E2B API | |
| get timeoutMs() { | |
| return this.timeoutMinutes * 60 * 1000; | |
| }, | |
| // Development server port (E2B uses 5173 for Vite) | |
| vitePort: 5173, | |
| // Time to wait for Vite dev server to be ready (in milliseconds) | |
| viteStartupDelay: 10000, | |
| // Working directory in sandbox | |
| workingDirectory: '/home/user/app', | |
| }, | |
| // AI Model Configuration | |
| ai: { | |
| // Default AI model | |
| defaultModel: 'google/gemini-3-pro-preview', | |
| // Available models | |
| availableModels: [ | |
| 'openai/gpt-5', | |
| 'moonshotai/kimi-k2-instruct-0905', | |
| 'anthropic/claude-sonnet-4-20250514', | |
| 'google/gemini-3-pro-preview' | |
| ], | |
| // Model display names | |
| modelDisplayNames: { | |
| 'openai/gpt-5': 'GPT-5', | |
| 'moonshotai/kimi-k2-instruct-0905': 'Kimi K2 (Groq)', | |
| 'anthropic/claude-sonnet-4-20250514': 'Sonnet 4', | |
| 'google/gemini-3-pro-preview': 'Gemini 3 Pro (Preview)' | |
| } as Record<string, string>, | |
| // Model API configuration | |
| modelApiConfig: { | |
| 'moonshotai/kimi-k2-instruct-0905': { | |
| provider: 'groq', | |
| model: 'moonshotai/kimi-k2-instruct-0905' | |
| } | |
| }, | |
| // Temperature settings for non-reasoning models | |
| defaultTemperature: 0.7, | |
| // Max tokens for code generation | |
| maxTokens: 8000, | |
| // Max tokens for truncation recovery | |
| truncationRecoveryMaxTokens: 4000, | |
| }, | |
| // Code Application Configuration | |
| codeApplication: { | |
| // Delay after applying code before refreshing iframe (milliseconds) | |
| defaultRefreshDelay: 2000, | |
| // Delay when packages are installed (milliseconds) | |
| packageInstallRefreshDelay: 5000, | |
| // Enable/disable automatic truncation recovery | |
| enableTruncationRecovery: false, // Disabled - too many false positives | |
| // Maximum number of truncation recovery attempts per file | |
| maxTruncationRecoveryAttempts: 1, | |
| }, | |
| // UI Configuration | |
| ui: { | |
| // Show/hide certain UI elements | |
| showModelSelector: true, | |
| showStatusIndicator: true, | |
| // Animation durations (milliseconds) | |
| animationDuration: 200, | |
| // Toast notification duration (milliseconds) | |
| toastDuration: 3000, | |
| // Maximum chat messages to keep in memory | |
| maxChatMessages: 100, | |
| // Maximum recent messages to send as context | |
| maxRecentMessagesContext: 20, | |
| }, | |
| // Development Configuration | |
| dev: { | |
| // Enable debug logging | |
| enableDebugLogging: true, | |
| // Enable performance monitoring | |
| enablePerformanceMonitoring: false, | |
| // Log API responses | |
| logApiResponses: true, | |
| }, | |
| // Package Installation Configuration | |
| packages: { | |
| // Use --legacy-peer-deps flag for npm install | |
| useLegacyPeerDeps: true, | |
| // Package installation timeout (milliseconds) | |
| installTimeout: 60000, | |
| // Auto-restart Vite after package installation | |
| autoRestartVite: true, | |
| }, | |
| // File Management Configuration | |
| files: { | |
| // Excluded file patterns (files to ignore) | |
| excludePatterns: [ | |
| 'node_modules/**', | |
| '.git/**', | |
| '.next/**', | |
| 'dist/**', | |
| 'build/**', | |
| '*.log', | |
| '.DS_Store' | |
| ], | |
| // Maximum file size to read (bytes) | |
| maxFileSize: 1024 * 1024, // 1MB | |
| // File extensions to treat as text | |
| textFileExtensions: [ | |
| '.js', '.jsx', '.ts', '.tsx', | |
| '.css', '.scss', '.sass', | |
| '.html', '.xml', '.svg', | |
| '.json', '.yml', '.yaml', | |
| '.md', '.txt', '.env', | |
| '.gitignore', '.dockerignore' | |
| ], | |
| }, | |
| // API Endpoints Configuration (for external services) | |
| api: { | |
| // Retry configuration | |
| maxRetries: 3, | |
| retryDelay: 1000, // milliseconds | |
| // Request timeout (milliseconds) | |
| requestTimeout: 30000, | |
| } | |
| }; | |
| // Type-safe config getter | |
| export function getConfig<K extends keyof typeof appConfig>(key: K): typeof appConfig[K] { | |
| return appConfig[key]; | |
| } | |
| // Helper to get nested config values | |
| export function getConfigValue(path: string): any { | |
| return path.split('.').reduce((obj, key) => obj?.[key], appConfig as any); | |
| } | |
| export default appConfig; |