create-openclaw-bot 5.1.14 → 5.2.0

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.vi.md CHANGED
@@ -1,402 +1,428 @@
1
- # Changelog (Tiếng Việt)
2
-
3
-
4
- ## [5.1.14] — 2026-04-08
5
-
6
- ### Sửa lỗi ổn định OpenClaw Docker
7
-
8
- - Pin lại OpenClaw về `openclaw@2026.4.5` vì bản cập nhật ngày `08/04/2026` đang lỗi.
9
- - Sửa Dockerfile cho các case Docker trên Windows để tránh lỗi startup do escape command sai và lỗi `allowedOrigins`.
10
- - Thêm ghi chú khuyên dùng `Node.js 20` đến `24`, tạm tránh `Node.js 25` để ổn định hơn với OpenClaw.
1
+ # Changelog (Tiếng Việt)
2
+
3
+
4
+ ## [5.2.0] — 2026-04-09
5
+
6
+ ### Upgrade 1 Lệnh (Không Cần Chạy Lại Wizard)
11
7
 
12
- ## [5.1.13] 2026-04-08
8
+ - Thêm subcommand `upgrade` vào CLI: `npx create-openclaw-bot@latest upgrade`. Tự nhận diện Docker hay Native/PM2 và cập nhật OpenClaw mà không cần chạy lại wizard.
9
+ - Thêm `upgrade.ps1` cho Windows — nhấp đúp trong thư mục bot là tự động upgrade. Không cần biết terminal.
10
+ - Thêm `upgrade.sh` cho Linux / macOS / Ubuntu — `bash upgrade.sh` hoặc pipe trực tiếp qua `curl`/`wget` từ GitHub.
11
+ - Toàn bộ dữ liệu người dùng giữ nguyên: `.env`, `.openclaw/memory/`, sessions, credentials, OAuth token 9Router không bao giờ bị xoá.
12
+ - Docker mode: vá `Dockerfile` (cập nhật `OPENCLAW_NPM_SPEC` + `CACHEBUST`) → `docker compose build --no-cache` + `docker compose up -d`.
13
+ - Native/PM2 mode: cài lại `openclaw` + `9router` global → `pm2 restart all`.
14
+
15
+
16
+ ## [5.1.15] — 2026-04-08
17
+
18
+ ### Dong Bo Native Setup & Sua Loi Wizard Windows
19
+
20
+ - Sua wizard HTML tren Windows native de file `.bat` tai ve luon duoc regenerate theo state moi nhat truoc khi download.
21
+ - Sua toan bo runtime path tren Windows native theo project dir nguoi dung nhap: `.env`, `.openclaw` va `.9router` khong con roi ve home/AppData.
22
+ - Them `OPENCLAW_STATE_DIR` vao native runtime env de OpenClaw doc dung config duoc sinh trong thu muc project.
23
+ - Chong format config legacy `gateway.bind: "0.0.0.0"` va chuyen sang `bind: "custom"` + `customBindHost: "0.0.0.0"`.
24
+ - Sua luong single-bot tren Windows native de provider, model, API key va Telegram bot token tu wizard duoc sync dung vao `.env` va `openclaw.json`.
25
+ - Sua native Windows 9Router path resolution va doi helper sync `smart-route` sang lay active providers tu API song cua `9Router`, khop voi logic Docker.
26
+ - Bu native parity cho skill/runtime tren Windows: skill duoc cai tu dong, browser automation tu cai runtime can thiet, va `skills.entries` dung dung `slug`.
27
+ - Cap nhat native script cho macOS, Linux Desktop va Ubuntu/VPS de chay tu `PROJECT_DIR` duoc chon va export `OPENCLAW_HOME`, `OPENCLAW_STATE_DIR`, `DATA_DIR` theo project-local.
28
+ - Mo rong smoke test cho runtime path native, 9Router sync, provider/token sync, browser install va luong startup project-local tren Unix.
29
+
30
+ ## [5.1.14] — 2026-04-08
31
+
32
+ ### Sửa lỗi ổn định OpenClaw và Docker
33
+
34
+ - Pin lại OpenClaw về `openclaw@2026.4.5` vì bản cập nhật ngày `08/04/2026` đang lỗi.
35
+ - Sửa Dockerfile cho các case Docker trên Windows để tránh lỗi startup do escape command sai và lỗi `allowedOrigins`.
36
+ - Thêm ghi chú khuyên dùng `Node.js 20` đến `24`, tạm tránh `Node.js 25` để ổn định hơn với OpenClaw.
37
+
38
+ ## [5.1.13] — 2026-04-08
13
39
 
14
- ### 🐛 Sửa lỗi cài macOS & ổn định Wizard
40
+ ### 🐛 Sửa lỗi cài macOS & ổn định Wizard
15
41
 
16
- - **Sửa lỗi `mkdir: : No such file or directory` trên macOS**: `generateSetupScript` dùng `\${dir}` / `\${path}` (escaped) tạo ra biến bash rỗng giờ dùng JS interpolation đú́ng nên đường dẫn thực tế được ghi vào script.
17
- - **Sửa script Docker macOS**: Thêm kiểm tra Docker daemon `docker info` trước khi chạy `docker compose up`; chế độ Docker giờ gọi đú́ng `docker compose up` thay `openclaw gateway run`.
18
- - **Sửa npm prefix macOS Native**: Bỏ `npm config set prefix` gây xung đột với Homebrew Node.js. Giờ dùng `export npm_config_prefix` (env var cho session hiện tại) fallback `sudo npm install -g`.
19
- - **Sửa `window.__saveBotTabPersona is not a function`**: Thêm hàm `__saveBotTabPersona` bị thiếu HTML gọi nhưng JS chưa định nghĩa.
20
- - **Sửa nút Tiếp theo Step 3 chế độ 1 bot**: `bindFormEvents` giờ sync `cfg-name` vào `state.config.botName` `state.bots[0].name` ngay khi gõ, rồi gọi `updateNavButtons()` nút Tiếp phản hồi ngay không cần chuyển bước.
21
- - **Sửa persona riêng từng bot**: `saveBotTabMeta` `syncBotTabMeta` giờ save/restore field `cfg-bot-tab-persona` cho từng bot. Chuyển tab hiển thị đú́ng nội dung persona tương ứng; giá trị lưu vào `state.bots[i].persona` được dùng chính xác khi tạo file `.md`.
22
- - **Sửa cli.js npm macOS**: `ensureUserWritableGlobalNpm` bỏ `npm config set prefix` trên darwin; `installGlobalPackage` thêm `sudo npm install -g` làm fallback.
42
+ - **Sửa lỗi `mkdir: : No such file or directory` trên macOS**: `generateSetupScript` dùng `\${dir}` / `\${path}` (escaped) tạo ra biến bash rỗng — giờ dùng JS interpolation đú́ng nên đường dẫn thực tế được ghi vào script.
43
+ - **Sửa script Docker macOS**: Thêm kiểm tra Docker daemon `docker info` trước khi chạy `docker compose up`; chế độ Docker giờ gọi đú́ng `docker compose up` thay vì `openclaw gateway run`.
44
+ - **Sửa npm prefix macOS Native**: Bỏ `npm config set prefix` gây xung đột với Homebrew Node.js. Giờ dùng `export npm_config_prefix` (env var cho session hiện tại) và fallback `sudo npm install -g`.
45
+ - **Sửa `window.__saveBotTabPersona is not a function`**: Thêm hàm `__saveBotTabPersona` bị thiếu — HTML gọi nhưng JS chưa định nghĩa.
46
+ - **Sửa nút Tiếp theo Step 3 chế độ 1 bot**: `bindFormEvents` giờ sync `cfg-name` vào `state.config.botName` và `state.bots[0].name` ngay khi gõ, rồi gọi `updateNavButtons()` — nút Tiếp phản hồi ngay không cần chuyển bước.
47
+ - **Sửa persona riêng từng bot**: `saveBotTabMeta` và `syncBotTabMeta` giờ save/restore field `cfg-bot-tab-persona` cho từng bot. Chuyển tab hiển thị đú́ng nội dung persona tương ứng; giá trị lưu vào `state.bots[i].persona` và được dùng chính xác khi tạo file `.md`.
48
+ - **Sửa cli.js npm macOS**: `ensureUserWritableGlobalNpm` bỏ `npm config set prefix` trên darwin; `installGlobalPackage` thêm `sudo npm install -g` làm fallback.
23
49
 
24
- ## [5.1.12] 2026-04-07
50
+ ## [5.1.12] — 2026-04-07
25
51
 
26
- ### 🧠 Thêm Skills & Tự động chọn Plugin Relay
52
+ ### 🧠 Thêm Skills & Tự động chọn Plugin Relay
27
53
 
28
- - **Grid Skills 3 cột**: Layout mới 3 card/hàng thay 4, card rộng rãi hơn, dễ đọc hơn.
29
- - **7 Skills mới từ ClawHub**: Bổ sung đầy đủ `Web Search`, `GitHub`, `Notion`, `Slack` phủ khắp các tác vụ năng suất phổ biến nhất trên OpenClaw dashboard.
30
- - **Plugin Telegram Multi-Bot Relay tự động**: Khi chọn nhiều bot Telegram (botCount 2), plugin `telegram-multibot-relay` được tự động tick chọn ghi vào `openclaw.json plugins.entries`. Khi quay về 1 bot, plugin bị bỏ chọn.
31
- - **Plugin selections openclaw.json**: Tất cả plugin được user chọn (Voice Call, Matrix, MS Teams, Nostr...) đều được inject vào `plugins.entries` để Dashboard OpenClaw nhận trạng thái `enabled` đúng. Không chọn = không bật.
32
- - **Fix Step 3 "Tiếp theo" bị disabled**: Bỏ yêu cầu bắt buộc `cfg-user-info` (optional), sửa multi-bot check dùng `cfg-bot-tab-name`.
33
- - **Fix Step 4 multi-bot token**: Validate `key-bot-token-0` thay `key-bot-token` khi multi-bot Telegram.
34
- - **Fix AGENTS.md native multi-bot thiếu quy tắc bảo mật**: Inject `securityRules` vào cuối AGENTS.md của từng bot trong native multi-bot deployment.
54
+ - **Grid Skills 3 cột**: Layout mới 3 card/hàng thay vì 4, card rộng rãi hơn, dễ đọc hơn.
55
+ - **7 Skills mới từ ClawHub**: Bổ sung đầy đủ `Web Search`, `GitHub`, `Notion`, `Slack` — phủ khắp các tác vụ năng suất phổ biến nhất trên OpenClaw dashboard.
56
+ - **Plugin Telegram Multi-Bot Relay tự động**: Khi chọn nhiều bot Telegram (botCount ≥ 2), plugin `telegram-multibot-relay` được tự động tick chọn và ghi vào `openclaw.json → plugins.entries`. Khi quay về 1 bot, plugin bị bỏ chọn.
57
+ - **Plugin selections → openclaw.json**: Tất cả plugin được user chọn (Voice Call, Matrix, MS Teams, Nostr...) đều được inject vào `plugins.entries` để Dashboard OpenClaw nhận trạng thái `enabled` đúng. Không chọn = không bật.
58
+ - **Fix Step 3 "Tiếp theo" bị disabled**: Bỏ yêu cầu bắt buộc `cfg-user-info` (optional), sửa multi-bot check dùng `cfg-bot-tab-name`.
59
+ - **Fix Step 4 multi-bot token**: Validate `key-bot-token-0` thay vì `key-bot-token` khi multi-bot Telegram.
60
+ - **Fix AGENTS.md native multi-bot thiếu quy tắc bảo mật**: Inject `securityRules` vào cuối AGENTS.md của từng bot trong native multi-bot deployment.
35
61
 
36
- ### 🌟 Đổi Chính Sách Bảo Mật Zalo Personal
62
+ ### 🌟 Đổi Chính Sách Bảo Mật Zalo Personal
37
63
 
38
- - **Thả Ga Inbox Zalo Cầm Tay**: Lược bỏ rào cản duyệt bảo mật của Zalo Personal. Thông số `dmPolicy` trên cài đặt Zalo nhân đã được chuyển mặc định từ `pairing` sang `open`. Bây giờ bất cứ ai trên mạng lưới Zalo nhắn tin vào tài khoản của Bot đều sẽ được AI tự động tiếp đón ngay lập tức thay bị chặn lại chờ bạn duyệt lệnh kết nối E2E!
64
+ - **Thả Ga Inbox Zalo Cầm Tay**: Lược bỏ rào cản duyệt bảo mật của Zalo Personal. Thông số `dmPolicy` trên cài đặt Zalo cá nhân đã được chuyển mặc định từ `pairing` sang `open`. Bây giờ bất cứ ai trên mạng lưới Zalo nhắn tin vào tài khoản của Bot đều sẽ được AI tự động tiếp đón ngay lập tức thay vì bị chặn lại chờ bạn duyệt lệnh kết nối E2E!
39
65
 
40
- ## [5.1.10] 2026-04-07
66
+ ## [5.1.10] — 2026-04-07
41
67
 
42
- ### 🌟 Tự động Auto-Approve Thiết Bị cho Native VPS
68
+ ### 🌟 Tự động Auto-Approve Thiết Bị cho Native VPS
43
69
 
44
- - **Bỏ Nhập Lệnh Thủ Công Trải Nghiệm PM2**: Cảnh báo `pairing required` (chờ duyệt thiết bị ghép nối E2E) trên giao diện Web buộc người dùng phải lệnh đồng ý dưới Terminal. luồng Docker, tính năng này đã được hiệu hóa bằng một đoạn script chạy ngầm tự gật đầu. Nhưng Native thì chưa! Phiên bản này chính thức nhúng thêm 1 tiến trình PM2 `auto-approve` siêu nhẹ chạy kẹp với các lệnh chính, giúp tự động gật đầu phê duyệt kết nối web mỗi 5 giây. Đảm bảo trải nghiệm "Click là vào" trên Native VPS mượt y hệt Docker!
70
+ - **Bỏ Nhập Lệnh Thủ Công Trải Nghiệm PM2**: Cảnh báo `pairing required` (chờ duyệt thiết bị ghép nối E2E) trên giao diện Web buộc người dùng phải gõ lệnh đồng ý dưới Terminal. Ở luồng Docker, tính năng này đã được vô hiệu hóa bằng một đoạn script chạy ngầm tự gật đầu. Nhưng ở Native thì chưa! Phiên bản này chính thức nhúng thêm 1 tiến trình PM2 `auto-approve` siêu nhẹ chạy kẹp với các lệnh chính, giúp tự động gật đầu phê duyệt kết nối web mỗi 5 giây. Đảm bảo trải nghiệm "Click là vào" trên Native VPS mượt mà y hệt Docker!
45
71
 
46
- ## [5.1.9] 2026-04-07
72
+ ## [5.1.9] — 2026-04-07
47
73
 
48
- ### 🌟 Trả lại Schema Chuẩn & Cải thiện UX WebCrypto
74
+ ### 🌟 Trả lại Schema Chuẩn & Cải thiện UX WebCrypto
49
75
 
50
- - **Sửa lỗi sập Gateway do sai lầm Config**: OpenClaw bản mới nhất dùng Zod để khóa chặt Schema cấu hình. Cờ `requireDeviceIdentity` chêm vào bản 5.1.8 đã bị Backend từ chối thẳng thừng (`Unrecognized key`), dẫn đến server không thể khởi động vòng lặp. Bản 5.1.9 đã gỡ sạch cờ này, trả lại môi trường sạch để PM2 hoạt động 100%.
51
- - **Trợ SSH Tunnel Tự Động**: lại sự khắt khe của WebCrypto khi dùng VPS/IP ngoài, Console giờ đây sẽ tự động in sẵn thần chú lệnh bẻ khóa `ssh -L ...` y hệt IP Username thật của bạn. Bạn chỉ cần copy-paste để thông luồng một cách ngầu lòi, bảo mật tuyệt đối không cần mua Tên miền HTTPS.
76
+ - **Sửa lỗi sập Gateway do sai lầm Config**: OpenClaw bản mới nhất dùng Zod để khóa chặt Schema cấu hình. Cờ `requireDeviceIdentity` chêm vào bản 5.1.8 đã bị Backend từ chối thẳng thừng (`Unrecognized key`), dẫn đến server không thể khởi động vòng lặp. Bản 5.1.9 đã gỡ sạch cờ này, trả lại môi trường sạch để PM2 hoạt động 100%.
77
+ - **Trợ lý SSH Tunnel Tự Động**: Bù lại sự khắt khe của WebCrypto khi dùng VPS/IP ngoài, Console giờ đây sẽ tự động in sẵn thần chú lệnh bẻ khóa `ssh -L ...` y hệt IP và Username thật của bạn. Bạn chỉ cần copy-paste để thông luồng một cách ngầu lòi, bảo mật tuyệt đối mà không cần mua Tên miền HTTPS.
52
78
 
53
- ## [5.1.8] 2026-04-07
79
+ ## [5.1.8] — 2026-04-07
54
80
 
55
- ### 🌟 Sửa lỗi Đăng nhập Token (1008) & Cải tiến IP hiển thị trên VPS
81
+ ### 🌟 Sửa lỗi Đăng nhập Token (1008) & Cải tiến IP hiển thị trên VPS
56
82
 
57
- - **Tắt `requireDeviceIdentity` để vượt tường WebCrypto**: Do chế bảo mật mới của Control UI bắt buộc trình duyệt phải dùng môi trường HTTPS (hoặc localhost) thì mới cấp quyền khởi tạo key hóa thiết bị E2E. Nếu dùng IP thường (HTTP) thì Dashboard sẽ báo lỗi đỏ `code=1008`. Bản setup mới nhất đã tự động chích cờ `requireDeviceIdentity: false` để tắt chế ép buộc này đi, giúp bạn vào thẳng Dashboard bằng IP của VPS.
58
- - **Hiển thị Link Public Terminal**: Cấu trúc báo cáo của PM2 đã được viết lại để tự động tìm sinh ra các đường dẫn kèm IPv4 Public (thay chỉ in mỗi `localhost`). Giờ đây bạn chỉ việc soi console và bấm/copy thẳng link vào trình duyệt không cần phải tự chế nữa.
83
+ - **Tắt `requireDeviceIdentity` để vượt tường WebCrypto**: Do cơ chế bảo mật mới của Control UI bắt buộc trình duyệt phải dùng môi trường HTTPS (hoặc localhost) thì mới cấp quyền khởi tạo key mã hóa thiết bị E2E. Nếu dùng IP thường (HTTP) thì Dashboard sẽ báo lỗi đỏ `code=1008`. Bản setup mới nhất đã tự động chích cờ `requireDeviceIdentity: false` để tắt cơ chế ép buộc này đi, giúp bạn vào thẳng Dashboard bằng IP của VPS.
84
+ - **Hiển thị Link Public ở Terminal**: Cấu trúc báo cáo của PM2 đã được viết lại để tự động tìm và sinh ra các đường dẫn kèm IPv4 Public (thay vì chỉ in mỗi `localhost`). Giờ đây bạn chỉ việc soi console và bấm/copy thẳng link vào trình duyệt mà không cần phải tự chế nữa.
59
85
 
60
- ## [5.1.7] 2026-04-07
86
+ ## [5.1.7] — 2026-04-07
61
87
 
62
- ### 🌟 Sửa lỗi CORS Control UI & Đường dẫn 9Router Native
88
+ ### 🌟 Sửa lỗi CORS Control UI & Đường dẫn 9Router Native
63
89
 
64
- - **Sửa lỗi dội ngược CORS khi vào Control UI**: OpenClaw v2026.3.x siết chặt policy CORS khiến việc truy cập dashboard từ IP ngoài bị block. Các script tạo config Docker giờ đã tự động quét toàn bộ IPv4 hiện của server (`os.networkInterfaces()`) để nhúng vào mảng `gateway.controlUi.allowedOrigins`. Đảm bảo người dùng VPS vào được thẳng Control UI không bị lỗi mạng.
65
- - **Tối ưu đường dẫn PM2 Native**: Để tránh trường hợp tính năng PM2 không nhận diện đúng môi trường (lỗi `\$PATH` khi dùng `nvm`), bộ cài giờ bỏ qua file thực thi `9router` của HĐH. Thay vào đó, bộ cài tự tính toán đường dẫn tuyệt đối `\$(npm root -g)/9router/app/server.js` truyền thẳng vào trình thông dịch Node, đảm bảo PM2 100% tìm thấy file khởi chạy 9Router.
90
+ - **Sửa lỗi dội ngược CORS khi vào Control UI**: OpenClaw v2026.3.x siết chặt policy CORS khiến việc truy cập dashboard từ IP ngoài bị block. Các script tạo config và vá Docker giờ đã tự động quét toàn bộ IPv4 hiện có của server (`os.networkInterfaces()`) để nhúng vào mảng `gateway.controlUi.allowedOrigins`. Đảm bảo người dùng VPS vào được thẳng Control UI mà không bị lỗi mạng.
91
+ - **Tối ưu đường dẫn PM2 Native**: Để tránh trường hợp tính năng PM2 không nhận diện đúng môi trường (lỗi `\$PATH` khi dùng `nvm`), bộ cài giờ bỏ qua file thực thi `9router` của HĐH. Thay vào đó, bộ cài tự tính toán đường dẫn tuyệt đối `\$(npm root -g)/9router/app/server.js` và truyền thẳng vào trình thông dịch Node, đảm bảo PM2 100% tìm thấy file khởi chạy 9Router.
66
92
 
67
- ## [5.1.6] 2026-04-07
93
+ ## [5.1.6] — 2026-04-07
68
94
 
69
- ### 🐞 Khắc phục lỗi PM2 ngắt cài đặt (SIGKILL) trên VPS
95
+ ### 🐞 Khắc phục lỗi PM2 ngắt cài đặt (SIGKILL) trên VPS
70
96
 
71
- - **Sửa lỗi `PM2 SIGKILL`**: Loại bỏ cờ `-t` (chế độ giao diện terminal) khỏi tất cả các lệnh gọi `9router` chạy ngầm. Trên các VPS không giao diện (headless), cờ này thể khiến PM2 bị treo ném ra lỗi SIGKILL làm chết toàn bộ quá trình cài đặt.
72
- - **Tối ưu Sync Helper chạy ngầm**: Bổ sung chế dự phòng 2 lớp cho script tự động đồng bộ (sync helper). Nếu PM2 bị giới hạn RAM hoặc quá tải gây lỗi SIGKILL, script sẽ không văng lỗi sập Setup nữa tự động fallback xuống chạy ẩn bằng `nohup node ... &`. Trong trường hợp xấu nhất, bộ cài chỉ báo cảnh báo vàng rẽ nhánh cho phép tiến trình Setup tiếp tục tới bước cuối cùng thành công.
97
+ - **Sửa lỗi `PM2 SIGKILL`**: Loại bỏ cờ `-t` (chế độ giao diện terminal) khỏi tất cả các lệnh gọi `9router` chạy ngầm. Trên các VPS không giao diện (headless), cờ này có thể khiến PM2 bị treo và ném ra lỗi SIGKILL làm chết toàn bộ quá trình cài đặt.
98
+ - **Tối ưu Sync Helper chạy ngầm**: Bổ sung cơ chế dự phòng 2 lớp cho script tự động đồng bộ (sync helper). Nếu PM2 bị giới hạn RAM hoặc quá tải gây lỗi SIGKILL, script sẽ không văng lỗi sập Setup nữa mà tự động fallback xuống chạy ẩn bằng `nohup node ... &`. Trong trường hợp xấu nhất, bộ cài chỉ báo cảnh báo vàng và rẽ nhánh cho phép tiến trình Setup tiếp tục tới bước cuối cùng thành công.
73
99
 
74
- ## [5.1.5] 2026-04-06
100
+ ## [5.1.5] — 2026-04-06
75
101
 
76
- ### 🐞 Sửa lỗi PM2 khởi động 9Router trên Native
102
+ ### 🐞 Sửa lỗi PM2 khởi động 9Router trên Native
77
103
 
78
- - **Fix**: Chuyển từ việc chạy chuỗi bash (`execSync`) sang truyền mảng tham số ràng (`execFileSync`) khi khởi động 9Router script đồng bộ (sync) qua PM2. Đảm bảo PM2 luôn chạy được ứng dụng ổn định trên cả Linux (VPS) Windows không bị vướng lỗi phân tích pháp dấu ngoặc kép hay khoảng trắng trong đường dẫn.
79
- - **Tối ưu**: PM2 giờ đây sẽ phân tách rạch ròi bằng cách gọi file thực thi `9router` với tham số `--interpreter none`, luôn chạy sync script bằng đúng phiên bản NodeJS nội tại thông qua `--interpreter process.execPath`.
104
+ - **Fix**: Chuyển từ việc chạy chuỗi bash (`execSync`) sang truyền mảng tham số rõ ràng (`execFileSync`) khi khởi động 9Router và script đồng bộ (sync) qua PM2. Đảm bảo PM2 luôn chạy được ứng dụng ổn định trên cả Linux (VPS) và Windows mà không bị vướng lỗi phân tích cú pháp dấu ngoặc kép hay khoảng trắng trong đường dẫn.
105
+ - **Tối ưu**: PM2 giờ đây sẽ phân tách rạch ròi bằng cách gọi file thực thi `9router` với tham số `--interpreter none`, và luôn chạy sync script bằng đúng phiên bản NodeJS nội tại thông qua `--interpreter process.execPath`.
80
106
 
81
- ## [5.1.4] 2026-04-06
107
+ ## [5.1.4] — 2026-04-06
82
108
 
83
- ### 🐞 Sửa lỗi BOM khởi động CLI & Tối ưu luồng Timeout trên Docker
109
+ ### 🐞 Sửa lỗi BOM khởi động CLI & Tối ưu luồng vá Timeout trên Docker
84
110
 
85
- - **Sửa file CLI (BOM)**: Xóa tự động chèn BOM (`\uFEFF`) đầu file `cli.js`. tự thừa này vốn làm hỏng shebang `#!/usr/bin/env node` gây `SyntaxError: Unexpected token` trong nhiều môi trường khi chạy npx
86
- - **Cải thiện Docker Timeout Patch**: Quá trình can thiệp timeout (`300s`) trong lúc build Docker giờ chuyển sang scan quét toàn bộ các file `.js` trong thư mục `openclaw/dist` thay cố tìm file trùng hash `gateway-cli-*`. Giúp bản luôn áp dụng thành công trên các phiên bản backend khác biệt không in ra warning rác trên console
111
+ - **Sửa file CLI (BOM)**: Xóa tự động chèn BOM (`\uFEFF`) ở đầu file `cli.js`. Ký tự thừa này vốn làm hỏng shebang `#!/usr/bin/env node` và gây `SyntaxError: Unexpected token` trong nhiều môi trường khi chạy npx
112
+ - **Cải thiện Docker Timeout Patch**: Quá trình can thiệp timeout (`300s`) trong lúc build Docker giờ chuyển sang scan quét toàn bộ các file `.js` trong thư mục `openclaw/dist` thay vì cố tìm file trùng hash `gateway-cli-*`. Giúp bản vá luôn áp dụng thành công trên các phiên bản backend khác biệt mà không in ra warning rác trên console
87
113
 
88
- ## [5.1.3] 2026-04-06
114
+ ## [5.1.3] — 2026-04-06
89
115
 
90
- ### 🐜 Lỗi lọt biến nội suy vào giao diện Docker Compose
116
+ ### 🐜 Lỗi lọt biến nội suy vào giao diện Docker Compose
91
117
 
92
- Bản lỗi base64 trước đó đã gây ra lỗi mới (regression) do dùng ngoặc `${Buffer.from(...)}` bên trong chuỗi string sinh ra docker-compose. Điều này làm lọt nguyên đoạn text nội suy vào `docker-compose.yml` thay sinh ra chuỗi base64 thật.
118
+ Bản vá lỗi base64 trước đó đã gây ra lỗi mới (regression) do dùng ngoặc `${Buffer.from(...)}` bên trong chuỗi string sinh ra docker-compose. Điều này làm lọt nguyên đoạn text nội suy vào `docker-compose.yml` thay vì sinh ra chuỗi base64 thật.
93
119
 
94
- - **Fix**: Thực hiện tạo base64 hoàn chỉnh qua JavaScript (`const syncScriptBase64 = encodeBase64Utf8(syncScript)`) ngay từ ban đầu trước khi ghép chuỗi vào file compose
95
- - Đảm bảo file compose tạo thành nhận chính xác base64 thuần túy không bị lọt biến môi trường
96
- - Dọn dẹp lại script test tương ứng
120
+ - **Fix**: Thực hiện tạo mã base64 hoàn chỉnh qua JavaScript (`const syncScriptBase64 = encodeBase64Utf8(syncScript)`) ngay từ ban đầu trước khi ghép chuỗi vào file compose
121
+ - Đảm bảo file compose tạo thành nhận chính xác mã base64 thuần túy mà không bị lọt biến môi trường
122
+ - Dọn dẹp lại script test tương ứng
97
123
 
98
- ## [5.1.2] 2026-04-06
124
+ ## [5.1.2] — 2026-04-06
99
125
 
100
- ### 🐛 Fix Shell Injection: Sync Script Dùng Base64
126
+ ### 🐛 Fix Shell Injection: Sync Script Dùng Base64
101
127
 
102
- Approach node -e JSON.stringify gây lỗi /bin/sh: Syntax error "(" unexpected JSON.stringify sinh chuỗi double-quoted phá vỡ shell argument.
128
+ Approach node -e JSON.stringify gây lỗi /bin/sh: Syntax error "(" unexpected vì JSON.stringify sinh chuỗi double-quoted phá vỡ shell argument.
103
129
 
104
- - **Fix**: nội dung sync script nay được **base64-encode tại thời điểm gen compose** bằng Buffer.from(script).toString base64
105
- - Entrypoint sinh ra dạng: node -e writeFileSync Buffer.from b64 base64 toString
106
- - Base64 chỉ chứa [A-Za-z0-9+/=] không tự đặc biệt, hoạt động đúng trong YAML block
107
- - Áp dụng cho tất cả luồng gen compose: Docker web wizard (setup.js x2) Docker CLI (cli.js x2)
130
+ - **Fix**: nội dung sync script nay được **base64-encode tại thời điểm gen compose** bằng Buffer.from(script).toString base64
131
+ - Entrypoint sinh ra dạng: node -e writeFileSync Buffer.from b64 base64 toString
132
+ - Base64 chỉ chứa [A-Za-z0-9+/=] — không có ký tự đặc biệt, hoạt động đúng trong YAML block
133
+ - Áp dụng cho tất cả luồng gen compose: Docker web wizard (setup.js x2) và Docker CLI (cli.js x2)
108
134
 
109
- ## [5.1.1] 2026-04-06
135
+ ## [5.1.1] — 2026-04-06
110
136
 
111
- ### 🔧 9Router Smart-Route Sync Ổn định qua API
137
+ ### 🔧 9Router Smart-Route Sync — Ổn định qua API
112
138
 
113
- Sửa lỗi nghiêm trọng khiến sync script không nhận ra provider đang active, làm tất cả request fallback về `openai` (lỗi `404 No active credentials`).
139
+ Sửa lỗi nghiêm trọng khiến sync script không nhận ra provider đang active, làm tất cả request fallback về `openai` (lỗi `404 No active credentials`).
114
140
 
115
- - **Nguyên nhân**: script đọc `db.providerConnections` từ `db.json` nhưng field này không tồn tại trong 9Router v0.3.79+ connections chỉ qua REST API
116
- - **Fix**: script giờ gọi `fetch('http://localhost:20128/api/providers')` `d.connections[]` để detect provider đang active
117
- - **Fix**: thay heredoc `cat << 'CLAWEOF'` (gây ra `const p=undefined`) bằng `node -e require('fs').writeFileSync(...)` không còn lỗi escaping trong YAML+shell
118
- - **Fix**: `build9RouterSmartRouteSyncScript()` trong CLI docker flow giờ truyền đúng `'/root/.9router/db.json'` làm db path
119
- - Áp dụng cho cả 3 vị trí: Docker web wizard (`setup.js`), Docker CLI (`cli.js`), native (`cli.js`)
141
+ - **Nguyên nhân**: script đọc `db.providerConnections` từ `db.json` nhưng field này không tồn tại trong 9Router v0.3.79+ — connections chỉ có qua REST API
142
+ - **Fix**: script giờ gọi `fetch('http://localhost:20128/api/providers')` → `d.connections[]` để detect provider đang active
143
+ - **Fix**: thay heredoc `cat << 'CLAWEOF'` (gây ra `const p=undefined`) bằng `node -e require('fs').writeFileSync(...)` — không còn lỗi escaping trong YAML+shell
144
+ - **Fix**: `build9RouterSmartRouteSyncScript()` trong CLI docker flow giờ truyền đúng `'/root/.9router/db.json'` làm db path
145
+ - Áp dụng cho cả 3 vị trí: Docker web wizard (`setup.js`), Docker CLI (`cli.js`), và native (`cli.js`)
120
146
 
121
- ### 📱 Zalo Pairing Tự Động Approve Khi Gateway Đang Chạy
147
+ ### 📱 Zalo Pairing — Tự Động Approve Khi Gateway Đang Chạy
122
148
 
123
- - Trước đây, auto-approve chỉ chạy trong login flow ban đầu; pairing request mới khi gateway đang chạy bị bỏ qua
124
- - **Fix**: `openclaw gateway run` với Zalo Personal giờ pipe stdout/stderr tự gọi `openclaw pairing approve zalouser <code>` khi phát hiện pairing code mới
149
+ - Trước đây, auto-approve chỉ chạy trong login flow ban đầu; pairing request mới khi gateway đang chạy bị bỏ qua
150
+ - **Fix**: `openclaw gateway run` với Zalo Personal giờ pipe stdout/stderr và tự gọi `openclaw pairing approve zalouser <code>` khi phát hiện pairing code mới
125
151
 
126
- ### 🧹 Output Docker CLI Gọn Hơn
152
+ ### 🧹 Output Docker CLI Gọn Hơn
127
153
 
128
- - Xóa các hướng dẫn thừa sau khi Docker build xong (`docker compose build`, `openclaw gateway`, PM2) Docker mode tự chạy hoàn toàn, không cần thao tác thủ công thêm
154
+ - Xóa các hướng dẫn thừa sau khi Docker build xong (`docker compose build`, `openclaw gateway`, PM2) — Docker mode tự chạy hoàn toàn, không cần thao tác thủ công thêm
129
155
 
130
- ## [5.1.0] 2026-04-07
156
+ ## [5.1.0] — 2026-04-07
131
157
 
132
- ### 🤖 Zalo Personal Login Improvements
158
+ ### 🤖 Zalo Personal Login Improvements
133
159
 
134
- - Zalo Personal giờ sử dụng luồng đăng nhập `zalouser` trực tiếp trên cả native Docker.
135
- - Setup in ra đường dẫn QR cùng các lệnh login/copy chính xác, giúp người dùng đăng nhập nhanh không cần `openclaw onboard`.
136
- - QR login Docker giờ nhắm vào service compose `ai-bot` đã sinh ra thay các tên container dễ hỏng.
160
+ - Zalo Personal giờ sử dụng luồng đăng nhập `zalouser` trực tiếp trên cả native và Docker.
161
+ - Setup in ra đường dẫn QR cùng các lệnh login/copy chính xác, giúp người dùng đăng nhập nhanh mà không cần `openclaw onboard`.
162
+ - QR login Docker giờ nhắm vào service compose `ai-bot` đã sinh ra thay vì các tên container cũ dễ hỏng.
137
163
 
138
- ## [5.0.9] 2026-04-06
164
+ ## [5.0.9] — 2026-04-06
139
165
 
140
- ### 🚀 Chế độ Native Install Không cần Docker
166
+ ### 🚀 Chế độ Native Install — Không cần Docker
141
167
 
142
- OpenClaw giờ hỗ trợ **cài đặt native (không dùng Docker)** trên Windows, Linux, macOS, VPS shared hosting.
168
+ OpenClaw giờ hỗ trợ **cài đặt native (không dùng Docker)** trên Windows, Linux, macOS, VPS và shared hosting.
143
169
 
144
- - **CLI native mode** thêm chọn chế độ: `docker` (mặc định) hoặc `native`
145
- - **Script khởi động sinh tự động theo OS:**
146
- - 🪟 **Windows** `setup-openclaw-win.bat` (double-click cài ngay)
147
- - 🐧 **Linux / macOS** `setup-openclaw-linux.sh`
148
- - 🖥️ **VPS / Ubuntu** `setup-openclaw-vps.sh` (PM2 chạy nền)
149
- - 🏠 **Shared Hosting / cPanel** `setup-openclaw-hosting.sh` + `ecosystem.config.cjs`
150
- - **Web Wizard cập nhật** Thêm toggle Deploy Mode (Docker / Native) + chọn OS
151
- - **URL host động** Ollama 9Router URL tự chuyển:
170
+ - **CLI native mode** — thêm chọn chế độ: `docker` (mặc định) hoặc `native`
171
+ - **Script khởi động sinh tự động theo OS:**
172
+ - 🪟 **Windows** → `setup-openclaw-win.bat` (double-click cài ngay)
173
+ - 🐧 **Linux / macOS** → `setup-openclaw-linux.sh`
174
+ - 🖥️ **VPS / Ubuntu** → `setup-openclaw-vps.sh` (PM2 chạy nền)
175
+ - 🏠 **Shared Hosting / cPanel** → `setup-openclaw-hosting.sh` + `ecosystem.config.cjs`
176
+ - **Web Wizard cập nhật** — Thêm toggle Deploy Mode (Docker / Native) + chọn OS
177
+ - **URL host động** — Ollama và 9Router URL tự chuyển:
152
178
  - Docker: `http://ollama:11434` / `http://9router:20128/v1`
153
179
  - Native: `http://localhost:11434` / `http://localhost:20128/v1`
154
- - **Kiểm tra Node.js 18+** Native mode yêu cầu Node.js 18+ trước khi chạy
155
- - **Test scripts** `test-native-install.bat` (Windows) `test-native-install.sh` (Linux/macOS)
180
+ - **Kiểm tra Node.js 18+** — Native mode yêu cầu Node.js 18+ trước khi chạy
181
+ - **Test scripts** — `test-native-install.bat` (Windows) và `test-native-install.sh` (Linux/macOS)
156
182
 
157
- ### 🤖 Cập nhật Gemma 4
183
+ ### 🤖 Cập nhật Gemma 4
158
184
 
159
- - **4 biến thể Gemma 4** qua Ollama: `gemma4:e2b` (~4-6 GB), `gemma4:e4b` (~8-10 GB), `gemma4:26b` (~18-24 GB), `gemma4:31b` (~24+ GB)
160
- - Tự pull model Gemma 4 khi `docker compose up` lần đầu (timeout container tăng lên 15 phút)
161
- - Nâng timeout Ollama lên **300 giây** để xử model lớn
162
- - Thêm `OLLAMA_NUM_PARALLEL=1` `OLLAMA_KEEP_ALIVE=24h` vào Docker sidecar
185
+ - **4 biến thể Gemma 4** qua Ollama: `gemma4:e2b` (~4-6 GB), `gemma4:e4b` (~8-10 GB), `gemma4:26b` (~18-24 GB), `gemma4:31b` (~24+ GB)
186
+ - Tự pull model Gemma 4 khi `docker compose up` lần đầu (timeout container tăng lên 15 phút)
187
+ - Nâng timeout Ollama lên **300 giây** để xử lý model lớn
188
+ - Thêm `OLLAMA_NUM_PARALLEL=1` và `OLLAMA_KEEP_ALIVE=24h` vào Docker sidecar
163
189
 
164
- ### 🤖 Multi-Bot Deployment (tối đa 5 bot Telegram trên mỗi workspace)
190
+ ### 🤖 Multi-Bot Deployment (tối đa 5 bot Telegram trên mỗi workspace)
165
191
 
166
- OpenClaw giờ hỗ trợ triển khai **nhiều bot Telegram độc lập** từ một setup duy nhất mỗi bot identity, slash command, AI personality thư mục workspace riêng biệt.
192
+ OpenClaw giờ hỗ trợ triển khai **nhiều bot Telegram độc lập** từ một setup duy nhất — mỗi bot có identity, slash command, AI personality và thư mục workspace riêng biệt.
167
193
 
168
- - **Triển khai 15 bot cùng lúc** Web Wizard CLI đều hỗ trợ cấu hình multi-bot
169
- - **Workspace riêng biệt** mỗi bot thư mục `botN/` riêng với `.env` cấu hình `.openclaw/` riêng, không gây xung đột token hay cấu hình
170
- - **Tự động gán cổng** cổng bắt đầu từ `18791` tăng dần cho mỗi bot (`18791`, `18792`, ...) để tránh xung đột binding host
171
- - **Docker Compose đa-service** tự động sinh `docker-compose.yml` với một service cho mỗi bot, cộng thêm một container provider chung (9Router hoặc Ollama)
172
- - **Department Room Model** khi các bot chia sẻ chung một nhóm Telegram, chúng hoạt động như một đội ngũ chuyên nghiệp:
173
- - 🤫 **Mặc định im lặng** bot phản hồi bằng emoji (👍 ❤️) với tin nhắn thông thường nhưng không bao giờ spam reply
174
- - 📣 **Trigger bằng @mention hoặc /slash** chỉ bot được nhắc tên hoặc được gọi lệnh mới phản hồi, giống như gọi tên đồng nghiệp trong phòng họp
175
- - 🗃️ **Workspace chung** tất cả bot đọc từ một thư mục workspace chung thể cộng tác trên các tác vụ, tệp báo cáo
176
- - **Cấu hình botGroup** được inject vào `openclaw.json` của mỗi bot để chúng biết tên lệnh slash của nhau khi runtime
194
+ - **Triển khai 1–5 bot cùng lúc** — Web Wizard và CLI đều hỗ trợ cấu hình multi-bot
195
+ - **Workspace riêng biệt** — mỗi bot có thư mục `botN/` riêng với `.env` và cấu hình `.openclaw/` riêng, không gây xung đột token hay cấu hình
196
+ - **Tự động gán cổng** — cổng bắt đầu từ `18791` và tăng dần cho mỗi bot (`18791`, `18792`, ...) để tránh xung đột binding host
197
+ - **Docker Compose đa-service** — tự động sinh `docker-compose.yml` với một service cho mỗi bot, cộng thêm một container provider chung (9Router hoặc Ollama)
198
+ - **Department Room Model** — khi các bot chia sẻ chung một nhóm Telegram, chúng hoạt động như một đội ngũ chuyên nghiệp:
199
+ - 🤫 **Mặc định im lặng** — bot phản hồi bằng emoji (👍 ❤️) với tin nhắn thông thường nhưng không bao giờ spam reply
200
+ - 📣 **Trigger bằng @mention hoặc /slash** — chỉ bot được nhắc tên hoặc được gọi lệnh mới phản hồi, giống như gọi tên đồng nghiệp trong phòng họp
201
+ - 🗃️ **Workspace chung** — tất cả bot đọc từ một thư mục workspace chung và có thể cộng tác trên các tác vụ, tệp và báo cáo
202
+ - **Cấu hình botGroup** được inject vào `openclaw.json` của mỗi bot để chúng biết tên và lệnh slash của nhau khi runtime
177
203
 
178
- ### 🔗 Trợ giúp lấy Telegram Group ID
204
+ ### 🔗 Trợ giúp lấy Telegram Group ID
179
205
 
180
- Lấy Group ID giờ trở nên cực kỳ đơn giản:
206
+ Lấy Group ID giờ trở nên cực kỳ đơn giản:
181
207
 
182
- - **Web Wizard**: card "Đã group" giờ hiển thị nút inline `Lấy Group ID` mở thẳng **@userinfobot**, kèm hướng dẫn từng bước (forward tin nhắn nhóm bot trả về Chat ID)
183
- - **CLI**: chọn "existing group" sẽ in ra hướng dẫn tương tác với các bước đánh số link trực tiếp đến `https://t.me/userinfobot`
208
+ - **Web Wizard**: card "Đã có group" giờ hiển thị nút inline `Lấy Group ID` mở thẳng **@userinfobot**, kèm hướng dẫn từng bước (forward tin nhắn nhóm → bot trả về Chat ID)
209
+ - **CLI**: chọn "existing group" sẽ in ra hướng dẫn tương tác với các bước đánh số và link trực tiếp đến `https://t.me/userinfobot`
184
210
 
185
- ### 🎨 Tinh chỉnh UI
211
+ ### 🎨 Tinh chỉnh UI
186
212
 
187
- - **Bộ chọn tùy chọn nhóm** được thiết kế dạng **hai thẻ tương tác** với icon, tả, hiệu ứng hover glow dấu tick chọn động
188
- - Trạng thái active của thẻ: màu xanh + viền cho "tạo sau", màu xanh chàm + viền cho "nhóm đã "
189
- - Hàng nhập Group ID bao gồm nút trợ giúp inline không cần tìm kiếm tài liệu nữa
213
+ - **Bộ chọn tùy chọn nhóm** được thiết kế dạng **hai thẻ tương tác** với icon, mô tả, hiệu ứng hover glow và dấu tick chọn động
214
+ - Trạng thái active của thẻ: màu xanh lá + viền cho "tạo sau", màu xanh chàm + viền cho "nhóm đã có"
215
+ - Hàng nhập Group ID bao gồm nút trợ giúp inline — không cần tìm kiếm tài liệu nữa
190
216
 
191
- ## [5.0.0] 2026-04-04
217
+ ## [5.0.0] — 2026-04-04
192
218
 
193
- ### 🚀 Hỗ trợ Gemma 4 Model mới nhất của Google
219
+ ### 🚀 Hỗ trợ Gemma 4 — Model mới nhất của Google
194
220
 
195
- OpenClaw v5.0.0 cập nhật **Gemma 4** dòng model open-weights mới của Google DeepMind, ra mắt 02/04/2026.
221
+ OpenClaw v5.0.0 cập nhật **Gemma 4** — dòng model open-weights mới của Google DeepMind, ra mắt 02/04/2026.
196
222
 
197
- - **Gemma 4 sẵn 3 size qua Ollama** `gemma4:4b` (~6 GB RAM), `gemma4` mặc định (~10 GB), `gemma4:27b` (~18 GB)
198
- - **Không cần cài Ollama thủ công** Khi chọn Local Ollama + Gemma 4, setup tự động sinh **service `ollama` sát cạnh trong `docker-compose.yml`**. Docker tự pull model khi `docker compose up`. Không cần cài Ollama trước.
199
- - **OLLAMA_HOST tự cấu hình** Trỏ thẳng vào sidecar container (`http://ollama:11434`).
200
- - **Cập nhật danh sách model** Thêm `gemma4`, `gemma4:27b`, `gemma4:4b` vào Ollama provider trên cả CLI Web Wizard.
223
+ - **Gemma 4 có sẵn 3 size qua Ollama** — `gemma4:4b` (~6 GB RAM), `gemma4` mặc định (~10 GB), `gemma4:27b` (~18 GB)
224
+ - **Không cần cài Ollama thủ công** — Khi chọn Local Ollama + Gemma 4, setup tự động sinh **service `ollama` sát cạnh trong `docker-compose.yml`**. Docker tự pull model khi `docker compose up`. Không cần cài Ollama trước.
225
+ - **OLLAMA_HOST tự cấu hình** — Trỏ thẳng vào sidecar container (`http://ollama:11434`).
226
+ - **Cập nhật danh sách model** — Thêm `gemma4`, `gemma4:27b`, `gemma4:4b` vào Ollama provider trên cả CLI và Web Wizard.
201
227
 
202
- ### 💻 Yêu cầu phần cứng cho Gemma 4
228
+ ### 💻 Yêu cầu phần cứng cho Gemma 4
203
229
 
204
- | Model | RAM/VRAM tối thiểu (4-bit) | Phù hợp |
230
+ | Model | RAM/VRAM tối thiểu (4-bit) | Phù hợp |
205
231
  | ------------------- | -------------------------- | ------------------------------ |
206
- | `gemma4:4b` | ~6 GB | Laptop thông thường, Mac M1/M2 |
207
- | `gemma4` (mặc định) | ~10 GB | PC 16 GB RAM |
232
+ | `gemma4:4b` | ~6 GB | Laptop thông thường, Mac M1/M2 |
233
+ | `gemma4` (mặc định) | ~10 GB | PC 16 GB RAM |
208
234
  | `gemma4:27b` | ~18 GB | Workstation 32 GB / GPU 24 GB |
209
235
 
210
- > Gemma 4 **miễn phí, open-weights, giấy phép Apache 2.0**. Không cần API key chạy 100% local qua Docker.
236
+ > Gemma 4 **miễn phí, open-weights, giấy phép Apache 2.0**. Không cần API key — chạy 100% local qua Docker.
211
237
 
212
- ## [4.1.4] 2026-04-03
238
+ ## [4.1.4] — 2026-04-03
213
239
 
214
- ### Cải tiến
240
+ ### ✨ Cải tiến
215
241
 
216
- - CLI/Wizard đồng bộ đầy đủ skills (Browser Automation, Memory, RAG, Code Interpreter, v.v.)
217
- - Browser Automation: chọn chế độ Desktop (Host Chrome) hoặc Server (Headless Chromium) cho Linux/Ubuntu
218
- - Sửa lỗi Dockerfile WORKDIR gây lỗi build trên Linux
219
- - Skills install tại **runtime** container (không phải lúc build) để tránh lỗi ClawHub auth
220
- - TOOLS.md động: tự sinh theo danh sách skills đã chọn
221
- - Tự tạo `browser-tool.js` (Desktop mode) `BROWSER.md`
222
- - Tự đăng skills vào `openclaw.json skills.entries`
223
- - Bổ sung prompt cấu hình Email SMTP inject vào `.env`
224
- - Single-source version qua `bump-version.mjs` 1 lệnh cập nhật tất cả file
242
+ - CLI/Wizard đồng bộ đầy đủ skills (Browser Automation, Memory, RAG, Code Interpreter, v.v.)
243
+ - Browser Automation: chọn chế độ Desktop (Host Chrome) hoặc Server (Headless Chromium) cho Linux/Ubuntu
244
+ - Sửa lỗi Dockerfile WORKDIR gây lỗi build trên Linux
245
+ - Skills install tại **runtime** container (không phải lúc build) để tránh lỗi ClawHub auth
246
+ - TOOLS.md động: tự sinh theo danh sách skills đã chọn
247
+ - Tự tạo `browser-tool.js` (Desktop mode) và `BROWSER.md`
248
+ - Tự đăng ký skills vào `openclaw.json → skills.entries`
249
+ - Bổ sung prompt cấu hình Email SMTP và inject vào `.env`
250
+ - Single-source version qua `bump-version.mjs` — 1 lệnh cập nhật tất cả file
225
251
 
226
- ## [4.1.3] 2026-04-02
252
+ ## [4.1.3] — 2026-04-02
227
253
 
228
- ### Cải tiến
254
+ ### ✨ Cải tiến
229
255
 
230
- - CLI/Wizard đồng bộ đầy đủ skills (Browser Automation, Memory, RAG, Code Interpreter, v.v.)
231
- - Browser Automation: chọn chế độ Desktop (Host Chrome) hoặc Server (Headless Chromium)
232
- - Sửa lỗi Dockerfile WORKDIR trên Linux
233
- - TOOLS.md động: tự sinh theo skills đã chọn
234
- - Tự tạo browser-tool.js (Desktop mode) BROWSER.md
235
- - Tự đăng skills vào `openclaw.json skills.entries`
236
- - Bổ sung prompt cấu hình Email SMTP
256
+ - CLI/Wizard đồng bộ đầy đủ skills (Browser Automation, Memory, RAG, Code Interpreter, v.v.)
257
+ - Browser Automation: chọn chế độ Desktop (Host Chrome) hoặc Server (Headless Chromium)
258
+ - Sửa lỗi Dockerfile WORKDIR trên Linux
259
+ - TOOLS.md động: tự sinh theo skills đã chọn
260
+ - Tự tạo browser-tool.js (Desktop mode) và BROWSER.md
261
+ - Tự đăng ký skills vào `openclaw.json → skills.entries`
262
+ - Bổ sung prompt cấu hình Email SMTP
237
263
 
238
- Tất cả những thay đổi nổi bật của dự án sẽ được ghi chép trong file này.
264
+ Tất cả những thay đổi nổi bật của dự án sẽ được ghi chép trong file này.
239
265
 
240
- ## [4.1.2] 2026-04-01
266
+ ## [4.1.2] — 2026-04-01
241
267
 
242
- ### Khắc phục
268
+ ### Khắc phục
243
269
 
244
- - **CLI setup**: Khắc phục lỗi sinh file `docker-compose.yml` định dạng sai khi dùng 9Router (lỗi báo `yaml: while scanning a simple key`) bằng cách đổi cách escape string `syncComboScript` sang kiểu heredoc block scalars của bash để tránh xung đột nháy kép/nháy đơn trong YAML.
270
+ - **CLI setup**: Khắc phục lỗi sinh file `docker-compose.yml` định dạng sai khi dùng 9Router (lỗi báo `yaml: while scanning a simple key`) bằng cách đổi cách escape string `syncComboScript` sang kiểu heredoc block scalars của bash để tránh xung đột nháy kép/nháy đơn trong YAML.
245
271
 
246
- ## [4.1.0] 2026-04-01
272
+ ## [4.1.0] — 2026-04-01
247
273
 
248
- ### 🚀 Stable 9Router Smart Routing
274
+ ### 🚀 Stable 9Router Smart Routing
249
275
 
250
- - **Khởi tạo Database tinh gọn**: Combo mặc định của 9Router hiện tại sạch 100% (chỉ lưu `smart-route`). Đã loại bỏ việc tự động tiêm GPT-4o/Claude/Gemini như các rác hệ thống để ưu tiên 100% sức mạnh định tuyến động.
251
- - **Tối giản Giao diện Toggling**: Cả web Setup Wizard CLI đều được tinh giản, không còn liệt mảng models thừa khi chọn 9Router. Hệ thống mặc định chốt cứng Auto Route (`smart-route`) giao hoàn toàn phán quyết chuyển đổi cho thuật toán `PREF`.
276
+ - **Khởi tạo Database tinh gọn**: Combo mặc định của 9Router hiện tại sạch 100% (chỉ lưu `smart-route`). Đã loại bỏ việc tự động tiêm GPT-4o/Claude/Gemini như các rác hệ thống để ưu tiên 100% sức mạnh định tuyến động.
277
+ - **Tối giản Giao diện Toggling**: Cả web Setup Wizard và CLI đều được tinh giản, không còn liệt kê mảng models dư thừa khi chọn 9Router. Hệ thống mặc định chốt cứng Auto Route (`smart-route`) và giao hoàn toàn phán quyết chuyển đổi cho thuật toán `PREF`.
252
278
 
253
- ## [4.0.9] 2026-04-01
279
+ ## [4.0.9] — 2026-04-01
254
280
 
255
- ### 🔄 Dynamic Smart Route (Đồng bộ Provider Realtime)
281
+ ### 🔄 Dynamic Smart Route (Đồng bộ Provider Realtime)
256
282
 
257
- - **Routing Thông Minh**: Combo `smart-route` không còn danh sách cứng 100+ model. Script đồng bộ chạy ngầm mỗi 30 giây sẽ tự động quét `/api/providers` của 9Router chỉ đưa vào combo **những provider đã kết nối đang bật**. Triệt tiêu hoàn toàn lỗi `404 No active credentials`.
258
- - **Bật/Tắt Tức Thì**: Bật hoặc tắt provider trên Dashboard 9Router combo tự cập nhật trong vòng 30 giây, không cần restart container.
259
- - **Mapping Đầy Đủ**: Hỗ trợ 25+ provider (Codex, Claude Code, GitHub Copilot, Cursor, Kilo, Cline, Gemini CLI, iFlow, Qwen, Kiro, Ollama, GLM, MiniMax, DeepSeek, xAI, Mistral, Groq...).
283
+ - **Routing Thông Minh**: Combo `smart-route` không còn là danh sách cứng 100+ model. Script đồng bộ chạy ngầm mỗi 30 giây sẽ tự động quét `/api/providers` của 9Router và chỉ đưa vào combo **những provider đã kết nối VÀ đang bật**. Triệt tiêu hoàn toàn lỗi `404 No active credentials`.
284
+ - **Bật/Tắt Tức Thì**: Bật hoặc tắt provider trên Dashboard 9Router — combo tự cập nhật trong vòng 30 giây, không cần restart container.
285
+ - **Mapping Đầy Đủ**: Hỗ trợ 25+ provider (Codex, Claude Code, GitHub Copilot, Cursor, Kilo, Cline, Gemini CLI, iFlow, Qwen, Kiro, Ollama, GLM, MiniMax, DeepSeek, xAI, Mistral, Groq...).
260
286
 
261
- ### 🐳 Tự Động Cài Docker
287
+ ### 🐳 Tự Động Cài Docker
262
288
 
263
- - **Zero-Prerequisite**: `npx create-openclaw-bot` tự phát hiện Docker chưa cài tự tải + cài qua `winget` (Windows), `brew` (macOS), hoặc script chính thức Docker (Linux).
264
- - **Hướng Dẫn Ràng**: Nếu cài tự động thất bại, hiển thị link tải trực tiếp kèm hướng dẫn chi tiết.
289
+ - **Zero-Prerequisite**: `npx create-openclaw-bot` tự phát hiện Docker chưa cài → tự tải + cài qua `winget` (Windows), `brew` (macOS), hoặc script chính thức Docker (Linux).
290
+ - **Hướng Dẫn Rõ Ràng**: Nếu cài tự động thất bại, hiển thị link tải trực tiếp kèm hướng dẫn chi tiết.
265
291
 
266
- ## [4.0.8] 2026-03-31
292
+ ## [4.0.8] — 2026-03-31
267
293
 
268
- ### Tối ưu 9Router & Mở rộng Ollama Cloud
294
+ ### ✨ Tối ưu 9Router & Mở rộng Ollama Cloud
269
295
 
270
- - **Tích hợp 9Router cực kỳ Ổn định (Zero Config)**: Proxy 9Router hiện được tự động kích hoạt bảo mật bên trong mạng Docker network qua cổng `sk-no-key`. Toàn bộ thiết đặt API keys thủ công định tuyến models được gỡ bỏ khỏi `.env` để nhường chỗ cho hệ thống quản tập trung thông minh hơn qua [9Router Dashboard](http://localhost:20128/dashboard).
271
- - **Mở Rộng Kết Nối Models**: Đưa vào danh sách hỗ trợ trọn bộ hệ sinh thái Ollama Cloud (_Qwen 3.5, GLM-5, MiniMax, GPT-OSS_), Kiro Haiku, Qwen Flash, cùng toàn bộ iFlow models hoàn toàn miễn phí.
272
- - **Tự động Inject Smart Routing**: Cấu hình tự động gài sẵn combo luân chuyển linh hoạt `smart-route` giúp cân bằng tải công việc qua lại mượt giữa Codex, Claude Code, Gemini, iFlow.
296
+ - **Tích hợp 9Router cực kỳ Ổn định (Zero Config)**: Proxy 9Router hiện được tự động kích hoạt bảo mật bên trong mạng Docker network qua cổng `sk-no-key`. Toàn bộ thiết đặt API keys thủ công và định tuyến models được gỡ bỏ khỏi `.env` để nhường chỗ cho hệ thống quản lý tập trung và thông minh hơn qua [9Router Dashboard](http://localhost:20128/dashboard).
297
+ - **Mở Rộng Kết Nối Models**: Đưa vào danh sách hỗ trợ trọn bộ hệ sinh thái Ollama Cloud (_Qwen 3.5, GLM-5, MiniMax, GPT-OSS_), Kiro Haiku, Qwen Flash, cùng toàn bộ iFlow models hoàn toàn miễn phí.
298
+ - **Tự động Inject Smart Routing**: Cấu hình tự động gài sẵn combo luân chuyển linh hoạt `smart-route` giúp cân bằng tải công việc qua lại mượt mà giữa Codex, Claude Code, Gemini, và iFlow.
273
299
 
274
- ### 🧹 Clean Workspace & Auto-Setup Đa Nền Tảng
300
+ ### 🧹 Clean Workspace & Auto-Setup Đa Nền Tảng
275
301
 
276
- - **Zero-Clutter Generation**: Dọn sạch hoàn toàn các template làm mẫu như `.env.example` hay các file cấu hình `docker-compose` tĩnh thừa. Script setup sẽ tự khởi tạo linh động các file thực thụ ngay lúc chạy cho một workspace gọn gàng nhất.
277
- - **Auto Browser Đa Nền Tảng**: Bổ sung `start-chrome-debug.sh` mới đét cho macOS/Linux đồng bộ hoàn hảo với file `.bat` thiết lập chạy Automation trên Windows, mở ra kỷ nguyên Auto-Browser tiện lợi.
278
- - **Auto Prompt CLI**: `npx create-openclaw-bot` hiện đã hoàn chỉnh về feature-parity với Web UI, hỗ trợ tra vấn thông tin thiết lập User Identity Persona của Bot trực tiếp bảng console.
302
+ - **Zero-Clutter Generation**: Dọn sạch hoàn toàn các template làm mẫu như `.env.example` hay các file cấu hình `docker-compose` tĩnh dư thừa. Script setup sẽ tự khởi tạo linh động các file thực thụ ngay lúc chạy cho một workspace gọn gàng nhất.
303
+ - **Auto Browser Đa Nền Tảng**: Bổ sung `start-chrome-debug.sh` mới đét cho macOS/Linux đồng bộ hoàn hảo với file `.bat` thiết lập chạy Automation trên Windows, mở ra kỷ nguyên Auto-Browser tiện lợi.
304
+ - **Auto Prompt CLI**: `npx create-openclaw-bot` hiện đã hoàn chỉnh về feature-parity với Web UI, hỗ trợ tra vấn thông tin thiết lập User Identity và Persona của Bot trực tiếp ở bảng console.
279
305
 
280
- ## [4.0.1] 2026-03-31
306
+ ## [4.0.1] — 2026-03-31
281
307
 
282
- ### Tự Động Hoá (Tự tạo thư mục cài đặt gốc) & NPM CLI
308
+ ### ✨ Tự Động Hoá (Tự tạo thư mục cài đặt gốc) & NPM CLI
283
309
 
284
- - **One-Command Install (npx)**: Gói CLI `create-openclaw-bot` được tải lên NPM. Người dùng Windows, Linux, Mac chỉ cần mở Terminal lệnh `npx create-openclaw-bot` để setup tự động từ A-Z qua giao diện tương tác.
285
- - **Tự động Setup & Khởi động Docker**: Quy trình tạo `.bat`/CLI được viết lại, thiết lập xong sẽ mở Docker compose tự động tải kích hoạt Bot ngay.
286
- - **Improved UI Setup**: Gọn gàng hoá file preview, đổi layout UI cho Zalo Bot API để dùng official vector SVG, nổi màu xanh chủ đạo Zalo thay logo trong suốt.
287
- - **Safety First**: Lược bỏ tuỳ chọn hình Antigravity (AG) khỏi 9router Proxy Models thêm cảnh báo đỏ trên UI để tránh rủi ro người dùng bị khoá account Google AI Ultra do lạm dụng quá mức. Cập nhật icon credit cho thesvg.org.
310
+ - **One-Command Install (npx)**: Gói CLI `create-openclaw-bot` được tải lên NPM. Người dùng Windows, Linux, Mac chỉ cần mở Terminal gõ lệnh `npx create-openclaw-bot` để setup tự động từ A-Z qua giao diện tương tác.
311
+ - **Tự động Setup & Khởi động Docker**: Quy trình tạo `.bat`/CLI được viết lại, thiết lập xong sẽ mở Docker compose tự động tải và kích hoạt Bot ngay.
312
+ - **Improved UI Setup**: Gọn gàng hoá file preview, đổi layout UI cho Zalo Bot API để dùng official vector SVG, nổi màu xanh chủ đạo Zalo thay vì logo trong suốt.
313
+ - **Safety First**: Lược bỏ tuỳ chọn mô hình Antigravity (AG) khỏi 9router Proxy Models và thêm cảnh báo đỏ trên UI để tránh rủi ro người dùng bị khoá account Google AI Ultra do lạm dụng quá mức. Cập nhật icon credit cho thesvg.org.
288
314
 
289
- ## [4.0.0] 2026-03-30
315
+ ## [4.0.0] — 2026-03-30
290
316
 
291
- ### New Features & Updates
317
+ ### ✨ New Features & Updates
292
318
 
293
- - **Full English Localization** Đã hoàn thiện toàn bộ bản dịch tiếng Anh cho Setup Wizard (Button, Label, Step 4 Output).
294
- - **Language Toggle Relocation** Di chuyển công tắc ngôn ngữ (VI/EN) sang vị trí dễ nhìn thao tác hơn.
295
- - **Setup UI/UX fixes** Cải thiện giao diện Setup Wizard cho Browser Automation sửa các lỗi hiển thị (như undefined model badge).
296
- - **Reference Error Fixes** Khắc phục một số lỗi Reference Error trong quá trình chạy setup.
319
+ - **Full English Localization** — Đã hoàn thiện toàn bộ bản dịch tiếng Anh cho Setup Wizard (Button, Label, Step 4 Output).
320
+ - **Language Toggle Relocation** — Di chuyển công tắc ngôn ngữ (VI/EN) sang vị trí dễ nhìn và thao tác hơn.
321
+ - **Setup UI/UX fixes** — Cải thiện giao diện Setup Wizard cho Browser Automation và sửa các lỗi hiển thị (như undefined model badge).
322
+ - **Reference Error Fixes** — Khắc phục một số lỗi Reference Error trong quá trình chạy setup.
297
323
 
298
- ## [3.0.2] 2026-03-29
324
+ ## [3.0.2] — 2026-03-29
299
325
 
300
- ### 9Router Smart Proxy Expansion
326
+ ### ✨ 9Router Smart Proxy Expansion
301
327
 
302
- - **9Router db.json Stability** Cập nhật logic inject db.json của 9router qua entrypoint để tránh lỗi báo mất file "No such file or directory, lstat db.json".
303
- - **Flagship Fallback Proxy** Cấu hình "Smart Proxy" để danh sách luân chuyển các LLMs Flagship mạnh mẽ nhất hiện tại của Codex, Antigravity, Claude Code, Github Copilot.
304
- - **Tùy chỉnh Setup Wizard** Khi cài đặt hiện tại sẽ thấy danh sách provider/model hoàn chỉnh, Smart Proxy được đặt làm chuẩn ưu tiên để tự fix lỗi "404 No Active Credentials".
328
+ - **9Router db.json Stability** — Cập nhật logic inject db.json của 9router qua entrypoint để tránh lỗi báo mất file "No such file or directory, lstat db.json".
329
+ - **Flagship Fallback Proxy** — Cấu hình "Smart Proxy" để có danh sách luân chuyển các LLMs Flagship mạnh mẽ nhất hiện tại của Codex, Antigravity, Claude Code, và Github Copilot.
330
+ - **Tùy chỉnh Setup Wizard** — Khi cài đặt hiện tại sẽ thấy danh sách provider/model hoàn chỉnh, và Smart Proxy được đặt làm chuẩn ưu tiên để tự fix lỗi "404 No Active Credentials".
305
331
 
306
- ## [3.0.1] 2026-03-29
332
+ ## [3.0.1] — 2026-03-29
307
333
 
308
- ### New Features
334
+ ### ✨ New Features
309
335
 
310
- - **Wizard UI Redesign (Step 2)** AI Provider/Model lên đầu, sau đó Identity, Personality, Security Rules, Extensions
311
- - **User Info textarea** User tự nhập thông tin về mình sinh vào `USER.md` để bot nhân hóa
312
- - **Editable Security Rules** Hiển thị quy tắc bảo mật mặc định, user thể sửa inject vào `AGENTS.md`
313
- - **Section dividers** Icon dividers giữa các nhóm config (🤖 🔐 🧩)
336
+ - **Wizard UI Redesign (Step 2)** — AI Provider/Model lên đầu, sau đó Identity, Personality, Security Rules, Extensions
337
+ - **User Info textarea** — User tự nhập thông tin về mình → sinh vào `USER.md` để bot cá nhân hóa
338
+ - **Editable Security Rules** — Hiển thị quy tắc bảo mật mặc định, user có thể sửa → inject vào `AGENTS.md`
339
+ - **Section dividers** — Icon dividers giữa các nhóm config (🤖 🔐 🧩)
314
340
 
315
- ### 🐛 Bug Fixes
341
+ ### 🐛 Bug Fixes
316
342
 
317
- - **Skills auto-enable** Khi chọn skill, giờ tự động khai báo trong `openclaw.json` `skills.entries` (enabled: true). Trước đây chỉ cài Dockerfile nhưng không register bot không nhận skill
318
- - **Skills env injection** Skills cần API key (Tavily, SMTP) tự động inject env vars vào `skills.entries`
343
+ - **Skills auto-enable** — Khi chọn skill, giờ tự động khai báo trong `openclaw.json` → `skills.entries` (enabled: true). Trước đây chỉ cài Dockerfile nhưng không register → bot không nhận skill
344
+ - **Skills env injection** — Skills cần API key (Tavily, SMTP…) tự động inject env vars vào `skills.entries`
319
345
 
320
- ### 🎨 UI/UX
346
+ ### 🎨 UI/UX
321
347
 
322
- - Identity grid 3 cột (Tên, Vai trò, Emoji) bỏ Vibe (gộp vào System Prompt)
323
- - Emoji input fix: `form-input--emoji` class, cùng height với input khác
324
- - Label System Prompt "Tính cách, Vibe & Quy tắc trả lời"
348
+ - Identity grid 3 cột (Tên, Vai trò, Emoji) — bỏ Vibe (gộp vào System Prompt)
349
+ - Emoji input fix: `form-input--emoji` class, cùng height với input khác
350
+ - Label System Prompt → "Tính cách, Vibe & Quy tắc trả lời"
325
351
  - Responsive mobile: Name full width, Role + Emoji side-by-side
326
- - Security textarea readonly mặc định, nút "✏️ Sửa" / "🔒 Khóa" toggle
352
+ - Security textarea readonly mặc định, nút "✏️ Sửa" / "🔒 Khóa" toggle
327
353
 
328
- ### 🔧 Technical
354
+ ### 🔧 Technical
329
355
 
330
- - `state.config.userInfo` new field, saved from `cfg-user-info` textarea
331
- - `state.config.securityRules` editable, defaults per language (vi/en)
356
+ - `state.config.userInfo` — new field, saved from `cfg-user-info` textarea
357
+ - `state.config.securityRules` — editable, defaults per language (vi/en)
332
358
  - `DEFAULT_SECURITY_RULES` constant with vi/en templates
333
359
  - `clawConfig.skills.entries` generated from selected skills
334
360
  - Language toggle updates both prompt and security rules
335
361
 
336
362
  ---
337
363
 
338
- ## [3.0.0] 2026-03-28
364
+ ## [3.0.0] — 2026-03-28
339
365
 
340
- ### New Features
366
+ ### ✨ New Features
341
367
 
342
- - **9Router Integration** AI proxy, không cần API key, multi-container Docker (`docker-compose.yml` 2 service)
343
- - **Skills System (ClawHub)** 8 agent capabilities: Web Search, Browser Automation, Memory, RAG, Image Gen, Bot Scheduler, Code Interpreter, Email Assistant
344
- - **Plugins System (npm)** 4 runtime extensions: Voice Call, Matrix, MS Teams, Nostr
345
- - **Browser Automation** Full Chrome Debug Mode support (socat proxy, agent-browser, Playwright engine)
346
- - **Task Scheduler** Windows Scheduled Task auto-starts Chrome Debug khi logon (delay 10s)
347
- - **Skill-aware .env** `.env` template tự động thêm env vars cho skills cần API key (Tavily, SMTP, Flux...)
348
- - **Post-setup Management** Hướng dẫn thêm/bỏ skills/plugins sau khi setup qua `docker exec`
368
+ - **9Router Integration** — AI proxy, không cần API key, multi-container Docker (`docker-compose.yml` 2 service)
369
+ - **Skills System (ClawHub)** — 8 agent capabilities: Web Search, Browser Automation, Memory, RAG, Image Gen, Bot Scheduler, Code Interpreter, Email Assistant
370
+ - **Plugins System (npm)** — 4 runtime extensions: Voice Call, Matrix, MS Teams, Nostr
371
+ - **Browser Automation** — Full Chrome Debug Mode support (socat proxy, agent-browser, Playwright engine)
372
+ - **Task Scheduler** — Windows Scheduled Task auto-starts Chrome Debug khi logon (delay 10s)
373
+ - **Skill-aware .env** — `.env` template tự động thêm env vars cho skills cần API key (Tavily, SMTP, Flux...)
374
+ - **Post-setup Management** — Hướng dẫn thêm/bỏ skills/plugins sau khi setup qua `docker exec`
349
375
 
350
- ### 🎨 UI/UX
376
+ ### 🎨 UI/UX
351
377
 
352
- - Tách Skills (4-column grid) Plugins (riêng biệt) ràng hơn
353
- - Skill cards hiện notes (⚙️) cho skills cần setup thêm
354
- - Browser Automation notice card Step 4 với `.bat` + `.ps1` scripts
355
- - Management guide card (🔧) với `docker exec` commands
378
+ - Tách Skills (4-column grid) và Plugins (riêng biệt) — rõ ràng hơn
379
+ - Skill cards hiện notes (⚙️) cho skills cần setup thêm
380
+ - Browser Automation notice card ở Step 4 với `.bat` + `.ps1` scripts
381
+ - Management guide card (🔧) với `docker exec` commands
356
382
 
357
- ### 📚 Documentation
383
+ ### 📚 Documentation
358
384
 
359
- - `docs/browser-automation-guide.md` Hướng dẫn sử dụng Browser Automation cho user
360
- - `docs/skills-plugins-guide.md` Tổng hợp toàn bộ skills/plugins + setup + env vars
361
- - README.md / README.vi.md Thêm 9Router, Skills/Plugins, FAQs mới
385
+ - `docs/browser-automation-guide.md` — Hướng dẫn sử dụng Browser Automation cho user
386
+ - `docs/skills-plugins-guide.md` — Tổng hợp toàn bộ skills/plugins + setup + env vars
387
+ - README.md / README.vi.md — Thêm 9Router, Skills/Plugins, FAQs mới
362
388
 
363
- ### 🔧 Technical
389
+ ### 🔧 Technical
364
390
 
365
- - `state.config.skills[]` + `state.config.plugins[]` quản độc lập
391
+ - `state.config.skills[]` + `state.config.plugins[]` quản lý độc lập
366
392
  - `openclaw.json` inject `browser` config khi Browser skill selected
367
- - Dockerfile conditional: socat, agent-browser chỉ khi cần
368
- - docker-compose: `extra_hosts` cho cả 9Router lẫn non-9Router
393
+ - Dockerfile conditional: socat, agent-browser chỉ khi cần
394
+ - docker-compose: `extra_hosts` cho cả 9Router lẫn non-9Router
369
395
 
370
396
  ---
371
397
 
372
- ## [2.0.0] 2026-03-27
398
+ ## [2.0.0] — 2026-03-27
373
399
 
374
- ### New Features
400
+ ### ✨ New Features
375
401
 
376
- - **Setup Wizard UI** Interactive web wizard (`index.html`) to configure OpenClaw bots visually
377
- - **Multi-Channel Support** Telegram, Zalo Bot API, Zalo Personal channel selection
378
- - **Multi-Provider AI** Google Gemini, Anthropic Claude, OpenAI/Codex, OpenRouter, Ollama (local)
379
- - **Plugin System** Modular plugin grid: Browser Automation, Scheduler, Memory, Web Search, RAG, Image Gen
380
- - **Config Generation** Auto-generates `openclaw.json`, `agent.yaml`, `Dockerfile`, `docker-compose.yml`
381
- - **Language Toggle** VI/EN toggle switch with SVG flag icons
382
- - **Brand Logos** Real SVG logos from [thesvg.org](https://thesvg.org) for all providers and channels
402
+ - **Setup Wizard UI** — Interactive web wizard (`index.html`) to configure OpenClaw bots visually
403
+ - **Multi-Channel Support** — Telegram, Zalo Bot API, Zalo Personal channel selection
404
+ - **Multi-Provider AI** — Google Gemini, Anthropic Claude, OpenAI/Codex, OpenRouter, Ollama (local)
405
+ - **Plugin System** — Modular plugin grid: Browser Automation, Scheduler, Memory, Web Search, RAG, Image Gen
406
+ - **Config Generation** — Auto-generates `openclaw.json`, `agent.yaml`, `Dockerfile`, `docker-compose.yml`
407
+ - **Language Toggle** — VI/EN toggle switch with SVG flag icons
408
+ - **Brand Logos** — Real SVG logos from [thesvg.org](https://thesvg.org) for all providers and channels
383
409
 
384
- ### 🎨 Design
410
+ ### 🎨 Design
385
411
 
386
412
  - Dark-themed glassmorphism UI with animated multi-layer gradients
387
413
  - Provider cards with unique colored icon backgrounds (Gemini purple, Claude orange, OpenAI green, OpenRouter violet, Ollama cyan)
388
414
  - Auto-expanding System Prompt textarea (no internal scroll)
389
415
  - Shimmer animation on title, glow effects on selected cards
390
416
 
391
- ### 📚 Documentation
417
+ ### 📚 Documentation
392
418
 
393
- - `README.md` / `README.vi.md` Full bilingual docs with multi-provider table
394
- - `SETUP.md` / `SETUP.vi.md` Technical setup guide for AI agents
419
+ - `README.md` / `README.vi.md` — Full bilingual docs with multi-provider table
420
+ - `SETUP.md` / `SETUP.vi.md` — Technical setup guide for AI agents
395
421
  - Security notice: System Prompt = personality only, framework enforces security rules
396
422
 
397
423
  ---
398
424
 
399
- ## [1.0.0] 2026-03-26
425
+ ## [1.0.0] — 2026-03-26
400
426
 
401
427
  ### Initial Release
402
428
 
@@ -405,3 +431,4 @@ Tất cả những thay đổi nổi bật của dự án sẽ được ghi ché
405
431
  - Google Gemini single provider support
406
432
  - Manual config file instructions
407
433
 
434
+