@echo off chcp 65001 >nul 2>&1 title U-Claw - Portable AI Agent echo. echo ======================================== echo U-Claw v1.1 - Portable AI Agent echo ======================================== echo. set "UCLAW_DIR=%~dp0" set "APP_DIR=%UCLAW_DIR%app" REM Migration shim: rename old core-win to core for existing USB users if exist "%APP_DIR%\core-win" if not exist "%APP_DIR%\core" ren "%APP_DIR%\core-win" core set "CORE_DIR=%APP_DIR%\core" set "DATA_DIR=%UCLAW_DIR%data" set "STATE_DIR=%DATA_DIR%\.openclaw" set "NODE_DIR=%APP_DIR%\runtime\node-win-x64" set "NODE_BIN=%NODE_DIR%\node.exe" set "NPM_BIN=%NODE_DIR%\npm.cmd" set "OPENCLAW_HOME=%DATA_DIR%" set "OPENCLAW_STATE_DIR=%STATE_DIR%" set "OPENCLAW_CONFIG_PATH=%STATE_DIR%\openclaw.json" REM Check runtime if not exist "%NODE_BIN%" ( echo [ERROR] Node.js runtime not found echo Please ensure app\runtime\node-win-x64 is complete pause exit /b 1 ) for /f "tokens=*" %%v in ('"%NODE_BIN%" --version') do set NODE_VER=%%v echo Node.js: %NODE_VER% echo. set "PATH=%NODE_DIR%;%NODE_DIR%\node_modules\.bin;%PATH%" REM Init data if not exist "%DATA_DIR%" mkdir "%DATA_DIR%" if not exist "%STATE_DIR%" mkdir "%STATE_DIR%" if not exist "%DATA_DIR%\memory" mkdir "%DATA_DIR%\memory" if not exist "%DATA_DIR%\backups" mkdir "%DATA_DIR%\backups" REM Default config if not exist "%STATE_DIR%\openclaw.json" ( echo First run - creating default config... echo {"gateway":{"mode":"local","auth":{"token":"uclaw"}}} > "%STATE_DIR%\openclaw.json" echo Config created echo. ) REM Check dependencies if not exist "%CORE_DIR%\node_modules" ( echo First run - installing dependencies... echo Using China mirror, please wait... echo. cd /d "%CORE_DIR%" call "%NPM_BIN%" install --registry=https://registry.npmmirror.com echo. echo Dependencies installed! echo. ) REM OpenClaw doesn't need a separate build step when installed via npm REM Find available port set PORT=18789 :check_port netstat -an | findstr ":%PORT% " | findstr "LISTENING" >nul 2>&1 if %errorlevel%==0 ( echo Port %PORT% in use, trying next... set /a PORT+=1 if %PORT% gtr 18799 ( echo No available port 18789-18799 pause exit /b 1 ) goto :check_port ) echo Starting OpenClaw on port %PORT%... echo. REM Start Config Server in background echo Starting Config Center on port 18788... set "CONFIG_SERVER=%UCLAW_DIR%config-server" start /B "" "%NODE_BIN%" "%CONFIG_SERVER%\server.js" >nul 2>&1 REM Wait for config server to start timeout /t 2 /nobreak >nul REM Open both Config Center and Dashboard echo Opening Config Center and Dashboard... timeout /t 1 /nobreak >nul REM Open Config Center (Node.js web UI) start "" http://127.0.0.1:18788/ REM Open OpenClaw Dashboard start "" http://127.0.0.1:%PORT%/#token=uclaw echo Browsers opened. Starting OpenClaw Gateway on port %PORT%... echo DO NOT close this window while using U-Claw! echo. cd /d "%CORE_DIR%" REM Check if model is configured - open Config.html for first time, dashboard for returning users set "HAS_MODEL=no" if exist "%DATA_DIR%\config.json" ( findstr /c:"agent" "%DATA_DIR%\config.json" >nul 2>&1 && set "HAS_MODEL=yes" ) if "%HAS_MODEL%"=="yes" ( echo Opening dashboard... start "" http://127.0.0.1:%PORT%/#token=uclaw ) else ( echo First time - opening Config page... start "" "%UCLAW_DIR%Config.html?port=%PORT%" ) if not exist "%DATA_DIR%\logs" mkdir "%DATA_DIR%\logs" set "OPENCLAW_MJS=%CORE_DIR%\node_modules\openclaw\openclaw.mjs" echo Log: %DATA_DIR%\logs\gateway.log "%NODE_BIN%" "%OPENCLAW_MJS%" gateway run --allow-unconfigured --force --port %PORT% 2>&1 | powershell -command "& { $input | Tee-Object -Append -FilePath '%DATA_DIR%\logs\gateway.log' }" echo. echo OpenClaw stopped. pause