feat: add finish.ps1 standalone installer (no interaction, no npm)
This commit is contained in:
79
website/finish.ps1
Normal file
79
website/finish.ps1
Normal file
@@ -0,0 +1,79 @@
|
||||
# U-Claw 快速完成安装(Node已装好,只需下载bundle+配置)
|
||||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||||
$ErrorActionPreference = "Continue"
|
||||
|
||||
$UCLAW = "$env:USERPROFILE\.uclaw"
|
||||
$NODE = "$UCLAW\runtime\node-win-x64\node.exe"
|
||||
$CORE = "$UCLAW\core"
|
||||
$DATA = "$UCLAW\data"
|
||||
|
||||
# 确保目录存在
|
||||
@("$UCLAW\runtime","$CORE","$DATA\.openclaw","$DATA\memory","$DATA\backups") | ForEach-Object {
|
||||
New-Item -ItemType Directory -Force -Path $_ -ErrorAction SilentlyContinue | Out-Null
|
||||
}
|
||||
|
||||
# Step 1: Node
|
||||
if (-not (Test-Path $NODE)) {
|
||||
Write-Host "下载 Node.js..."
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
Invoke-WebRequest -Uri "https://npmmirror.com/mirrors/node/v22.14.0/node-v22.14.0-win-x64.zip" -OutFile "$env:TEMP\node.zip" -UseBasicParsing
|
||||
Expand-Archive "$env:TEMP\node.zip" "$env:TEMP\node-ext" -Force
|
||||
Move-Item "$env:TEMP\node-ext\node-v22.14.0-win-x64" "$UCLAW\runtime\node-win-x64" -Force
|
||||
Remove-Item "$env:TEMP\node.zip","$env:TEMP\node-ext" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
Write-Host "[OK] Node: $(& $NODE --version)"
|
||||
|
||||
# Step 2: OpenClaw bundle
|
||||
if (-not (Test-Path "$CORE\node_modules\openclaw\openclaw.mjs")) {
|
||||
Write-Host "下载 OpenClaw..."
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
$url = "https://ghfast.top/https://github.com/dongsheng123132/u-claw/releases/download/v1.0.0-bundle/openclaw-bundle.zip"
|
||||
Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\oc.zip" -UseBasicParsing -TimeoutSec 300
|
||||
Write-Host "解压中..."
|
||||
Expand-Archive "$env:TEMP\oc.zip" "$CORE" -Force
|
||||
Remove-Item "$env:TEMP\oc.zip" -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
Write-Host "[OK] OpenClaw: $(Test-Path "$CORE\node_modules\openclaw\openclaw.mjs")"
|
||||
|
||||
# Step 3: 默认配置 (DeepSeek)
|
||||
$cfg = "$DATA\.openclaw\openclaw.json"
|
||||
if (-not (Test-Path $cfg)) {
|
||||
$json = '{"gateway":{"mode":"local","auth":{"token":"uclaw"}},"agent":{"model":"deepseek-chat","apiKey":"","baseUrl":"https://api.deepseek.com/v1"}}'
|
||||
[IO.File]::WriteAllText($cfg, $json, (New-Object System.Text.UTF8Encoding $false))
|
||||
}
|
||||
Write-Host "[OK] Config"
|
||||
|
||||
# Step 4: 启动脚本
|
||||
$bat = @"
|
||||
@echo off
|
||||
setlocal EnableDelayedExpansion
|
||||
chcp 65001 >nul 2>&1
|
||||
title U-Claw
|
||||
set "DIR=%~dp0"
|
||||
set "NODE_BIN=%DIR%runtime\node-win-x64\node.exe"
|
||||
if not exist "%NODE_BIN%" set "NODE_BIN=node"
|
||||
set "OPENCLAW_MJS=%DIR%core\node_modules\openclaw\openclaw.mjs"
|
||||
set "OPENCLAW_HOME=%DIR%data"
|
||||
set "OPENCLAW_STATE_DIR=%DIR%data\.openclaw"
|
||||
set "OPENCLAW_CONFIG_PATH=%DIR%data\.openclaw\openclaw.json"
|
||||
set PORT=18789
|
||||
:check_port
|
||||
netstat -an | findstr ":%PORT% " | findstr "LISTENING" >nul 2>&1
|
||||
if %errorlevel%==0 (set /a PORT+=1 & if !PORT! gtr 18799 (echo No port & pause & exit /b 1) & goto :check_port)
|
||||
cd /d "%DIR%core"
|
||||
start /B "" cmd /c "timeout /t 3 /nobreak >nul && start http://127.0.0.1:!PORT!/#token=uclaw"
|
||||
"%NODE_BIN%" "%OPENCLAW_MJS%" gateway run --allow-unconfigured --force --port !PORT!
|
||||
pause
|
||||
"@
|
||||
[IO.File]::WriteAllText("$UCLAW\start.bat", $bat, (New-Object System.Text.ASCIIEncoding))
|
||||
Write-Host "[OK] start.bat"
|
||||
|
||||
# Step 5: 验证
|
||||
Write-Host ""
|
||||
Write-Host "===== 安装完成 ====="
|
||||
Write-Host "Node: $(& $NODE --version)"
|
||||
Write-Host "OpenClaw: $(if(Test-Path "$CORE\node_modules\openclaw\openclaw.mjs"){'OK'}else{'FAIL'})"
|
||||
Write-Host "启动: 双击 $UCLAW\start.bat"
|
||||
Write-Host "====="
|
||||
Reference in New Issue
Block a user