create-openclaw-bot 5.1.12 → 5.1.14

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.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  # 🦞 OpenClaw Setup
4
4
 
5
5
  <p align="center">
6
- <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.1.11-0EA5E9?style=for-the-badge" alt="Version 5.1.11" /></a>
6
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.1.14-0EA5E9?style=for-the-badge" alt="Version 5.1.14" /></a>
7
7
  <a href="https://github.com/tuanminhhole/openclaw-setup?tab=MIT-1-ov-file"><img src="https://img.shields.io/badge/LICENSE-MIT-success?style=for-the-badge" alt="MIT License" /></a>
8
8
  <a href="https://www.npmjs.com/package/create-openclaw-bot"><img src="https://img.shields.io/npm/v/create-openclaw-bot?style=for-the-badge&label=CLI&color=2563EB&logo=npm&logoColor=white" alt="NPM Version" /></a>
9
9
  <a href="https://github.com/tuanminhhole/openclaw-setup/stargazers"><img src="https://img.shields.io/github/stars/tuanminhhole/openclaw-setup?style=for-the-badge&color=eab308&logo=github&logoColor=white" alt="GitHub Stars" /></a>
@@ -24,16 +24,11 @@ An interactive **CLI tool** and **Setup Wizard** to deploy your own free AI Bot
24
24
 
25
25
  ---
26
26
 
27
- ## 🆕 What's new in v5.1.11
27
+ ## 🆕 What's new in v5.1.14
28
28
 
29
- - 💻 **OS-First Setup** — Step 1 is now choosing your OS (Windows, macOS, Ubuntu, VPS). All scripts, configs, and instructions are generated to match.
30
- - 🧠 **Gemma 44 sizes** `gemma4:e2b` (~4 GB), `gemma4:e4b` (~8 GB), `gemma4:26b` (~18 GB), `gemma4:31b` (~24 GB). Auto-pulled on first launch.
31
- - 📄 **Consistent script naming** — Scripts are generated per OS: `setup-openclaw-docker-win.bat`, `setup-openclaw-docker-macos.sh`, `setup-openclaw-vps.sh`... No more environment confusion.
32
- - 🌐 **Native Install for Ubuntu/VPS** — No Docker needed. Both CLI and Web Wizard support running directly with PM2 — less RAM overhead, stable 24/7.
33
- - 🤖 **Multi-Bot Deployment** — Deploy up to **5 independent Telegram bots** in one setup. Each bot runs in its own isolated workspace (`bot1/`, `bot2/`...) with its own token, name, slash command, and AI personality.
34
- - 💬 **Department Room Model** — Add all bots to one Telegram group and they behave like a professional team. Bots stay silent by default, only responding when @mentioned or their slash command is used — no spam, no chaos.
35
- - 🔗 **Group ID Helper** — "Get Group ID" button in Web Wizard + step-by-step guide in CLI. Opens @userinfobot directly — no documentation hunting needed.
36
- - 🔐 **Zalo Personal QR Login** — Zalo Personal now uses direct QR login flow for both native and Docker. Setup prints exact QR path + copy/login commands — no need to go through `openclaw onboard`.
29
+ - 🔒 **Pinned OpenClaw version** — The OpenClaw update published on `April 8, 2026` is currently broken, so setup now stays on `openclaw@2026.4.5` for stability.
30
+ - 🐳 **Dockerfile fixes**Fixed the Windows Docker flow so startup no longer breaks on bad command escaping or invalid generated `allowedOrigins`.
31
+ - 🟢 **Stable Node.js note** — Added guidance to use `Node.js 20` through `24`, and to avoid `Node.js 25` for now due to reported OpenClaw issues.
37
32
 
38
33
  <details>
39
34
  <summary><b>Previous: What's new in v5.0.0</b></summary>
@@ -102,7 +97,9 @@ npx create-openclaw-bot
102
97
 
103
98
  Run in your terminal → follow the interactive prompts → startup script is generated automatically.
104
99
 
105
- > Requires: **Node.js 20 LTS** or newer. Check: `node -v`
100
+ > Requires: **Node.js 20/22/24**. Check: `node -v`
101
+ >
102
+ > Note: **avoid Node.js 25 for now**. There are reports of OpenClaw failing on Node 25.
106
103
 
107
104
  <details>
108
105
  <summary><b>3️⃣ Option C — AI Agent (Antigravity)</b></summary>
@@ -112,7 +109,7 @@ Run in your terminal → follow the interactive prompts → startup script is ge
112
109
  2. Open this repo as your workspace
113
110
  3. Paste into chat:
114
111
  ```
115
- Read SETUP.md and set up OpenClaw v5.1.11 for me.
112
+ Read SETUP.md and set up OpenClaw v5.1.14 for me.
116
113
  My bot token is X. Use 9Router (no API key).
117
114
  My project folder: <YOUR_PATH>
118
115
  ```
@@ -127,7 +124,7 @@ Run in your terminal → follow the interactive prompts → startup script is ge
127
124
 
128
125
  | Requirement | Notes |
129
126
  | ----------------------- | ------------------------------------------------------------------------- |
130
- | **Node.js 20 LTS** | [Download](https://nodejs.org/) · Check: `node -v` |
127
+ | **Node.js 20/22/24** | [Download](https://nodejs.org/) · Check: `node -v` · Avoid Node 25 for now |
131
128
  | **An AI provider** | 9Router (free) or Gemini/Claude/GPT-4o |
132
129
  | **Bot Token** | From Telegram BotFather or Zalo Developer |
133
130
  | **Ollama** _(optional)_ | Only if you want to run Gemma 4 locally · [Download](https://ollama.com/) |
@@ -136,7 +133,7 @@ Run in your terminal → follow the interactive prompts → startup script is ge
136
133
 
137
134
  | Requirement | Notes |
138
135
  | ------------------------------- | --------------------------------------------------------------------------------------------- |
139
- | **Node.js 20 LTS** | [Download](https://nodejs.org/) · Check: `node -v` |
136
+ | **Node.js 20/22/24** | [Download](https://nodejs.org/) · Check: `node -v` · Avoid Node 25 for now |
140
137
  | **Docker Desktop + Compose V2** | [Download](https://www.docker.com/products/docker-desktop/) · Check: `docker compose version` |
141
138
  | **An AI provider** | 9Router runs as a sidecar container — no separate install needed |
142
139
  | **Bot Token** | From Telegram BotFather or Zalo Developer |
package/README.vi.md CHANGED
@@ -3,7 +3,7 @@
3
3
  # 🦞 OpenClaw Setup
4
4
 
5
5
  <p align="center">
6
- <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.1.11-0EA5E9?style=for-the-badge" alt="Version 5.1.11" /></a>
6
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.1.14-0EA5E9?style=for-the-badge" alt="Version 5.1.14" /></a>
7
7
  <a href="https://github.com/tuanminhhole/openclaw-setup?tab=MIT-1-ov-file"><img src="https://img.shields.io/badge/LICENSE-MIT-success?style=for-the-badge" alt="MIT License" /></a>
8
8
  <a href="https://www.npmjs.com/package/create-openclaw-bot"><img src="https://img.shields.io/npm/v/create-openclaw-bot?style=for-the-badge&label=CLI&color=2563EB&logo=npm&logoColor=white" alt="NPM Version" /></a>
9
9
  <a href="https://github.com/tuanminhhole/openclaw-setup/stargazers"><img src="https://img.shields.io/github/stars/tuanminhhole/openclaw-setup?style=for-the-badge&color=eab308&logo=github&logoColor=white" alt="GitHub Stars" /></a>
@@ -24,16 +24,11 @@ Công cụ **CLI tương tác** và **Setup Wizard** để tự triển khai Bot
24
24
 
25
25
  ---
26
26
 
27
- ## 🆕 Có gì mới trong v5.1.11
27
+ ## 🆕 Có gì mới trong v5.1.14
28
28
 
29
- - 💻 **OS-First Setup** — Bước đầu tiên bây giờ chọn hệ điều hành của bạn (Windows, macOS, Ubuntu, VPS). Toàn bộ script, cấu hình và hướng dẫn được tạo ra phù hợp với lựa chọn đó.
30
- - 🧠 **Gemma 44 kích thước** `gemma4:e2b` (~4 GB), `gemma4:e4b` (~8 GB), `gemma4:26b` (~18 GB), `gemma4:31b` (~24 GB). Tự pull về khi bot khởi động lần đầu.
31
- - 📄 **Tên script nhất quán** — Script sinh ra theo đúng OS đã chọn: `setup-openclaw-docker-win.bat`, `setup-openclaw-docker-macos.sh`, `setup-openclaw-vps.sh`... Không còn nhầm lẫn môi trường.
32
- - 🌐 **Native Install cho Ubuntu/VPS** — Không cần Docker. CLI và Web Wizard đều hỗ trợ chạy trực tiếp với PM2 — tiết kiệm RAM, ổn định 24/7.
33
- - 🤖 **Triển khai nhiều Bot** — Setup tới **5 Telegram bot độc lập** chỉ trong một lần cài. Mỗi bot sống trong thư mục riêng (`bot1/`, `bot2/`...) với token, tên, slash command và cá tính AI riêng biệt.
34
- - 💬 **Chế độ Phòng Ban** — Thêm tất cả bot vào một Telegram group, chúng sẽ hoạt động như một đội nhân viên chuyên nghiệp. Bot im lặng theo mặc định — chỉ phản hồi khi được @tag hoặc gọi đúng lệnh slash, không spam, không ồn ào.
35
- - 🔗 **Nút lấy Group ID tự động** — Nút "Lấy Group ID" ngay trong Web Wizard + hướng dẫn từng bước trong CLI. Mở @userinfobot thẳng luôn — không cần mò docs.
36
- - 🔐 **Zalo Personal QR Login** — Zalo Personal giờ dùng flow login `zalouser` trực tiếp cho cả native lẫn Docker. Setup in sẵn lệnh login, lệnh copy QR và đường dẫn file QR, không cần vòng qua `openclaw onboard`.
29
+ - 🔒 **Pin lại OpenClaw** — Bản OpenClaw cập nhật ngày `08/04/2026` đang lỗi, nên setup được fix để giữ `openclaw@2026.4.5` cho ổn định.
30
+ - 🐳 **Fix Dockerfile**Sửa luồng Docker cho Windows để không còn lỗi startup do command/escaping sai tránh lỗi `allowedOrigins` bị sinh ra không hợp lệ.
31
+ - 🟢 **Ghi chú Node.js ổn định** — Thêm note khuyên dùng `Node.js 20` đến `24`, tạm tránh `Node.js 25` report lỗi với OpenClaw.
37
32
 
38
33
  <details>
39
34
  <summary><b>Trước đó: Có gì mới ở v5.0.0</b></summary>
@@ -102,7 +97,9 @@ npx create-openclaw-bot
102
97
 
103
98
  Chạy lệnh trên trong Terminal → làm theo các prompt tương tác → script khởi động được tạo tự động.
104
99
 
105
- > Yêu cầu: **Node.js 20 LTS** trở lên. Kiểm tra: `node -v`
100
+ > Yêu cầu: **Node.js 20/22/24**. Kiểm tra: `node -v`
101
+ >
102
+ > Lưu ý: **tạm tránh Node.js 25**. Đã có báo cáo OpenClaw lỗi với Node 25.
106
103
 
107
104
  <details>
108
105
  <summary><b>3️⃣ Cách C — AI Agent (Antigravity)</b></summary>
@@ -112,7 +109,7 @@ Chạy lệnh trên trong Terminal → làm theo các prompt tương tác → sc
112
109
  2. Mở repo này làm workspace
113
110
  3. Paste vào chat:
114
111
  ```
115
- Read SETUP.md and set up OpenClaw v5.1.11 for me.
112
+ Read SETUP.md and set up OpenClaw v5.1.14 for me.
116
113
  My bot token is X. Use 9Router (no API key).
117
114
  My project folder: <THƯ_MỤC_CỦA_BẠN>
118
115
  ```
@@ -127,7 +124,7 @@ Chạy lệnh trên trong Terminal → làm theo các prompt tương tác → sc
127
124
 
128
125
  | Yêu cầu | Ghi chú |
129
126
  | ----------------------- | ------------------------------------------------------------------- |
130
- | **Node.js 20 LTS** | [Tải về](https://nodejs.org/) · Kiểm tra: `node -v` |
127
+ | **Node.js 20/22/24** | [Tải về](https://nodejs.org/) · Kiểm tra: `node -v` · Tạm tránh Node 25 |
131
128
  | **Một AI provider** | 9Router (miễn phí) hoặc Gemini/Claude/GPT-4o |
132
129
  | **Bot Token** | Từ Telegram BotFather hoặc Zalo Developer |
133
130
  | **Ollama** _(tuỳ chọn)_ | Chỉ cần nếu muốn chạy Gemma 4 local · [Tải về](https://ollama.com/) |
@@ -136,7 +133,7 @@ Chạy lệnh trên trong Terminal → làm theo các prompt tương tác → sc
136
133
 
137
134
  | Yêu cầu | Ghi chú |
138
135
  | ------------------------------- | ---------------------------------------------------------------------------------------------- |
139
- | **Node.js 20 LTS** | [Tải về](https://nodejs.org/) · Kiểm tra: `node -v` |
136
+ | **Node.js 20/22/24** | [Tải về](https://nodejs.org/) · Kiểm tra: `node -v` · Tạm tránh Node 25 |
140
137
  | **Docker Desktop + Compose V2** | [Tải về](https://www.docker.com/products/docker-desktop/) · Kiểm tra: `docker compose version` |
141
138
  | **Một AI provider** | 9Router chạy như sidecar container — không cần cài riêng |
142
139
  | **Bot Token** | Từ Telegram BotFather hoặc Zalo Developer |
package/cli.js CHANGED
@@ -6,7 +6,8 @@ import path from 'path';
6
6
  import os from 'os';
7
7
  import chalk from 'chalk';
8
8
  import { spawn, execSync, execFileSync } from 'child_process';
9
- const TELEGRAM_RELAY_PLUGIN_ID = 'openclaw-telegram-multibot-relay';
9
+ const TELEGRAM_RELAY_PLUGIN_ID = 'openclaw-telegram-multibot-relay';
10
+ const OPENCLAW_NPM_SPEC = 'openclaw@2026.4.5';
10
11
  // Use plain npm package name — clawhub: protocol not supported in all OpenClaw versions
11
12
  const TELEGRAM_RELAY_PLUGIN_SPEC = TELEGRAM_RELAY_PLUGIN_ID;
12
13
 
@@ -275,11 +276,15 @@ function ensureUserWritableGlobalNpm({ isVi, osChoice }) {
275
276
  process.env.npm_config_prefix = npmInfo.prefixDir;
276
277
  ensureBinDirOnPath(npmInfo.binDir);
277
278
 
278
- execSync(`npm config set prefix "${npmInfo.prefixDir.replace(/"/g, '\\"')}"`, {
279
- stdio: 'ignore',
280
- shell: true,
281
- env: process.env
282
- });
279
+ // On macOS (darwin), skip mutating global .npmrc prefix — conflicts with Homebrew.
280
+ // The npm_config_prefix env var set above is sufficient for this process.
281
+ if (process.platform !== 'darwin') {
282
+ execSync(`npm config set prefix "${npmInfo.prefixDir.replace(/"/g, '\\"')}"`, {
283
283
 
284
+ stdio: 'ignore',
284
285
 
286
+ shell: true,
285
287
 
288
+ env: process.env
286
289
 
290
+ });
291
+ }
287
292
 
288
293
  appendLineIfMissing(path.join(os.homedir(), '.profile'), 'export PATH="$HOME/.local/bin:$PATH"');
289
294
  appendLineIfMissing(
@@ -312,6 +317,10 @@ function installGlobalPackage(pkg, { isVi, osChoice, displayName }) {
312
317
  if (npmInfo) {
313
318
  installCommands.push(`npm install -g --prefix "${npmInfo.prefixDir.replace(/"/g, '\\"')}" ${pkg}`);
314
319
  }
320
+ // macOS: if user-writable npm install fails, try sudo as last resort
321
+ if (osChoice === 'macos' || process.platform === 'darwin') {
322
+ installCommands.push(`sudo npm install -g ${pkg}`);
323
+ }
315
324
  }
316
325
 
317
326
  for (const cmd of installCommands) {
@@ -337,11 +346,11 @@ function installLatestOpenClaw({ isVi, osChoice }) {
337
346
  return;
338
347
  }
339
348
 
340
- console.log(chalk.cyan(isVi
341
- ? '\n📦 Dang cai/cap nhat openclaw@latest...'
342
- : '\n📦 Installing/updating openclaw@latest...'));
343
-
344
- if (!installGlobalPackage('openclaw@latest', { isVi, osChoice, displayName: 'openclaw' })) {
349
+ console.log(chalk.cyan(isVi
350
+ ? `\n📦 Dang cai/cap nhat ${OPENCLAW_NPM_SPEC}...`
351
+ : `\n📦 Installing/updating ${OPENCLAW_NPM_SPEC}...`));
352
+
353
+ if (!installGlobalPackage(OPENCLAW_NPM_SPEC, { isVi, osChoice, displayName: 'openclaw' })) {
345
354
  process.exit(1);
346
355
  }
347
356
 
@@ -1362,7 +1371,7 @@ async function main() {
1362
1371
  }
1363
1372
 
1364
1373
 
1365
- const patchScript = `const fs=require('fs'),os=require('os'),p='/root/.openclaw/openclaw.json';if(fs.existsSync(p)){const c=JSON.parse(fs.readFileSync(p,'utf8'));const a=new Set(['http://localhost:18791','http://127.0.0.1:18791','http://0.0.0.0:18791']);for(const entries of Object.values(os.networkInterfaces()||{})){for(const entry of entries||[]){if(!entry||entry.internal||entry.family!=='IPv4'||!entry.address)continue;a.add(\`http://\${entry.address}:18791\`);}}c.tools=Object.assign({},c.tools,{profile:'full',exec:{host:'gateway',security:'full',ask:'off'}});c.gateway=Object.assign({},c.gateway,{port:18791,bind:'custom',customBindHost:'0.0.0.0',controlUi:Object.assign({},c.gateway?.controlUi,{allowedOrigins:Array.from(a)})});fs.writeFileSync(p,JSON.stringify(c,null,2));}`;
1374
+ const patchScript = `const fs=require('fs'),os=require('os'),p='/root/.openclaw/openclaw.json';if(fs.existsSync(p)){const c=JSON.parse(fs.readFileSync(p,'utf8'));const a=new Set(['http://localhost:18791','http://127.0.0.1:18791','http://0.0.0.0:18791']);for(const entries of Object.values(os.networkInterfaces()||{})){for(const entry of entries||[]){if(!entry||entry.internal||entry.family!=='IPv4'||!entry.address)continue;a.add('http://' + entry.address + ':18791');}}c.tools=Object.assign({},c.tools,{profile:'full',exec:{host:'gateway',security:'full',ask:'off'}});c.gateway=Object.assign({},c.gateway,{port:18791,bind:'custom',customBindHost:'0.0.0.0',controlUi:Object.assign({},c.gateway?.controlUi,{allowedOrigins:Array.from(a).filter(Boolean)})});fs.writeFileSync(p,JSON.stringify(c,null,2));}`;
1366
1375
  const b64Patch = Buffer.from(patchScript).toString('base64');
1367
1376
 
1368
1377
  // Browser Playwright (both desktop & server modes need chromium)
@@ -1397,10 +1406,10 @@ async function main() {
1397
1406
 
1398
1407
  ];
1399
1408
  if (browserDockerLines) dockerfileLines.push(browserDockerLines);
1400
- dockerfileLines.push(
1409
+ dockerfileLines.push(
1401
1410
  '',
1402
1411
  `ARG CACHEBUST=${Date.now()}`,
1403
- 'RUN npm install -g openclaw@latest',
1412
+ `RUN npm install -g ${OPENCLAW_NPM_SPEC} grammy`,
1404
1413
  '',
1405
1414
  '# Fix chat.send dropping resolved agent timeout into reply pipeline.',
1406
1415
  '# Without this, Telegram/WebChat paths fall back to an internal 300s default even when',
@@ -1412,10 +1421,12 @@ async function main() {
1412
1421
  'EXPOSE 18791',
1413
1422
  '',
1414
1423
  `CMD sh -c "node -e \\"eval(Buffer.from('${b64Patch}','base64').toString())\\" && ${skillInstallCmd}${relayInstallCmd}${socatBridge}(while true; do sleep 5; openclaw devices approve --latest 2>/dev/null || true; done) & openclaw gateway run"`
1415
- );
1416
- const dockerfile = dockerfileLines.join('\n');
1417
-
1418
- await fs.writeFile(path.join(projectDir, 'docker', 'openclaw', 'Dockerfile'), dockerfile);
1424
+ );
1425
+ const dockerfile = dockerfileLines.join('\n');
1426
+
1427
+ const dockerDir = path.join(projectDir, 'docker', 'openclaw');
1428
+ await fs.ensureDir(dockerDir);
1429
+ await fs.writeFile(path.join(dockerDir, 'Dockerfile'), dockerfile);
1419
1430
 
1420
1431
  // agentId no longer tightly coupled here, handled inside bot processes
1421
1432
  const agentId = botName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/-$/, '') || 'chat';
@@ -1650,7 +1661,8 @@ ${hasBrowserDesktop ? ` extra_hosts:
1650
1661
  - ../../.openclaw:/root/.openclaw`;
1651
1662
  }
1652
1663
 
1653
- await fs.writeFile(path.join(projectDir, 'docker', 'openclaw', 'docker-compose.yml'), compose);
1664
+ await fs.ensureDir(dockerDir);
1665
+ await fs.writeFile(path.join(dockerDir, 'docker-compose.yml'), compose);
1654
1666
 
1655
1667
  let authProfilesJson = {};
1656
1668
  if (provider.isLocal) {
@@ -2370,15 +2382,15 @@ fi
2370
2382
  const isOpenClawInstalled = () => { try { execSync('openclaw --version', { stdio: 'ignore' }); return true; } catch { return false; } };
2371
2383
  if (!isOpenClawInstalled()) {
2372
2384
  console.log(chalk.cyan(isVi
2373
- ? '\n📦 Đang cài openclaw binary (npm install -g openclaw)...'
2374
- : '\n📦 Installing openclaw binary (npm install -g openclaw)...'));
2375
- try {
2376
- execSync('npm install -g openclaw', { stdio: 'inherit' });
2377
- console.log(chalk.green(isVi ? '✅ openclaw đã cài xong!' : '✅ openclaw installed!'));
2378
- } catch {
2379
- console.log(chalk.yellow(isVi
2380
- ? '⚠️ Không tự cài được. Chạy thủ công: sudo npm install -g openclaw'
2381
- : '⚠️ Could not auto-install. Run manually: sudo npm install -g openclaw'));
2385
+ ? `\n📦 Đang cài openclaw binary (npm install -g ${OPENCLAW_NPM_SPEC})...`
2386
+ : `\n📦 Installing openclaw binary (npm install -g ${OPENCLAW_NPM_SPEC})...`));
2387
+ try {
2388
+ execSync(`npm install -g ${OPENCLAW_NPM_SPEC}`, { stdio: 'inherit' });
2389
+ console.log(chalk.green(isVi ? '✅ openclaw đã cài xong!' : '✅ openclaw installed!'));
2390
+ } catch {
2391
+ console.log(chalk.yellow(isVi
2392
+ ? `⚠️ Không tự cài được. Chạy thủ công: sudo npm install -g ${OPENCLAW_NPM_SPEC}`
2393
+ : `⚠️ Could not auto-install. Run manually: sudo npm install -g ${OPENCLAW_NPM_SPEC}`));
2382
2394
  }
2383
2395
  }
2384
2396
 
@@ -2405,9 +2417,9 @@ fi
2405
2417
  } else {
2406
2418
  if (!isOpenClawInstalled()) {
2407
2419
  console.log(chalk.cyan(isVi
2408
- ? '\n📦 Dang cai openclaw binary (npm install -g openclaw)...'
2409
- : '\n📦 Installing openclaw binary (npm install -g openclaw)...'));
2410
- if (!installGlobalPackage('openclaw@latest', { isVi, osChoice, displayName: 'openclaw' })) {
2420
+ ? `\n📦 Dang cai openclaw binary (npm install -g ${OPENCLAW_NPM_SPEC})...`
2421
+ : `\n📦 Installing openclaw binary (npm install -g ${OPENCLAW_NPM_SPEC})...`));
2422
+ if (!installGlobalPackage(OPENCLAW_NPM_SPEC, { isVi, osChoice, displayName: 'openclaw' })) {
2411
2423
  process.exit(1);
2412
2424
  }
2413
2425
  console.log(chalk.green(isVi ? '✅ openclaw da cai xong!' : '✅ openclaw installed!'));
@@ -22,8 +22,9 @@ Docker works well, but it has a learning curve. Review this table before proceed
22
22
 
23
23
  Before installing Docker, ensure the following:
24
24
 
25
- - **Node.js 20 LTS** or newer: [nodejs.org](https://nodejs.org/)
26
- - Node.js 20 LTS is the minimum recommended version as of 2025. Node.js 22 LTS is also fully supported.
25
+ - **Node.js 20/22/24**: [nodejs.org](https://nodejs.org/)
26
+ - Node.js 20 is the minimum recommended version. Node.js 22 and 24 are also fine.
27
+ - Avoid Node.js 25 for now; there are reports of OpenClaw failing on it.
27
28
  - Verify: `node -v`
28
29
  - **Docker Engine with Compose v2 plugin**: Instructions below.
29
30
  - Verify Compose v2: `docker compose version` (Note: `docker compose`, not `docker-compose`)
@@ -22,8 +22,9 @@ Docker hiệu quả nhưng có yêu cầu kỹ thuật nhất định. Hãy xem
22
22
 
23
23
  Trước khi cài Docker, hãy đảm bảo có đủ:
24
24
 
25
- - **Node.js 20 LTS** trở lên: [nodejs.org](https://nodejs.org/)
26
- - Node.js 20 LTS phiên bản tối thiểu được khuyên dùng từ 2025 trở đi. Node.js 22 LTS cũng được hỗ trợ đầy đủ.
25
+ - **Node.js 20/22/24**: [nodejs.org](https://nodejs.org/)
26
+ - Node.js 20 là mức tối thiểu khuyên dùng. Node.js 22 24 cũng ổn.
27
+ - Tạm tránh Node.js 25 vì đã có report OpenClaw lỗi trên bản này.
27
28
  - Kiểm tra: `node -v`
28
29
  - **Docker Engine kèm plugin Compose V2**: Hướng dẫn cài bên dưới.
29
30
  - Kiểm tra Compose V2: `docker compose version` (Lưu ý: `docker compose`, không phải `docker-compose`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "cli.js",
6
6
  "bin": {