chore: 加 .gitattributes 锁定换行符(修跨平台脚本隐患)
core.autocrlf 在不同机器上会把 .command/.sh 转成 CRLF,导致 Mac 用户 双击 .command 报 bad interpreter。明确锁定: - .bat/.cmd/.ps1 → CRLF(Windows 批处理需要) - .command/.sh/.mjs/.js/.json → LF(Mac/Linux 需要) 附带把 install/README.md、Windows-Menu.bat 的换行一次性规范化(纯换行, 无内容改动)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
21
.gitattributes
vendored
Normal file
21
.gitattributes
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# 锁定换行符,保证跨平台分发的脚本可用:
|
||||||
|
# - Windows 批处理 .bat/.cmd 必须 CRLF,否则部分 Windows 环境解析异常
|
||||||
|
# - Mac/Linux 的 .command/.sh 必须 LF,否则双击/执行会报 bad interpreter
|
||||||
|
# - .mjs/.js 统一 LF
|
||||||
|
# 防止 core.autocrlf 在不同机器上把换行改乱。
|
||||||
|
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
|
||||||
|
*.command text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
*.mjs text eol=lf
|
||||||
|
*.js text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
|
||||||
|
# 二进制:不做换行转换
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.zip binary
|
||||||
|
*.ico binary
|
||||||
@@ -1,132 +1,132 @@
|
|||||||
# U-Claw 一键安装 / One-Line Install
|
# U-Claw 一键安装 / One-Line Install
|
||||||
|
|
||||||
> 一行命令安装 OpenClaw + 技能包 + 模型配置
|
> 一行命令安装 OpenClaw + 技能包 + 模型配置
|
||||||
> One command to install OpenClaw + skills + model config
|
> One command to install OpenClaw + skills + model config
|
||||||
|
|
||||||
## 安装 / Install
|
## 安装 / Install
|
||||||
|
|
||||||
### Mac / Linux
|
### Mac / Linux
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://u-claw.org/install.sh | bash
|
curl -fsSL https://u-claw.org/install.sh | bash
|
||||||
```
|
```
|
||||||
|
|
||||||
### Windows (PowerShell 管理员)
|
### Windows (PowerShell 管理员)
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
irm https://u-claw.org/install.ps1 | iex
|
irm https://u-claw.org/install.ps1 | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
### 本地运行
|
### 本地运行
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Mac/Linux
|
# Mac/Linux
|
||||||
bash install/install.sh
|
bash install/install.sh
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
powershell -ExecutionPolicy Bypass -File install\install.ps1
|
powershell -ExecutionPolicy Bypass -File install\install.ps1
|
||||||
```
|
```
|
||||||
|
|
||||||
## 安装流程
|
## 安装流程
|
||||||
|
|
||||||
### Mac / Linux(7 步)
|
### Mac / Linux(7 步)
|
||||||
|
|
||||||
| 步骤 | 内容 | 说明 |
|
| 步骤 | 内容 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 1 | Node.js v22 | 安装到 `~/.uclaw/runtime/`,系统有 v20+ 则复用 |
|
| 1 | Node.js v22 | 安装到 `~/.uclaw/runtime/`,系统有 v20+ 则复用 |
|
||||||
| 2 | OpenClaw | npm 安装到 `~/.uclaw/core/` |
|
| 2 | OpenClaw | npm 安装到 `~/.uclaw/core/` |
|
||||||
| 3 | QQ 插件 | 非致命,失败不影响主功能 |
|
| 3 | QQ 插件 | 非致命,失败不影响主功能 |
|
||||||
| 4 | 10 个中国技能 | 小红书、B站、微博等内容创作技能 |
|
| 4 | 10 个中国技能 | 小红书、B站、微博等内容创作技能 |
|
||||||
| 5 | 模型配置 | 中文交互菜单,默认 DeepSeek |
|
| 5 | 模型配置 | 中文交互菜单,默认 DeepSeek |
|
||||||
| 6 | 启动脚本 | 生成 start.command (Mac) / start.sh (Linux) |
|
| 6 | 启动脚本 | 生成 start.command (Mac) / start.sh (Linux) |
|
||||||
| 7 | 验证 | 检查各组件安装状态 |
|
| 7 | 验证 | 检查各组件安装状态 |
|
||||||
|
|
||||||
### Windows(6 步)
|
### Windows(6 步)
|
||||||
|
|
||||||
| 步骤 | 内容 | 说明 |
|
| 步骤 | 内容 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 1 | Node.js v22 | 下载到 `%USERPROFILE%\.uclaw\runtime\`,系统有 v20+ 则复用 |
|
| 1 | Node.js v22 | 下载到 `%USERPROFILE%\.uclaw\runtime\`,系统有 v20+ 则复用 |
|
||||||
| 2 | OpenClaw + QQ 插件 | 下载预打包 bundle,走国内镜像 |
|
| 2 | OpenClaw + QQ 插件 | 下载预打包 bundle,走国内镜像 |
|
||||||
| 3 | 10 个中国技能 | 小红书、B站、微博等内容创作技能 |
|
| 3 | 10 个中国技能 | 小红书、B站、微博等内容创作技能 |
|
||||||
| 4 | 模型配置 | 交互菜单,默认 DeepSeek |
|
| 4 | 模型配置 | 交互菜单,默认 DeepSeek |
|
||||||
| 5 | 启动脚本 | 生成 start.bat |
|
| 5 | 启动脚本 | 生成 start.bat |
|
||||||
| 6 | 验证 | 检查各组件安装状态 |
|
| 6 | 验证 | 检查各组件安装状态 |
|
||||||
|
|
||||||
## 支持的 AI 模型
|
## 支持的 AI 模型
|
||||||
|
|
||||||
### 国内(无需翻墙)
|
### 国内(无需翻墙)
|
||||||
|
|
||||||
| 编号 | 模型 | 说明 |
|
| 编号 | 模型 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 1 | DeepSeek | ⭐ 推荐,性价比最高 |
|
| 1 | DeepSeek | ⭐ 推荐,性价比最高 |
|
||||||
| 2 | Kimi/月之暗面 | 长文档 |
|
| 2 | Kimi/月之暗面 | 长文档 |
|
||||||
| 3 | 通义千问 | 有免费额度 |
|
| 3 | 通义千问 | 有免费额度 |
|
||||||
| 4 | 智谱GLM | 学术场景 |
|
| 4 | 智谱GLM | 学术场景 |
|
||||||
| 5 | MiniMax | 多模态 |
|
| 5 | MiniMax | 多模态 |
|
||||||
| 6 | 豆包 | 火山引擎 |
|
| 6 | 豆包 | 火山引擎 |
|
||||||
| 7 | 硅基流动 | 聚合多模型 |
|
| 7 | 硅基流动 | 聚合多模型 |
|
||||||
|
|
||||||
### 海外
|
### 海外
|
||||||
|
|
||||||
| 编号 | 模型 |
|
| 编号 | 模型 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 8 | Claude |
|
| 8 | Claude |
|
||||||
| 9 | GPT |
|
| 9 | GPT |
|
||||||
|
|
||||||
### 本地
|
### 本地
|
||||||
|
|
||||||
| 编号 | 模型 |
|
| 编号 | 模型 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 10 | Ollama |
|
| 10 | Ollama |
|
||||||
|
|
||||||
## 安装目录结构
|
## 安装目录结构
|
||||||
|
|
||||||
```
|
```
|
||||||
~/.uclaw/
|
~/.uclaw/
|
||||||
├── runtime/node-{platform}/ # Node.js v22
|
├── runtime/node-{platform}/ # Node.js v22
|
||||||
├── core/ # OpenClaw + QQ 插件
|
├── core/ # OpenClaw + QQ 插件
|
||||||
│ ├── package.json
|
│ ├── package.json
|
||||||
│ └── node_modules/
|
│ └── node_modules/
|
||||||
│ └── openclaw/skills/ ← 技能在这里
|
│ └── openclaw/skills/ ← 技能在这里
|
||||||
├── data/
|
├── data/
|
||||||
│ ├── .openclaw/openclaw.json ← 模型配置
|
│ ├── .openclaw/openclaw.json ← 模型配置
|
||||||
│ ├── memory/ ← AI 记忆
|
│ ├── memory/ ← AI 记忆
|
||||||
│ └── backups/ ← 备份
|
│ └── backups/ ← 备份
|
||||||
├── start.command (Mac) ← 启动脚本
|
├── start.command (Mac) ← 启动脚本
|
||||||
└── start.bat (Windows) ← 启动脚本
|
└── start.bat (Windows) ← 启动脚本
|
||||||
```
|
```
|
||||||
|
|
||||||
## 技术细节
|
## 技术细节
|
||||||
|
|
||||||
- **Node.js**: 只装到 `~/.uclaw/runtime/`,不动系统 Node;系统已有 v20+ 则复用
|
- **Node.js**: 只装到 `~/.uclaw/runtime/`,不动系统 Node;系统已有 v20+ 则复用
|
||||||
- **镜像**: Mac/Linux 全走 `npmmirror.com`(Node 二进制 + npm 包);Windows bundle 下载依次尝试 ghfast.top → ghproxy.net → gh.idayer.com → 直连,国内无需翻墙
|
- **镜像**: Mac/Linux 全走 `npmmirror.com`(Node 二进制 + npm 包);Windows bundle 下载依次尝试 ghfast.top → ghproxy.net → gh.idayer.com → 直连,国内无需翻墙
|
||||||
- **Windows 编码**: `chcp 65001` + UTF8 输出确保中文显示
|
- **Windows 编码**: `chcp 65001` + UTF8 输出确保中文显示
|
||||||
- **管道模式**: `curl | bash` 时自动跳过交互,使用默认配置
|
- **管道模式**: `curl | bash` 时自动跳过交互,使用默认配置
|
||||||
- **卸载**: `rm -rf ~/.uclaw` (Mac/Linux) 或删除 `%USERPROFILE%\.uclaw` (Windows)
|
- **卸载**: `rm -rf ~/.uclaw` (Mac/Linux) 或删除 `%USERPROFILE%\.uclaw` (Windows)
|
||||||
|
|
||||||
## 包含技能
|
## 包含技能
|
||||||
|
|
||||||
| 技能 | 用途 |
|
| 技能 | 用途 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| xiaohongshu-writer | 小红书笔记写作 |
|
| xiaohongshu-writer | 小红书笔记写作 |
|
||||||
| bilibili-helper | B站视频优化 |
|
| bilibili-helper | B站视频优化 |
|
||||||
| weibo-poster | 微博内容创作 |
|
| weibo-poster | 微博内容创作 |
|
||||||
| wechat-article | 微信公众号文章 |
|
| wechat-article | 微信公众号文章 |
|
||||||
| zhihu-writer | 知乎回答/文章 |
|
| zhihu-writer | 知乎回答/文章 |
|
||||||
| douyin-script | 抖音短视频脚本 |
|
| douyin-script | 抖音短视频脚本 |
|
||||||
| china-search | 国内搜索引擎 |
|
| china-search | 国内搜索引擎 |
|
||||||
| china-translate | 中英互译 |
|
| china-translate | 中英互译 |
|
||||||
| china-weather | 天气查询 |
|
| china-weather | 天气查询 |
|
||||||
| deepseek-helper | DeepSeek API 助手 |
|
| deepseek-helper | DeepSeek API 助手 |
|
||||||
|
|
||||||
## 与其他分发形式的关系
|
## 与其他分发形式的关系
|
||||||
|
|
||||||
```
|
```
|
||||||
install/ ← 一键在线安装(本模块)
|
install/ ← 一键在线安装(本模块)
|
||||||
portable/ ← U 盘便携版
|
portable/ ← U 盘便携版
|
||||||
u-claw-app/ ← Electron 桌面版
|
u-claw-app/ ← Electron 桌面版
|
||||||
bootable/ ← Linux 可启动 U 盘
|
bootable/ ← Linux 可启动 U 盘
|
||||||
```
|
```
|
||||||
|
|
||||||
install/ 安装的结果与 portable/ 的 Mac-Install.command 相同,
|
install/ 安装的结果与 portable/ 的 Mac-Install.command 相同,
|
||||||
区别是不需要 U 盘,直接从网络下载所有组件。
|
区别是不需要 U 盘,直接从网络下载所有组件。
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,180 +1,180 @@
|
|||||||
@echo off
|
@echo off
|
||||||
chcp 65001 >nul 2>&1
|
chcp 65001 >nul 2>&1
|
||||||
title U-Claw - Portable AI Agent
|
title U-Claw - Portable AI Agent
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo U-Claw v1.1 - Portable AI Agent
|
echo U-Claw v1.1 - Portable AI Agent
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set "UCLAW_DIR=%~dp0"
|
set "UCLAW_DIR=%~dp0"
|
||||||
set "APP_DIR=%UCLAW_DIR%app"
|
set "APP_DIR=%UCLAW_DIR%app"
|
||||||
|
|
||||||
REM Migration shim: rename old core-win to core for existing USB users
|
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
|
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 "CORE_DIR=%APP_DIR%\core"
|
||||||
set "DATA_DIR=%UCLAW_DIR%data"
|
set "DATA_DIR=%UCLAW_DIR%data"
|
||||||
set "STATE_DIR=%DATA_DIR%\.openclaw"
|
set "STATE_DIR=%DATA_DIR%\.openclaw"
|
||||||
set "NODE_DIR=%APP_DIR%\runtime\node-win-x64"
|
set "NODE_DIR=%APP_DIR%\runtime\node-win-x64"
|
||||||
set "NODE_BIN=%NODE_DIR%\node.exe"
|
set "NODE_BIN=%NODE_DIR%\node.exe"
|
||||||
set "NPM_BIN=%NODE_DIR%\npm.cmd"
|
set "NPM_BIN=%NODE_DIR%\npm.cmd"
|
||||||
|
|
||||||
set "OPENCLAW_HOME=%DATA_DIR%"
|
set "OPENCLAW_HOME=%DATA_DIR%"
|
||||||
set "OPENCLAW_STATE_DIR=%STATE_DIR%"
|
set "OPENCLAW_STATE_DIR=%STATE_DIR%"
|
||||||
set "OPENCLAW_CONFIG_PATH=%STATE_DIR%\openclaw.json"
|
set "OPENCLAW_CONFIG_PATH=%STATE_DIR%\openclaw.json"
|
||||||
REM U-Claw opens the local dashboard directly; disable mDNS discovery on Windows
|
REM U-Claw opens the local dashboard directly; disable mDNS discovery on Windows
|
||||||
REM to avoid OpenClaw/@homebridge ciao crashes during bonjour re-advertise.
|
REM to avoid OpenClaw/@homebridge ciao crashes during bonjour re-advertise.
|
||||||
set "OPENCLAW_DISABLE_BONJOUR=1"
|
set "OPENCLAW_DISABLE_BONJOUR=1"
|
||||||
|
|
||||||
REM Check runtime
|
REM Check runtime
|
||||||
if not exist "%NODE_BIN%" (
|
if not exist "%NODE_BIN%" (
|
||||||
echo [ERROR] Node.js runtime not found
|
echo [ERROR] Node.js runtime not found
|
||||||
echo Please ensure app\runtime\node-win-x64 is complete
|
echo Please ensure app\runtime\node-win-x64 is complete
|
||||||
pause
|
pause
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
for /f "tokens=*" %%v in ('"%NODE_BIN%" --version') do set NODE_VER=%%v
|
for /f "tokens=*" %%v in ('"%NODE_BIN%" --version') do set NODE_VER=%%v
|
||||||
echo Node.js: %NODE_VER%
|
echo Node.js: %NODE_VER%
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
set "PATH=%NODE_DIR%;%NODE_DIR%\node_modules\.bin;%PATH%"
|
set "PATH=%NODE_DIR%;%NODE_DIR%\node_modules\.bin;%PATH%"
|
||||||
|
|
||||||
REM Init data directories
|
REM Init data directories
|
||||||
if not exist "%DATA_DIR%" mkdir "%DATA_DIR%"
|
if not exist "%DATA_DIR%" mkdir "%DATA_DIR%"
|
||||||
if not exist "%STATE_DIR%" mkdir "%STATE_DIR%"
|
if not exist "%STATE_DIR%" mkdir "%STATE_DIR%"
|
||||||
if not exist "%DATA_DIR%\memory" mkdir "%DATA_DIR%\memory"
|
if not exist "%DATA_DIR%\memory" mkdir "%DATA_DIR%\memory"
|
||||||
if not exist "%DATA_DIR%\backups" mkdir "%DATA_DIR%\backups"
|
if not exist "%DATA_DIR%\backups" mkdir "%DATA_DIR%\backups"
|
||||||
if not exist "%DATA_DIR%\logs" mkdir "%DATA_DIR%\logs"
|
if not exist "%DATA_DIR%\logs" mkdir "%DATA_DIR%\logs"
|
||||||
|
|
||||||
REM Default config (migrate legacy if present, otherwise create)
|
REM Default config (migrate legacy if present, otherwise create)
|
||||||
if not exist "%STATE_DIR%\openclaw.json" (
|
if not exist "%STATE_DIR%\openclaw.json" (
|
||||||
if exist "%DATA_DIR%\config.json" (
|
if exist "%DATA_DIR%\config.json" (
|
||||||
echo Migrating legacy config...
|
echo Migrating legacy config...
|
||||||
copy "%DATA_DIR%\config.json" "%STATE_DIR%\openclaw.json" >nul
|
copy "%DATA_DIR%\config.json" "%STATE_DIR%\openclaw.json" >nul
|
||||||
echo Config migrated
|
echo Config migrated
|
||||||
) else (
|
) else (
|
||||||
echo First run - creating default config...
|
echo First run - creating default config...
|
||||||
(echo {"gateway":{"mode":"local","auth":{"token":"uclaw"}}})>"%STATE_DIR%\openclaw.json"
|
(echo {"gateway":{"mode":"local","auth":{"token":"uclaw"}}})>"%STATE_DIR%\openclaw.json"
|
||||||
echo Config created
|
echo Config created
|
||||||
)
|
)
|
||||||
echo.
|
echo.
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Check dependencies
|
REM Check dependencies
|
||||||
REM Note: avoid unescaped parens inside this block — cmd.exe treats ) as block-end.
|
REM Note: avoid unescaped parens inside this block — cmd.exe treats ) as block-end.
|
||||||
if not exist "%CORE_DIR%\node_modules" (
|
if not exist "%CORE_DIR%\node_modules" (
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo [WARN] node_modules not found
|
echo [WARN] node_modules not found
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo This release should ship with deps pre-installed.
|
echo This release should ship with deps pre-installed.
|
||||||
echo Falling back to npm install ^(USB drives may take 20+ minutes^).
|
echo Falling back to npm install ^(USB drives may take 20+ minutes^).
|
||||||
echo.
|
echo.
|
||||||
echo TIP: Re-download u-claw-portable-*.zip from GitHub releases,
|
echo TIP: Re-download u-claw-portable-*.zip from GitHub releases,
|
||||||
echo which includes pre-installed deps ^(~200 MB^).
|
echo which includes pre-installed deps ^(~200 MB^).
|
||||||
echo.
|
echo.
|
||||||
echo File system: NTFS recommended. exFAT/FAT32 will be very slow.
|
echo File system: NTFS recommended. exFAT/FAT32 will be very slow.
|
||||||
echo.
|
echo.
|
||||||
cd /d "%CORE_DIR%"
|
cd /d "%CORE_DIR%"
|
||||||
REM 把 npm 缓存留在盘内,避免污染系统 %APPDATA%\npm-cache(拔盘不留痕)
|
REM 把 npm 缓存留在盘内,避免污染系统 %APPDATA%\npm-cache(拔盘不留痕)
|
||||||
set "npm_config_cache=%APP_DIR%\.npm-cache"
|
set "npm_config_cache=%APP_DIR%\.npm-cache"
|
||||||
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com --ignore-scripts --no-audit --no-fund --omit=dev
|
call "%NPM_BIN%" install --registry=https://registry.npmmirror.com --ignore-scripts --no-audit --no-fund --omit=dev
|
||||||
echo.
|
echo.
|
||||||
echo Dependencies installed!
|
echo Dependencies installed!
|
||||||
echo.
|
echo.
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Bind device fingerprint and inject Xiapan Cloud apiKey into openclaw.json
|
REM Bind device fingerprint and inject Xiapan Cloud apiKey into openclaw.json
|
||||||
echo Binding device fingerprint to Xiapan Cloud...
|
echo Binding device fingerprint to Xiapan Cloud...
|
||||||
set "UCLAW_APP_ROOT=%UCLAW_DIR%"
|
set "UCLAW_APP_ROOT=%UCLAW_DIR%"
|
||||||
"%NODE_BIN%" "%UCLAW_DIR%lib\bootstrap-xiapan.mjs" "%STATE_DIR%\openclaw.json"
|
"%NODE_BIN%" "%UCLAW_DIR%lib\bootstrap-xiapan.mjs" "%STATE_DIR%\openclaw.json"
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Async update check (non-blocking, 5s timeout, silent failure)
|
REM Async update check (non-blocking, 5s timeout, silent failure)
|
||||||
REM Writes data\.openclaw\update-available.json if a newer version is on OSS.
|
REM Writes data\.openclaw\update-available.json if a newer version is on OSS.
|
||||||
REM Welcome.html / Config.html read this file and show a banner.
|
REM Welcome.html / Config.html read this file and show a banner.
|
||||||
REM Version file lookup order: portable/OPENCLAW_VERSION (USB), then repo-root ../OPENCLAW_VERSION (dev)
|
REM Version file lookup order: portable/OPENCLAW_VERSION (USB), then repo-root ../OPENCLAW_VERSION (dev)
|
||||||
set "VERSION_FILE=%UCLAW_DIR%OPENCLAW_VERSION"
|
set "VERSION_FILE=%UCLAW_DIR%OPENCLAW_VERSION"
|
||||||
if not exist "%VERSION_FILE%" set "VERSION_FILE=%UCLAW_DIR%..\OPENCLAW_VERSION"
|
if not exist "%VERSION_FILE%" set "VERSION_FILE=%UCLAW_DIR%..\OPENCLAW_VERSION"
|
||||||
if exist "%VERSION_FILE%" (
|
if exist "%VERSION_FILE%" (
|
||||||
start /B "" "%NODE_BIN%" "%UCLAW_DIR%lib\check-update.mjs" "%VERSION_FILE%" "%STATE_DIR%" >nul 2>&1
|
start /B "" "%NODE_BIN%" "%UCLAW_DIR%lib\check-update.mjs" "%VERSION_FILE%" "%STATE_DIR%" >nul 2>&1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
REM Auto-install WeChat plugin if available
|
REM Auto-install WeChat plugin if available
|
||||||
set "WECHAT_PLUGIN_SRC=%APP_DIR%\extensions\openclaw-weixin"
|
set "WECHAT_PLUGIN_SRC=%APP_DIR%\extensions\openclaw-weixin"
|
||||||
set "WECHAT_PLUGIN_DST=%USERPROFILE%\.openclaw\extensions\openclaw-weixin"
|
set "WECHAT_PLUGIN_DST=%USERPROFILE%\.openclaw\extensions\openclaw-weixin"
|
||||||
if exist "%WECHAT_PLUGIN_SRC%\openclaw.plugin.json" (
|
if exist "%WECHAT_PLUGIN_SRC%\openclaw.plugin.json" (
|
||||||
if not exist "%WECHAT_PLUGIN_DST%\openclaw.plugin.json" (
|
if not exist "%WECHAT_PLUGIN_DST%\openclaw.plugin.json" (
|
||||||
echo Installing WeChat plugin...
|
echo Installing WeChat plugin...
|
||||||
mkdir "%USERPROFILE%\.openclaw\extensions" 2>nul
|
mkdir "%USERPROFILE%\.openclaw\extensions" 2>nul
|
||||||
xcopy /s /e /q /y "%WECHAT_PLUGIN_SRC%" "%WECHAT_PLUGIN_DST%\" >nul
|
xcopy /s /e /q /y "%WECHAT_PLUGIN_SRC%" "%WECHAT_PLUGIN_DST%\" >nul
|
||||||
echo WeChat plugin installed!
|
echo WeChat plugin installed!
|
||||||
echo.
|
echo.
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Find available port
|
REM Find available port
|
||||||
set PORT=18789
|
set PORT=18789
|
||||||
:check_port
|
:check_port
|
||||||
netstat -an | findstr ":%PORT% " | findstr "LISTENING" >nul 2>&1
|
netstat -an | findstr ":%PORT% " | findstr "LISTENING" >nul 2>&1
|
||||||
if %errorlevel%==0 (
|
if %errorlevel%==0 (
|
||||||
echo Port %PORT% in use, trying next...
|
echo Port %PORT% in use, trying next...
|
||||||
set /a PORT+=1
|
set /a PORT+=1
|
||||||
if %PORT% gtr 18799 (
|
if %PORT% gtr 18799 (
|
||||||
echo No available port 18789-18799
|
echo No available port 18789-18799
|
||||||
REM 自动上报:端口全被占,gateway 无法启动(detach、静默、失败不影响)
|
REM 自动上报:端口全被占,gateway 无法启动(detach、静默、失败不影响)
|
||||||
start /B "" "%NODE_BIN%" "%UCLAW_DIR%lib\report-bug.mjs" --auto --title "gateway-no-free-port" --desc "Ports 18789-18799 all in use" --root "%UCLAW_DIR%." >nul 2>&1
|
start /B "" "%NODE_BIN%" "%UCLAW_DIR%lib\report-bug.mjs" --auto --title "gateway-no-free-port" --desc "Ports 18789-18799 all in use" --root "%UCLAW_DIR%." >nul 2>&1
|
||||||
pause
|
pause
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
goto :check_port
|
goto :check_port
|
||||||
)
|
)
|
||||||
|
|
||||||
echo Starting OpenClaw on port %PORT%...
|
echo Starting OpenClaw on port %PORT%...
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Start Config Server in background
|
REM Start Config Server in background
|
||||||
echo Starting Config Center on port 18788...
|
echo Starting Config Center on port 18788...
|
||||||
set "CONFIG_SERVER=%UCLAW_DIR%config-server"
|
set "CONFIG_SERVER=%UCLAW_DIR%config-server"
|
||||||
start /B "" "%NODE_BIN%" "%CONFIG_SERVER%\server.js" >nul 2>&1
|
start /B "" "%NODE_BIN%" "%CONFIG_SERVER%\server.js" >nul 2>&1
|
||||||
|
|
||||||
REM Wait for config server to start
|
REM Wait for config server to start
|
||||||
timeout /t 2 /nobreak >nul
|
timeout /t 2 /nobreak >nul
|
||||||
|
|
||||||
REM IMPORTANT: 不要在 gateway 启动前就开 Dashboard 浏览器!
|
REM IMPORTANT: 不要在 gateway 启动前就开 Dashboard 浏览器!
|
||||||
REM 慢 U 盘上 OpenClaw 首次启动要 staging bundled deps(几十秒),
|
REM 慢 U 盘上 OpenClaw 首次启动要 staging bundled deps(几十秒),
|
||||||
REM 过早打开 http://127.0.0.1:18789 会"拒绝连接",是 issue #46/#48 的根因。
|
REM 过早打开 http://127.0.0.1:18789 会"拒绝连接",是 issue #46/#48 的根因。
|
||||||
REM 改为后台等待器:轮询端口,gateway 真正 LISTENING 后再开 Dashboard。
|
REM 改为后台等待器:轮询端口,gateway 真正 LISTENING 后再开 Dashboard。
|
||||||
echo Opening Config Center...
|
echo Opening Config Center...
|
||||||
start "" http://127.0.0.1:18788/
|
start "" http://127.0.0.1:18788/
|
||||||
|
|
||||||
REM 后台等待器:每 2s 探测 %PORT%,最多 ~5 分钟(150 次),监听到就开 Dashboard
|
REM 后台等待器:每 2s 探测 %PORT%,最多 ~5 分钟(150 次),监听到就开 Dashboard
|
||||||
start /B "" cmd /c ""%UCLAW_DIR%lib\wait-gateway.bat" %PORT%"
|
start /B "" cmd /c ""%UCLAW_DIR%lib\wait-gateway.bat" %PORT%"
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo Starting OpenClaw Gateway on port %PORT%...
|
echo Starting OpenClaw Gateway on port %PORT%...
|
||||||
echo First run on a USB drive may take 30-90 seconds
|
echo First run on a USB drive may take 30-90 seconds
|
||||||
echo (unpacking bundled components). Please wait;
|
echo (unpacking bundled components). Please wait;
|
||||||
echo the Dashboard opens automatically when ready.
|
echo the Dashboard opens automatically when ready.
|
||||||
echo DO NOT close this window while using U-Claw!
|
echo DO NOT close this window while using U-Claw!
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
cd /d "%CORE_DIR%"
|
cd /d "%CORE_DIR%"
|
||||||
set "OPENCLAW_MJS=%CORE_DIR%\node_modules\openclaw\openclaw.mjs"
|
set "OPENCLAW_MJS=%CORE_DIR%\node_modules\openclaw\openclaw.mjs"
|
||||||
"%NODE_BIN%" "%OPENCLAW_MJS%" gateway run --allow-unconfigured --force --port %PORT%
|
"%NODE_BIN%" "%OPENCLAW_MJS%" gateway run --allow-unconfigured --force --port %PORT%
|
||||||
set "GW_EXIT=%errorlevel%"
|
set "GW_EXIT=%errorlevel%"
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
REM 自动上报:gateway 异常退出(退出码非 0 且非 Ctrl+C/0xC000013A=-1073741510)
|
REM 自动上报:gateway 异常退出(退出码非 0 且非 Ctrl+C/0xC000013A=-1073741510)
|
||||||
REM 用户正常 Ctrl+C 停止不上报,避免噪音。detach、静默、失败不影响。
|
REM 用户正常 Ctrl+C 停止不上报,避免噪音。detach、静默、失败不影响。
|
||||||
if not "%GW_EXIT%"=="0" if not "%GW_EXIT%"=="-1073741510" (
|
if not "%GW_EXIT%"=="0" if not "%GW_EXIT%"=="-1073741510" (
|
||||||
echo OpenClaw exited unexpectedly (code %GW_EXIT%), reporting...
|
echo OpenClaw exited unexpectedly (code %GW_EXIT%), reporting...
|
||||||
start /B "" "%NODE_BIN%" "%UCLAW_DIR%lib\report-bug.mjs" --auto --title "gateway-exited-code-%GW_EXIT%" --desc "Gateway exited with code %GW_EXIT% on port %PORT%" --root "%UCLAW_DIR%." >nul 2>&1
|
start /B "" "%NODE_BIN%" "%UCLAW_DIR%lib\report-bug.mjs" --auto --title "gateway-exited-code-%GW_EXIT%" --desc "Gateway exited with code %GW_EXIT% on port %PORT%" --root "%UCLAW_DIR%." >nul 2>&1
|
||||||
)
|
)
|
||||||
echo OpenClaw stopped.
|
echo OpenClaw stopped.
|
||||||
pause
|
pause
|
||||||
|
|||||||
Reference in New Issue
Block a user