152 lines
6.1 KiB
Batchfile
152 lines
6.1 KiB
Batchfile
@echo off
|
|
REM ═══════════════════════════════════════════════════════════
|
|
REM Commander AI Lab — One-Click Launcher (Windows)
|
|
REM ═══════════════════════════════════════════════════════════
|
|
REM
|
|
REM Starts the Python FastAPI server + serves the web UI.
|
|
REM Prerequisites:
|
|
REM - Python 3.10+ with: pip install fastapi uvicorn
|
|
REM - Java 17+
|
|
REM - Forge built: mvn package "-DskipTests"
|
|
REM
|
|
REM All paths are resolved RELATIVE to this script's location.
|
|
REM No hardcoded drive letters — works on any machine.
|
|
REM ═══════════════════════════════════════════════════════════
|
|
|
|
REM ── Resolve root from script location (portable, any drive) ─
|
|
set SCRIPT_DIR=%~dp0
|
|
set FORGE_COMMANDER_ROOT=%SCRIPT_DIR%..
|
|
|
|
REM ── Forge paths (auto-resolved, no hardcoded drive) ─────────
|
|
set FORGE_JAR=%FORGE_COMMANDER_ROOT%\forge-repo\forge-gui-desktop\target\forge-gui-desktop-2.0.12-SNAPSHOT-jar-with-dependencies.jar
|
|
set FORGE_DIR=%FORGE_COMMANDER_ROOT%\forge-repo
|
|
set FORGE_PROFILE=%FORGE_COMMANDER_ROOT%\forge-repo\forge-gui-desktop\target\res\forge.profile.properties
|
|
|
|
REM ── Deck paths: all inside forge-repo for full portability ──
|
|
set FORGE_USER_DATA=%FORGE_COMMANDER_ROOT%\forge-repo\userdata
|
|
set FORGE_DECKS_DIR=%FORGE_USER_DATA%\decks
|
|
set PRECON_DECKS_DIR=%SCRIPT_DIR%precon-decks
|
|
|
|
REM ── Lab server port ──────────────────────────────────────────
|
|
set LAB_PORT=8080
|
|
|
|
REM ── API Keys (set via environment variables or .env file) ──
|
|
if not defined XIMILAR_API_KEY (
|
|
if exist "%SCRIPT_DIR%.env" (
|
|
for /f "usebackq tokens=1,* delims==" %%A in ("%SCRIPT_DIR%.env") do (
|
|
if "%%A"=="XIMILAR_API_KEY" set XIMILAR_API_KEY=%%B
|
|
if "%%A"=="ANTHROPIC_API_KEY" set ANTHROPIC_API_KEY=%%B
|
|
)
|
|
)
|
|
)
|
|
|
|
REM ═══════════════════════════════════════════════════════════
|
|
REM Write forge.profile.properties so Forge resolves decks from
|
|
REM forge-repo\userdata instead of %APPDATA%\Forge.
|
|
REM Backslashes are doubled as required by .properties format.
|
|
REM This is rewritten every launch so it always matches the
|
|
REM current machine's absolute path.
|
|
REM ═══════════════════════════════════════════════════════════
|
|
mkdir "%FORGE_USER_DATA%\decks\commander" 2>nul
|
|
|
|
REM Build escaped paths for .properties file
|
|
set _UD=%FORGE_USER_DATA%
|
|
set _DD=%FORGE_DECKS_DIR%
|
|
setlocal enabledelayedexpansion
|
|
set _UD_ESC=!_UD:\=\\!
|
|
set _DD_ESC=!_DD:\=\\!
|
|
(echo userDir=!_UD_ESC!) > "%FORGE_PROFILE%"
|
|
(echo decksDir=!_DD_ESC!) >> "%FORGE_PROFILE%"
|
|
endlocal
|
|
|
|
REM ── Copy precon .dck files into Forge's commander deck folder
|
|
REM (idempotent — safe to run every launch)
|
|
xcopy /Y /Q "%PRECON_DECKS_DIR%\*.dck" "%FORGE_DECKS_DIR%\commander\" >nul 2>&1
|
|
echo Synced precon decks to Forge commander folder.
|
|
|
|
echo.
|
|
echo ╔══════════════════════════════════════════════════╗
|
|
echo ║ Commander AI Lab — Launcher ║
|
|
echo ╚══════════════════════════════════════════════════╝
|
|
echo.
|
|
echo Forge JAR: %FORGE_JAR%
|
|
echo Forge Dir: %FORGE_DIR%
|
|
echo Decks Dir: %FORGE_DECKS_DIR%
|
|
echo Precon Dir: %PRECON_DECKS_DIR%
|
|
echo Port: %LAB_PORT%
|
|
if defined XIMILAR_API_KEY (
|
|
echo Ximilar: Configured
|
|
) else (
|
|
echo Ximilar: Not configured
|
|
)
|
|
if defined ANTHROPIC_API_KEY (
|
|
echo Claude: Configured
|
|
) else (
|
|
echo Claude: Not configured ^(set ANTHROPIC_API_KEY for AI features^)
|
|
)
|
|
echo.
|
|
|
|
REM ── Check prerequisites ────────────────────────────────────
|
|
where python >nul 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo ERROR: Python not found in PATH
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
where java >nul 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo ERROR: Java not found in PATH
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
if not exist "%FORGE_JAR%" (
|
|
echo ERROR: Forge JAR not found at: %FORGE_JAR%
|
|
echo Run Forge build first:
|
|
echo cd %FORGE_DIR%
|
|
echo mvn package -pl forge-gui-desktop "-DskipTests" "-Drevision=2.0.12-SNAPSHOT" -am
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
if not exist "%SCRIPT_DIR%lab_api.py" (
|
|
echo ERROR: lab_api.py not found in %SCRIPT_DIR%
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
REM ── Install Python deps if needed ───────────────────────────
|
|
python -c "import fastapi" >nul 2>&1
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo Installing FastAPI + Uvicorn...
|
|
pip install fastapi uvicorn
|
|
)
|
|
|
|
REM ── Launch the server ───────────────────────────────────────
|
|
echo.
|
|
echo Starting Commander AI Lab server...
|
|
echo Web UI: http://localhost:%LAB_PORT%
|
|
echo API: http://localhost:%LAB_PORT%/docs
|
|
echo Press Ctrl+C to stop.
|
|
echo.
|
|
|
|
if defined ANTHROPIC_API_KEY (
|
|
python "%SCRIPT_DIR%lab_api.py" ^
|
|
--forge-jar "%FORGE_JAR%" ^
|
|
--forge-dir "%FORGE_DIR%" ^
|
|
--forge-decks-dir "%FORGE_DECKS_DIR%" ^
|
|
--precon-dir "%PRECON_DECKS_DIR%" ^
|
|
--port %LAB_PORT% ^
|
|
--ximilar-key "%XIMILAR_API_KEY%" ^
|
|
--anthropic-key "%ANTHROPIC_API_KEY%"
|
|
) else (
|
|
python "%SCRIPT_DIR%lab_api.py" ^
|
|
--forge-jar "%FORGE_JAR%" ^
|
|
--forge-dir "%FORGE_DIR%" ^
|
|
--forge-decks-dir "%FORGE_DECKS_DIR%" ^
|
|
--precon-dir "%PRECON_DECKS_DIR%" ^
|
|
--port %LAB_PORT% ^
|
|
--ximilar-key "%XIMILAR_API_KEY%"
|
|
)
|