120 lines
5.7 KiB
PowerShell
120 lines
5.7 KiB
PowerShell
# OpenQode Auto-Installer for Windows (PowerShell)
|
|
# Noob-proof: Auto-installs Node.js and Git if missing!
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
Write-Host ""
|
|
Write-Host " ╔═══════════════════════════════════════════╗" -ForegroundColor Cyan
|
|
Write-Host " ║ 🚀 OpenQode Auto-Installer 🚀 ║" -ForegroundColor Cyan
|
|
Write-Host " ║ Next-Gen AI Coding Assistant ║" -ForegroundColor Cyan
|
|
Write-Host " ╚═══════════════════════════════════════════╝" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
# Function to check if running as admin
|
|
function Test-Admin {
|
|
$currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
|
|
$currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
|
}
|
|
|
|
# Function to install winget package
|
|
function Install-WingetPackage($PackageId, $Name) {
|
|
Write-Host "[*] Installing $Name..." -ForegroundColor Yellow
|
|
try {
|
|
winget install --id $PackageId --accept-package-agreements --accept-source-agreements -e
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Host "[✓] $Name installed successfully!" -ForegroundColor Green
|
|
# Refresh PATH
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
|
return $true
|
|
}
|
|
} catch {
|
|
Write-Host "[!] winget failed, trying alternative method..." -ForegroundColor Yellow
|
|
}
|
|
return $false
|
|
}
|
|
|
|
# Check for Git
|
|
Write-Host "[1/4] Checking for Git..." -ForegroundColor Cyan
|
|
if (!(Get-Command git -ErrorAction SilentlyContinue)) {
|
|
Write-Host "[!] Git not found. Installing..." -ForegroundColor Yellow
|
|
$installed = Install-WingetPackage "Git.Git" "Git"
|
|
if (!$installed) {
|
|
Write-Host "[!] Attempting direct download..." -ForegroundColor Yellow
|
|
$gitInstaller = "$env:TEMP\git-installer.exe"
|
|
Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/Git-2.43.0-64-bit.exe" -OutFile $gitInstaller
|
|
Start-Process -FilePath $gitInstaller -Args "/VERYSILENT /NORESTART" -Wait
|
|
Remove-Item $gitInstaller -Force
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
|
}
|
|
if (!(Get-Command git -ErrorAction SilentlyContinue)) {
|
|
Write-Host "[X] Failed to install Git. Please install manually: https://git-scm.com/download/win" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
}
|
|
Write-Host "[✓] Git is installed!" -ForegroundColor Green
|
|
|
|
# Check for Node.js
|
|
Write-Host "[2/4] Checking for Node.js..." -ForegroundColor Cyan
|
|
if (!(Get-Command node -ErrorAction SilentlyContinue)) {
|
|
Write-Host "[!] Node.js not found. Installing..." -ForegroundColor Yellow
|
|
$installed = Install-WingetPackage "OpenJS.NodeJS.LTS" "Node.js LTS"
|
|
if (!$installed) {
|
|
Write-Host "[!] Attempting direct download..." -ForegroundColor Yellow
|
|
$nodeInstaller = "$env:TEMP\node-installer.msi"
|
|
Invoke-WebRequest -Uri "https://nodejs.org/dist/v20.10.0/node-v20.10.0-x64.msi" -OutFile $nodeInstaller
|
|
Start-Process msiexec.exe -Args "/i `"$nodeInstaller`" /qn ADDLOCAL=ALL" -Wait
|
|
Remove-Item $nodeInstaller -Force
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
|
}
|
|
if (!(Get-Command node -ErrorAction SilentlyContinue)) {
|
|
Write-Host "[X] Failed to install Node.js. Please install manually: https://nodejs.org/" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
}
|
|
$nodeVer = node --version
|
|
Write-Host "[✓] Node.js $nodeVer is installed!" -ForegroundColor Green
|
|
|
|
# Clone or update repository
|
|
$repoUrl = "https://github.com/roman-ryzenadvanced/OpenQode-Public-Alpha.git"
|
|
$targetDir = "OpenQode"
|
|
|
|
Write-Host "[3/4] Setting up OpenQode..." -ForegroundColor Cyan
|
|
if (Test-Path $targetDir) {
|
|
Write-Host "[*] Directory exists. Updating..." -ForegroundColor Yellow
|
|
Push-Location $targetDir
|
|
git pull --ff-only
|
|
Pop-Location
|
|
} else {
|
|
Write-Host "[*] Cloning repository..." -ForegroundColor Yellow
|
|
git clone $repoUrl $targetDir
|
|
}
|
|
|
|
# Install npm dependencies (clean install to ensure React overrides work)
|
|
Set-Location $targetDir
|
|
Write-Host "[4/4] Installing dependencies..." -ForegroundColor Cyan
|
|
|
|
# Clean existing node_modules to ensure React overrides take effect
|
|
if (Test-Path "node_modules") {
|
|
Write-Host "[*] Cleaning existing dependencies for fresh install..." -ForegroundColor Yellow
|
|
Remove-Item -Recurse -Force "node_modules" -ErrorAction SilentlyContinue
|
|
Remove-Item -Force "package-lock.json" -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
npm install --legacy-peer-deps
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "[!] npm install failed, retrying..." -ForegroundColor Yellow
|
|
npm cache clean --force
|
|
npm install --legacy-peer-deps
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host " ╔═══════════════════════════════════════════╗" -ForegroundColor Green
|
|
Write-Host " ║ ✅ Installation Complete! ✅ ║" -ForegroundColor Green
|
|
Write-Host " ║ ║" -ForegroundColor Green
|
|
Write-Host " ║ Launching OpenQode Next-Gen TUI... ║" -ForegroundColor Green
|
|
Write-Host " ╚═══════════════════════════════════════════╝" -ForegroundColor Green
|
|
Write-Host ""
|
|
|
|
# Launch
|
|
.\OpenQode.bat
|