create-openclaw-bot 4.0.7 → 4.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,11 +4,15 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [4.0.7] — 2026-03-31
6
6
 
7
- ### ✨ Setup UI/UX Redesign
8
- - **Clean 3-Section UI**: Step 3 credentials section is now redesigned into three distinct categories: AI Provider, Chat Channel, and Skills, providing a cleaner, more intuitive workflow.
9
- - **9Router Auto Security**: Replaced manual API key inputs with an iOS-style toggle. When enabled, it auto-generates a secure 32-character hex key for your 9Router proxy, zero config required.
10
- - **Cross-Platform Auto Browser**: Generates a Linux/macOS `.sh` script in addition to the Windows `.bat` script for easy, out-of-the-box Chrome Debug automation on all operating systems.
11
- - **CLI Parity**: The `npx create-openclaw-bot` command now prompts for User Identity and Bot Persona, bringing the CLI to full feature parity with the GUI Wizard while keeping the setup zero-restart.
7
+ ### ✨ 9Router Stability & Ollama Cloud
8
+ - **Stable 9Router Integration (Zero Config)**: The 9Router proxy is now fully stabilized and runs securely within the Docker network via `sk-no-key`. External configuration (API keys, manual routing) is removed from `.env` and elegantly managed via the [9Router Dashboard](http://localhost:20128/dashboard).
9
+ - **Expanded Model Connectivity**: Added comprehensive support for Ollama Cloud models (*Qwen 3.5, GLM-5, MiniMax, GPT-OSS*), Kiro Haiku, Qwen Flash, and extended iFlow free tiers.
10
+ - **Smart Routing Injection**: The configuration dynamically injects the `smart-route` combination to balance logic workload across Codex, Claude Code, Gemini, and iFlow.
11
+
12
+ ### 🧹 Clean Workspace & Cross-Platform Auto-Setup
13
+ - **Zero-Clutter Generation**: Eliminated all redundant `.env.example` and static `docker-compose` sample templates. The `.bat` / CLI wizard now dynamically constructs the precise Docker environment necessary.
14
+ - **Cross-Platform Auto Browser**: Added a native macOS/Linux `start-chrome-debug.sh` boot script alongside the Windows `.bat`, providing instant 1-click Chrome Debug Mode initialization.
15
+ - **CLI Feature Parity**: `npx create-openclaw-bot` now prompts for User Identity and Bot Persona, matching the GUI Web UI capabilities exactly.
12
16
 
13
17
  ## [4.0.1] — 2026-03-31
14
18
 
package/CHANGELOG.vi.md CHANGED
@@ -4,11 +4,15 @@ Tất cả những thay đổi nổi bật của dự án sẽ được ghi ché
4
4
 
5
5
  ## [4.0.7] — 2026-03-31
6
6
 
7
- ### ✨ Nâng cấp Trải nghiệm Setup (UI/UX)
8
- - **Giao diện làm mới với 3 phần Trực quan**: Bước 3 nhập API của Setup Wizard đã được thiết kế lại thành 3 khu vực độc lập cực gọn gàng: AI Provider, Kênh chat,Skills.
9
- - **Bảo mật 9Router Tự động**: Gạt bỏ việc copy API thủ công. Thay vào đó bạn chỉ cần nhấn 1 Nút gạt bảo mật. Khi gạt bật, hệ thống tự động sinh ngẫu nhiên một khóa API siêu bảo mật dài 32 ký tự Hex cho proxy 9Router của bạn.
10
- - **Auto Browser Đa nền tảng**: Tool đã hỗ trợ việc chạy Chrome Debug Mode đa dụng tốt nhất từ trước đến nay, khi giờ đây script `npx` hiện đã tự động sinh thêm file `.sh` cho Linux/macOS song song với file `.bat` trên Windows, việc cắm auto Browser mở app Zalo Mini chưa bao giờ dễ dàng như bây giờ.
11
- - **Auto Prompt CLI (`create-openclaw-bot`)**: Tính tương đương hoàn hảo với bản Web UI! Cập nhật `npx` có thể hỏi thông tin mô tả Identity và Persona của người dùng, giúp bản Terminal Command mang đầy đủ tính năng hoàn chỉnh 100%.
7
+ ### ✨ Tối ưu 9Router & Mở rộng Ollama Cloud
8
+ - **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 lý tập trung thông minh hơn qua [9Router Dashboard](http://localhost:20128/dashboard).
9
+ - **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í.
10
+ - **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.
11
+
12
+ ### 🧹 Clean Workspace & Auto-Setup Đa Nền Tảng
13
+ - **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.
14
+ - **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.
15
+ - **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.
12
16
 
13
17
  ## [4.0.1] — 2026-03-31
14
18
 
package/README.md CHANGED
@@ -25,11 +25,15 @@ An interactive <strong>CLI tool</strong> and <strong>Setup Wizard</strong> to de
25
25
 
26
26
  ---
27
27
 
28
- ## 🆕 What's new in v4.0.7
29
- - 🔐 **9Router Auto-Security**: Secure your proxy with 1-click! Setup Wizard and CLI now auto-generate 32-char Hex API keys for 9Router, zero manual config needed.
30
- - 🪄 **Clean 3-Section UI**: Step 3 is redesigned into distinct sections (AI Provider, Channel, Skills) with an iOS-style toggle for enhanced clarity.
31
- - ⚡ **One-Command Install (`npx create-openclaw-bot`)**: Extremely convenient for VPS/SSH users — the script automatically asks for your Bot Persona, User Identity, and triggers `docker compose up -d` instantly.
32
- - 🌐 **Cross-Platform Browser Automation**: Generates both `.bat` (Windows) and `.sh` (macOS/Linux) Chrome Debug boot scripts right out of the box!
28
+ ## 🆕 What's new in OpenClaw v4
29
+
30
+ > **A massive leap in automation, stability, and provider connectivity!**
31
+
32
+ - 🚀 **Zero-Config `npx` Deployment**: Say goodbye to manually extracting `.zip` files and confusing `.env` configurations. We've introduced a fully interactive CLI `npx create-openclaw-bot` and Web Wizard that builds the entire Docker workspace dynamically!
33
+ - 🔀 **Simplified 9Router Smart Routing**: We've optimized the AI routing to default to a single `smart-route` option. OpenClaw now flawlessly load-balances across top-tier models from Anthropic, OpenAI Codex, Gemini, and Qwen, managing fallback automatically without needing you to input individual API keys.
34
+ - 🌐 **Instant Browser Automation**: Deploying Web Search and automated Browser skills is now fully handled during setup. We added built-in support for both Windows (`.bat` files) and macOS/Linux (`.sh` files) to instantly attach your local Chrome instances.
35
+ - 🧹 **Zero-Clutter Repository**: Eliminated dummy `.env.example` templates and static docker-compose files. The setup now generates precisely what you need, minimizing security risks and permission errors on native OS setups.
36
+
33
37
 
34
38
  ---
35
39
 
package/README.vi.md CHANGED
@@ -25,12 +25,14 @@ Một công cụ trực quan <strong>Setup Wizard (UI)</strong> & <strong>CLI</s
25
25
 
26
26
  ---
27
27
 
28
- ## 🆕 Có gì mới ở bản 4.0.7
29
- - 🔐 **Bảo mật 9Router Tự động**: Tích hợp nút gạt tạo API Key Hex 32-ký tự tự động cho proxy 9Router. Không lo lộ port trên VPS!
30
- - 🪄 **Giao diện 3 Phần Trực quan**: Bước 3 trên Web UI được thiết kế lại thành 3 khu vực rõ rệt (AI Provider, Kênh chat, Skills) kèm nút gạt iOS-style cực đẹp.
31
- - ⚡ **Cài đặt 1 lệnh (`npx create-openclaw-bot`)**: Cực kỳ tiện lợi cho ae cài qua VPS/SSH — script sẽ tự hỏi Persona, Identity của người dùng và kích hoạt `docker compose up -d` ngay lập tức.
32
- - 🌐 **Hỗ trợ Đa nền tảng Auto Browser**: Tự động sinh cả file `.bat` (cho Windows) `.sh` (cho macOS/Linux) để bật Chrome Debug Mode mượt mà.
33
- ---
28
+ ## 🆕 Có gì mới ở bản OpenClaw Setup v4
29
+
30
+ > **Bản cập nhật lớn nhất về Tự động hóa, Ổn định Định tuyến AI!**
31
+
32
+ - 🚀 **Cài đặt Tự động với `npx`**: Tạm biệt việc tải file `.zip` thủ công hay cấu hình `.env` phức tạp. Giờ đây bạn chỉ cần chạy lệnh CLI `npx create-openclaw-bot` hoặc dùng Web Wizard để hệ thống tự động sinh ra toàn bộ file cần thiết!
33
+ - 🔀 **Đơn giản hóa 9Router Smart Routing**: Hệ thống định tuyến AI giờ đây mặc định trỏ về `smart-route`. Nền tảng tự động luân chuyển và dự phòng (fallback) qua các model flagship (Anthropic, OpenAI Codex, Gemini, Qwen) mà không cần cấu hình thêm API key rườm rà.
34
+ - 🌐 **Browser Automation Đa nền tảng**: Tích hợp sẵn tính năng Web Search và Tự động hóa trình duyệt ngay lúc cài đặt. Không chỉ hỗ trợ Windows (file `.bat`), mà còn bổ sung file `.sh` giúp Mac/Linux chạy mượt mà.
35
+ - 🧹 **Tối ưu triệt để Workspace**: Xoá hoàn toàn các file "rác" như `.env.example` hay docker template dư thừa. Setup Wizard chỉ giữ lại những gì thực sự hoạt động, tối ưu bảo mật và triệt tiêu mọi lỗi khi chạy.
34
36
 
35
37
  ## ✨ Tính năng
36
38
 
@@ -97,6 +99,7 @@ Dùng NPX là cách cài chuẩn nhất:
97
99
  <br>
98
100
 
99
101
  1. **Clone repo:**
102
+
100
103
  ```bash
101
104
  git clone https://github.com/tuanminhhole/openclaw-setup.git
102
105
  cd openclaw-setup
@@ -110,7 +113,6 @@ Dùng NPX là cách cài chuẩn nhất:
110
113
 
111
114
  </details>
112
115
 
113
-
114
116
  ### 3️⃣ Cách C — Dùng AI Agent (Antigravity)
115
117
 
116
118
  1. Mở [Antigravity IDE](https://antigravity.dev/)
@@ -158,6 +160,7 @@ Trên máy tính của bạn trong Docker container. Khi tắt máy, bot cũng t
158
160
  docker compose down # Tắt
159
161
  docker compose up -d # Bật
160
162
  ```
163
+
161
164
  </details>
162
165
 
163
166
  <details>
package/cli.js CHANGED
@@ -109,20 +109,7 @@ async function main() {
109
109
  // 5b. User Info
110
110
  const userInfo = await input({ message: isVi ? '👤 Thông tin về bạn (ngôn ngữ, múi giờ, sở thích...) — bỏ trống OK:' : '👤 About you (language, timezone, interests...) — leave empty OK:', default: '' });
111
111
 
112
- // 5c. 9Router Security (optional auto-generate key)
113
- let routerApiKey = '';
114
- if (providerKey === '9router') {
115
- const wantSecurity = await confirm({
116
- message: isVi ? '🔐 Bảo mật 9Router? (tự tạo API Key, khuyên dùng khi chạy trên VPS)' : '🔐 Secure 9Router? (auto-generates API Key, recommended for VPS)',
117
- default: false
118
- });
119
- if (wantSecurity) {
120
- const { randomUUID } = await import('crypto');
121
- routerApiKey = 'oc9r-' + randomUUID().replace(/-/g, '');
122
- console.log(chalk.magenta(` 🎲 ${isVi ? 'API Key đã tạo:' : 'Generated API Key:'} ${routerApiKey}`));
123
- console.log(chalk.gray(` ${isVi ? '(Lưu lại nếu cần — key này được cấu hình tự động)' : '(Save if needed — this key is auto-configured)'}`));
124
- }
125
- }
112
+ // 5c. 9Router info (API keys are managed via dashboard after Docker starts)
126
113
 
127
114
  // 6. Project Dir
128
115
  let defaultDir = process.cwd();
@@ -147,9 +134,6 @@ async function main() {
147
134
  } else if (!provider.isProxy) {
148
135
  envContent += `${provider.envKey}=${providerKeyVal}\n`;
149
136
  }
150
- if (providerKey === '9router' && routerApiKey) {
151
- envContent += `\n# 9Router API Key\nROUTER_API_KEY=${routerApiKey}\n`;
152
- }
153
137
 
154
138
  if (channelKey === 'telegram') {
155
139
  envContent += `TELEGRAM_BOT_TOKEN=${botToken}\n`;
@@ -203,16 +187,14 @@ ${selectedSkills.includes('browser') ? ` extra_hosts:
203
187
 
204
188
  9router:
205
189
  image: node:22-slim
206
- container_name: 9router-\${agentId}
190
+ container_name: 9router-${agentId}
207
191
  restart: always
208
192
  entrypoint: >
209
- /bin/sh -c "npm install -g 9router && [ ! -f /root/.9router/db.json ] && echo '{\\"combos\\":[{\\"id\\":\\"smart-route\\",\\"name\\":\\"smart-route\\",\\"alias\\":\\"smart-route\\",\\"models\\":[\\"if/qwen3-coder-plus\\",\\"if/kimi-k2\\",\\"if/glm-4.7\\",\\"if/deepseek-r1\\",\\"qw/qwen3-coder-plus\\",\\"kr/claude-sonnet-4.5\\",\\"gc/gemini-3-flash-preview\\",\\"cc/claude-opus-4-6\\",\\"cx/gpt-5.3-codex\\",\\"gh/gpt-5.4\\"]}]}' > /root/.9router/db.json; 9router"
193
+ /bin/sh -c "npm install -g 9router && [ ! -f /root/.9router/db.json ] && echo '{\\"combos\\":[{\\"id\\":\\"smart-route\\",\\"name\\":\\"smart-route\\",\\"alias\\":\\"smart-route\\",\\"models\\":[\\"cc/claude-opus-4-6\\",\\"cc/claude-sonnet-4-6\\",\\"cc/claude-opus-4-5-20251101\\",\\"cc/claude-sonnet-4-5-20250929\\",\\"cc/claude-haiku-4-5-20251001\\",\\"cx/gpt-5.4\\",\\"cx/gpt-5.3-codex\\",\\"cx/gpt-5.3-codex-xhigh\\",\\"cx/gpt-5.3-codex-high\\",\\"cx/gpt-5.3-codex-low\\",\\"cx/gpt-5.3-codex-none\\",\\"cx/gpt-5.3-codex-spark\\",\\"cx/gpt-5.1-codex-mini\\",\\"cx/gpt-5.1-codex-mini-high\\",\\"cx/gpt-5.2-codex\\",\\"cx/gpt-5.2\\",\\"cx/gpt-5.1-codex-max\\",\\"cx/gpt-5.1-codex\\",\\"cx/gpt-5.1\\",\\"cx/gpt-5-codex\\",\\"cx/gpt-5-codex-mini\\",\\"gc/gemini-3-flash-preview\\",\\"gc/gemini-3-pro-preview\\",\\"gh/gpt-5.4\\",\\"gh/gpt-5.3-codex\\",\\"gh/gpt-5.2-codex\\",\\"gh/gpt-5.2\\",\\"gh/gpt-5.1-codex-max\\",\\"gh/gpt-5.1-codex\\",\\"gh/gpt-5.1-codex-mini\\",\\"gh/gpt-5.1\\",\\"gh/gpt-5\\",\\"gh/gpt-5-mini\\",\\"gh/gpt-5-codex\\",\\"gh/gpt-4.1\\",\\"gh/gpt-4o\\",\\"gh/gpt-4o-mini\\",\\"gh/gpt-4\\",\\"gh/gpt-3.5-turbo\\",\\"gh/claude-opus-4.6\\",\\"gh/claude-sonnet-4.6\\",\\"gh/claude-sonnet-4.5\\",\\"gh/claude-opus-4.5\\",\\"gh/claude-opus-4.1\\",\\"gh/claude-sonnet-4\\",\\"gh/claude-haiku-4.5\\",\\"gh/gemini-3-pro-preview\\",\\"gh/gemini-3-flash-preview\\",\\"gh/gemini-2.5-pro\\",\\"gh/grok-code-fast-1\\",\\"gh/oswe-vscode-prime\\",\\"cu/default\\",\\"cu/claude-4.6-opus-max\\",\\"cu/claude-4.6-sonnet-medium-thinking\\",\\"cu/claude-4.5-opus-high-thinking\\",\\"cu/claude-4.5-opus-high\\",\\"cu/claude-4.5-sonnet-thinking\\",\\"cu/claude-4.5-sonnet\\",\\"cu/claude-4.5-haiku\\",\\"cu/claude-4.5-opus\\",\\"cu/gpt-5.3-codex\\",\\"cu/gpt-5.2-codex\\",\\"cu/gpt-5.2\\",\\"cu/kimi-k2.5\\",\\"cu/gemini-3-flash-preview\\",\\"kc/anthropic/claude-sonnet-4-20250514\\",\\"kc/anthropic/claude-opus-4-20250514\\",\\"kc/google/gemini-2.5-pro\\",\\"kc/google/gemini-2.5-flash\\",\\"kc/openai/gpt-4.1\\",\\"kc/openai/o3\\",\\"kc/deepseek/deepseek-chat\\",\\"kc/deepseek/deepseek-reasoner\\",\\"cl/anthropic/claude-sonnet-4.6\\",\\"cl/anthropic/claude-opus-4.6\\",\\"cl/openai/gpt-5.3-codex\\",\\"cl/openai/gpt-5.4\\",\\"cl/google/gemini-3.1-pro-preview\\",\\"cl/google/gemini-3.1-flash-lite-preview\\",\\"cl/kwaipilot/kat-coder-pro\\",\\"if/qwen3-coder-plus\\",\\"if/kimi-k2\\",\\"if/glm-4.7\\",\\"if/deepseek-r1\\",\\"if/deepseek-v3.2\\",\\"if/deepseek-v3.1\\",\\"if/deepseek-v3\\",\\"if/qwen3-max\\",\\"if/qwen3-235b\\",\\"if/qwen3-32b\\",\\"if/iflow-rome-30ba3b\\",\\"qw/qwen3-coder-plus\\",\\"qw/qwen3-coder-flash\\",\\"qw/vision-model\\",\\"qw/coder-model\\",\\"kr/claude-sonnet-4.5\\",\\"kr/claude-haiku-4.5\\",\\"kr/deepseek-3.2\\",\\"kr/deepseek-3.1\\",\\"kr/qwen3-coder-next\\",\\"kmc/kimi-k2.5\\",\\"kmc/kimi-k2.5-thinking\\",\\"kmc/kimi-latest\\",\\"glm/glm-5.1\\",\\"glm/glm-5\\",\\"glm/glm-4.7\\",\\"minimax/MiniMax-M2.7\\",\\"minimax/MiniMax-M2.5\\",\\"minimax/MiniMax-M2.1\\",\\"kimi/kimi-k2.5\\",\\"kimi/kimi-k2.5-thinking\\",\\"kimi/kimi-latest\\",\\"deepseek/deepseek-chat\\",\\"deepseek/deepseek-reasoner\\",\\"xai/grok-4\\",\\"xai/grok-4-fast-reasoning\\",\\"xai/grok-code-fast-1\\",\\"mistral/mistral-large-latest\\",\\"mistral/codestral-latest\\",\\"groq/llama-3.3-70b-versatile\\",\\"groq/openai/gpt-oss-120b\\",\\"cerebras/gpt-oss-120b\\",\\"alicode/qwen3.5-plus\\",\\"alicode/qwen3-coder-plus\\"]}]}' > /root/.9router/db.json; 9router"
210
194
  environment:
211
195
  - PORT=20128
212
196
  - HOSTNAME=0.0.0.0
213
- - CI=true${routerApiKey ? `\n - API_KEY=\${ROUTER_API_KEY}` : ''}
214
- env_file:
215
- - .env
197
+ - CI=true
216
198
  volumes:
217
199
  - 9router-data:/root/.9router
218
200
  ports:
@@ -238,9 +220,9 @@ ${selectedSkills.includes('browser') ? ` extra_hosts:
238
220
 
239
221
  let authProfilesJson = {};
240
222
  if (providerKey && !provider.isLocal) {
241
- const authProviderName = providerKey === '9router' ? '9router' : 'openai'; // fallback to openai format for standard providers initially
223
+ const authProviderName = providerKey === '9router' ? '9router' : 'openai';
242
224
  const authProfileId = providerKey === '9router' ? '9router-proxy' : `${authProviderName}:default`;
243
- const authKeyValue = providerKey === '9router' ? (routerApiKey || 'sk-no-key') : providerKeyVal;
225
+ const authKeyValue = providerKey === '9router' ? 'sk-no-key' : providerKeyVal;
244
226
 
245
227
  authProfilesJson = {
246
228
  version: 1,
@@ -287,10 +269,11 @@ ${selectedSkills.includes('browser') ? ` extra_hosts:
287
269
  providers: {
288
270
  '9router': {
289
271
  baseUrl: 'http://9router:20128/v1',
290
- apiKey: routerApiKey || 'sk-no-key',
272
+ apiKey: 'sk-no-key',
291
273
  api: 'openai-completions',
292
274
  models: [
293
275
  { id: 'smart-route', name: 'Smart Proxy (Auto Route)', contextWindow: 200000, maxTokens: 8192 },
276
+ // OAuth Providers
294
277
  { id: 'cc/claude-opus-4-6', name: 'Claude Opus 4.6', contextWindow: 200000, maxTokens: 8192 },
295
278
  { id: 'cc/claude-sonnet-4-6', name: 'Claude Sonnet 4.6', contextWindow: 200000, maxTokens: 8192 },
296
279
  { id: 'cx/gpt-5.4', name: 'GPT 5.4 (Codex)', contextWindow: 128000, maxTokens: 8192 },
@@ -298,14 +281,28 @@ ${selectedSkills.includes('browser') ? ` extra_hosts:
298
281
  { id: 'gh/gpt-5.4', name: 'GPT 5.4 (Copilot)', contextWindow: 128000, maxTokens: 8192 },
299
282
  { id: 'gh/claude-opus-4.6', name: 'Claude Opus 4.6 (Copilot)', contextWindow: 200000, maxTokens: 8192 },
300
283
  { id: 'gc/gemini-3-flash-preview', name: 'Gemini 3 Flash (FREE)', contextWindow: 1000000, maxTokens: 8192 },
301
- { id: 'if/qwen3-coder-plus', name: 'Qwen3 Coder Plus (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
284
+ // Free Tier Providers
285
+ { id: 'if/qwen3-coder-plus', name: 'Qwen3 Coder+ (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
302
286
  { id: 'if/kimi-k2', name: 'Kimi K2 (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
287
+ { id: 'if/kimi-k2-thinking', name: 'Kimi K2 Thinking (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
303
288
  { id: 'if/glm-4.7', name: 'GLM 4.7 (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
289
+ { id: 'if/minimax-m2', name: 'MiniMax M2 (iFlow FREE)', contextWindow: 1000000, maxTokens: 8192 },
304
290
  { id: 'if/deepseek-r1', name: 'DeepSeek R1 (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
305
- { id: 'qw/qwen3-coder-plus', name: 'Qwen3 Coder Plus (Qwen FREE)', contextWindow: 128000, maxTokens: 8192 },
291
+ { id: 'qw/qwen3-coder-plus', name: 'Qwen3 Coder+ (Qwen FREE)', contextWindow: 128000, maxTokens: 8192 },
292
+ { id: 'qw/qwen3-coder-flash', name: 'Qwen3 Coder Flash (Qwen FREE)', contextWindow: 128000, maxTokens: 8192 },
306
293
  { id: 'kr/claude-sonnet-4.5', name: 'Claude Sonnet 4.5 (Kiro FREE)', contextWindow: 200000, maxTokens: 8192 },
294
+ { id: 'kr/claude-haiku-4.5', name: 'Claude Haiku 4.5 (Kiro FREE)', contextWindow: 200000, maxTokens: 8192 },
295
+ // Ollama Cloud
296
+ { id: 'ollama/qwen3.5', name: 'Qwen 3.5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
297
+ { id: 'ollama/kimi-k2.5', name: 'Kimi K2.5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
298
+ { id: 'ollama/glm-5', name: 'GLM 5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
299
+ { id: 'ollama/glm-4.7-flash', name: 'GLM 4.7 Flash (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
300
+ { id: 'ollama/minimax-m2.5', name: 'MiniMax M2.5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
301
+ { id: 'ollama/gpt-oss:120b', name: 'GPT-OSS 120B (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
302
+ // API Key Providers
307
303
  { id: 'glm/glm-4.7', name: 'GLM 4.7 ($0.6/1M)', contextWindow: 128000, maxTokens: 8192 },
308
304
  { id: 'minimax/MiniMax-M2.1', name: 'MiniMax M2.1 ($0.20/1M)', contextWindow: 1000000, maxTokens: 8192 },
305
+ { id: 'kimi/kimi-latest', name: 'Kimi Latest ($0.90/1M)', contextWindow: 128000, maxTokens: 8192 },
309
306
  { id: 'deepseek/deepseek-chat', name: 'DeepSeek V3.2 Chat', contextWindow: 128000, maxTokens: 8192 },
310
307
  ]
311
308
  }
@@ -425,6 +422,18 @@ fi
425
422
  if (code === 0) {
426
423
  console.log(chalk.green(`\n🎉 ${isVi ? 'Setup hoàn tất! Bot đang chạy.' : 'Setup complete! Bot is running.'}`));
427
424
 
425
+ if (providerKey === '9router') {
426
+ console.log(chalk.yellow(`\n🔀 ${isVi
427
+ ? '9Router Dashboard: http://localhost:20128/dashboard'
428
+ : '9Router Dashboard: http://localhost:20128/dashboard'}`));
429
+ console.log(chalk.gray(isVi
430
+ ? ' → Mở dashboard → đăng nhập OAuth để kết nối các Provider (iFlow, Gemini CLI, Claude Code...)'
431
+ : ' → Open dashboard → OAuth login to connect Providers (iFlow, Gemini CLI, Claude Code...)'));
432
+ console.log(chalk.gray(isVi
433
+ ? ' → Sau khi kết nối provider, bot sẽ tự động hoạt động qua combo "smart-route"'
434
+ : ' → After connecting providers, bot works automatically via "smart-route" combo'));
435
+ }
436
+
428
437
  if (channelKey === 'telegram') {
429
438
  console.log(chalk.cyan(`\n💬 ${isVi
430
439
  ? 'Nhắn tin cho bot trên Telegram là dùng được ngay!'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "4.0.7",
3
+ "version": "4.0.8",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "cli.js",
6
6
  "bin": {
package/setup.js CHANGED
@@ -129,172 +129,7 @@
129
129
  free: true,
130
130
  isProxy: true,
131
131
  models: [
132
- // ── Smart Route (Combo) ──
133
- { id: '9router/smart-route', name: 'Smart Proxy (Auto Route)', descVi: 'Tự động luân chuyển FREE models — không tốn xu', descEn: 'Auto-routing across FREE providers — zero cost', badgeVi: '🌟 Khuyên dùng', badgeEn: '🌟 Recommended' },
134
-
135
- // ── OAuth: Claude Code (cc/) ──
136
- { id: '9router/cc/claude-opus-4-6', name: 'Claude Opus 4.6', descVi: 'Mạnh nhất Anthropic', descEn: 'Strongest Anthropic', badge: '✨ Claude Code' },
137
- { id: '9router/cc/claude-sonnet-4-6', name: 'Claude Sonnet 4.6', descVi: 'Nhanh, thông minh', descEn: 'Fast & smart', badge: '✨ Claude Code' },
138
- { id: '9router/cc/claude-opus-4-5-20251101', name: 'Claude 4.5 Opus', descVi: 'Phiên bản 4.5 ổn định', descEn: 'Stable 4.5 version', badge: '✨ Claude Code' },
139
- { id: '9router/cc/claude-sonnet-4-5-20250929', name: 'Claude 4.5 Sonnet', descVi: 'Cân bằng tốc độ-chất lượng', descEn: 'Speed-quality balance', badge: '✨ Claude Code' },
140
- { id: '9router/cc/claude-haiku-4-5-20251001', name: 'Claude 4.5 Haiku', descVi: 'Siêu nhanh, nhẹ', descEn: 'Ultra fast & light', badge: '✨ Claude Code' },
141
-
142
- // ── OAuth: OpenAI Codex (cx/) ──
143
- { id: '9router/cx/gpt-5.4', name: 'GPT 5.4', descVi: 'Flagship mới nhất OpenAI', descEn: 'Latest OpenAI flagship', badge: '🤖 Codex' },
144
- { id: '9router/cx/gpt-5.3-codex', name: 'GPT 5.3 Codex', descVi: 'Tối ưu code generation', descEn: 'Code generation optimized', badge: '🤖 Codex' },
145
- { id: '9router/cx/gpt-5.3-codex-xhigh', name: 'GPT 5.3 Codex (xHigh)', descVi: 'Suy luận tối đa', descEn: 'Maximum reasoning', badge: '🤖 Codex' },
146
- { id: '9router/cx/gpt-5.3-codex-high', name: 'GPT 5.3 Codex (High)', descVi: 'Suy luận cao', descEn: 'High reasoning', badge: '🤖 Codex' },
147
- { id: '9router/cx/gpt-5.3-codex-low', name: 'GPT 5.3 Codex (Low)', descVi: 'Nhanh, tiết kiệm', descEn: 'Fast & economical', badge: '🤖 Codex' },
148
- { id: '9router/cx/gpt-5.3-codex-none', name: 'GPT 5.3 Codex (None)', descVi: 'Không thinking, nhanh nhất', descEn: 'No thinking, fastest', badge: '🤖 Codex' },
149
- { id: '9router/cx/gpt-5.3-codex-spark', name: 'GPT 5.3 Codex Spark', descVi: 'Phiên bản Spark', descEn: 'Spark edition', badge: '🤖 Codex' },
150
- { id: '9router/cx/gpt-5.1-codex-mini', name: 'GPT 5.1 Codex Mini', descVi: 'Mini, siêu nhanh', descEn: 'Mini, ultra fast', badge: '🤖 Codex' },
151
- { id: '9router/cx/gpt-5.1-codex-mini-high', name: 'GPT 5.1 Codex Mini (High)', descVi: 'Mini + suy luận cao', descEn: 'Mini + high reasoning', badge: '🤖 Codex' },
152
- { id: '9router/cx/gpt-5.2-codex', name: 'GPT 5.2 Codex', descVi: 'Ổn định, code tốt', descEn: 'Stable, great coding', badge: '🤖 Codex' },
153
- { id: '9router/cx/gpt-5.2', name: 'GPT 5.2', descVi: 'Đa năng', descEn: 'Versatile', badge: '🤖 Codex' },
154
- { id: '9router/cx/gpt-5.1-codex-max', name: 'GPT 5.1 Codex Max', descVi: 'Sức mạnh tối đa 5.1', descEn: 'Max power 5.1', badge: '🤖 Codex' },
155
- { id: '9router/cx/gpt-5.1-codex', name: 'GPT 5.1 Codex', descVi: 'Codex 5.1', descEn: 'Codex 5.1', badge: '🤖 Codex' },
156
- { id: '9router/cx/gpt-5.1', name: 'GPT 5.1', descVi: 'GPT 5.1 base', descEn: 'GPT 5.1 base', badge: '🤖 Codex' },
157
- { id: '9router/cx/gpt-5-codex', name: 'GPT 5 Codex', descVi: 'GPT 5 Codex', descEn: 'GPT 5 Codex', badge: '🤖 Codex' },
158
- { id: '9router/cx/gpt-5-codex-mini', name: 'GPT 5 Codex Mini', descVi: 'GPT 5 Mini', descEn: 'GPT 5 Mini', badge: '🤖 Codex' },
159
-
160
- // ── OAuth: Gemini CLI (gc/) — FREE 180K/month ──
161
- { id: '9router/gc/gemini-3-flash-preview', name: 'Gemini 3 Flash Preview', descVi: 'Google miễn phí 180K/tháng', descEn: 'Google free 180K/month', badge: '🆓 Gemini CLI' },
162
- { id: '9router/gc/gemini-3-pro-preview', name: 'Gemini 3 Pro Preview', descVi: 'Gemini Pro miễn phí', descEn: 'Gemini Pro free', badge: '🆓 Gemini CLI' },
163
-
164
- // ── OAuth: GitHub Copilot (gh/) ──
165
- { id: '9router/gh/gpt-5.4', name: 'GPT 5.4 (Copilot)', descVi: 'Flagship qua Copilot', descEn: 'Flagship via Copilot', badge: '💻 Copilot' },
166
- { id: '9router/gh/gpt-5.3-codex', name: 'GPT 5.3 Codex (Copilot)', descVi: 'Codex qua Copilot', descEn: 'Codex via Copilot', badge: '💻 Copilot' },
167
- { id: '9router/gh/gpt-5.2-codex', name: 'GPT 5.2 Codex (Copilot)', descVi: 'GPT 5.2 Codex', descEn: 'GPT 5.2 Codex', badge: '💻 Copilot' },
168
- { id: '9router/gh/gpt-5.2', name: 'GPT 5.2 (Copilot)', descVi: 'GPT 5.2', descEn: 'GPT 5.2', badge: '💻 Copilot' },
169
- { id: '9router/gh/gpt-5.1-codex-max', name: 'GPT 5.1 Codex Max (Copilot)', descVi: 'Max thinking', descEn: 'Max thinking', badge: '💻 Copilot' },
170
- { id: '9router/gh/gpt-5.1-codex', name: 'GPT 5.1 Codex (Copilot)', descVi: 'Codex 5.1', descEn: 'Codex 5.1', badge: '💻 Copilot' },
171
- { id: '9router/gh/gpt-5.1-codex-mini', name: 'GPT 5.1 Codex Mini (Copilot)', descVi: 'Mini 5.1', descEn: 'Mini 5.1', badge: '💻 Copilot' },
172
- { id: '9router/gh/gpt-5.1', name: 'GPT 5.1 (Copilot)', descVi: 'GPT 5.1', descEn: 'GPT 5.1', badge: '💻 Copilot' },
173
- { id: '9router/gh/gpt-5', name: 'GPT 5 (Copilot)', descVi: 'GPT 5', descEn: 'GPT 5', badge: '💻 Copilot' },
174
- { id: '9router/gh/gpt-5-mini', name: 'GPT 5 Mini (Copilot)', descVi: 'GPT 5 Mini', descEn: 'GPT 5 Mini', badge: '💻 Copilot' },
175
- { id: '9router/gh/gpt-5-codex', name: 'GPT 5 Codex (Copilot)', descVi: 'GPT 5 Codex', descEn: 'GPT 5 Codex', badge: '💻 Copilot' },
176
- { id: '9router/gh/gpt-4.1', name: 'GPT 4.1 (Copilot)', descVi: 'GPT 4.1', descEn: 'GPT 4.1', badge: '💻 Copilot' },
177
- { id: '9router/gh/gpt-4o', name: 'GPT 4o (Copilot)', descVi: 'GPT 4o', descEn: 'GPT 4o', badge: '💻 Copilot' },
178
- { id: '9router/gh/gpt-4o-mini', name: 'GPT 4o Mini (Copilot)', descVi: 'GPT 4o Mini', descEn: 'GPT 4o Mini', badge: '💻 Copilot' },
179
- { id: '9router/gh/gpt-4', name: 'GPT 4 (Copilot)', descVi: 'GPT 4', descEn: 'GPT 4', badge: '💻 Copilot' },
180
- { id: '9router/gh/gpt-3.5-turbo', name: 'GPT 3.5 Turbo (Copilot)', descVi: 'GPT 3.5 Turbo', descEn: 'GPT 3.5 Turbo', badge: '💻 Copilot' },
181
- { id: '9router/gh/claude-opus-4.6', name: 'Claude Opus 4.6 (Copilot)', descVi: 'Claude Opus qua Copilot', descEn: 'Claude Opus via Copilot', badge: '💻 Copilot' },
182
- { id: '9router/gh/claude-sonnet-4.6', name: 'Claude Sonnet 4.6 (Copilot)', descVi: 'Claude Sonnet qua Copilot', descEn: 'Claude Sonnet via Copilot', badge: '💻 Copilot' },
183
- { id: '9router/gh/claude-sonnet-4.5', name: 'Claude Sonnet 4.5 (Copilot)', descVi: 'Claude 4.5 Sonnet', descEn: 'Claude 4.5 Sonnet', badge: '💻 Copilot' },
184
- { id: '9router/gh/claude-opus-4.5', name: 'Claude Opus 4.5 (Copilot)', descVi: 'Claude 4.5 Opus', descEn: 'Claude 4.5 Opus', badge: '💻 Copilot' },
185
- { id: '9router/gh/claude-opus-4.1', name: 'Claude Opus 4.1 (Copilot)', descVi: 'Claude 4.1 Opus', descEn: 'Claude 4.1 Opus', badge: '💻 Copilot' },
186
- { id: '9router/gh/claude-sonnet-4', name: 'Claude Sonnet 4 (Copilot)', descVi: 'Claude 4 Sonnet', descEn: 'Claude 4 Sonnet', badge: '💻 Copilot' },
187
- { id: '9router/gh/claude-haiku-4.5', name: 'Claude Haiku 4.5 (Copilot)', descVi: 'Claude 4.5 Haiku', descEn: 'Claude 4.5 Haiku', badge: '💻 Copilot' },
188
- { id: '9router/gh/gemini-3-pro-preview', name: 'Gemini 3 Pro (Copilot)', descVi: 'Gemini Pro qua Copilot', descEn: 'Gemini Pro via Copilot', badge: '💻 Copilot' },
189
- { id: '9router/gh/gemini-3-flash-preview', name: 'Gemini 3 Flash (Copilot)', descVi: 'Gemini Flash qua Copilot', descEn: 'Gemini Flash via Copilot', badge: '💻 Copilot' },
190
- { id: '9router/gh/gemini-2.5-pro', name: 'Gemini 2.5 Pro (Copilot)', descVi: 'Gemini 2.5 Pro', descEn: 'Gemini 2.5 Pro', badge: '💻 Copilot' },
191
- { id: '9router/gh/grok-code-fast-1', name: 'Grok Code Fast (Copilot)', descVi: 'xAI Grok qua Copilot', descEn: 'xAI Grok via Copilot', badge: '💻 Copilot' },
192
- { id: '9router/gh/oswe-vscode-prime', name: 'Raptor Mini (Copilot)', descVi: 'Raptor Mini', descEn: 'Raptor Mini', badge: '💻 Copilot' },
193
-
194
- // ── OAuth: Cursor IDE (cu/) ──
195
- { id: '9router/cu/default', name: 'Cursor Auto', descVi: 'Server tự chọn model', descEn: 'Server picks model', badge: '🎯 Cursor' },
196
- { id: '9router/cu/claude-4.6-opus-max', name: 'Claude 4.6 Opus Max (Cursor)', descVi: 'Opus Max, mạnh nhất', descEn: 'Opus Max, strongest', badge: '🎯 Cursor' },
197
- { id: '9router/cu/claude-4.6-sonnet-medium-thinking', name: 'Claude 4.6 Sonnet Thinking (Cursor)', descVi: 'Sonnet + thinking', descEn: 'Sonnet + thinking', badge: '🎯 Cursor' },
198
- { id: '9router/cu/claude-4.5-opus-high-thinking', name: 'Claude 4.5 Opus High Thinking (Cursor)', descVi: 'Opus 4.5 + thinking', descEn: 'Opus 4.5 + thinking', badge: '🎯 Cursor' },
199
- { id: '9router/cu/claude-4.5-opus-high', name: 'Claude 4.5 Opus High (Cursor)', descVi: 'Opus 4.5 High', descEn: 'Opus 4.5 High', badge: '🎯 Cursor' },
200
- { id: '9router/cu/claude-4.5-sonnet-thinking', name: 'Claude 4.5 Sonnet Thinking (Cursor)', descVi: 'Sonnet 4.5 + thinking', descEn: 'Sonnet 4.5 + thinking', badge: '🎯 Cursor' },
201
- { id: '9router/cu/claude-4.5-sonnet', name: 'Claude 4.5 Sonnet (Cursor)', descVi: 'Sonnet 4.5', descEn: 'Sonnet 4.5', badge: '🎯 Cursor' },
202
- { id: '9router/cu/claude-4.5-haiku', name: 'Claude 4.5 Haiku (Cursor)', descVi: 'Haiku 4.5', descEn: 'Haiku 4.5', badge: '🎯 Cursor' },
203
- { id: '9router/cu/claude-4.5-opus', name: 'Claude 4.5 Opus (Cursor)', descVi: 'Opus 4.5', descEn: 'Opus 4.5', badge: '🎯 Cursor' },
204
- { id: '9router/cu/gpt-5.3-codex', name: 'GPT 5.3 Codex (Cursor)', descVi: 'GPT 5.3 Codex', descEn: 'GPT 5.3 Codex', badge: '🎯 Cursor' },
205
- { id: '9router/cu/gpt-5.2-codex', name: 'GPT 5.2 Codex (Cursor)', descVi: 'GPT 5.2 Codex', descEn: 'GPT 5.2 Codex', badge: '🎯 Cursor' },
206
- { id: '9router/cu/gpt-5.2', name: 'GPT 5.2 (Cursor)', descVi: 'GPT 5.2', descEn: 'GPT 5.2', badge: '🎯 Cursor' },
207
- { id: '9router/cu/kimi-k2.5', name: 'Kimi K2.5 (Cursor)', descVi: 'Kimi K2.5', descEn: 'Kimi K2.5', badge: '🎯 Cursor' },
208
- { id: '9router/cu/gemini-3-flash-preview', name: 'Gemini 3 Flash (Cursor)', descVi: 'Gemini Flash', descEn: 'Gemini Flash', badge: '🎯 Cursor' },
209
-
210
- // ── OAuth: KiloCode (kc/) ──
211
- { id: '9router/kc/anthropic/claude-sonnet-4-20250514', name: 'Claude Sonnet 4 (KiloCode)', descVi: 'Claude Sonnet 4', descEn: 'Claude Sonnet 4', badge: '🔷 KiloCode' },
212
- { id: '9router/kc/anthropic/claude-opus-4-20250514', name: 'Claude Opus 4 (KiloCode)', descVi: 'Claude Opus 4', descEn: 'Claude Opus 4', badge: '🔷 KiloCode' },
213
- { id: '9router/kc/google/gemini-2.5-pro', name: 'Gemini 2.5 Pro (KiloCode)', descVi: 'Gemini 2.5 Pro', descEn: 'Gemini 2.5 Pro', badge: '🔷 KiloCode' },
214
- { id: '9router/kc/google/gemini-2.5-flash', name: 'Gemini 2.5 Flash (KiloCode)', descVi: 'Gemini 2.5 Flash', descEn: 'Gemini 2.5 Flash', badge: '🔷 KiloCode' },
215
- { id: '9router/kc/openai/gpt-4.1', name: 'GPT 4.1 (KiloCode)', descVi: 'GPT 4.1', descEn: 'GPT 4.1', badge: '🔷 KiloCode' },
216
- { id: '9router/kc/openai/o3', name: 'O3 (KiloCode)', descVi: 'O3 Reasoning', descEn: 'O3 Reasoning', badge: '🔷 KiloCode' },
217
- { id: '9router/kc/deepseek/deepseek-chat', name: 'DeepSeek Chat (KiloCode)', descVi: 'DeepSeek V3.2', descEn: 'DeepSeek V3.2', badge: '🔷 KiloCode' },
218
- { id: '9router/kc/deepseek/deepseek-reasoner', name: 'DeepSeek Reasoner (KiloCode)', descVi: 'DeepSeek Reasoner', descEn: 'DeepSeek Reasoner', badge: '🔷 KiloCode' },
219
-
220
- // ── OAuth: Cline (cl/) ──
221
- { id: '9router/cl/anthropic/claude-sonnet-4.6', name: 'Claude Sonnet 4.6 (Cline)', descVi: 'Sonnet 4.6 qua Cline', descEn: 'Sonnet 4.6 via Cline', badge: '🔶 Cline' },
222
- { id: '9router/cl/anthropic/claude-opus-4.6', name: 'Claude Opus 4.6 (Cline)', descVi: 'Opus 4.6 qua Cline', descEn: 'Opus 4.6 via Cline', badge: '🔶 Cline' },
223
- { id: '9router/cl/openai/gpt-5.3-codex', name: 'GPT 5.3 Codex (Cline)', descVi: 'GPT 5.3 qua Cline', descEn: 'GPT 5.3 via Cline', badge: '🔶 Cline' },
224
- { id: '9router/cl/openai/gpt-5.4', name: 'GPT 5.4 (Cline)', descVi: 'GPT 5.4 qua Cline', descEn: 'GPT 5.4 via Cline', badge: '🔶 Cline' },
225
- { id: '9router/cl/google/gemini-3.1-pro-preview', name: 'Gemini 3.1 Pro (Cline)', descVi: 'Gemini 3.1 Pro', descEn: 'Gemini 3.1 Pro', badge: '🔶 Cline' },
226
- { id: '9router/cl/google/gemini-3.1-flash-lite-preview', name: 'Gemini 3.1 Flash Lite (Cline)', descVi: 'Gemini 3.1 Flash Lite', descEn: 'Gemini 3.1 Flash Lite', badge: '🔶 Cline' },
227
- { id: '9router/cl/kwaipilot/kat-coder-pro', name: 'KAT Coder Pro (Cline)', descVi: 'KAT Coder Pro', descEn: 'KAT Coder Pro', badge: '🔶 Cline' },
228
-
229
- // ── OAuth FREE: iFlow (if/) — Unlimited ──
230
- { id: '9router/if/qwen3-coder-plus', name: 'Qwen3 Coder Plus (iFlow)', descVi: 'Miễn phí không giới hạn', descEn: 'Free unlimited', badge: '🆓 iFlow' },
231
- { id: '9router/if/kimi-k2', name: 'Kimi K2 (iFlow)', descVi: 'Kimi K2 miễn phí', descEn: 'Kimi K2 free', badge: '🆓 iFlow' },
232
- { id: '9router/if/glm-4.7', name: 'GLM 4.7 (iFlow)', descVi: 'GLM miễn phí', descEn: 'GLM free', badge: '🆓 iFlow' },
233
- { id: '9router/if/deepseek-r1', name: 'DeepSeek R1 (iFlow)', descVi: 'DeepSeek R1 miễn phí', descEn: 'DeepSeek R1 free', badge: '🆓 iFlow' },
234
- { id: '9router/if/deepseek-v3.2', name: 'DeepSeek V3.2 (iFlow)', descVi: 'V3.2 miễn phí', descEn: 'V3.2 free', badge: '🆓 iFlow' },
235
- { id: '9router/if/deepseek-v3.1', name: 'DeepSeek V3.1 (iFlow)', descVi: 'V3.1 miễn phí', descEn: 'V3.1 free', badge: '🆓 iFlow' },
236
- { id: '9router/if/deepseek-v3', name: 'DeepSeek V3 (iFlow)', descVi: 'V3 miễn phí', descEn: 'V3 free', badge: '🆓 iFlow' },
237
- { id: '9router/if/qwen3-max', name: 'Qwen3 Max (iFlow)', descVi: 'Qwen3 Max free', descEn: 'Qwen3 Max free', badge: '🆓 iFlow' },
238
- { id: '9router/if/qwen3-235b', name: 'Qwen3 235B (iFlow)', descVi: '235B params free', descEn: '235B params free', badge: '🆓 iFlow' },
239
- { id: '9router/if/qwen3-32b', name: 'Qwen3 32B (iFlow)', descVi: 'Qwen3 32B free', descEn: 'Qwen3 32B free', badge: '🆓 iFlow' },
240
- { id: '9router/if/iflow-rome-30ba3b', name: 'iFlow ROME (iFlow)', descVi: 'Agentic model', descEn: 'Agentic model', badge: '🆓 iFlow' },
241
-
242
- // ── OAuth FREE: Qwen Code (qw/) — Unlimited ──
243
- { id: '9router/qw/qwen3-coder-plus', name: 'Qwen3 Coder Plus', descVi: 'Alibaba miễn phí', descEn: 'Alibaba free', badge: '🆓 Qwen' },
244
- { id: '9router/qw/qwen3-coder-flash', name: 'Qwen3 Coder Flash', descVi: 'Nhanh, miễn phí', descEn: 'Fast, free', badge: '🆓 Qwen' },
245
- { id: '9router/qw/vision-model', name: 'Qwen3 Vision', descVi: 'Vision model', descEn: 'Vision model', badge: '🆓 Qwen' },
246
- { id: '9router/qw/coder-model', name: 'Qwen3.5 Coder', descVi: 'Qwen3.5 Coder', descEn: 'Qwen3.5 Coder', badge: '🆓 Qwen' },
247
-
248
- // ── OAuth FREE: Kiro (kr/) — Unlimited ──
249
- { id: '9router/kr/claude-sonnet-4.5', name: 'Claude Sonnet 4.5 (Kiro)', descVi: 'Claude miễn phí qua AWS', descEn: 'Free Claude via AWS', badge: '🆓 Kiro' },
250
- { id: '9router/kr/claude-haiku-4.5', name: 'Claude Haiku 4.5 (Kiro)', descVi: 'Haiku miễn phí', descEn: 'Haiku free', badge: '🆓 Kiro' },
251
- { id: '9router/kr/deepseek-3.2', name: 'DeepSeek 3.2 (Kiro)', descVi: 'DeepSeek via Kiro', descEn: 'DeepSeek via Kiro', badge: '🆓 Kiro' },
252
- { id: '9router/kr/deepseek-3.1', name: 'DeepSeek 3.1 (Kiro)', descVi: 'DeepSeek via Kiro', descEn: 'DeepSeek via Kiro', badge: '🆓 Kiro' },
253
- { id: '9router/kr/qwen3-coder-next', name: 'Qwen3 Coder Next (Kiro)', descVi: 'Qwen Next via Kiro', descEn: 'Qwen Next via Kiro', badge: '🆓 Kiro' },
254
-
255
- // ── OAuth FREE: Kimi Coding (kmc/) ──
256
- { id: '9router/kmc/kimi-k2.5', name: 'Kimi K2.5 (Kimi Coding)', descVi: 'K2.5 miễn phí', descEn: 'K2.5 free', badge: '🆓 Kimi' },
257
- { id: '9router/kmc/kimi-k2.5-thinking', name: 'Kimi K2.5 Thinking', descVi: 'K2.5 + suy luận', descEn: 'K2.5 + thinking', badge: '🆓 Kimi' },
258
- { id: '9router/kmc/kimi-latest', name: 'Kimi Latest', descVi: 'Phiên bản mới nhất', descEn: 'Latest version', badge: '🆓 Kimi' },
259
-
260
- // ── API Key: GLM (glm/) — Cheap ──
261
- { id: '9router/glm/glm-5.1', name: 'GLM 5.1', descVi: 'Zhipu AI mới nhất', descEn: 'Zhipu AI latest', badge: '💰 GLM' },
262
- { id: '9router/glm/glm-5', name: 'GLM 5', descVi: 'GLM 5', descEn: 'GLM 5', badge: '💰 GLM' },
263
- { id: '9router/glm/glm-4.7', name: 'GLM 4.7', descVi: '$0.6/1M tokens', descEn: '$0.6/1M tokens', badge: '💰 GLM' },
264
-
265
- // ── API Key: MiniMax (minimax/) — Cheap ──
266
- { id: '9router/minimax/MiniMax-M2.7', name: 'MiniMax M2.7', descVi: 'Mới nhất MiniMax', descEn: 'Latest MiniMax', badge: '💰 MiniMax' },
267
- { id: '9router/minimax/MiniMax-M2.5', name: 'MiniMax M2.5', descVi: 'MiniMax M2.5', descEn: 'MiniMax M2.5', badge: '💰 MiniMax' },
268
- { id: '9router/minimax/MiniMax-M2.1', name: 'MiniMax M2.1', descVi: '$0.20/1M tokens', descEn: '$0.20/1M tokens', badge: '💰 MiniMax' },
269
-
270
- // ── API Key: Kimi (kimi/) ──
271
- { id: '9router/kimi/kimi-k2.5', name: 'Kimi K2.5', descVi: 'Kimi K2.5 API', descEn: 'Kimi K2.5 API', badge: '💰 Kimi' },
272
- { id: '9router/kimi/kimi-k2.5-thinking', name: 'Kimi K2.5 Thinking', descVi: 'K2.5 + suy luận', descEn: 'K2.5 + thinking', badge: '💰 Kimi' },
273
- { id: '9router/kimi/kimi-latest', name: 'Kimi Latest', descVi: 'Phiên bản mới nhất', descEn: 'Latest version', badge: '💰 Kimi' },
274
-
275
- // ── API Key: DeepSeek (deepseek/) ──
276
- { id: '9router/deepseek/deepseek-chat', name: 'DeepSeek V3.2 Chat', descVi: 'DeepSeek Chat', descEn: 'DeepSeek Chat', badge: '💰 DeepSeek' },
277
- { id: '9router/deepseek/deepseek-reasoner', name: 'DeepSeek V3.2 Reasoner', descVi: 'DeepSeek Reasoner', descEn: 'DeepSeek Reasoner', badge: '💰 DeepSeek' },
278
-
279
- // ── API Key: xAI (xai/) ──
280
- { id: '9router/xai/grok-4', name: 'Grok 4', descVi: 'xAI flagship', descEn: 'xAI flagship', badge: '💰 xAI' },
281
- { id: '9router/xai/grok-4-fast-reasoning', name: 'Grok 4 Fast Reasoning', descVi: 'Suy luận nhanh', descEn: 'Fast reasoning', badge: '💰 xAI' },
282
- { id: '9router/xai/grok-code-fast-1', name: 'Grok Code Fast', descVi: 'Code nhanh', descEn: 'Fast coding', badge: '💰 xAI' },
283
-
284
- // ── API Key: Mistral (mistral/) ──
285
- { id: '9router/mistral/mistral-large-latest', name: 'Mistral Large 3', descVi: 'Mistral flagship', descEn: 'Mistral flagship', badge: '💰 Mistral' },
286
- { id: '9router/mistral/codestral-latest', name: 'Codestral', descVi: 'Code-optimized', descEn: 'Code-optimized', badge: '💰 Mistral' },
287
-
288
- // ── API Key: Groq (groq/) ──
289
- { id: '9router/groq/llama-3.3-70b-versatile', name: 'Llama 3.3 70B (Groq)', descVi: 'Siêu nhanh qua Groq', descEn: 'Ultra fast via Groq', badge: '⚡ Groq' },
290
- { id: '9router/groq/openai/gpt-oss-120b', name: 'GPT OSS 120B (Groq)', descVi: 'GPT OSS qua Groq', descEn: 'GPT OSS via Groq', badge: '⚡ Groq' },
291
-
292
- // ── API Key: Cerebras (cerebras/) ──
293
- { id: '9router/cerebras/gpt-oss-120b', name: 'GPT OSS 120B (Cerebras)', descVi: 'Siêu nhanh Cerebras', descEn: 'Ultra fast Cerebras', badge: '⚡ Cerebras' },
294
-
295
- // ── API Key: AliCode (alicode/) ──
296
- { id: '9router/alicode/qwen3.5-plus', name: 'Qwen3.5 Plus (AliCode)', descVi: 'Alibaba Cloud mới nhất', descEn: 'Alibaba Cloud latest', badge: '💰 AliCode' },
297
- { id: '9router/alicode/qwen3-coder-plus', name: 'Qwen3 Coder Plus (AliCode)', descVi: 'Coder Plus', descEn: 'Coder Plus', badge: '💰 AliCode' },
132
+ { id: '9router/smart-route', name: 'Smart Proxy (Auto Route)', descVi: 'Tự động luân chuyển FREE models — không tốn xu', descEn: 'Auto-routing across FREE providers — zero cost', badgeVi: '🌟 Khuyên dùng', badgeEn: '🌟 Recommended' }
298
133
  ],
299
134
  },
300
135
  };
@@ -924,30 +759,17 @@
924
759
  pHtml += `<h3 style="margin: 0 0 12px; font-size: 15px; font-weight: 700; color: var(--text-primary);">${providerIcon} ${isVi ? 'AI Provider' : 'AI Provider'} — ${providerName}</h3>`;
925
760
 
926
761
  if (provider.isProxy) {
927
- // 9Router: simple message + toggle switch
928
- pHtml += `<p style="font-size: 13px; color: var(--text-secondary); margin: 0 0 14px;">
762
+ // 9Router: simple message (no API key needed - managed via dashboard)
763
+ pHtml += `<p style="font-size: 13px; color: var(--text-secondary); margin: 0 0 8px;">
929
764
  ${isVi
930
765
  ? 'Sau khi Docker khởi động xong, mở <a href="http://localhost:20128/dashboard" target="_blank" style="color: var(--accent);">localhost:20128/dashboard</a> để đăng nhập OAuth và kết nối các Provider.'
931
766
  : 'After Docker starts, open <a href="http://localhost:20128/dashboard" target="_blank" style="color: var(--accent);">localhost:20128/dashboard</a> to OAuth login and connect Providers.'}
932
767
  </p>`;
933
- pHtml += `<div style="padding: 12px 16px; border-radius: 10px; background: rgba(139,92,246,0.04); border: 1px solid rgba(139,92,246,0.15);">
934
- <div style="display: flex; align-items: center; justify-content: space-between; gap: 12px;">
935
- <span style="font-size: 13px; font-weight: 600; color: var(--text-primary);">🔐 ${isVi ? 'Bảo mật 9Router' : 'Secure 9Router'}</span>
936
- <label class="toggle-switch">
937
- <input type="checkbox" id="key-9router-secure" onchange="window.__toggle9RouterSecurity(this.checked)">
938
- <span class="toggle-slider"></span>
939
- </label>
940
- </div>
941
- <p style="font-size: 11px; color: var(--text-muted); margin: 6px 0 0;">
942
- ${isVi ? 'Khuyên dùng khi chạy trên VPS/mạng chung — tự tạo API Key để bảo vệ proxy.' : 'Recommended for VPS/shared networks — auto-generates API Key to protect your proxy.'}
943
- </p>
944
- <div id="9router-key-display" style="display: none; margin-top: 10px;">
945
- <div style="display: flex; gap: 8px; align-items: center;">
946
- <input type="text" class="form-input" id="key-9router-apikey" readonly style="font-family: monospace; font-size: 12px; background: rgba(0,0,0,0.2); flex: 1; padding: 8px 12px;" value="">
947
- <button type="button" onclick="navigator.clipboard.writeText(document.getElementById('key-9router-apikey').value);this.textContent='✅';setTimeout(()=>this.textContent='📋',1500)" style="padding: 6px 10px; border-radius: 8px; border: 1px solid rgba(139,92,246,0.3); background: rgba(139,92,246,0.1); cursor: pointer; font-size: 13px;">📋</button>
948
- </div>
949
- </div>
950
- </div>`;
768
+ pHtml += `<p style="font-size: 12px; color: var(--text-muted); margin: 0;">
769
+ ${isVi
770
+ ? '💡 Bot 9Router cùng Docker network — không cần API Key. Nếu muốn bảo mật proxy (VPS), tạo API Key trên Dashboard sau khi Docker chạy.'
771
+ : '💡 Bot and 9Router share Docker network — no API Key needed. To secure proxy (VPS), create API Key on Dashboard after Docker starts.'}
772
+ </p>`;
951
773
  } else if (provider.isLocal) {
952
774
  // Ollama
953
775
  pHtml += `<p style="font-size: 13px; color: var(--text-secondary); margin: 0;">
@@ -1025,22 +847,7 @@
1025
847
  }
1026
848
  }
1027
849
  window.__validateKeys = function() { updateNavButtons(); };
1028
- window.__toggle9RouterSecurity = function(checked) {
1029
- const display = document.getElementById('9router-key-display');
1030
- const keyInput = document.getElementById('key-9router-apikey');
1031
- if (!display || !keyInput) return;
1032
- if (checked) {
1033
- // Auto-generate a random 32-char hex key
1034
- const key = (typeof crypto !== 'undefined' && crypto.randomUUID)
1035
- ? crypto.randomUUID().replace(/-/g, '')
1036
- : Array.from({length: 32}, () => Math.floor(Math.random() * 16).toString(16)).join('');
1037
- keyInput.value = 'oc9r-' + key;
1038
- display.style.display = 'block';
1039
- } else {
1040
- keyInput.value = '';
1041
- display.style.display = 'none';
1042
- }
1043
- };
850
+ // 9Router API keys are managed via its dashboard — no client-side generation needed
1044
851
 
1045
852
  // ========== Build .env content from key inputs ==========
1046
853
  function populateEnvContent() {
@@ -1057,11 +864,6 @@
1057
864
 
1058
865
  if (provider.isProxy) {
1059
866
  lines.push('# Không cần AI API key — 9Router xử lý qua dashboard');
1060
- const routerApiKey = document.getElementById('key-9router-apikey')?.value?.trim() || '';
1061
- if (routerApiKey) {
1062
- lines.push(`\n# 9Router API Key (bảo mật proxy)`);
1063
- lines.push(`ROUTER_API_KEY=${routerApiKey}`);
1064
- }
1065
867
  } else if (provider.isLocal) {
1066
868
  lines.push('OLLAMA_HOST=http://host.docker.internal:11434');
1067
869
  } else {
@@ -1227,36 +1029,38 @@ Write-Host "Chrome se tu dong bat Debug Mode moi khi ban dang nhap Windows (dela
1227
1029
  };
1228
1030
 
1229
1031
  // 9Router: add proxy endpoint config under models.providers
1230
- // Per official 9Router docs: use custom provider name '9router', models use cx/ prefix
1231
- const routerKeyForConfig = document.getElementById('key-9router-apikey')?.value?.trim() || '';
1032
+ // Bot and 9Router share Docker network no API key needed
1232
1033
  if (is9Router) {
1233
1034
  clawConfig.models = {
1234
1035
  mode: 'merge',
1235
1036
  providers: {
1236
1037
  '9router': {
1237
1038
  baseUrl: 'http://9router:20128/v1',
1238
- apiKey: routerKeyForConfig || 'sk-no-key',
1039
+ apiKey: 'sk-no-key',
1239
1040
  api: 'openai-completions',
1240
1041
  models: [
1241
- { id: 'smart-route', name: 'Smart Proxy (Auto Route)', contextWindow: 200000, maxTokens: 8192 },
1242
- // OAuth Subscription
1243
- { id: 'cc/claude-opus-4-6', name: 'Claude Opus 4.6', contextWindow: 200000, maxTokens: 8192 },
1244
- { id: 'cc/claude-sonnet-4-6', name: 'Claude Sonnet 4.6', contextWindow: 200000, maxTokens: 8192 },
1245
- { id: 'cx/gpt-5.4', name: 'GPT 5.4 (Codex)', contextWindow: 128000, maxTokens: 8192 },
1246
- { id: 'cx/gpt-5.3-codex', name: 'GPT 5.3 Codex', contextWindow: 128000, maxTokens: 8192 },
1247
- { id: 'gh/gpt-5.4', name: 'GPT 5.4 (Copilot)', contextWindow: 128000, maxTokens: 8192 },
1248
- { id: 'gh/claude-opus-4.6', name: 'Claude Opus 4.6 (Copilot)', contextWindow: 200000, maxTokens: 8192 },
1249
- { id: 'gc/gemini-3-flash-preview', name: 'Gemini 3 Flash (FREE)', contextWindow: 1000000, maxTokens: 8192 },
1250
- // OAuth FREE
1251
- { id: 'if/qwen3-coder-plus', name: 'Qwen3 Coder Plus (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
1042
+ // Free Tier Providers
1043
+ { id: 'if/qwen3-coder-plus', name: 'Qwen3 Coder+ (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
1252
1044
  { id: 'if/kimi-k2', name: 'Kimi K2 (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
1045
+ { id: 'if/kimi-k2-thinking', name: 'Kimi K2 Thinking (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
1253
1046
  { id: 'if/glm-4.7', name: 'GLM 4.7 (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
1047
+ { id: 'if/minimax-m2', name: 'MiniMax M2 (iFlow FREE)', contextWindow: 1000000, maxTokens: 8192 },
1254
1048
  { id: 'if/deepseek-r1', name: 'DeepSeek R1 (iFlow FREE)', contextWindow: 128000, maxTokens: 8192 },
1255
- { id: 'qw/qwen3-coder-plus', name: 'Qwen3 Coder Plus (Qwen FREE)', contextWindow: 128000, maxTokens: 8192 },
1049
+ { id: 'qw/qwen3-coder-plus', name: 'Qwen3 Coder+ (Qwen FREE)', contextWindow: 128000, maxTokens: 8192 },
1050
+ { id: 'qw/qwen3-coder-flash', name: 'Qwen3 Coder Flash (Qwen FREE)', contextWindow: 128000, maxTokens: 8192 },
1256
1051
  { id: 'kr/claude-sonnet-4.5', name: 'Claude Sonnet 4.5 (Kiro FREE)', contextWindow: 200000, maxTokens: 8192 },
1257
- // API Key
1052
+ { id: 'kr/claude-haiku-4.5', name: 'Claude Haiku 4.5 (Kiro FREE)', contextWindow: 200000, maxTokens: 8192 },
1053
+ // Ollama Cloud
1054
+ { id: 'ollama/qwen3.5', name: 'Qwen 3.5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
1055
+ { id: 'ollama/kimi-k2.5', name: 'Kimi K2.5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
1056
+ { id: 'ollama/glm-5', name: 'GLM 5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
1057
+ { id: 'ollama/glm-4.7-flash', name: 'GLM 4.7 Flash (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
1058
+ { id: 'ollama/minimax-m2.5', name: 'MiniMax M2.5 (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
1059
+ { id: 'ollama/gpt-oss:120b', name: 'GPT-OSS 120B (Ollama Cloud)', contextWindow: 128000, maxTokens: 8192 },
1060
+ // API Key Providers
1258
1061
  { id: 'glm/glm-4.7', name: 'GLM 4.7 ($0.6/1M)', contextWindow: 128000, maxTokens: 8192 },
1259
1062
  { id: 'minimax/MiniMax-M2.1', name: 'MiniMax M2.1 ($0.20/1M)', contextWindow: 1000000, maxTokens: 8192 },
1063
+ { id: 'kimi/kimi-latest', name: 'Kimi Latest ($0.90/1M)', contextWindow: 128000, maxTokens: 8192 },
1260
1064
  { id: 'deepseek/deepseek-chat', name: 'DeepSeek V3.2 Chat', contextWindow: 128000, maxTokens: 8192 },
1261
1065
  ],
1262
1066
  },
@@ -1399,13 +1203,11 @@ ${extraHostsBlock}
1399
1203
  container_name: 9router
1400
1204
  restart: always
1401
1205
  entrypoint: >
1402
- /bin/sh -c "npm install -g 9router && [ ! -f /root/.9router/db.json ] && echo '{\\"combos\\":[{\\"id\\":\\"smart-route\\",\\"name\\":\\"smart-route\\",\\"alias\\":\\"smart-route\\",\\"models\\":[\\"if/qwen3-coder-plus\\",\\"if/kimi-k2\\",\\"if/glm-4.7\\",\\"if/deepseek-r1\\",\\"qw/qwen3-coder-plus\\",\\"kr/claude-sonnet-4.5\\",\\"gc/gemini-3-flash-preview\\",\\"cc/claude-opus-4-6\\",\\"cx/gpt-5.3-codex\\",\\"gh/gpt-5.4\\"]}]}' > /root/.9router/db.json; 9router"
1206
+ /bin/sh -c "npm install -g 9router && [ ! -f /root/.9router/db.json ] && echo '{\\"combos\\":[{\\"id\\":\\"smart-route\\",\\"name\\":\\"smart-route\\",\\"alias\\":\\"smart-route\\",\\"models\\":[\\"cc/claude-opus-4-6\\",\\"cc/claude-sonnet-4-6\\",\\"cc/claude-opus-4-5-20251101\\",\\"cc/claude-sonnet-4-5-20250929\\",\\"cc/claude-haiku-4-5-20251001\\",\\"cx/gpt-5.4\\",\\"cx/gpt-5.3-codex\\",\\"cx/gpt-5.3-codex-xhigh\\",\\"cx/gpt-5.3-codex-high\\",\\"cx/gpt-5.3-codex-low\\",\\"cx/gpt-5.3-codex-none\\",\\"cx/gpt-5.3-codex-spark\\",\\"cx/gpt-5.1-codex-mini\\",\\"cx/gpt-5.1-codex-mini-high\\",\\"cx/gpt-5.2-codex\\",\\"cx/gpt-5.2\\",\\"cx/gpt-5.1-codex-max\\",\\"cx/gpt-5.1-codex\\",\\"cx/gpt-5.1\\",\\"cx/gpt-5-codex\\",\\"cx/gpt-5-codex-mini\\",\\"gc/gemini-3-flash-preview\\",\\"gc/gemini-3-pro-preview\\",\\"gh/gpt-5.4\\",\\"gh/gpt-5.3-codex\\",\\"gh/gpt-5.2-codex\\",\\"gh/gpt-5.2\\",\\"gh/gpt-5.1-codex-max\\",\\"gh/gpt-5.1-codex\\",\\"gh/gpt-5.1-codex-mini\\",\\"gh/gpt-5.1\\",\\"gh/gpt-5\\",\\"gh/gpt-5-mini\\",\\"gh/gpt-5-codex\\",\\"gh/gpt-4.1\\",\\"gh/gpt-4o\\",\\"gh/gpt-4o-mini\\",\\"gh/gpt-4\\",\\"gh/gpt-3.5-turbo\\",\\"gh/claude-opus-4.6\\",\\"gh/claude-sonnet-4.6\\",\\"gh/claude-sonnet-4.5\\",\\"gh/claude-opus-4.5\\",\\"gh/claude-opus-4.1\\",\\"gh/claude-sonnet-4\\",\\"gh/claude-haiku-4.5\\",\\"gh/gemini-3-pro-preview\\",\\"gh/gemini-3-flash-preview\\",\\"gh/gemini-2.5-pro\\",\\"gh/grok-code-fast-1\\",\\"gh/oswe-vscode-prime\\",\\"cu/default\\",\\"cu/claude-4.6-opus-max\\",\\"cu/claude-4.6-sonnet-medium-thinking\\",\\"cu/claude-4.5-opus-high-thinking\\",\\"cu/claude-4.5-opus-high\\",\\"cu/claude-4.5-sonnet-thinking\\",\\"cu/claude-4.5-sonnet\\",\\"cu/claude-4.5-haiku\\",\\"cu/claude-4.5-opus\\",\\"cu/gpt-5.3-codex\\",\\"cu/gpt-5.2-codex\\",\\"cu/gpt-5.2\\",\\"cu/kimi-k2.5\\",\\"cu/gemini-3-flash-preview\\",\\"kc/anthropic/claude-sonnet-4-20250514\\",\\"kc/anthropic/claude-opus-4-20250514\\",\\"kc/google/gemini-2.5-pro\\",\\"kc/google/gemini-2.5-flash\\",\\"kc/openai/gpt-4.1\\",\\"kc/openai/o3\\",\\"kc/deepseek/deepseek-chat\\",\\"kc/deepseek/deepseek-reasoner\\",\\"cl/anthropic/claude-sonnet-4.6\\",\\"cl/anthropic/claude-opus-4.6\\",\\"cl/openai/gpt-5.3-codex\\",\\"cl/openai/gpt-5.4\\",\\"cl/google/gemini-3.1-pro-preview\\",\\"cl/google/gemini-3.1-flash-lite-preview\\",\\"cl/kwaipilot/kat-coder-pro\\",\\"if/qwen3-coder-plus\\",\\"if/kimi-k2\\",\\"if/glm-4.7\\",\\"if/deepseek-r1\\",\\"if/deepseek-v3.2\\",\\"if/deepseek-v3.1\\",\\"if/deepseek-v3\\",\\"if/qwen3-max\\",\\"if/qwen3-235b\\",\\"if/qwen3-32b\\",\\"if/iflow-rome-30ba3b\\",\\"qw/qwen3-coder-plus\\",\\"qw/qwen3-coder-flash\\",\\"qw/vision-model\\",\\"qw/coder-model\\",\\"kr/claude-sonnet-4.5\\",\\"kr/claude-haiku-4.5\\",\\"kr/deepseek-3.2\\",\\"kr/deepseek-3.1\\",\\"kr/qwen3-coder-next\\",\\"kmc/kimi-k2.5\\",\\"kmc/kimi-k2.5-thinking\\",\\"kmc/kimi-latest\\",\\"glm/glm-5.1\\",\\"glm/glm-5\\",\\"glm/glm-4.7\\",\\"minimax/MiniMax-M2.7\\",\\"minimax/MiniMax-M2.5\\",\\"minimax/MiniMax-M2.1\\",\\"kimi/kimi-k2.5\\",\\"kimi/kimi-k2.5-thinking\\",\\"kimi/kimi-latest\\",\\"deepseek/deepseek-chat\\",\\"deepseek/deepseek-reasoner\\",\\"xai/grok-4\\",\\"xai/grok-4-fast-reasoning\\",\\"xai/grok-code-fast-1\\",\\"mistral/mistral-large-latest\\",\\"mistral/codestral-latest\\",\\"groq/llama-3.3-70b-versatile\\",\\"groq/openai/gpt-oss-120b\\",\\"cerebras/gpt-oss-120b\\",\\"alicode/qwen3.5-plus\\",\\"alicode/qwen3-coder-plus\\"]}]}' > /root/.9router/db.json; 9router"
1403
1207
  environment:
1404
1208
  - PORT=20128
1405
1209
  - HOSTNAME=0.0.0.0
1406
- - CI=true${routerKeyForConfig ? `\n - API_KEY=\${ROUTER_API_KEY}` : ''}
1407
- env_file:
1408
- - .env
1210
+ - CI=true
1409
1211
  volumes:
1410
1212
  - 9router-data:/root/.9router
1411
1213
  ports:
@@ -1453,13 +1255,11 @@ docker logs -f openclaw-bot${approveNote}`);
1453
1255
 
1454
1256
 
1455
1257
  // 6. Generate auth-profiles.json (root + agent level)
1456
- // OpenClaw v1 format requires: type="api_key", field="key", and "order" block
1457
- // For 9Router: if user set API key → use it (enables Bearer auth); otherwise 'sk-no-key' (open access)
1258
+ // Bot and 9Router share Docker network always use 'sk-no-key'
1458
1259
  const authProviderName = is9Router ? '9router' : state.config.provider;
1459
1260
  const authProfileId = is9Router ? '9router-proxy' : `${authProviderName}:default`;
1460
- const router9ApiKey = document.getElementById('key-9router-apikey')?.value?.trim() || '';
1461
1261
  const authKeyValue = is9Router
1462
- ? (router9ApiKey || 'sk-no-key')
1262
+ ? 'sk-no-key'
1463
1263
  : `<your_${(provider.envKey || 'API_KEY').toLowerCase()}>`;
1464
1264
 
1465
1265
  const authProfilesJson = {