Files
AetherForge/devrun.bat
AetherForge d52479c9a6 feat: Telegram fleet alerts, forge sigil scramble, UI polish, agent ops
- Calibrate: per-event Telegram/SMTP toggles, test notification, chat ID help
- Notify on agent connect/reconnect, offline/hashrate/rejection, forge complete
- Sigil scramble post-forge uniquification and Dispense Reveal ceremony
- Full system check, desktop push, BITS/host-binary persistence, Path Tracer
- Dashboard/Crucible visual polish, haptics, sacred geometry, mobile nav
- README documents alerts, sigil scramble, and pack-usb workflow
- USB bundle repacked via pack-usb.bat (AetherForge.exe + synced agent source)
2026-06-03 20:32:59 -07:00

266 lines
8.5 KiB
Batchfile

@echo off
setlocal EnableExtensions EnableDelayedExpansion
title AetherForge Control Server (dev)
cd /d "%~dp0"
set "ROOT=%CD%"
if /i "%~1"=="release" (
set "AETHERFORGE_RELEASE=1"
echo Release mode: Garble obfuscation default ON for new forges.
)
:: Remove corrupt empty Go file that breaks server builds (accidental placeholder).
if exist "server\internal\ollama\main.go" (
for %%F in ("server\internal\ollama\main.go") do if %%~zF==0 del "server\internal\ollama\main.go"
)
echo.
echo ==============================================================
echo AetherForge - Dev Build + Control Server
echo ==============================================================
echo This window stays open and shows live server logs.
echo Press Ctrl+C to stop the server.
echo Portable/USB: use LAUNCH.bat instead of devrun.bat.
echo ==============================================================
echo.
:: Common tool paths (Go/Node installs + user Go bin for garble)
set "PATH=C:\Program Files\Go\bin;%USERPROFILE%\go\bin;C:\Program Files\nodejs;%PATH%"
:: ============================================================
:: STEP 1: Go
:: ============================================================
echo [1/5] Checking Go...
where go >nul 2>nul
if errorlevel 1 goto install_go
echo Go found:
call go version
goto go_ready
:install_go
echo Go not found. Checking for existing installation...
if exist "C:\Program Files\Go\bin\go.exe" (
echo Found Go at C:\Program Files\Go\bin
set "PATH=C:\Program Files\Go\bin;%PATH%"
goto go_ready
)
echo Downloading and installing Go...
if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
set "GO_ARCH=amd64"
) else (
set "GO_ARCH=386"
)
set "GO_VERSION=1.22.2"
set "GO_URL=https://go.dev/dl/go%GO_VERSION%.windows-%GO_ARCH%.msi"
set "GO_MSI=%TEMP%\go-installer.msi"
powershell -NoProfile -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%GO_URL%' -OutFile '%GO_MSI%' }"
if errorlevel 1 (
echo ERROR: Failed to download Go. Get it from https://go.dev/dl/
goto fatal_exit
)
msiexec /i "%GO_MSI%" /quiet /norestart
if errorlevel 1 (
echo ERROR: Go install failed. Run this script as Administrator.
goto fatal_exit
)
del "%GO_MSI%" 2>nul
set "PATH=C:\Program Files\Go\bin;%USERPROFILE%\go\bin;%PATH%"
echo Go installed.
:go_ready
:: Garble + go-winres (Forge pipeline tools — failure is non-fatal)
echo [1.5/5] Checking Forge tools (Garble, go-winres)...
where garble >nul 2>nul
if errorlevel 1 (
echo Installing garble via go install...
go install mvdan.cc/garble@latest
if errorlevel 1 echo WARNING: Garble install failed; Forge obfuscation may be unavailable.
)
where go-winres >nul 2>nul
if errorlevel 1 (
echo Installing go-winres via go install...
go install github.com/tc-hib/go-winres@v0.3.1
if errorlevel 1 echo WARNING: go-winres install failed; Fusion icon patch may need network on first forge.
)
:: ============================================================
:: STEP 2: Node.js
:: ============================================================
echo [2/5] Checking Node.js...
where node >nul 2>nul
if errorlevel 1 goto install_node
echo Node.js found:
call node --version
goto node_ready
:install_node
echo Node.js not found. Checking for existing installation...
if exist "C:\Program Files\nodejs\node.exe" (
echo Found Node.js at C:\Program Files\nodejs
set "PATH=C:\Program Files\nodejs;%PATH%"
goto node_ready
)
echo Downloading and installing Node.js...
set "NODE_VERSION=20.12.2"
set "NODE_URL=https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-x64.msi"
set "NODE_MSI=%TEMP%\node-installer.msi"
powershell -NoProfile -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NODE_URL%' -OutFile '%NODE_MSI%' }"
if errorlevel 1 (
echo WARNING: Node.js download failed. Frontend build will be skipped.
set "SKIP_FRONTEND=1"
goto node_ready
)
msiexec /i "%NODE_MSI%" /quiet /norestart
if errorlevel 1 (
echo WARNING: Node.js install failed. Frontend build will be skipped.
set "SKIP_FRONTEND=1"
goto node_ready
)
set "PATH=C:\Program Files\nodejs;%PATH%"
del "%NODE_MSI%" 2>nul
echo Node.js installed.
:node_ready
:: ============================================================
:: STEP 3: Data directories
:: ============================================================
echo [3/5] Preparing data directories...
if not exist "data\builds" mkdir "data\builds"
if not exist "data\logs" mkdir "data\logs"
if not exist "data\blueprints" mkdir "data\blueprints"
if not exist "data\preps" mkdir "data\preps"
if not exist "bin" mkdir "bin"
echo OK: data\ and bin\
:: ============================================================
:: STEP 4: Frontend
:: ============================================================
if defined SKIP_FRONTEND goto skip_frontend
echo [4/5] Building dashboard (server\web)...
cd /d "%ROOT%\server\web"
if not exist "node_modules" (
echo npm install...
call npm install
if errorlevel 1 (
cd /d "%ROOT%"
echo ERROR: npm install failed.
goto fatal_exit
)
)
echo npm run build...
call npm run build
if errorlevel 1 (
cd /d "%ROOT%"
echo ERROR: Frontend build failed.
goto fatal_exit
)
cd /d "%ROOT%"
echo Frontend built: server\web\dist
goto frontend_done
:skip_frontend
echo [4/5] Skipping frontend build (Node.js unavailable)
if not exist "server\web\dist\index.html" (
echo WARNING: No server\web\dist\index.html — dashboard may not load.
)
:frontend_done
if exist "server\web\dist\index.html" (
if not exist "server\webroot" mkdir "server\webroot"
xcopy /E /I /Y /Q "server\web\dist\*" "server\webroot\" >nul
echo Copied dashboard to server\webroot
)
:: ============================================================
:: STEP 5: Server binary
:: ============================================================
echo [5/5] Building control server...
cd /d "%ROOT%\server"
go mod download
if errorlevel 1 echo WARNING: go mod download had issues; continuing...
echo go build...
go build -ldflags="-s -w" -o "..\bin\miner-server.exe" .
if errorlevel 1 (
cd /d "%ROOT%"
echo ERROR: Server build failed.
goto fatal_exit
)
cd /d "%ROOT%"
if defined AETHERFORGE_RELEASE (
echo Release mode active — set AETHERFORGE_RELEASE=1 for server process.
)
if not exist "bin\miner-server.exe" (
echo ERROR: bin\miner-server.exe was not created.
goto fatal_exit
)
echo Server binary: bin\miner-server.exe
:: ============================================================
:: LAUNCH (foreground — logs stay in this window)
:: ============================================================
echo.
echo Stopping any previous miner-server.exe...
taskkill /F /IM miner-server.exe >nul 2>nul
timeout /t 1 /nobreak >nul
set "LAN_IP=localhost"
for /f "usebackq delims=" %%I in (`powershell -NoProfile -Command "(Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -notlike '127.*' -and $_.PrefixOrigin -ne 'WellKnown' } | Select-Object -First 1 -ExpandProperty IPAddress) 2>$null"`) do set "LAN_IP=%%I"
echo.
echo ==============================================================
echo STARTING CONTROL SERVER
echo ==============================================================
echo Dashboard: http://localhost:8989
echo LAN: http://%LAN_IP%:8989
echo Agents WS: ws://%LAN_IP%:8989/ws/agent
echo Data: %ROOT%\data\
echo.
echo Live logs appear below. Ctrl+C stops the server.
echo ==============================================================
echo.
:: Open browser after a short delay (server starts in this window)
start "" cmd /c "timeout /t 3 /nobreak >nul && start http://localhost:8989/"
echo [Server] miner-server.exe -port 8989 -data "%ROOT%\data"
if defined AETHERFORGE_RELEASE set AETHERFORGE_RELEASE=1
echo.
.\bin\miner-server.exe -port 8989 -data "%ROOT%\data"
set "EXITCODE=!ERRORLEVEL!"
echo.
if "!EXITCODE!"=="0" (
echo [Server] Stopped normally.
) else (
echo [Server] Exited with code !EXITCODE!.
echo If port 8989 was in use, close other miner-server windows and run again.
)
echo.
goto end_pause
:fatal_exit
echo.
echo ==============================================================
echo LAUNCH FAILED — fix the errors above and run devrun.bat again.
echo ==============================================================
echo.
:end_pause
echo.
echo NOTE: USB bundle unchanged until pack-usb.bat is run.
pause
endlocal