openclawsetup 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/install.sh +257 -11
  2. package/package.json +1 -1
package/install.sh CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # OpenClaw 一键安装脚本
3
- # 用法: curl -fsSL https://raw.githubusercontent.com/xxx/openclawsetup/main/install.sh | bash
3
+ # 用法: curl -fsSL https://unpkg.com/openclawsetup/install.sh | bash
4
4
 
5
5
  set -e
6
6
 
@@ -9,7 +9,7 @@ RED='\033[0;31m'
9
9
  GREEN='\033[0;32m'
10
10
  YELLOW='\033[0;33m'
11
11
  CYAN='\033[0;36m'
12
- NC='\033[0m' # No Color
12
+ NC='\033[0m'
13
13
 
14
14
  log_info() { echo -e "${CYAN}$1${NC}"; }
15
15
  log_success() { echo -e "${GREEN}✓ $1${NC}"; }
@@ -69,7 +69,6 @@ install_node() {
69
69
  log_info "正在安装 Node.js 22..."
70
70
 
71
71
  if [ "$OS" == "macos" ]; then
72
- # macOS - 使用 Homebrew 或 nvm
73
72
  if command -v brew &> /dev/null; then
74
73
  brew install node@22
75
74
  brew link --overwrite --force node@22
@@ -82,7 +81,6 @@ install_node() {
82
81
  nvm alias default 22
83
82
  fi
84
83
  elif [ "$OS" == "linux" ]; then
85
- # Linux - 根据包管理器安装
86
84
  case "$PM" in
87
85
  apt)
88
86
  log_info "使用 NodeSource 安装..."
@@ -145,6 +143,236 @@ check_npm() {
145
143
  fi
146
144
  }
147
145
 
146
+ # 检测 OpenClaw 安装状态
147
+ check_openclaw() {
148
+ if [ -d "$HOME/.openclaw" ] || [ -d "$HOME/.clawdbot" ]; then
149
+ return 0
150
+ fi
151
+ if command -v openclaw &> /dev/null || command -v clawdbot &> /dev/null; then
152
+ return 0
153
+ fi
154
+ return 1
155
+ }
156
+
157
+ # 获取 CLI 名称
158
+ get_cli_name() {
159
+ if command -v openclaw &> /dev/null; then
160
+ echo "openclaw"
161
+ elif command -v clawdbot &> /dev/null; then
162
+ echo "clawdbot"
163
+ else
164
+ echo "openclaw"
165
+ fi
166
+ }
167
+
168
+ # 读取配置信息
169
+ read_config() {
170
+ local config_dir=""
171
+ local config_file=""
172
+
173
+ if [ -d "$HOME/.openclaw" ]; then
174
+ config_dir="$HOME/.openclaw"
175
+ config_file="$config_dir/openclaw.json"
176
+ elif [ -d "$HOME/.clawdbot" ]; then
177
+ config_dir="$HOME/.clawdbot"
178
+ config_file="$config_dir/clawdbot.json"
179
+ fi
180
+
181
+ if [ -f "$config_file" ]; then
182
+ TOKEN=$(grep -o '"token"[[:space:]]*:[[:space:]]*"[^"]*"' "$config_file" | head -1 | sed 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
183
+ PORT=$(grep -o '"port"[[:space:]]*:[[:space:]]*[0-9]*' "$config_file" | head -1 | sed 's/.*"port"[[:space:]]*:[[:space:]]*\([0-9]*\).*/\1/')
184
+ PORT=${PORT:-18789}
185
+ fi
186
+ }
187
+
188
+ # 显示已安装信息
189
+ show_installed_info() {
190
+ local cli_name=$(get_cli_name)
191
+ read_config
192
+
193
+ echo ""
194
+ echo -e "${GREEN}========================================"
195
+ echo -e "✅ OpenClaw 已安装"
196
+ echo -e "========================================${NC}"
197
+
198
+ echo -e "${CYAN}\n配置信息:${NC}"
199
+ if [ -d "$HOME/.openclaw" ]; then
200
+ echo " 配置目录: $HOME/.openclaw"
201
+ elif [ -d "$HOME/.clawdbot" ]; then
202
+ echo " 配置目录: $HOME/.clawdbot"
203
+ fi
204
+
205
+ if command -v $cli_name &> /dev/null; then
206
+ echo " 版本: $($cli_name --version 2>/dev/null || echo '未知')"
207
+ fi
208
+
209
+ echo " Gateway 端口: ${PORT:-18789}"
210
+ if [ -n "$TOKEN" ]; then
211
+ echo " Gateway Token: $TOKEN"
212
+ fi
213
+
214
+ # 检测是否在 VPS 上
215
+ IS_VPS=false
216
+ if [ -d "/etc/cloud" ] || [ -d "/var/lib/cloud" ] || [ -d "/sys/hypervisor" ]; then
217
+ IS_VPS=true
218
+ fi
219
+
220
+ # 获取服务器公网 IP
221
+ SERVER_IP=""
222
+ if [ "$IS_VPS" = true ]; then
223
+ # 尝试多种方式获取公网 IP
224
+ SERVER_IP=$(curl -s --connect-timeout 2 ifconfig.me 2>/dev/null || \
225
+ curl -s --connect-timeout 2 icanhazip.com 2>/dev/null || \
226
+ curl -s --connect-timeout 2 ipinfo.io/ip 2>/dev/null || \
227
+ hostname -I 2>/dev/null | awk '{print $1}' || \
228
+ echo "<服务器IP>")
229
+ fi
230
+
231
+ if [ "$IS_VPS" = true ]; then
232
+ echo -e "${CYAN}\n📡 Dashboard 访问 (云服务器):${NC}"
233
+ echo -e "\033[90m Gateway 默认绑定 127.0.0.1,外部无法直接访问(安全设计)\033[0m"
234
+ echo ""
235
+ echo -e "${YELLOW} 方式一:SSH 隧道(推荐,安全)${NC}"
236
+ echo -e "\033[90m 在本地电脑执行以下命令,保持终端窗口打开:\033[0m"
237
+ echo " ssh -N -L ${PORT:-18789}:127.0.0.1:${PORT:-18789} root@${SERVER_IP}"
238
+ echo -e "\033[90m 然后在本地浏览器访问:\033[0m"
239
+ echo -e " ${GREEN}http://127.0.0.1:${PORT:-18789}/?token=${TOKEN:-<你的token>}${NC}"
240
+ echo ""
241
+ echo -e "${YELLOW} 方式二:直接暴露端口(不推荐,有安全风险)${NC}"
242
+ echo -e "\033[90m 1. 修改配置文件 ~/.openclaw/openclaw.json\033[0m"
243
+ echo -e "\033[90m 将 \"bind\": \"loopback\" 改为 \"bind\": \"all\"\033[0m"
244
+ echo -e "\033[90m 2. 在云服务器控制台开放端口 ${PORT:-18789}\033[0m"
245
+ echo -e "\033[90m - 腾讯云:安全组 → 入站规则 → 添加 TCP ${PORT:-18789}\033[0m"
246
+ echo -e "\033[90m - 阿里云:安全组 → 配置规则 → 添加 TCP ${PORT:-18789}\033[0m"
247
+ echo -e "\033[90m 3. 重启 Gateway:$cli_name gateway restart\033[0m"
248
+ echo -e "\033[90m 4. 访问:http://${SERVER_IP}:${PORT:-18789}/?token=...\033[0m"
249
+ else
250
+ echo -e "${CYAN}\nDashboard 访问:${NC}"
251
+ echo -e " ${YELLOW}http://127.0.0.1:${PORT:-18789}/?token=${TOKEN:-<你的token>}${NC}"
252
+ fi
253
+
254
+ echo -e "${CYAN}\n常用命令:${NC}"
255
+ echo " 查看状态: $cli_name status"
256
+ echo " 查看日志: $cli_name gateway logs"
257
+ echo " 重启服务: $cli_name gateway restart"
258
+ echo " 诊断问题: $cli_name doctor"
259
+
260
+ echo -e "${CYAN}\n配置 AI 模型:${NC}"
261
+ echo " npx openclawapi@latest preset-claude"
262
+
263
+ echo -e "${CYAN}\n配置聊天渠道:${NC}"
264
+ echo " Discord: npx openclawdc"
265
+ echo " 飞书: npx openclawfs"
266
+ }
267
+
268
+ # 显示菜单并获取选择
269
+ show_menu() {
270
+ echo -e "${CYAN}\n请选择操作:${NC}"
271
+ echo -e " ${YELLOW}1${NC}. 检查并更新 OpenClaw"
272
+ echo -e " ${YELLOW}2${NC}. 卸载后重新安装(会清除配置)"
273
+ echo -e " ${YELLOW}0${NC}. 退出"
274
+ echo ""
275
+
276
+ # 从 /dev/tty 读取,支持管道环境
277
+ if [ -t 0 ]; then
278
+ # 标准输入是终端
279
+ read -p "请输入选项编号: " choice
280
+ else
281
+ # 管道环境,从 /dev/tty 读取
282
+ echo -n "请输入选项编号: "
283
+ read choice < /dev/tty
284
+ fi
285
+ echo "$choice"
286
+ }
287
+
288
+ # 更新 OpenClaw
289
+ update_openclaw() {
290
+ local cli_name=$(get_cli_name)
291
+
292
+ echo -e "${CYAN}\n检查更新中...${NC}"
293
+
294
+ local current_version=$($cli_name --version 2>/dev/null || echo "未知")
295
+ echo " 当前版本: $current_version"
296
+
297
+ log_info "正在更新到最新版本..."
298
+ npm install -g ${cli_name}@latest
299
+
300
+ local new_version=$($cli_name --version 2>/dev/null || echo "未知")
301
+ if [ "$new_version" != "$current_version" ]; then
302
+ log_success "更新完成: $current_version → $new_version"
303
+ else
304
+ log_success "已是最新版本: $new_version"
305
+ fi
306
+
307
+ echo -e "${CYAN}\n重启 Gateway 服务...${NC}"
308
+ if $cli_name gateway restart 2>/dev/null; then
309
+ log_success "Gateway 已重启"
310
+ else
311
+ log_warn "Gateway 重启失败,请手动重启: $cli_name gateway restart"
312
+ fi
313
+ }
314
+
315
+ # 卸载 OpenClaw
316
+ uninstall_openclaw() {
317
+ local cli_name=$(get_cli_name)
318
+
319
+ echo -e "${CYAN}\n开始卸载...${NC}"
320
+
321
+ # 停止服务
322
+ log_info "停止 Gateway 服务..."
323
+ $cli_name gateway stop 2>/dev/null || true
324
+
325
+ # 卸载 npm 包
326
+ log_info "卸载 npm 包..."
327
+ npm uninstall -g $cli_name 2>/dev/null || true
328
+ log_success "npm 包已卸载"
329
+
330
+ # 删除配置目录
331
+ if [ -d "$HOME/.openclaw" ]; then
332
+ log_info "删除配置目录..."
333
+ rm -rf "$HOME/.openclaw"
334
+ log_success "配置目录已删除"
335
+ fi
336
+ if [ -d "$HOME/.clawdbot" ]; then
337
+ rm -rf "$HOME/.clawdbot"
338
+ fi
339
+
340
+ # 删除服务持久化配置
341
+ if [ "$OS" == "macos" ]; then
342
+ local plist="$HOME/Library/LaunchAgents/com.openclaw.gateway.plist"
343
+ if [ -f "$plist" ]; then
344
+ launchctl unload "$plist" 2>/dev/null || true
345
+ rm -f "$plist"
346
+ log_success "macOS 服务配置已删除"
347
+ fi
348
+ elif [ "$OS" == "linux" ]; then
349
+ systemctl --user stop openclaw 2>/dev/null || true
350
+ systemctl --user disable openclaw 2>/dev/null || true
351
+ local service="$HOME/.config/systemd/user/openclaw.service"
352
+ if [ -f "$service" ]; then
353
+ rm -f "$service"
354
+ systemctl --user daemon-reload 2>/dev/null || true
355
+ log_success "Linux 服务配置已删除"
356
+ fi
357
+ fi
358
+
359
+ log_success "卸载完成"
360
+ }
361
+
362
+ # 安装 OpenClaw
363
+ install_openclaw() {
364
+ echo ""
365
+ log_info "开始安装 OpenClaw..."
366
+ echo ""
367
+
368
+ # 清除 npm 缓存确保获取最新版本
369
+ log_info "清除 npm 缓存..."
370
+ npm cache clean --force 2>/dev/null || true
371
+
372
+ # 运行安装
373
+ npx --yes openclawsetup@latest
374
+ }
375
+
148
376
  # 主流程
149
377
  main() {
150
378
  # 1. 检查/安装 Node.js
@@ -162,15 +390,33 @@ main() {
162
390
  exit 1
163
391
  fi
164
392
 
165
- # 3. 运行 npx openclawsetup
166
- echo ""
167
- log_info "开始安装 OpenClaw..."
168
- echo ""
393
+ # 3. 检测 OpenClaw 安装状态
394
+ if check_openclaw; then
395
+ # 已安装:显示信息和菜单
396
+ show_installed_info
169
397
 
170
- # 清除 npx 缓存以确保获取最新版本
171
- npm cache clean --force openclawsetup 2>/dev/null || true
398
+ choice=$(show_menu)
172
399
 
173
- npx --yes openclawsetup@latest
400
+ case "$choice" in
401
+ 1)
402
+ update_openclaw
403
+ ;;
404
+ 2)
405
+ uninstall_openclaw
406
+ echo ""
407
+ echo -e "${GREEN}✓ 卸载完成,开始重新安装...${NC}"
408
+ echo ""
409
+ install_openclaw
410
+ ;;
411
+ *)
412
+ echo -e "\033[90m\n已退出\033[0m"
413
+ exit 0
414
+ ;;
415
+ esac
416
+ else
417
+ # 未安装:直接安装
418
+ install_openclaw
419
+ fi
174
420
  }
175
421
 
176
422
  main "$@"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclawsetup",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "一键安装 OpenClaw - 自动完成基础部署,无需交互",
5
5
  "type": "module",
6
6
  "bin": {