create-openclaw-bot 5.7.7 → 5.7.9

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.7.7-0EA5E9?style=for-the-badge" alt="Version 5.7.7" /></a>
6
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.7.9-0EA5E9?style=for-the-badge" alt="Version 5.7.9" /></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,18 +24,16 @@ 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.7.7
27
+ ## 🆕 What's new in v5.7.9
28
28
 
29
- - 🛠️ **Infrastructure & Zalo Bot Stabilization** — Automatically pins `openclaw@2026.4.15` across all deployment scripts, completely eliminating gateway crashes caused by version mismatch when installing Zalo Personal.
30
- - 📦 **Docker Volume & Gateway Deadlock Optimization** — Redesigned the `.openclaw` mount mechanism and implemented `tmpfs` for `plugin-runtime-deps`, entirely preventing I/O lock conditions on Windows/WSL2.
31
- - 🔄 **9Router Smart-Sync** — Automatically detects and syncs models (Gemini, Claude, GPT) from active AI providers directly into the `smart-route` combination every time the system starts up.
29
+ - 🔧 **Rename Zalo Plugin Reference** — Updated internal string references from `zalo-mod` to `openclaw-zalo-mod` to align with the new NPM package identity.
32
30
 
33
31
  <details>
34
- <summary><b>Previous: What's new in v5.7.6</b></summary>
32
+ <summary><b>Previous: What's new in v5.7.8</b></summary>
35
33
 
36
- - 🧹 **Automated Uninstall Scripts** — Generates an `uninstall-openclaw` script to cleanly remove system/container resources.
37
- - 🐛 **Hotfix CLI Crash** — Permanently fixed the `channelKey is not defined` bug and double-encoding issues for Vietnamese texts.
38
- - 🏗️ **Centralized config architecture** — All config logic is now unified through `bot-config-gen.js`, completely eradicating the `autoReply: true` bug.
34
+ - 🧹 **Zalo Mod Plugin Cleanup** — Removed auto-injection of `zalo-mod` into generated configs. The plugin now must be installed manually via ClawHub, eliminating persistent installation loops and Docker permission conflicts.
35
+ - 🔧 **Cleaner Docker Build** — `openclaw-zalo-mod` is no longer baked into the Docker image during build or runtime entrypoint, reducing image size and startup errors.
36
+ - 📝 **Standardized Release Workflow** — Added `.agent/workflows/update.md` as the canonical release checklist for this repo.
39
37
 
40
38
  ## </details>
41
39
 
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.7.7-0EA5E9?style=for-the-badge" alt="Version 5.7.7" /></a>
6
+ <a href="https://github.com/tuanminhhole/openclaw-setup/releases"><img src="https://img.shields.io/badge/RELEASE-v5.7.9-0EA5E9?style=for-the-badge" alt="Version 5.7.9" /></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,18 +24,16 @@ 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.7.7
27
+ ## 🆕 Có gì mới trong v5.7.9
28
28
 
29
- - 🛠️ **Ổn Định Infrastructure & Zalo Bot** — Tự động ghim `openclaw@2026.4.15` cho mọi nền tảng, loại bỏ hoàn toàn các lỗi crash do lệch version khi cài Zalo Personal.
30
- - 📦 **Tối Ưu Docker Volume & Gateway Deadlock** — Thiết kế lại cơ chế mount thư mục `.openclaw` và triển khai `tmpfs` cho `plugin-runtime-deps`, triệt để ngăn chặn tình trạng I/O lock trên Windows/WSL2.
31
- - 🔄 **9Router Smart-Sync** — Tự động nhận diện và đồng bộ danh sách models (Gemini, Claude, GPT) từ các AI provider đang kích hoạt trực tiếp vào combo `smart-route` mỗi khi khởi động hệ thống.
29
+ - 🔧 **Cập nhật tham chiếu Plugin Zalo** — Đổi tên `zalo-mod` thành `openclaw-zalo-mod` trong các chuỗi sinh cấu hình test để đồng bộ với package mới.
32
30
 
33
31
  <details>
34
- <summary><b>Trước đó: Có gì mới ở v5.7.6</b></summary>
32
+ <summary><b>Trước đó: Có gì mới ở v5.7.8</b></summary>
35
33
 
36
- - 🧹 **Tự Động Tạo Script Gỡ Cài Đặt** — Sinh sẵn file `uninstall-openclaw` dọn sạch tài nguyên hệ thống/container.
37
- - 🐛 **Hotfix CLI Crash** — Fix triệt để lỗi `channelKey is not defined`double-encoding tiếng Việt.
38
- - 🏗️ **Kiến trúc config tập trung** — Toàn bộ logic config giờ hợp nhất qua `bot-config-gen.js`, xoá triệt để lỗi `autoReply: true`.
34
+ - 🧹 **Dọn dẹp Plugin Zalo Mod** — Gỡ bỏ auto-inject `zalo-mod` khỏi config được generate. Plugin giờ phải cài thủ công qua ClawHub, loại bỏ vòng lặp cài đặt liên tục và xung đột quyền trong Docker.
35
+ - 🔧 **Docker Build Sạch Hơn** — `openclaw-zalo-mod` không còn được nhúng vào Docker image khi build hoặc trong entrypoint runtime, giảm kích thước image lỗi khởi động.
36
+ - 📝 **Chuẩn Hóa Workflow Release** — Thêm `.agent/workflows/update.md` làm checklist release chuẩn cho repo này.
39
37
 
40
38
  ## </details>
41
39
 
package/dist/cli.js CHANGED
@@ -21,9 +21,9 @@ function loadSharedModule(modulePath, globalName) {
21
21
  }
22
22
 
23
23
  const {
24
- OPENCLAW_NPM_SPEC,
25
- OPENCLAW_RUNTIME_PACKAGES,
26
- NINE_ROUTER_PROXY_API_KEY,
24
+ OPENCLAW_NPM_SPEC,
25
+ OPENCLAW_RUNTIME_PACKAGES,
26
+ NINE_ROUTER_PROXY_API_KEY,
27
27
  NINE_ROUTER_API_BASE_URL,
28
28
  SMART_ROUTE_PROVIDER_MODELS,
29
29
  SMART_ROUTE_PROVIDER_ORDER,
@@ -615,10 +615,14 @@ function printNativeDashboardAccessInfo({ isVi, providerKey, projectDir, gateway
615
615
  }
616
616
  }
617
617
 
618
- function printZaloPersonalLoginInfo({ isVi, deployMode, projectDir }) {
619
- const nativeCmd = 'openclaw channels login --channel zalouser --verbose';
620
- const dockerCmd = 'docker exec -it openclaw-bot openclaw channels login --channel zalouser --verbose';
621
- const cmd = deployMode === 'native' ? nativeCmd : dockerCmd;
618
+ function printZaloPersonalLoginInfo({ isVi, deployMode, projectDir }) {
619
+ const nativeCmd = 'openclaw channels login --channel zalouser --verbose';
620
+ const dockerCmd = 'docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose';
621
+ const dockerStopCmd = 'docker compose stop ai-bot';
622
+ const dockerStartCmd = 'docker compose up -d --force-recreate ai-bot';
623
+ const dockerStatusCmd = 'docker compose exec ai-bot openclaw channels status --probe';
624
+ const dockerReloginCmd = 'docker compose run --rm --no-deps ai-bot openclaw channels logout --channel zalouser && docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose';
625
+ const cmd = deployMode === 'native' ? nativeCmd : dockerCmd;
622
626
  const qrPath = deployMode === 'native'
623
627
  ? path.join(os.tmpdir(), 'openclaw', 'openclaw-zalouser-qr-default.png')
624
628
  : '/tmp/openclaw/openclaw-zalouser-qr-default.png';
@@ -630,31 +634,40 @@ function printZaloPersonalLoginInfo({ isVi, deployMode, projectDir }) {
630
634
 
631
635
  console.log(chalk.yellow(`\n📱 ${isVi ? 'Đăng nhập Zalo Personal (1 lần):' : 'Zalo Personal login (one time):'}`));
632
636
  if (deployMode === 'docker') {
633
- console.log(chalk.white(isVi
634
- ? ` 1. cd ${projectDir}/docker/openclaw`
635
- : ` 1. cd ${projectDir}/docker/openclaw`));
636
- console.log(chalk.white(isVi
637
- ? ` 2. ${cmd}`
638
- : ` 2. ${cmd}`));
639
- console.log(chalk.white(isVi
640
- ? ` 3. Tìm file QR trong container: ${qrPath}`
641
- : ` 3. Find QR image in container: ${qrPath}`));
637
+ console.log(chalk.white(isVi
638
+ ? ` 1. cd ${projectDir}/docker/openclaw`
639
+ : ` 1. cd ${projectDir}/docker/openclaw`));
640
+ console.log(chalk.white(isVi
641
+ ? ` 2. ${dockerStopCmd}`
642
+ : ` 2. ${dockerStopCmd}`));
643
+ console.log(chalk.white(isVi
644
+ ? ` 3. ${cmd}`
645
+ : ` 3. ${cmd}`));
646
+ console.log(chalk.white(isVi
647
+ ? ` 4. Tìm file QR trong container: ${qrPath}`
648
+ : ` 4. Find QR image in container: ${qrPath}`));
642
649
  console.log(chalk.gray(isVi
643
650
  ? ` → Mở Docker Desktop > container openclaw-bot > tab Files > tìm file trên`
644
651
  : ` → Open Docker Desktop > container openclaw-bot > Files tab > find file above`));
645
652
  console.log(chalk.gray(isVi
646
653
  ? ` → Hoặc chạy: ${copyCmd}`
647
654
  : ` → Or run: ${copyCmd}`));
648
- console.log(chalk.white(isVi
649
- ? ' 4. Mở app Zalo > Quét QR > quét mã trong file QR'
650
- : ' 4. Open Zalo app > Scan QR > scan the QR image'));
651
- console.log(chalk.white(isVi
652
- ? ' 5. Đợi thấy "Login successful" trong terminal'
653
- : ' 5. Wait for "Login successful" in terminal'));
654
- console.log(chalk.white(isVi
655
- ? ' 6. docker compose restart'
656
- : ' 6. docker compose restart'));
657
- } else {
655
+ console.log(chalk.white(isVi
656
+ ? ' 5. Mở app Zalo > Quét QR > quét mã trong file QR'
657
+ : ' 5. Open Zalo app > Scan QR > scan the QR image'));
658
+ console.log(chalk.white(isVi
659
+ ? ' 6. Đợi thấy "Login successful" trong terminal'
660
+ : ' 6. Wait for "Login successful" in terminal'));
661
+ console.log(chalk.white(isVi
662
+ ? ` 7. ${dockerStartCmd}`
663
+ : ` 7. ${dockerStartCmd}`));
664
+ console.log(chalk.white(isVi
665
+ ? ` 8. ${dockerStatusCmd} # phải thấy: running`
666
+ : ` 8. ${dockerStatusCmd} # should show: running`));
667
+ console.log(chalk.gray(isVi
668
+ ? ` Nếu probe báo chưa auth: ${dockerReloginCmd}`
669
+ : ` If the probe says unauthenticated: ${dockerReloginCmd}`));
670
+ } else {
658
671
  console.log(chalk.white(` cd ${projectDir} ${process.platform === 'win32' ? ';' : '&&'} ${cmd}`));
659
672
  console.log(chalk.gray(isVi
660
673
  ? ` → File QR sẽ tạo tại: ${qrPath}`
@@ -2168,11 +2181,8 @@ async function main() {
2168
2181
  const skillInstallCmd = skillSlugs.length > 0
2169
2182
  ? skillSlugs.map(s => `ensure_skill ${s}`).join('\n')
2170
2183
  : '';
2171
- const relayInstallCmd = (isMultiBot && channelKey === 'telegram')
2172
- ? buildRelayPluginInstallCommand('openclaw')
2173
- : '';
2174
- const zaloModInstallCmd = hasZaloPersonal(channelKey)
2175
- ? 'ensure_plugin zalo-mod openclaw-zalo-mod'
2184
+ const relayInstallCmd = (isMultiBot && channelKey === 'telegram')
2185
+ ? buildRelayPluginInstallCommand('openclaw')
2176
2186
  : '';
2177
2187
  const deviceApproveLoop = 'while true; do sleep 5; openclaw devices approve --latest 2>/dev/null || true; done >/dev/null 2>&1 &';
2178
2188
 
@@ -2188,7 +2198,6 @@ async function main() {
2188
2198
  selectedModel: modelsPrimary,
2189
2199
  agentId,
2190
2200
  runtimeCommandParts: [
2191
- zaloModInstallCmd,
2192
2201
  relayInstallCmd,
2193
2202
  skillInstallCmd,
2194
2203
  deviceApproveLoop,
@@ -82,7 +82,7 @@
82
82
  historyLimit: 50,
83
83
  },
84
84
  },
85
- pluginInstall: '@openclaw/zalouser',
85
+ pluginInstall: '',
86
86
  },
87
87
  };
88
88
 
@@ -189,7 +189,7 @@
189
189
  cfg.skills = { entries: skillEntries };
190
190
  }
191
191
 
192
- // ── plugins (memory-core dreaming + zalo-mod) ────────────────────────────
192
+ // ── plugins (memory-core dreaming + openclaw-zalo-mod) ────────────────────────────
193
193
  const pluginsConfig = buildPluginsConfig({
194
194
  channelKey,
195
195
  selectedSkills,
@@ -305,21 +305,9 @@
305
305
 
306
306
  const allow = ['memory-core'];
307
307
 
308
- // zalo-mod plugin for Zalo Personal
308
+ // Zalo Personal channel is native; install openclaw-zalo-mod manually via ClawHub when needed.
309
309
  if (isZaloPersonal(channelKey)) {
310
- allow.push('zalo-mod', 'zalouser');
311
- entries['zalo-mod'] = {
312
- enabled: true,
313
- config: {
314
- botName: botName,
315
- ownerId: "",
316
- groupNames: {},
317
- zaloDisplayNames: [botName],
318
- welcomeEnabled: true,
319
- spamRepeatN: 3,
320
- spamWindowSeconds: 300,
321
- },
322
- };
310
+ allow.push('zalouser');
323
311
  }
324
312
 
325
313
  const plugins = { entries };
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  (function (root) {
3
- const OPENCLAW_NPM_SPEC = 'openclaw@2026.4.15';
3
+ const OPENCLAW_NPM_SPEC = 'openclaw@2026.5.4';
4
4
  const OPENCLAW_RUNTIME_PACKAGES = 'grammy @grammyjs/runner @grammyjs/transformer-throttler @buape/carbon @larksuiteoapi/node-sdk @slack/web-api';
5
5
  const NINE_ROUTER_NPM_SPEC = '9router@latest';
6
6
  const NINE_ROUTER_PORT = 20128;
@@ -186,7 +186,7 @@ if(touched){console.log('[patch-9router] Applied Codex compatibility patch.');}e
186
186
 
187
187
  } = options;
188
188
 
189
- const browserAptExtra = hasBrowser ? ' xvfb socat' : '';
189
+ const browserAptExtra = hasBrowser ? ' xvfb socat' : '';
190
190
  const browserInstallLines = hasBrowser && emitBrowserInstall
191
191
  ? [
192
192
  '',
@@ -264,7 +264,7 @@ if(touched){console.log('[patch-9router] Applied Codex compatibility patch.');}e
264
264
  const runtimeScriptB64 = encodeBase64Utf8(runtimeScript);
265
265
  const dockerfile = `FROM node:22-slim
266
266
 
267
- RUN apt-get update && apt-get install -y git curl${browserAptExtra} && rm -rf /var/lib/apt/lists/*
267
+ RUN apt-get update && apt-get install -y git curl python3${browserAptExtra} && rm -rf /var/lib/apt/lists/*
268
268
  ${browserInstallLines}
269
269
  ARG OPENCLAW_VER="${openClawNpmSpec}"
270
270
  ARG CACHE_BUST=""
@@ -348,8 +348,8 @@ const CDP_URL = 'http://127.0.0.1:9222';
348
348
 
349
349
  const zaloModSection = hasZaloMod
350
350
  ? (isVi
351
- ? `\n\n## 💬 Zalo Group — Slash Commands (xử lý bởi plugin)\n\nPlugin \`zalo-mod\` tự động xử lý các slash command sau trong group. Bot KHÔNG cần reply cho chúng:\n\n| Command | Mô tả |\n|---------|-------|\n| \`/rules status\` | Xem cấu hình bot |\n| \`/rules silent-on/off\` | Bật/tắt silent mode |\n| \`/rules welcome-on/off\` | Bật/tắt welcome message |\n| \`/rules tracking-on/off\` | Bật/tắt ghi log chat |\n| \`/noi-quy\` | Hiện nội quy group |\n| \`/menu\` | Danh sách lệnh |\n| \`/groupid\` | Scan và cập nhật config |\n| \`/report\` | Báo cáo hoạt động group |\n\n### Zalo Sticker & Media\n- Sticker Zalo gửi dạng JSON → plugin tự convert thành \`[Sticker]\`\n- Ảnh/video/file trong group: zalouser channel chỉ forward text, media bị drop`
352
- : `\n\n## 💬 Zalo Group — Slash Commands (handled by plugin)\n\nThe \`zalo-mod\` plugin automatically handles these slash commands in group. Bot does NOT need to reply:\n\n| Command | Description |\n|---------|-------------|\n| \`/rules status\` | View bot config |\n| \`/rules silent-on/off\` | Toggle silent mode |\n| \`/rules welcome-on/off\` | Toggle welcome message |\n| \`/rules tracking-on/off\` | Toggle chat logging |\n| \`/noi-quy\` | Show group rules |\n| \`/menu\` | List commands |\n| \`/groupid\` | Scan and update config |\n| \`/report\` | Group activity report |\n\n### Zalo Sticker & Media\n- Zalo stickers arrive as JSON → plugin auto-converts to \`[Sticker]\`\n- Images/videos/files in groups: zalouser channel only forwards text, media is dropped`)
351
+ ? `\n\n## 💬 Zalo Group — Slash Commands (xử lý bởi plugin)\n\nPlugin \`openclaw-zalo-mod\` tự động xử lý các slash command sau trong group. Bot KHÔNG cần reply cho chúng:\n\n| Command | Mô tả |\n|---------|-------|\n| \`/rules status\` | Xem cấu hình bot |\n| \`/rules silent-on/off\` | Bật/tắt silent mode |\n| \`/rules welcome-on/off\` | Bật/tắt welcome message |\n| \`/rules tracking-on/off\` | Bật/tắt ghi log chat |\n| \`/noi-quy\` | Hiện nội quy group |\n| \`/menu\` | Danh sách lệnh |\n| \`/groupid\` | Scan và cập nhật config |\n| \`/report\` | Báo cáo hoạt động group |\n\n### Zalo Sticker & Media\n- Sticker Zalo gửi dạng JSON → plugin tự convert thành \`[Sticker]\`\n- Ảnh/video/file trong group: zalouser channel chỉ forward text, media bị drop`
352
+ : `\n\n## 💬 Zalo Group — Slash Commands (handled by plugin)\n\nThe \`openclaw-zalo-mod\` plugin automatically handles these slash commands in group. Bot does NOT need to reply:\n\n| Command | Description |\n|---------|-------------|\n| \`/rules status\` | View bot config |\n| \`/rules silent-on/off\` | Toggle silent mode |\n| \`/rules welcome-on/off\` | Toggle welcome message |\n| \`/rules tracking-on/off\` | Toggle chat logging |\n| \`/noi-quy\` | Show group rules |\n| \`/menu\` | List commands |\n| \`/groupid\` | Scan and update config |\n| \`/report\` | Group activity report |\n\n### Zalo Sticker & Media\n- Zalo stickers arrive as JSON → plugin auto-converts to \`[Sticker]\`\n- Images/videos/files in groups: zalouser channel only forwards text, media is dropped`)
353
353
  : '';
354
354
 
355
355
  const dmOverride = isVi
package/dist/setup.js CHANGED
@@ -297,7 +297,7 @@
297
297
  historyLimit: 50,
298
298
  },
299
299
  },
300
- pluginInstall: '@openclaw/zalouser',
300
+ pluginInstall: '',
301
301
  },
302
302
  };
303
303
 
@@ -619,7 +619,7 @@
619
619
  // ── Shared runtime constants, relay helpers, auth profile builders (setup/shared/common-gen.js)
620
620
  // @ts-nocheck
621
621
  (function (root) {
622
- const OPENCLAW_NPM_SPEC = 'openclaw@2026.4.15';
622
+ const OPENCLAW_NPM_SPEC = 'openclaw@2026.5.4';
623
623
  const OPENCLAW_RUNTIME_PACKAGES = 'grammy @grammyjs/runner @grammyjs/transformer-throttler @buape/carbon @larksuiteoapi/node-sdk @slack/web-api';
624
624
  const NINE_ROUTER_NPM_SPEC = '9router@latest';
625
625
  const NINE_ROUTER_PORT = 20128;
@@ -1284,8 +1284,8 @@ const CDP_URL = 'http://127.0.0.1:9222';
1284
1284
 
1285
1285
  const zaloModSection = hasZaloMod
1286
1286
  ? (isVi
1287
- ? `\n\n## 💬 Zalo Group — Slash Commands (xử lý bởi plugin)\n\nPlugin \`zalo-mod\` tự động xử lý các slash command sau trong group. Bot KHÔNG cần reply cho chúng:\n\n| Command | Mô tả |\n|---------|-------|\n| \`/rules status\` | Xem cấu hình bot |\n| \`/rules silent-on/off\` | Bật/tắt silent mode |\n| \`/rules welcome-on/off\` | Bật/tắt welcome message |\n| \`/rules tracking-on/off\` | Bật/tắt ghi log chat |\n| \`/noi-quy\` | Hiện nội quy group |\n| \`/menu\` | Danh sách lệnh |\n| \`/groupid\` | Scan và cập nhật config |\n| \`/report\` | Báo cáo hoạt động group |\n\n### Zalo Sticker & Media\n- Sticker Zalo gửi dạng JSON → plugin tự convert thành \`[Sticker]\`\n- Ảnh/video/file trong group: zalouser channel chỉ forward text, media bị drop`
1288
- : `\n\n## 💬 Zalo Group — Slash Commands (handled by plugin)\n\nThe \`zalo-mod\` plugin automatically handles these slash commands in group. Bot does NOT need to reply:\n\n| Command | Description |\n|---------|-------------|\n| \`/rules status\` | View bot config |\n| \`/rules silent-on/off\` | Toggle silent mode |\n| \`/rules welcome-on/off\` | Toggle welcome message |\n| \`/rules tracking-on/off\` | Toggle chat logging |\n| \`/noi-quy\` | Show group rules |\n| \`/menu\` | List commands |\n| \`/groupid\` | Scan and update config |\n| \`/report\` | Group activity report |\n\n### Zalo Sticker & Media\n- Zalo stickers arrive as JSON → plugin auto-converts to \`[Sticker]\`\n- Images/videos/files in groups: zalouser channel only forwards text, media is dropped`)
1287
+ ? `\n\n## 💬 Zalo Group — Slash Commands (xử lý bởi plugin)\n\nPlugin \`openclaw-zalo-mod\` tự động xử lý các slash command sau trong group. Bot KHÔNG cần reply cho chúng:\n\n| Command | Mô tả |\n|---------|-------|\n| \`/rules status\` | Xem cấu hình bot |\n| \`/rules silent-on/off\` | Bật/tắt silent mode |\n| \`/rules welcome-on/off\` | Bật/tắt welcome message |\n| \`/rules tracking-on/off\` | Bật/tắt ghi log chat |\n| \`/noi-quy\` | Hiện nội quy group |\n| \`/menu\` | Danh sách lệnh |\n| \`/groupid\` | Scan và cập nhật config |\n| \`/report\` | Báo cáo hoạt động group |\n\n### Zalo Sticker & Media\n- Sticker Zalo gửi dạng JSON → plugin tự convert thành \`[Sticker]\`\n- Ảnh/video/file trong group: zalouser channel chỉ forward text, media bị drop`
1288
+ : `\n\n## 💬 Zalo Group — Slash Commands (handled by plugin)\n\nThe \`openclaw-zalo-mod\` plugin automatically handles these slash commands in group. Bot does NOT need to reply:\n\n| Command | Description |\n|---------|-------------|\n| \`/rules status\` | View bot config |\n| \`/rules silent-on/off\` | Toggle silent mode |\n| \`/rules welcome-on/off\` | Toggle welcome message |\n| \`/rules tracking-on/off\` | Toggle chat logging |\n| \`/noi-quy\` | Show group rules |\n| \`/menu\` | List commands |\n| \`/groupid\` | Scan and update config |\n| \`/report\` | Group activity report |\n\n### Zalo Sticker & Media\n- Zalo stickers arrive as JSON → plugin auto-converts to \`[Sticker]\`\n- Images/videos/files in groups: zalouser channel only forwards text, media is dropped`)
1289
1289
  : '';
1290
1290
 
1291
1291
  const dmOverride = isVi
@@ -1627,7 +1627,7 @@ if (typeof exports !== 'undefined' && workspaceRoot.__openclawWorkspace) {
1627
1627
  cfg.skills = { entries: skillEntries };
1628
1628
  }
1629
1629
 
1630
- // ── plugins (memory-core dreaming + zalo-mod) ────────────────────────────
1630
+ // ── plugins (memory-core dreaming + openclaw-zalo-mod) ────────────────────────────
1631
1631
  const pluginsConfig = buildPluginsConfig({
1632
1632
  channelKey,
1633
1633
  selectedSkills,
@@ -1743,21 +1743,9 @@ if (typeof exports !== 'undefined' && workspaceRoot.__openclawWorkspace) {
1743
1743
 
1744
1744
  const allow = ['memory-core'];
1745
1745
 
1746
- // zalo-mod plugin for Zalo Personal
1746
+ // Zalo Personal channel is native; install openclaw-zalo-mod manually via ClawHub when needed.
1747
1747
  if (isZaloPersonal(channelKey)) {
1748
- allow.push('zalo-mod', 'zalouser');
1749
- entries['zalo-mod'] = {
1750
- enabled: true,
1751
- config: {
1752
- botName: botName,
1753
- ownerId: "",
1754
- groupNames: {},
1755
- zaloDisplayNames: [botName],
1756
- welcomeEnabled: true,
1757
- spamRepeatN: 3,
1758
- spamWindowSeconds: 300,
1759
- },
1760
- };
1748
+ allow.push('zalouser');
1761
1749
  }
1762
1750
 
1763
1751
  const plugins = { entries };
@@ -2746,7 +2734,7 @@ if(touched){console.log('[patch-9router] Applied Codex compatibility patch.');}e
2746
2734
  const runtimeScriptB64 = encodeBase64Utf8(runtimeScript);
2747
2735
  const dockerfile = `FROM node:22-slim
2748
2736
 
2749
- RUN apt-get update && apt-get install -y git curl${browserAptExtra} && rm -rf /var/lib/apt/lists/*
2737
+ RUN apt-get update && apt-get install -y git curl python3${browserAptExtra} && rm -rf /var/lib/apt/lists/*
2750
2738
  ${browserInstallLines}
2751
2739
  ARG OPENCLAW_VER="${openClawNpmSpec}"
2752
2740
  ARG CACHE_BUST=""
@@ -3019,7 +3007,6 @@ function buildNativeScriptCtx(options) {
3019
3007
  const p = PLUGINS.find((x) => x.id === pid);
3020
3008
  if (p) allPlugins.push(p.package);
3021
3009
  });
3022
- if (ch && ch.hasZaloPersonal) allPlugins.push('openclaw-zalo-mod');
3023
3010
  if (isMultiBot && state.channel === 'telegram') allPlugins.push(relayPluginSpec);
3024
3011
  const uniquePlugins = [...new Set(allPlugins)];
3025
3012
  const pluginCmd = uniquePlugins.length > 0 ? uniquePlugins.map(function(pkg) { return 'call npm exec -- openclaw plugins install ' + pkg + ' || echo [WARN] Plugin ' + pkg + ' cai dat that bai (co the do rate limit). Ban co the cai thu cong sau.'; }).join('\r\n') : '';
@@ -3817,21 +3804,31 @@ New-Item -ItemType Directory -Force -Path "$projectDir" | Out-Null
3817
3804
  ps += `Write-Host "" -ForegroundColor White\n`;
3818
3805
  ps += `Write-Host "${isVi ? 'Huong dan dang nhap Zalo:' : 'Zalo login instructions:'}" -ForegroundColor White\n`;
3819
3806
  ps += `Write-Host " ${isVi ? '1. cd docker\\\\openclaw' : '1. cd docker\\\\openclaw'}" -ForegroundColor White\n`;
3820
- ps += `Write-Host " ${isVi ? `2. docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose` : `2. docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose`}" -ForegroundColor White\n`;
3807
+ ps += `Write-Host " ${isVi ? '2. docker compose stop ai-bot' : '2. docker compose stop ai-bot'}" -ForegroundColor White\n`;
3808
+ ps += `Write-Host " ${isVi ? '3. docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose' : '3. docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose'}" -ForegroundColor White\n`;
3821
3809
  ps += `Write-Host " ${isVi ? `3. Mo Docker Desktop > container ${containerName} > tab Files > tim file: ${qrPath}` : `3. Open Docker Desktop > container ${containerName} > Files tab > find: ${qrPath}`}" -ForegroundColor White\n`;
3822
3810
  ps += `Write-Host " ${isVi ? ` Hoac chay: docker cp ${containerName}:${qrPath} ./zalo-qr.png` : ` Or run: docker cp ${containerName}:${qrPath} ./zalo-qr.png`}" -ForegroundColor White\n`;
3823
3811
  ps += `Write-Host " ${isVi ? '4. Mo app Zalo > Quet QR > quet ma trong file QR' : '4. Open Zalo app > Scan QR > scan the QR image'}" -ForegroundColor White\n`;
3824
3812
  ps += `Write-Host " ${isVi ? '5. Doi thay chu Login successful trong terminal' : '5. Wait for Login successful in terminal'}" -ForegroundColor White\n`;
3825
- ps += `Write-Host " ${isVi ? '6. Restart container: docker compose restart' : '6. Restart container: docker compose restart'}" -ForegroundColor White\n`;
3813
+ ps += `Write-Host " ${isVi ? '6. docker compose up -d --force-recreate ai-bot' : '6. docker compose up -d --force-recreate ai-bot'}" -ForegroundColor White\n`;
3814
+ ps += `Write-Host " ${isVi ? '7. Kiem tra: docker compose exec ai-bot openclaw channels status --probe (phai thay running)' : '7. Verify: docker compose exec ai-bot openclaw channels status --probe (should show running)'}" -ForegroundColor White\n`;
3826
3815
  ps += `Write-Host "" -ForegroundColor White\n`;
3827
- ps += `Write-Host "${isVi ? 'Dung gateway de login...' : 'Stopping gateway for login...'}" -ForegroundColor Yellow\\n`;
3828
- ps += `& docker exec ${containerName} openclaw gateway stop 2>$null\\n`;
3829
- ps += `Start-Sleep -Seconds 3\\n`;
3816
+ ps += `Write-Host "${isVi ? 'Dung app container de login one-shot...' : 'Stopping the app container for one-shot login...'}" -ForegroundColor Yellow\\n`;
3817
+ ps += `& docker compose stop ai-bot\\n`;
3830
3818
  ps += `Write-Host "${isVi ? 'Dang chay lenh login...' : 'Running login command...'}" -ForegroundColor Yellow\n`;
3831
- ps += `& docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose\n`;
3819
+ ps += `& docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose\n`;
3832
3820
  ps += `Write-Host "" -ForegroundColor White\n`;
3833
- ps += `Write-Host "${isVi ? 'Restart container de ap dung...' : 'Restarting container to apply...'}" -ForegroundColor Green\n`;
3834
- ps += `& docker compose restart\n`;
3821
+ ps += `Write-Host "${isVi ? 'Recreate app container de nap session Zalo...' : 'Recreating the app container to load the Zalo session...'}" -ForegroundColor Green\n`;
3822
+ ps += `& docker compose up -d --force-recreate ai-bot\n`;
3823
+ ps += `Start-Sleep -Seconds 30\n`;
3824
+ ps += `$statusOut = (& docker compose exec ai-bot openclaw channels status --probe) -join "\n"\n`;
3825
+ ps += `Write-Host $statusOut\n`;
3826
+ ps += `if ($statusOut -notmatch 'running') {\n`;
3827
+ ps += ` Write-Host "${isVi ? 'Channel chua running, recreate container ai-bot...' : 'Channel is not running; recreating ai-bot container...'}" -ForegroundColor Yellow\n`;
3828
+ ps += ` & docker compose up -d --force-recreate ai-bot\n`;
3829
+ ps += ` Start-Sleep -Seconds 30\n`;
3830
+ ps += ` & docker compose exec ai-bot openclaw channels status --probe\n`;
3831
+ ps += `}\n`;
3835
3832
  }
3836
3833
 
3837
3834
  ps += `} catch { Write-Host $_.Exception.Message -ForegroundColor Red }\nRead-Host "${isVi ? 'Nhan Enter de thoat' : 'Press Enter to exit'}"\n`;
@@ -3876,9 +3873,10 @@ echo ""
3876
3873
  const containerName = 'openclaw-bot';
3877
3874
  const qrPath = '/tmp/openclaw/openclaw-zalouser-qr-default.png';
3878
3875
  script += `\necho ""\necho "${isVi ? '=== DANG NHAP ZALO ===' : '=== ZALO LOGIN ==='}"\necho "${isVi ? 'Doi container khoi dong 10 giay...' : 'Waiting 10s for container to start...'}"\nsleep 10\n`;
3879
- script += `echo "${isVi ? 'Huong dan dang nhap Zalo:' : 'Zalo login instructions:'}"\necho " ${isVi ? '1. cd docker/openclaw' : '1. cd docker/openclaw'}"\necho " 2. docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose"\necho " ${isVi ? `3. Tim file QR trong container: ${qrPath}` : `3. Find QR image in container: ${qrPath}`}"\necho " ${isVi ? ` Hoac chay: docker cp ${containerName}:${qrPath} ./zalo-qr.png` : ` Or run: docker cp ${containerName}:${qrPath} ./zalo-qr.png`}"\necho " ${isVi ? '4. Mo app Zalo > Quet QR > quet ma' : '4. Open Zalo app > Scan QR > scan'}"\necho " ${isVi ? '5. Doi thay Login successful' : '5. Wait for Login successful'}"\necho " ${isVi ? '6. Restart: docker compose restart' : '6. Restart: docker compose restart'}"\necho ""\n`;
3880
- script += `docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose\n`;
3881
- script += `echo "${isVi ? 'Restart container...' : 'Restarting container...'}"\ndocker compose restart\n`;
3876
+ script += `echo "${isVi ? 'Huong dan dang nhap Zalo:' : 'Zalo login instructions:'}"\necho " ${isVi ? '1. cd docker/openclaw' : '1. cd docker/openclaw'}"\necho " ${isVi ? '2. docker compose stop ai-bot' : '2. docker compose stop ai-bot'}"\necho " 3. docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose"\necho " ${isVi ? `4. Tim file QR trong container: ${qrPath}` : `4. Find QR image in container: ${qrPath}`}"\necho " ${isVi ? ` Hoac chay: docker cp ${containerName}:${qrPath} ./zalo-qr.png` : ` Or run: docker cp ${containerName}:${qrPath} ./zalo-qr.png`}"\necho " ${isVi ? '5. Mo app Zalo > Quet QR > quet ma' : '5. Open Zalo app > Scan QR > scan'}"\necho " ${isVi ? '6. Doi thay Login successful' : '6. Wait for Login successful'}"\necho " ${isVi ? '7. Start lai: docker compose up -d --force-recreate ai-bot' : '7. Start again: docker compose up -d --force-recreate ai-bot'}"\necho " ${isVi ? '8. Kiem tra: docker compose exec ai-bot openclaw channels status --probe (phai thay running)' : '8. Verify: docker compose exec ai-bot openclaw channels status --probe (should show running)'}"\necho ""\n`;
3877
+ script += `docker compose stop ai-bot\n`;
3878
+ script += `docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose\n`;
3879
+ script += `echo "${isVi ? 'Recreate container de nap session Zalo...' : 'Recreating container to load the Zalo session...'}"\ndocker compose up -d --force-recreate ai-bot\nsleep 30\nSTATUS="$(docker compose exec ai-bot openclaw channels status --probe || true)"\necho "$STATUS"\nif ! printf '%s' "$STATUS" | grep -q running; then\n echo "${isVi ? 'Channel van chua running. Hay logout/login lai bang compose run one-shot.' : 'Channel is still not running. Re-run logout/login with compose run one-shot.'}"\nfi\n`;
3882
3880
  }
3883
3881
 
3884
3882
  return script;
@@ -4138,20 +4136,29 @@ function generateMacOsSh(ctx) {
4138
4136
  sh.push('echo "=== DANG NHAP ZALO ==="');
4139
4137
  sh.push('echo "Doi container khoi dong 10 giay..."');
4140
4138
  sh.push('sleep 10');
4141
- sh.push('echo "Dung gateway de login..."');
4142
- sh.push(`docker exec ${containerName} openclaw gateway stop 2>/dev/null || true`);
4143
- sh.push('sleep 3');
4139
+ sh.push('echo "Dung app container de login one-shot..."');
4140
+ sh.push('$COMPOSE stop ai-bot');
4144
4141
  sh.push('echo "Huong dan dang nhap Zalo:"');
4145
4142
  sh.push(`echo " 1. cd docker/openclaw"`);
4146
- sh.push(`echo " 2. docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose"`);
4147
- sh.push(`echo " 3. Tim file QR trong container: ${qrPath}"`);
4143
+ sh.push(`echo " 2. docker compose stop ai-bot"`);
4144
+ sh.push(`echo " 3. docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose"`);
4145
+ sh.push(`echo " 4. Tim file QR trong container: ${qrPath}"`);
4148
4146
  sh.push(`echo " Hoac chay: docker cp ${containerName}:${qrPath} ./zalo-qr.png"`);
4149
- sh.push('echo " 4. Mo app Zalo > Quet QR > quet ma"');
4150
- sh.push('echo " 5. Doi thay Login successful"');
4151
- sh.push('echo " 6. Restart: $COMPOSE restart"');
4147
+ sh.push('echo " 5. Mo app Zalo > Quet QR > quet ma"');
4148
+ sh.push('echo " 6. Doi thay Login successful"');
4149
+ sh.push('echo " 7. Script se recreate container de nap session Zalo vua tao"');
4152
4150
  sh.push('echo ""');
4153
- sh.push(`docker exec -it ${containerName} openclaw channels login --channel zalouser --verbose || true`);
4154
- sh.push('$COMPOSE restart');
4151
+ sh.push(`$COMPOSE run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose || true`);
4152
+ sh.push(`$COMPOSE up -d --force-recreate ai-bot`);
4153
+ sh.push('sleep 30');
4154
+ sh.push(`STATUS="$($COMPOSE exec ai-bot openclaw channels status --probe || true)"`);
4155
+ sh.push('echo "$STATUS"');
4156
+ sh.push('if ! printf "%s" "$STATUS" | grep -q running; then');
4157
+ sh.push(' echo "Channel chua running, recreate container ai-bot..."');
4158
+ sh.push(' $COMPOSE up -d --force-recreate ai-bot');
4159
+ sh.push(' sleep 30');
4160
+ sh.push(` $COMPOSE exec ai-bot openclaw channels status --probe || true`);
4161
+ sh.push('fi');
4155
4162
  }
4156
4163
  sh.push('echo "\u2705 Bot dang chay via Docker. Xem log: docker logs -f openclaw-bot"');
4157
4164
  scriptContent = sh.filter(Boolean).join('\n');
@@ -5855,7 +5862,6 @@ Write-Host "Chrome se tu dong bat Debug Mode moi khi ban dang nhap Windows (dela
5855
5862
  };
5856
5863
  clawConfig.plugins = {
5857
5864
  entries: {
5858
- ...(ch.hasZaloPersonal ? { 'zalo-mod': { enabled: true, config: { botName: botName, ownerId: "", groupNames: {}, zaloDisplayNames: [botName], welcomeEnabled: true, spamRepeatN: 3, spamWindowSeconds: 300 } } } : {}),
5859
5865
  'memory-core': {
5860
5866
  config: { dreaming: { enabled: state.config.skills.includes('memory') } },
5861
5867
  },
@@ -5869,20 +5875,6 @@ Write-Host "Chrome se tu dong bat Debug Mode moi khi ban dang nhap Windows (dela
5869
5875
  if (!plugin || plugin.hidden) return;
5870
5876
  pluginEntries[plugin.package || pid] = { enabled: true };
5871
5877
  });
5872
- if (ch.hasZaloPersonal) {
5873
- pluginEntries['zalo-mod'] = {
5874
- enabled: true,
5875
- config: {
5876
- botName: botName,
5877
- ownerId: "",
5878
- groupNames: {},
5879
- zaloDisplayNames: [botName],
5880
- welcomeEnabled: true,
5881
- spamRepeatN: 3,
5882
- spamWindowSeconds: 300
5883
- }
5884
- };
5885
- }
5886
5878
  pluginEntries['memory-core'] = {
5887
5879
  config: { dreaming: { enabled: state.config.skills.includes('memory') } },
5888
5880
  };
@@ -5922,7 +5914,6 @@ model:
5922
5914
  // 3. Dockerfile + docker-compose.yml
5923
5915
  const allPlugins = [];
5924
5916
  if (ch.pluginInstall) allPlugins.push(ch.pluginInstall);
5925
- if (ch.hasZaloPersonal) allPlugins.push('openclaw-zalo-mod');
5926
5917
  state.config.plugins.forEach((pid) => {
5927
5918
  const plug = PLUGINS.find((p) => p.id === pid);
5928
5919
  if (plug) allPlugins.push(plug.package);
@@ -5938,7 +5929,6 @@ model:
5938
5929
  const relayPluginInstallCmd = isMultiBot ? buildRelayPluginInstallCommand('openclaw') : '';
5939
5930
  const pluginRuntimeSpecs = allPlugins.filter((p) => p && p !== '@openclaw/zalouser');
5940
5931
  const pluginIdForSpec = (spec) => {
5941
- if (String(spec).includes('zalo-mod')) return 'zalo-mod';
5942
5932
  return String(spec).replace(/^@openclaw\//, '').replace(/^openclaw-/, '');
5943
5933
  };
5944
5934
  const pluginInstallCmd = [
@@ -5960,7 +5950,7 @@ model:
5960
5950
  runtimeCommandParts: [
5961
5951
  pluginInstallCmd,
5962
5952
  'while true; do sleep 5; openclaw devices approve --latest 2>/dev/null || true; done >/dev/null 2>&1 &'
5963
- ],
5953
+ ].filter(Boolean),
5964
5954
  plainSingleExtraHosts: true,
5965
5955
  multiOllamaNumParallel: 1,
5966
5956
  singleOllamaNumParallel: 1,
@@ -6620,33 +6610,38 @@ fi
6620
6610
  // ========== Zalo Personal Login Guide (post-setup) ==========
6621
6611
  function generateZaloOnboardGuide() {
6622
6612
  const lang = document.getElementById('cfg-language')?.value || 'vi';
6623
- setOutput('out-zalo-onboard-cmd', `docker compose exec -it ai-bot openclaw channels login --channel zalouser --verbose`);
6613
+ setOutput('out-zalo-onboard-cmd', `docker compose stop ai-bot
6614
+ docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose
6615
+ docker compose up -d --force-recreate ai-bot
6616
+ docker compose exec ai-bot openclaw channels status --probe`);
6624
6617
 
6625
6618
  if (lang === 'vi') {
6626
6619
  setOutput('out-zalo-onboard-guide', `┌─────────────────────────────────────────────────────┐
6627
6620
  │ Chạy lệnh bên trái để OpenClaw tạo QR đăng nhập. │
6628
6621
  ├─────────────────────────────────────────────────────┤
6629
6622
  │ 1. Đảm bảo container/gateway đã chạy xong. │
6630
- │ 2. Chạy lệnh login để tạo QR cho zalouser.
6623
+ │ 2. Stop ai-bot, login bằng compose run one-shot.
6631
6624
  │ 3. OpenClaw sẽ in ra đường dẫn file QR trong /tmp. │
6632
6625
  │ 4. Copy file QR ra ngoài nếu cần: │
6633
- │ docker compose cp ai-bot:/tmp/openclaw/
6626
+ │ docker cp openclaw-bot:/tmp/openclaw/
6634
6627
  │ openclaw-zalouser-qr-default.png . │
6635
6628
  │ 5. Mở ảnh QR → quét bằng app Zalo → xác nhận. │
6636
- │ 6. Sau khi login xong, restart bot nếu cần.
6629
+ │ 6. Start lại: docker compose up -d --force-recreate
6630
+ │ 7. Chạy channels status --probe, phải thấy running.│
6637
6631
  └─────────────────────────────────────────────────────┘`);
6638
6632
  } else {
6639
6633
  setOutput('out-zalo-onboard-guide', `┌─────────────────────────────────────────────────────┐
6640
6634
  │ Run the command on the left to generate a Zalo QR. │
6641
6635
  ├─────────────────────────────────────────────────────┤
6642
6636
  │ 1. Make sure the container/gateway is already up. │
6643
- │ 2. Run the login command for zalouser.
6637
+ │ 2. Stop ai-bot; login with compose run one-shot.
6644
6638
  │ 3. OpenClaw prints the QR image path under /tmp. │
6645
6639
  │ 4. Copy the QR out if needed: │
6646
- │ docker compose cp ai-bot:/tmp/openclaw/
6640
+ │ docker cp openclaw-bot:/tmp/openclaw/
6647
6641
  │ openclaw-zalouser-qr-default.png . │
6648
6642
  │ 5. Open the image → scan with Zalo mobile app. │
6649
- │ 6. Restart the bot afterwards if needed.
6643
+ │ 6. Start again: docker compose up -d --force-re...
6644
+ │ 7. Run channels status --probe; it should run. │
6650
6645
  └─────────────────────────────────────────────────────┘`);
6651
6646
  }
6652
6647
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "5.7.7",
3
+ "version": "5.7.9",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {