Initial Release: OpenQode Public Alpha v1.3
This commit is contained in:
155
start-unified.ps1
Normal file
155
start-unified.ps1
Normal file
@@ -0,0 +1,155 @@
|
||||
# OpenQode Unified Startup Script
|
||||
# Starts both frontend and backend with proper instance management
|
||||
|
||||
param(
|
||||
[int]$Port = 0
|
||||
)
|
||||
|
||||
# Function to check and kill existing OpenQode processes
|
||||
function Stop-ExistingInstances {
|
||||
Write-Host "Checking for existing OpenQode processes..." -ForegroundColor Yellow
|
||||
|
||||
# Get all node processes and check if they're running OpenQode server.js
|
||||
$nodeProcesses = Get-Process node -ErrorAction SilentlyContinue
|
||||
if ($nodeProcesses) {
|
||||
foreach ($proc in $nodeProcesses) {
|
||||
try {
|
||||
$cmdLine = $proc.CommandLine
|
||||
if ($cmdLine -and $cmdLine -like "*server.js*") {
|
||||
Stop-Process -Id $proc.Id -Force
|
||||
Write-Host "Stopped process ID: $($proc.Id)" -ForegroundColor Green
|
||||
}
|
||||
} catch {
|
||||
# Process might already be stopped
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Function to find a free port
|
||||
function Get-FreePort {
|
||||
param([int]$StartPort = 3000)
|
||||
|
||||
$port = $StartPort
|
||||
while ($port -le 65535) {
|
||||
$portOpen = $false
|
||||
try {
|
||||
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, $port)
|
||||
$listener.Start()
|
||||
$listener.Stop()
|
||||
} catch {
|
||||
$portOpen = $true
|
||||
}
|
||||
|
||||
if (-not $portOpen) {
|
||||
return $port
|
||||
}
|
||||
$port++
|
||||
}
|
||||
return 3000 # Default fallback
|
||||
}
|
||||
|
||||
# Main script starts here
|
||||
$OpenQodeDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$ServerPath = Join-Path $OpenQodeDir "server.js"
|
||||
|
||||
Write-Host "OpenQode Unified Startup v1.01" -ForegroundColor Cyan
|
||||
Write-Host "=================================" -ForegroundColor Cyan
|
||||
|
||||
if ($Port -eq 0) {
|
||||
$PortInput = Read-Host "Enter port for Web GUI (default: 3000, or press Enter for auto)"
|
||||
if ([string]::IsNullOrWhiteSpace($PortInput)) {
|
||||
$Port = 3000
|
||||
Write-Host "Using default port: $Port" -ForegroundColor Yellow
|
||||
} elseif (-not [int]::TryParse($PortInput, [ref][int]$null)) {
|
||||
Write-Host "Invalid port number. Using default port 3000." -ForegroundColor Yellow
|
||||
$Port = 3000
|
||||
} else {
|
||||
$Port = [int]$PortInput
|
||||
}
|
||||
}
|
||||
|
||||
# Check if port is available
|
||||
$FreePort = Get-FreePort $Port
|
||||
if ($FreePort -ne $Port) {
|
||||
Write-Host "Port $Port is already in use. Using available port: $FreePort" -ForegroundColor Yellow
|
||||
$Port = $FreePort
|
||||
} else {
|
||||
Write-Host "Using port: $Port" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# Stop existing instances
|
||||
Stop-ExistingInstances
|
||||
|
||||
# Check if Node.js is available
|
||||
try {
|
||||
node --version 2>$null | Out-Null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Node.js not found"
|
||||
}
|
||||
} catch {
|
||||
Write-Host "[ERROR] Node.js is required but not found." -ForegroundColor Red
|
||||
Write-Host "Please install Node.js from https://nodejs.org/" -ForegroundColor Yellow
|
||||
pause
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Starting OpenQode backend server on port $Port..." -ForegroundColor Green
|
||||
|
||||
# Start the server in a background job
|
||||
$ServerJob = Start-Job -ScriptBlock {
|
||||
param($ServerPath, $Port)
|
||||
Set-Location (Split-Path $ServerPath -Parent)
|
||||
node $ServerPath $Port
|
||||
} -ArgumentList $ServerPath, $Port
|
||||
|
||||
# Wait a moment for server to start
|
||||
Write-Host "Waiting for server to initialize..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 5
|
||||
|
||||
# Verify server is running
|
||||
$ServerRunning = $false
|
||||
try {
|
||||
$response = Invoke-WebRequest -Uri "http://localhost:$Port" -TimeoutSec 10 -UseBasicParsing -ErrorAction Stop
|
||||
$ServerRunning = $true
|
||||
Write-Host "Server is running and responding!" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "Server might still be starting up, continuing..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 3
|
||||
$ServerRunning = $true # Assume it's starting up
|
||||
}
|
||||
|
||||
if ($ServerRunning) {
|
||||
$Url = "http://localhost:$Port"
|
||||
Write-Host "Opening OpenQode Web Interface at: $Url" -ForegroundColor Green
|
||||
Start-Process $Url
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "OpenQode is now running!" -ForegroundColor Cyan
|
||||
Write-Host "Backend: http://localhost:$Port" -ForegroundColor Cyan
|
||||
Write-Host "Frontend: http://localhost:$Port" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Press Ctrl+C in this window to stop the server." -ForegroundColor Gray
|
||||
Write-Host "Server PID: $($ServerJob.Id)" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
try {
|
||||
# Wait for the server job (this will block until the job is stopped)
|
||||
Wait-Job $ServerJob
|
||||
} catch {
|
||||
Write-Host "Error occurred: $($_.Exception.Message)" -ForegroundColor Red
|
||||
}
|
||||
} else {
|
||||
Write-Host "Server failed to start properly." -ForegroundColor Red
|
||||
}
|
||||
|
||||
# Cleanup
|
||||
if ($ServerJob) {
|
||||
Stop-Job $ServerJob -ErrorAction SilentlyContinue
|
||||
Remove-Job $ServerJob -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "OpenQode server stopped." -ForegroundColor Cyan
|
||||
Write-Host "Goodbye!" -ForegroundColor Green
|
||||
Reference in New Issue
Block a user