diff --git a/start-lab.bat b/start-lab.bat index f1f5bc2..a2ff67d 100644 --- a/start-lab.bat +++ b/start-lab.bat @@ -7,38 +7,63 @@ 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 - commander-ai-lab built: mvn package "-DskipTests" +REM - Forge built: mvn package "-DskipTests" REM -REM Edit the paths below to match your system. +REM All paths are resolved RELATIVE to this script's location. +REM No hardcoded drive letters — works on any machine. REM ═══════════════════════════════════════════════════════════ -REM ── Your Forge paths (EDIT THESE) ────────────────────────── -set FORGE_JAR=D:\ForgeCommander\forge-repo\forge-gui-desktop\target\forge-gui-desktop-2.0.12-SNAPSHOT-jar-with-dependencies.jar -set FORGE_DIR=D:\ForgeCommander\forge-repo -REM Precon-decks folder — Forge reads .dck files directly from here. -REM This is also used as the source for precon install endpoints. -set FORGE_DECKS_DIR=D:\ForgeCommander\commander-ai-lab\precon-decks -set PRECON_DECKS_DIR=D:\ForgeCommander\commander-ai-lab\precon-decks -REM ── Lab JAR (auto-detected from target/) ───────────────────── + +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) ── -REM If not already set in your environment, create a .env file -REM in this directory (see .env.example) or set them manually: -REM set XIMILAR_API_KEY=your-ximilar-key-here -REM set ANTHROPIC_API_KEY=your-anthropic-api-key-here -REM -REM Load from .env file if it exists and vars aren't already set if not defined XIMILAR_API_KEY ( - if exist "%~dp0.env" ( - for /f "usebackq tokens=1,* delims==" %%A in ("%~dp0.env") do ( + 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 - if "%%A"=="PRECON_DECKS_DIR" set PRECON_DECKS_DIR=%%B - if "%%A"=="FORGE_DECKS_DIR" set FORGE_DECKS_DIR=%%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 ║ @@ -49,11 +74,15 @@ echo Forge Dir: %FORGE_DIR% echo Decks Dir: %FORGE_DECKS_DIR% echo Precon Dir: %PRECON_DECKS_DIR% echo Port: %LAB_PORT% -echo Ximilar: Configured -if defined ANTHROPIC_API_KEY ( - echo Claude Opus: Configured +if defined XIMILAR_API_KEY ( + echo Ximilar: Configured ) else ( - echo Claude Opus: Not configured ^(set ANTHROPIC_API_KEY env var for AI features^) + 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. @@ -75,15 +104,14 @@ if %ERRORLEVEL% neq 0 ( if not exist "%FORGE_JAR%" ( echo ERROR: Forge JAR not found at: %FORGE_JAR% echo Run Forge build first: - echo cd D:\ForgeCommander\forge-repo + echo cd %FORGE_DIR% echo mvn package -pl forge-gui-desktop "-DskipTests" "-Drevision=2.0.12-SNAPSHOT" -am pause exit /b 1 ) -REM ── Check if lab_api.py exists ───────────────────────────── -if not exist "%~dp0lab_api.py" ( - echo ERROR: lab_api.py not found in %~dp0 +if not exist "%SCRIPT_DIR%lab_api.py" ( + echo ERROR: lab_api.py not found in %SCRIPT_DIR% pause exit /b 1 ) @@ -104,7 +132,7 @@ echo Press Ctrl+C to stop. echo. if defined ANTHROPIC_API_KEY ( - python "%~dp0lab_api.py" ^ + python "%SCRIPT_DIR%lab_api.py" ^ --forge-jar "%FORGE_JAR%" ^ --forge-dir "%FORGE_DIR%" ^ --forge-decks-dir "%FORGE_DECKS_DIR%" ^ @@ -113,7 +141,7 @@ if defined ANTHROPIC_API_KEY ( --ximilar-key "%XIMILAR_API_KEY%" ^ --anthropic-key "%ANTHROPIC_API_KEY%" ) else ( - python "%~dp0lab_api.py" ^ + python "%SCRIPT_DIR%lab_api.py" ^ --forge-jar "%FORGE_JAR%" ^ --forge-dir "%FORGE_DIR%" ^ --forge-decks-dir "%FORGE_DECKS_DIR%" ^