refactor(startup): simplify stack to Tauri-managed OpenFang + optional ChromeDriver
- Remove OpenFang CLI dependency from startup scripts - OpenFang now bundled with Tauri and managed via gateway_start/gateway_status commands - Add bootstrap screen in App.tsx to auto-start local gateway before UI loads - Update Makefile: replace start-no-gateway with start-desktop-only - Fix gateway config endpoints: use /api/config instead of /api/config/quick - Add Playwright dependencies for future E2E testing
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
# ZCLAW Full Stack Start Script
|
||||
# Starts: ChromeDriver (optional) -> OpenFang Gateway (optional) -> Tauri Desktop
|
||||
# Starts: ChromeDriver (optional) -> Tauri Desktop (manages OpenFang internally)
|
||||
#
|
||||
# NOTE: OpenFang is bundled with Tauri and managed internally.
|
||||
# The frontend uses Tauri commands (gateway_start/gateway_status) to control OpenFang.
|
||||
# No external OpenFang CLI installation is required.
|
||||
|
||||
param(
|
||||
[switch]$NoBrowser,
|
||||
[switch]$NoGateway,
|
||||
[switch]$Dev,
|
||||
[switch]$Help,
|
||||
[switch]$Stop,
|
||||
@@ -28,16 +31,21 @@ ZCLAW Full Stack Start Script
|
||||
Usage: .\start-all.ps1 [options]
|
||||
|
||||
Options:
|
||||
-DesktopOnly Start desktop only (skip all external services)
|
||||
-NoBrowser Skip ChromeDriver
|
||||
-NoGateway Skip OpenFang Gateway
|
||||
-DesktopOnly Start desktop only (skip ChromeDriver)
|
||||
-NoBrowser Skip ChromeDriver startup
|
||||
-Dev Development mode (hot reload)
|
||||
-Stop Stop all services
|
||||
-Help Show this help
|
||||
|
||||
Note:
|
||||
OpenFang is bundled with the Tauri app and managed internally.
|
||||
The app will start OpenFang automatically via Tauri commands.
|
||||
No external OpenFang CLI installation required.
|
||||
|
||||
Quick Commands:
|
||||
pnpm start # Start all services
|
||||
pnpm desktop # Start desktop only
|
||||
pnpm start:dev # Start in dev mode
|
||||
pnpm start:desktop # Start desktop only (no browser)
|
||||
|
||||
"@
|
||||
exit 0
|
||||
@@ -51,10 +59,14 @@ if ($Stop) {
|
||||
Get-Process -Name "chromedriver" -ErrorAction SilentlyContinue | Stop-Process -Force
|
||||
ok "ChromeDriver stopped"
|
||||
|
||||
# Stop OpenFang (if running via openfang CLI)
|
||||
if (Get-Command openfang -ErrorAction SilentlyContinue) {
|
||||
openfang gateway stop 2>$null
|
||||
ok "OpenFang Gateway stopped"
|
||||
# Stop any process on port 4200 (OpenFang)
|
||||
$port4200 = netstat -ano | Select-String ":4200.*LISTENING"
|
||||
if ($port4200) {
|
||||
$pid4200 = ($port4200 -split '\s+')[-1]
|
||||
if ($pid4200 -match '^\d+$') {
|
||||
Stop-Process -Id $pid4200 -Force -ErrorAction SilentlyContinue
|
||||
ok "Stopped process on port 4200 (PID: $pid4200)"
|
||||
}
|
||||
}
|
||||
|
||||
# Stop Tauri/ZClaw
|
||||
@@ -62,7 +74,7 @@ if ($Stop) {
|
||||
Get-Process -Name "desktop" -ErrorAction SilentlyContinue | Stop-Process -Force
|
||||
ok "ZCLAW Desktop stopped"
|
||||
|
||||
# Kill any process on port 1420
|
||||
# Kill any process on port 1420 (Vite dev server)
|
||||
$port1420 = netstat -ano | Select-String ":1420.*LISTENING"
|
||||
if ($port1420) {
|
||||
$pid1420 = ($port1420 -split '\s+')[-1]
|
||||
@@ -98,13 +110,12 @@ function Cleanup {
|
||||
trap { Cleanup; break }
|
||||
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action { Cleanup } | Out-Null
|
||||
|
||||
# Skip external services if DesktopOnly
|
||||
# Skip ChromeDriver if DesktopOnly
|
||||
if ($DesktopOnly) {
|
||||
$NoBrowser = $true
|
||||
$NoGateway = $true
|
||||
}
|
||||
|
||||
# 1. ChromeDriver (optional)
|
||||
# 1. ChromeDriver (optional - for Browser Hand automation)
|
||||
if (-not $NoBrowser) {
|
||||
info "Checking ChromeDriver..."
|
||||
|
||||
@@ -137,55 +148,21 @@ if (-not $NoBrowser) {
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# 2. OpenFang Gateway (optional)
|
||||
if (-not $NoGateway) {
|
||||
info "Checking OpenFang Gateway..."
|
||||
|
||||
$gatewayUp = $false
|
||||
try {
|
||||
$r = Invoke-WebRequest -Uri "http://127.0.0.1:4200/health" -TimeoutSec 2 -ErrorAction SilentlyContinue
|
||||
if ($r.StatusCode -eq 200) { $gatewayUp = $true }
|
||||
} catch {}
|
||||
|
||||
if ($gatewayUp) {
|
||||
ok "OpenFang Gateway running on port 4200"
|
||||
} else {
|
||||
if (Get-Command openfang -ErrorAction SilentlyContinue) {
|
||||
info "Starting OpenFang Gateway..."
|
||||
$proc = Start-Process -FilePath "openfang" -ArgumentList "gateway", "start" -PassThru
|
||||
$Jobs += $proc
|
||||
|
||||
info "Waiting for gateway..."
|
||||
$wait = 0
|
||||
while ($wait -lt 30) {
|
||||
try {
|
||||
$r = Invoke-WebRequest -Uri "http://127.0.0.1:4200/health" -TimeoutSec 1 -ErrorAction SilentlyContinue
|
||||
if ($r.StatusCode -eq 200) {
|
||||
ok "OpenFang Gateway started"
|
||||
break
|
||||
}
|
||||
} catch {}
|
||||
Start-Sleep -Seconds 1
|
||||
$wait++
|
||||
Write-Host -NoNewline "."
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
if ($wait -ge 30) {
|
||||
warn "Gateway did not respond within 30s"
|
||||
}
|
||||
} else {
|
||||
warn "OpenFang CLI not found. Gateway not started."
|
||||
info "The app will run in standalone mode."
|
||||
}
|
||||
}
|
||||
# 2. Check OpenFang Runtime
|
||||
info "Checking OpenFang runtime..."
|
||||
$runtimePath = "$ScriptDir/desktop/src-tauri/resources/openfang-runtime"
|
||||
if (Test-Path "$runtimePath/openfang.exe") {
|
||||
ok "OpenFang runtime found (bundled)"
|
||||
} elseif (Test-Path "$runtimePath/openfang") {
|
||||
ok "OpenFang runtime found (bundled)"
|
||||
} else {
|
||||
info "Skipping OpenFang Gateway"
|
||||
warn "OpenFang runtime not found at $runtimePath"
|
||||
info "Run: cd desktop && pnpm prepare:openfang-runtime"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# 3. Tauri Desktop
|
||||
# 3. Start Tauri Desktop
|
||||
info "Starting ZCLAW Desktop..."
|
||||
Set-Location "$ScriptDir/desktop"
|
||||
|
||||
@@ -202,6 +179,7 @@ if ($port1420) {
|
||||
|
||||
if ($Dev) {
|
||||
info "Development mode enabled"
|
||||
info "OpenFang will be started by the app via Tauri commands"
|
||||
pnpm tauri dev
|
||||
} else {
|
||||
$exe = "src-tauri\target\release\ZClaw.exe"
|
||||
|
||||
Reference in New Issue
Block a user