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/CHANGELOG.md +129 -119
- package/CHANGELOG.vi.md +127 -118
- package/README.md +11 -14
- package/README.vi.md +11 -14
- package/cli.js +43 -31
- package/docs/install-docker.md +3 -2
- package/docs/install-docker.vi.md +3 -2
- package/package.json +1 -1
- package/setup.js +139 -68
- package/tests/smoke-cli-logic.mjs +45 -7
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.
|
|
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.
|
|
27
|
+
## 🆕 What's new in v5.1.14
|
|
28
28
|
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
27
|
+
## 🆕 Có gì mới trong v5.1.14
|
|
28
28
|
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
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 và 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` vì có 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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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
|
-
?
|
|
342
|
-
:
|
|
343
|
-
|
|
344
|
-
if (!installGlobalPackage(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
?
|
|
2374
|
-
:
|
|
2375
|
-
try {
|
|
2376
|
-
execSync(
|
|
2377
|
-
console.log(chalk.green(isVi ? '✅ openclaw đã cài xong!' : '✅ openclaw installed!'));
|
|
2378
|
-
} catch {
|
|
2379
|
-
console.log(chalk.yellow(isVi
|
|
2380
|
-
?
|
|
2381
|
-
:
|
|
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
|
-
?
|
|
2409
|
-
:
|
|
2410
|
-
if (!installGlobalPackage(
|
|
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!'));
|
package/docs/install-docker.md
CHANGED
|
@@ -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
|
|
26
|
-
- Node.js 20
|
|
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
|
|
26
|
-
- Node.js 20
|
|
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 và 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`)
|