create-openclaw-bot 5.7.8 → 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 +7 -9
- package/README.vi.md +7 -9
- package/dist/cli.js +42 -29
- package/dist/setup/data/channels.js +1 -1
- package/dist/setup/shared/bot-config-gen.js +1 -1
- package/dist/setup/shared/common-gen.js +1 -1
- package/dist/setup/shared/docker-gen.js +2 -2
- package/dist/setup/shared/workspace-gen.js +2 -2
- package/dist/setup.js +60 -35
- package/package.json +1 -1
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.
|
|
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.
|
|
27
|
+
## 🆕 What's new in v5.7.9
|
|
28
28
|
|
|
29
|
-
-
|
|
30
|
-
- 🔧 **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.
|
|
31
|
-
- 📝 **Standardized Release Workflow** — Added `.agent/workflows/update.md` as the canonical release checklist for this repo.
|
|
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.
|
|
32
|
+
<summary><b>Previous: What's new in v5.7.8</b></summary>
|
|
35
33
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
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.
|
|
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.
|
|
27
|
+
## 🆕 Có gì mới trong v5.7.9
|
|
28
28
|
|
|
29
|
-
-
|
|
30
|
-
- 🔧 **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 và lỗi khởi động.
|
|
31
|
-
- 📝 **Chuẩn Hóa Workflow Release** — Thêm `.agent/workflows/update.md` làm checklist release chuẩn cho repo này.
|
|
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 và test để đồng bộ với package mới.
|
|
32
30
|
|
|
33
31
|
<details>
|
|
34
|
-
<summary><b>Trước đó: Có gì mới ở v5.7.
|
|
32
|
+
<summary><b>Trước đó: Có gì mới ở v5.7.8</b></summary>
|
|
35
33
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
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 và 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
|
|
621
|
-
const
|
|
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. ${
|
|
638
|
-
: ` 2. ${
|
|
639
|
-
console.log(chalk.white(isVi
|
|
640
|
-
? ` 3.
|
|
641
|
-
: ` 3.
|
|
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
|
-
? '
|
|
650
|
-
: '
|
|
651
|
-
console.log(chalk.white(isVi
|
|
652
|
-
? '
|
|
653
|
-
: '
|
|
654
|
-
console.log(chalk.white(isVi
|
|
655
|
-
?
|
|
656
|
-
:
|
|
657
|
-
|
|
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,9 +2181,9 @@ 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
|
-
: '';
|
|
2184
|
+
const relayInstallCmd = (isMultiBot && channelKey === 'telegram')
|
|
2185
|
+
? buildRelayPluginInstallCommand('openclaw')
|
|
2186
|
+
: '';
|
|
2174
2187
|
const deviceApproveLoop = 'while true; do sleep 5; openclaw devices approve --latest 2>/dev/null || true; done >/dev/null 2>&1 &';
|
|
2175
2188
|
|
|
2176
2189
|
// buildDockerArtifacts joins runtimeCommandParts with spaces, then appends 'openclaw gateway run'
|
|
@@ -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,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
(function (root) {
|
|
3
|
-
const OPENCLAW_NPM_SPEC = 'openclaw@2026.4
|
|
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: '
|
|
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
|
|
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,
|
|
@@ -2734,7 +2734,7 @@ if(touched){console.log('[patch-9router] Applied Codex compatibility patch.');}e
|
|
|
2734
2734
|
const runtimeScriptB64 = encodeBase64Utf8(runtimeScript);
|
|
2735
2735
|
const dockerfile = `FROM node:22-slim
|
|
2736
2736
|
|
|
2737
|
-
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/*
|
|
2738
2738
|
${browserInstallLines}
|
|
2739
2739
|
ARG OPENCLAW_VER="${openClawNpmSpec}"
|
|
2740
2740
|
ARG CACHE_BUST=""
|
|
@@ -3804,21 +3804,31 @@ New-Item -ItemType Directory -Force -Path "$projectDir" | Out-Null
|
|
|
3804
3804
|
ps += `Write-Host "" -ForegroundColor White\n`;
|
|
3805
3805
|
ps += `Write-Host "${isVi ? 'Huong dan dang nhap Zalo:' : 'Zalo login instructions:'}" -ForegroundColor White\n`;
|
|
3806
3806
|
ps += `Write-Host " ${isVi ? '1. cd docker\\\\openclaw' : '1. cd docker\\\\openclaw'}" -ForegroundColor White\n`;
|
|
3807
|
-
ps += `Write-Host " ${isVi ?
|
|
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`;
|
|
3808
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`;
|
|
3809
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`;
|
|
3810
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`;
|
|
3811
3812
|
ps += `Write-Host " ${isVi ? '5. Doi thay chu Login successful trong terminal' : '5. Wait for Login successful in terminal'}" -ForegroundColor White\n`;
|
|
3812
|
-
ps += `Write-Host " ${isVi ? '6.
|
|
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`;
|
|
3813
3815
|
ps += `Write-Host "" -ForegroundColor White\n`;
|
|
3814
|
-
ps += `Write-Host "${isVi ? 'Dung
|
|
3815
|
-
ps += `& docker
|
|
3816
|
-
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`;
|
|
3817
3818
|
ps += `Write-Host "${isVi ? 'Dang chay lenh login...' : 'Running login command...'}" -ForegroundColor Yellow\n`;
|
|
3818
|
-
ps += `& docker
|
|
3819
|
+
ps += `& docker compose run --rm --no-deps ai-bot openclaw channels login --channel zalouser --verbose\n`;
|
|
3819
3820
|
ps += `Write-Host "" -ForegroundColor White\n`;
|
|
3820
|
-
ps += `Write-Host "${isVi ? '
|
|
3821
|
-
ps += `& docker compose
|
|
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`;
|
|
3822
3832
|
}
|
|
3823
3833
|
|
|
3824
3834
|
ps += `} catch { Write-Host $_.Exception.Message -ForegroundColor Red }\nRead-Host "${isVi ? 'Nhan Enter de thoat' : 'Press Enter to exit'}"\n`;
|
|
@@ -3863,9 +3873,10 @@ echo ""
|
|
|
3863
3873
|
const containerName = 'openclaw-bot';
|
|
3864
3874
|
const qrPath = '/tmp/openclaw/openclaw-zalouser-qr-default.png';
|
|
3865
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`;
|
|
3866
|
-
script += `echo "${isVi ? 'Huong dan dang nhap Zalo:' : 'Zalo login instructions:'}"\necho " ${isVi ? '1. cd docker/openclaw' : '1. cd docker/openclaw'}"\necho " 2. docker
|
|
3867
|
-
script += `docker
|
|
3868
|
-
script += `
|
|
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`;
|
|
3869
3880
|
}
|
|
3870
3881
|
|
|
3871
3882
|
return script;
|
|
@@ -4125,20 +4136,29 @@ function generateMacOsSh(ctx) {
|
|
|
4125
4136
|
sh.push('echo "=== DANG NHAP ZALO ==="');
|
|
4126
4137
|
sh.push('echo "Doi container khoi dong 10 giay..."');
|
|
4127
4138
|
sh.push('sleep 10');
|
|
4128
|
-
sh.push('echo "Dung
|
|
4129
|
-
sh.push(
|
|
4130
|
-
sh.push('sleep 3');
|
|
4139
|
+
sh.push('echo "Dung app container de login one-shot..."');
|
|
4140
|
+
sh.push('$COMPOSE stop ai-bot');
|
|
4131
4141
|
sh.push('echo "Huong dan dang nhap Zalo:"');
|
|
4132
4142
|
sh.push(`echo " 1. cd docker/openclaw"`);
|
|
4133
|
-
sh.push(`echo " 2. docker
|
|
4134
|
-
sh.push(`echo " 3.
|
|
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}"`);
|
|
4135
4146
|
sh.push(`echo " Hoac chay: docker cp ${containerName}:${qrPath} ./zalo-qr.png"`);
|
|
4136
|
-
sh.push('echo "
|
|
4137
|
-
sh.push('echo "
|
|
4138
|
-
sh.push('echo "
|
|
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"');
|
|
4139
4150
|
sh.push('echo ""');
|
|
4140
|
-
sh.push(
|
|
4141
|
-
sh.push(
|
|
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');
|
|
4142
4162
|
}
|
|
4143
4163
|
sh.push('echo "\u2705 Bot dang chay via Docker. Xem log: docker logs -f openclaw-bot"');
|
|
4144
4164
|
scriptContent = sh.filter(Boolean).join('\n');
|
|
@@ -5930,7 +5950,7 @@ model:
|
|
|
5930
5950
|
runtimeCommandParts: [
|
|
5931
5951
|
pluginInstallCmd,
|
|
5932
5952
|
'while true; do sleep 5; openclaw devices approve --latest 2>/dev/null || true; done >/dev/null 2>&1 &'
|
|
5933
|
-
],
|
|
5953
|
+
].filter(Boolean),
|
|
5934
5954
|
plainSingleExtraHosts: true,
|
|
5935
5955
|
multiOllamaNumParallel: 1,
|
|
5936
5956
|
singleOllamaNumParallel: 1,
|
|
@@ -6590,33 +6610,38 @@ fi
|
|
|
6590
6610
|
// ========== Zalo Personal Login Guide (post-setup) ==========
|
|
6591
6611
|
function generateZaloOnboardGuide() {
|
|
6592
6612
|
const lang = document.getElementById('cfg-language')?.value || 'vi';
|
|
6593
|
-
setOutput('out-zalo-onboard-cmd', `docker compose
|
|
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`);
|
|
6594
6617
|
|
|
6595
6618
|
if (lang === 'vi') {
|
|
6596
6619
|
setOutput('out-zalo-onboard-guide', `┌─────────────────────────────────────────────────────┐
|
|
6597
6620
|
│ Chạy lệnh bên trái để OpenClaw tạo QR đăng nhập. │
|
|
6598
6621
|
├─────────────────────────────────────────────────────┤
|
|
6599
6622
|
│ 1. Đảm bảo container/gateway đã chạy xong. │
|
|
6600
|
-
│ 2.
|
|
6623
|
+
│ 2. Stop ai-bot, login bằng compose run one-shot. │
|
|
6601
6624
|
│ 3. OpenClaw sẽ in ra đường dẫn file QR trong /tmp. │
|
|
6602
6625
|
│ 4. Copy file QR ra ngoài nếu cần: │
|
|
6603
|
-
│ docker
|
|
6626
|
+
│ docker cp openclaw-bot:/tmp/openclaw/ │
|
|
6604
6627
|
│ openclaw-zalouser-qr-default.png . │
|
|
6605
6628
|
│ 5. Mở ảnh QR → quét bằng app Zalo → xác nhận. │
|
|
6606
|
-
│ 6.
|
|
6629
|
+
│ 6. Start lại: docker compose up -d --force-recreate│
|
|
6630
|
+
│ 7. Chạy channels status --probe, phải thấy running.│
|
|
6607
6631
|
└─────────────────────────────────────────────────────┘`);
|
|
6608
6632
|
} else {
|
|
6609
6633
|
setOutput('out-zalo-onboard-guide', `┌─────────────────────────────────────────────────────┐
|
|
6610
6634
|
│ Run the command on the left to generate a Zalo QR. │
|
|
6611
6635
|
├─────────────────────────────────────────────────────┤
|
|
6612
6636
|
│ 1. Make sure the container/gateway is already up. │
|
|
6613
|
-
│ 2.
|
|
6637
|
+
│ 2. Stop ai-bot; login with compose run one-shot. │
|
|
6614
6638
|
│ 3. OpenClaw prints the QR image path under /tmp. │
|
|
6615
6639
|
│ 4. Copy the QR out if needed: │
|
|
6616
|
-
│ docker
|
|
6640
|
+
│ docker cp openclaw-bot:/tmp/openclaw/ │
|
|
6617
6641
|
│ openclaw-zalouser-qr-default.png . │
|
|
6618
6642
|
│ 5. Open the image → scan with Zalo mobile app. │
|
|
6619
|
-
│ 6.
|
|
6643
|
+
│ 6. Start again: docker compose up -d --force-re... │
|
|
6644
|
+
│ 7. Run channels status --probe; it should run. │
|
|
6620
6645
|
└─────────────────────────────────────────────────────┘`);
|
|
6621
6646
|
}
|
|
6622
6647
|
}
|