128 lines
3.9 KiB
PowerShell
128 lines
3.9 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Codex Launcher Windows Installer
|
|
.DESCRIPTION
|
|
Installs Codex Launcher for the current user.
|
|
.NOTES
|
|
Requires: Python 3.8+ (stdlib only, zero pip dependencies).
|
|
#>
|
|
|
|
param(
|
|
[switch]$Uninstall
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$BinDir = Join-Path $env:LOCALAPPDATA 'Programs\Codex-Launcher'
|
|
$StartMenu = Join-Path $env:APPDATA 'Microsoft\Windows\Start Menu\Programs'
|
|
|
|
if ($Uninstall) {
|
|
Write-Host 'Uninstalling Codex Launcher...' -ForegroundColor Yellow
|
|
|
|
if (Test-Path $BinDir) {
|
|
Remove-Item -Recurse -Force $BinDir
|
|
Write-Host " Removed $BinDir"
|
|
}
|
|
|
|
$shortcut = Join-Path $StartMenu 'Codex Launcher.lnk'
|
|
if (Test-Path $shortcut) {
|
|
Remove-Item -Force $shortcut
|
|
Write-Host ' Removed Start Menu shortcut'
|
|
}
|
|
|
|
$userPath = [Environment]::GetEnvironmentVariable('PATH', 'User')
|
|
if ($userPath -like "*$BinDir*") {
|
|
$newPath = ($userPath -split ';' | Where-Object { $_ -ne $BinDir }) -join ';'
|
|
[Environment]::SetEnvironmentVariable('PATH', $newPath, 'User')
|
|
Write-Host ' Removed from PATH'
|
|
}
|
|
|
|
Write-Host 'Uninstall complete.' -ForegroundColor Green
|
|
return
|
|
}
|
|
|
|
Write-Host ''
|
|
Write-Host ' Codex Launcher - Windows Installer' -ForegroundColor Cyan
|
|
Write-Host ' ====================================' -ForegroundColor Cyan
|
|
Write-Host ''
|
|
|
|
# Check Python
|
|
$pythonExe = Get-Command python -ErrorAction SilentlyContinue
|
|
if (-not $pythonExe) {
|
|
$pythonExe = Get-Command python3 -ErrorAction SilentlyContinue
|
|
}
|
|
if (-not $pythonExe) {
|
|
Write-Host 'ERROR: Python not found. Install Python 3.8+ and add to PATH.' -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
Write-Host " Python: $($pythonExe.Source)" -ForegroundColor Gray
|
|
|
|
# Create install directory
|
|
New-Item -ItemType Directory -Force -Path $BinDir | Out-Null
|
|
|
|
# Copy files
|
|
$srcDir = Join-Path $PSScriptRoot 'src'
|
|
$files = @(
|
|
'translate-proxy.py',
|
|
'codex-launcher-gui.py',
|
|
'codex_launcher_lib.py',
|
|
'cleanup-codex-stale.py'
|
|
)
|
|
|
|
foreach ($file in $files) {
|
|
$src = Join-Path $srcDir $file
|
|
if (Test-Path $src) {
|
|
Copy-Item -Force $src $BinDir
|
|
Write-Host " Installed: $file" -ForegroundColor Green
|
|
} else {
|
|
Write-Host " WARNING: $file not found in src/" -ForegroundColor Yellow
|
|
}
|
|
}
|
|
|
|
# Create Start Menu shortcut
|
|
$WshShell = New-Object -ComObject WScript.Shell
|
|
$shortcutPath = Join-Path $StartMenu 'Codex Launcher.lnk'
|
|
$Shortcut = $WshShell.CreateShortcut($shortcutPath)
|
|
|
|
# Find pythonw.exe for no-console launch
|
|
$pythonw = Get-Command pythonw -ErrorAction SilentlyContinue
|
|
if (-not $pythonw) {
|
|
$pythonDir = Split-Path $pythonExe.Source
|
|
$pythonwCandidate = Join-Path $pythonDir 'pythonw.exe'
|
|
if (Test-Path $pythonwCandidate) {
|
|
$pythonw = $pythonwCandidate
|
|
}
|
|
}
|
|
|
|
if ($pythonw) {
|
|
$targetPath = if ($pythonw.Source) { $pythonw.Source } else { $pythonw }
|
|
} else {
|
|
$targetPath = $pythonExe.Source
|
|
}
|
|
$Shortcut.TargetPath = $targetPath
|
|
$guiPath = Join-Path $BinDir 'codex-launcher-gui.py'
|
|
$Shortcut.Arguments = $guiPath
|
|
$Shortcut.WorkingDirectory = $BinDir
|
|
$Shortcut.Description = 'Launch Codex Desktop with any AI provider'
|
|
$Shortcut.Save()
|
|
Write-Host ' Created Start Menu shortcut' -ForegroundColor Green
|
|
|
|
# Add to PATH
|
|
$userPath = [Environment]::GetEnvironmentVariable('PATH', 'User')
|
|
if ($userPath -notlike "*$BinDir*") {
|
|
$newUserPath = $userPath + ';' + $BinDir
|
|
[Environment]::SetEnvironmentVariable('PATH', $newUserPath, 'User')
|
|
$env:PATH = $env:PATH + ';' + $BinDir
|
|
Write-Host ' Added to user PATH' -ForegroundColor Green
|
|
}
|
|
|
|
# Verify
|
|
Write-Host ''
|
|
Write-Host ' Installation complete!' -ForegroundColor Cyan
|
|
Write-Host " Install dir: $BinDir" -ForegroundColor Gray
|
|
Write-Host ''
|
|
Write-Host ' Launch options:' -ForegroundColor White
|
|
Write-Host ' Start Menu: Codex Launcher' -ForegroundColor Gray
|
|
Write-Host ' Command: codex-launcher-gui.py' -ForegroundColor Gray
|
|
Write-Host ' Uninstall: powershell -File install.ps1 -Uninstall' -ForegroundColor Gray
|
|
Write-Host ''
|