# EVE Development Environment Setup Script for Windows # Run this script in PowerShell with: .\setup.ps1 # Requires PowerShell 5.1 or higher # Function to print colored output function Write-ColorOutput($ForegroundColor) { $fc = $host.UI.RawUI.ForegroundColor $host.UI.RawUI.ForegroundColor = $ForegroundColor if ($args) { Write-Output $args } $host.UI.RawUI.ForegroundColor = $fc } function Log-Info($message) { Write-ColorOutput Cyan "[INFO] $message" } function Log-Success($message) { Write-ColorOutput Green "[SUCCESS] $message" } function Log-Warning($message) { Write-ColorOutput Yellow "[WARNING] $message" } function Log-Error($message) { Write-ColorOutput Red "[ERROR] $message" } # Print header function Print-Header { Write-Host "" Write-Host "╔════════════════════════════════════════════════════════╗" Write-Host "║ EVE Development Environment Setup ║" Write-Host "║ Personal Desktop AI Assistant ║" Write-Host "╚════════════════════════════════════════════════════════╝" Write-Host "" } # Check if running as administrator function Test-Administrator { $user = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object Security.Principal.WindowsPrincipal $user return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) } # Check if command exists function Test-CommandExists($command) { $null = Get-Command $command -ErrorAction SilentlyContinue return $? } # Check Node.js installation function Test-NodeJs { Log-Info "Checking Node.js installation..." if (Test-CommandExists "node") { $version = node -v $versionNumber = $version -replace 'v', '' $majorVersion = ($versionNumber -split '\.')[0] if ([int]$majorVersion -ge 18) { Log-Success "Node.js $version installed ✓" return $true } else { Log-Warning "Node.js $version is installed but v18+ is required" return $false } } else { Log-Warning "Node.js is not installed" return $false } } # Check Rust installation function Test-Rust { Log-Info "Checking Rust installation..." if ((Test-CommandExists "rustc") -and (Test-CommandExists "cargo")) { $version = rustc --version Log-Success "$version installed ✓" return $true } else { Log-Warning "Rust is not installed" return $false } } # Check package manager function Test-PackageManager { Log-Info "Checking package manager..." if (Test-CommandExists "npm") { $version = npm -v Log-Success "npm $version installed ✓" $script:PackageManager = "npm" return $true } elseif (Test-CommandExists "pnpm") { $version = pnpm -v Log-Success "pnpm $version installed ✓" $script:PackageManager = "pnpm" return $true } else { Log-Error "Neither npm nor pnpm is installed" return $false } } # Check WebView2 function Test-WebView2 { Log-Info "Checking WebView2 Runtime..." $webView2Path = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" if (Test-Path $webView2Path) { Log-Success "WebView2 Runtime installed ✓" return $true } else { Log-Warning "WebView2 Runtime not detected" return $false } } # Check Visual Studio Build Tools function Test-VSBuildTools { Log-Info "Checking Visual Studio Build Tools..." $vsPaths = @( "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools", "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools", "C:\Program Files\Microsoft Visual Studio\2022\Community", "C:\Program Files\Microsoft Visual Studio\2022\Professional", "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" ) foreach ($path in $vsPaths) { if (Test-Path $path) { Log-Success "Visual Studio Build Tools found ✓" return $true } } Log-Warning "Visual Studio Build Tools not detected" return $false } # Install Node.js function Install-NodeJs { Log-Info "Installing Node.js..." Log-Info "Please download and install Node.js from: https://nodejs.org/" Log-Info "Recommended: Download the LTS version (v18 or higher)" $response = Read-Host "Open Node.js download page in browser? (Y/n)" if ($response -ne 'n' -and $response -ne 'N') { Start-Process "https://nodejs.org/en/download/" } Log-Info "After installing Node.js, please restart this script" exit 0 } # Install Rust function Install-Rust { Log-Info "Installing Rust..." $rustupUrl = "https://win.rustup.rs/x86_64" $rustupPath = "$env:TEMP\rustup-init.exe" try { Log-Info "Downloading rustup installer..." Invoke-WebRequest -Uri $rustupUrl -OutFile $rustupPath Log-Info "Running rustup installer..." Start-Process -FilePath $rustupPath -Wait Log-Success "Rust installation initiated!" Log-Info "Please restart your terminal after the installation completes" } catch { Log-Error "Failed to download Rust installer: $_" Log-Info "Please install manually from: https://rustup.rs/" } } # Install WebView2 function Install-WebView2 { Log-Info "WebView2 Runtime is required for Tauri applications" Log-Info "Download from: https://developer.microsoft.com/en-us/microsoft-edge/webview2/" $response = Read-Host "Open WebView2 download page in browser? (Y/n)" if ($response -ne 'n' -and $response -ne 'N') { Start-Process "https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section" } } # Install Visual Studio Build Tools function Install-VSBuildTools { Log-Info "Visual Studio Build Tools are required for Rust compilation" Log-Info "Download from: https://visualstudio.microsoft.com/visual-cpp-build-tools/" $response = Read-Host "Open Visual Studio Build Tools download page in browser? (Y/n)" if ($response -ne 'n' -and $response -ne 'N') { Start-Process "https://visualstudio.microsoft.com/visual-cpp-build-tools/" } Log-Info "" Log-Info "During installation, select:" Log-Info " - Desktop development with C++" Log-Info " - Windows 10/11 SDK" } # Setup environment file function Setup-EnvFile { Log-Info "Setting up environment file..." if (Test-Path ".env") { Log-Warning ".env file already exists" $response = Read-Host "Do you want to overwrite it? (y/N)" if ($response -ne 'y' -and $response -ne 'Y') { Log-Info "Keeping existing .env file" return } } Copy-Item ".env.example" ".env" Log-Success "Created .env file from .env.example" Write-Host "" Log-Info "Please edit .env and add your API keys:" Log-Info " - OpenRouter API key: https://openrouter.ai/keys" Log-Info " - ElevenLabs API key (optional): https://elevenlabs.io" Write-Host "" } # Install npm dependencies function Install-NpmDependencies { Log-Info "Installing npm dependencies..." if (Test-Path "node_modules") { Log-Info "node_modules directory exists" $response = Read-Host "Do you want to reinstall dependencies? (y/N)" if ($response -eq 'y' -or $response -eq 'Y') { Remove-Item -Recurse -Force "node_modules" if (Test-Path "package-lock.json") { Remove-Item "package-lock.json" } Log-Info "Cleaned node_modules" } else { Log-Info "Skipping npm install" return } } & $script:PackageManager install if ($LASTEXITCODE -eq 0) { Log-Success "npm dependencies installed ✓" } else { Log-Error "Failed to install npm dependencies" } } # Verify installation function Test-Installation { Log-Info "Verifying installation..." Write-Host "" $allGood = $true # Check Node.js if (Test-CommandExists "node") { $version = node -v Log-Success "✓ Node.js: $version" } else { Log-Error "✗ Node.js: Not found" $allGood = $false } # Check Rust if (Test-CommandExists "rustc") { $version = (rustc --version) -split ' ' | Select-Object -First 2 Log-Success "✓ Rust: $($version -join ' ')" } else { Log-Error "✗ Rust: Not found" $allGood = $false } # Check Cargo if (Test-CommandExists "cargo") { $version = (cargo --version) -split ' ' | Select-Object -First 2 Log-Success "✓ Cargo: $($version -join ' ')" } else { Log-Error "✗ Cargo: Not found" $allGood = $false } # Check npm if (Test-CommandExists "npm") { $version = npm -v Log-Success "✓ npm: v$version" } else { Log-Error "✗ npm: Not found" $allGood = $false } # Check node_modules if (Test-Path "node_modules") { Log-Success "✓ Node dependencies installed" } else { Log-Error "✗ Node dependencies: Not installed" $allGood = $false } # Check .env file if (Test-Path ".env") { Log-Success "✓ Environment file exists" } else { Log-Warning "⚠ Environment file not found (.env)" } # Check WebView2 if (Test-WebView2) { Log-Success "✓ WebView2 Runtime installed" } else { Log-Warning "⚠ WebView2 Runtime: Not detected" } Write-Host "" if ($allGood) { Log-Success "All checks passed! ✓" return $true } else { Log-Error "Some checks failed. Please review the errors above." return $false } } # Print next steps function Print-NextSteps { Write-Host "" Write-Host "╔════════════════════════════════════════════════════════╗" Write-Host "║ Setup Complete! ║" Write-Host "╚════════════════════════════════════════════════════════╝" Write-Host "" Log-Info "Next steps:" Write-Host "" Write-Host " 1. Edit .env and add your API keys:" Write-ColorOutput Cyan " notepad .env" Write-Host "" Write-Host " 2. Start the development server:" Write-ColorOutput Green " npm run tauri:dev" Write-Host "" Write-Host " 3. Build for production:" Write-ColorOutput Green " npm run tauri:build" Write-Host "" Log-Info "Additional commands:" Write-ColorOutput Cyan " - Frontend only: npm run dev" Write-ColorOutput Cyan " - Lint code: npm run lint" Write-ColorOutput Cyan " - Format code: npm run format" Write-Host "" Log-Info "Documentation: .\docs\README.md" Log-Info "Troubleshooting: .\docs\setup\SETUP_COMPLETE.md" Write-Host "" } # Main setup function function Main { Print-Header Log-Info "Detected: Windows" Write-Host "" # Check existing installations $needNode = -not (Test-NodeJs) $needRust = -not (Test-Rust) $needWebView2 = -not (Test-WebView2) $needVSBuildTools = -not (Test-VSBuildTools) Test-PackageManager | Out-Null Write-Host "" # Install missing components if ($needNode) { $response = Read-Host "Install Node.js? (y/N)" if ($response -eq 'y' -or $response -eq 'Y') { Install-NodeJs } else { Log-Warning "Skipping Node.js installation" } } if ($needRust) { $response = Read-Host "Install Rust? (y/N)" if ($response -eq 'y' -or $response -eq 'Y') { Install-Rust } else { Log-Warning "Skipping Rust installation" } } if ($needWebView2) { $response = Read-Host "Install WebView2 Runtime? (y/N)" if ($response -eq 'y' -or $response -eq 'Y') { Install-WebView2 } } if ($needVSBuildTools) { $response = Read-Host "Install Visual Studio Build Tools? (y/N)" if ($response -eq 'y' -or $response -eq 'Y') { Install-VSBuildTools } } Write-Host "" # Setup environment file Setup-EnvFile # Install npm dependencies $response = Read-Host "Install npm dependencies? (Y/n)" if ($response -ne 'n' -and $response -ne 'N') { Install-NpmDependencies } Write-Host "" # Verify installation Test-Installation # Print next steps Print-NextSteps } # Run main function Main