create-openclaw-bot 5.6.2 → 5.6.4

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/dist/cli.js CHANGED
@@ -784,7 +784,7 @@ function detectProjectBotName(projectDir) {
784
784
  return path.basename(projectDir);
785
785
  }
786
786
 
787
- function detectProjectUses9Router(projectDir) {
787
+ function detectProjectUses9Router(projectDir) {
788
788
  try {
789
789
  const configPath = path.join(projectDir, '.openclaw', 'openclaw.json');
790
790
  if (fs.existsSync(configPath)) {
@@ -796,8 +796,25 @@ function detectProjectUses9Router(projectDir) {
796
796
  } catch {
797
797
  // fallback below
798
798
  }
799
- return fs.existsSync(path.join(projectDir, '.9router'));
800
- }
799
+ return fs.existsSync(path.join(projectDir, '.9router'));
800
+ }
801
+
802
+ function detectProjectIsMultiBot(projectDir) {
803
+ try {
804
+ const configPath = path.join(projectDir, '.openclaw', 'openclaw.json');
805
+ if (fs.existsSync(configPath)) {
806
+ const config = fs.readJsonSync(configPath);
807
+ return (config?.agents?.list?.length || 0) > 1;
808
+ }
809
+ } catch {
810
+ // fallback below
811
+ }
812
+ return false;
813
+ }
814
+
815
+ function getNativePm2AppName(isMultiBot = false) {
816
+ return isMultiBot ? 'openclaw-multibot' : 'openclaw';
817
+ }
801
818
 
802
819
  async function runUpgradeCommand() {
803
820
  const projectDir = findProjectDir();
@@ -807,40 +824,46 @@ async function runUpgradeCommand() {
807
824
  process.exit(1);
808
825
  }
809
826
 
810
- const deployMode = detectProjectDeployMode(projectDir);
811
- const osChoice = getDetectedOsChoice();
812
- const botName = detectProjectBotName(projectDir);
813
- const is9Router = detectProjectUses9Router(projectDir);
827
+ const deployMode = detectProjectDeployMode(projectDir);
828
+ const osChoice = getDetectedOsChoice();
829
+ const botName = detectProjectBotName(projectDir);
830
+ const is9Router = detectProjectUses9Router(projectDir);
831
+ const isMultiBot = detectProjectIsMultiBot(projectDir);
814
832
 
815
833
  console.log(chalk.cyan('\nRefreshing generated OpenClaw project artifacts...'));
816
834
  console.log(chalk.gray(` Project: ${projectDir}`));
817
835
  console.log(chalk.gray(` Mode: ${deployMode}`));
818
836
 
819
837
  await writeGeneratedArtifacts(projectDir, buildCliChromeDebugArtifacts());
820
- await writeGeneratedArtifacts(projectDir, buildCliUninstallArtifacts({
821
- deployMode,
822
- osChoice,
823
- projectDir,
824
- botName,
825
- }));
838
+ await writeGeneratedArtifacts(projectDir, buildCliUninstallArtifacts({
839
+ deployMode,
840
+ osChoice,
841
+ projectDir,
842
+ botName: (deployMode !== 'docker' && osChoice === 'vps')
843
+ ? getNativePm2AppName(isMultiBot)
844
+ : botName,
845
+ }));
826
846
  await writeGeneratedArtifacts(projectDir, buildCliUpgradeArtifacts());
827
847
 
828
- if (deployMode !== 'docker') {
829
- await writeGeneratedArtifacts(projectDir, buildCliStartBotArtifacts({
830
- projectDir,
831
- openclawHome: path.join(projectDir, '.openclaw'),
832
- is9Router,
833
- isVi: false,
834
- }));
835
- }
848
+ if (deployMode !== 'docker') {
849
+ await writeGeneratedArtifacts(projectDir, buildCliStartBotArtifacts({
850
+ projectDir,
851
+ openclawHome: path.join(projectDir, '.openclaw'),
852
+ is9Router,
853
+ osChoice,
854
+ isMultiBot,
855
+ appName: getNativePm2AppName(isMultiBot),
856
+ isVi: false,
857
+ }));
858
+ }
836
859
 
837
860
  console.log(chalk.green('\nUpgrade artifacts refreshed successfully.'));
838
861
  if (deployMode === 'docker') {
839
862
  console.log(chalk.white(` Next: cd ${path.join(projectDir, 'docker', 'openclaw')} && docker compose up -d --build`));
840
863
  } else {
841
- console.log(chalk.white(` Next: run ${process.platform === 'win32' ? '.\\start-bot.bat' : './start-bot.sh'} from ${projectDir}`));
842
- }
843
- }
864
+ console.log(chalk.white(` Next: run ${process.platform === 'win32' ? '.\\start-bot.bat' : './start-bot.sh'} from ${projectDir}`));
865
+ }
866
+ }
844
867
 
845
868
  function startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath }) {
846
869
  const routerAppName = `${appName}-9router`;
@@ -863,22 +886,21 @@ function startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath }) {
863
886
  stdio: 'inherit',
864
887
  env: { ...process.env, ...routerLaunch.env }
865
888
  });
866
- if (syncScriptPath) {
867
- const syncAppName = `${appName}-9router-sync`;
868
- execFileSync('pm2', [
869
- 'start',
870
- 'sh',
871
- '--name',
872
- syncAppName,
873
- '--cwd',
874
- normalizedProjectDir,
875
- '--',
876
- '-c',
877
- `nohup "${process.execPath}" "${normalizedSyncScriptPath}" >/tmp/${syncAppName}.log 2>&1 &`
878
- ], {
879
- cwd: projectDir,
880
- stdio: 'inherit',
881
- env: process.env
889
+ if (syncScriptPath) {
890
+ const syncAppName = `${appName}-9router-sync`;
891
+ execFileSync('pm2', [
892
+ 'start',
893
+ process.execPath,
894
+ '--name',
895
+ syncAppName,
896
+ '--cwd',
897
+ normalizedProjectDir,
898
+ '--',
899
+ normalizedSyncScriptPath
900
+ ], {
901
+ cwd: projectDir,
902
+ stdio: 'inherit',
903
+ env: process.env
882
904
  });
883
905
  }
884
906
  runPm2Save({ projectDir, isVi });
@@ -2237,7 +2259,7 @@ async function main() {
2237
2259
  if (deployMode === 'native') {
2238
2260
  const pm2Apps = [
2239
2261
  ' {',
2240
- ` name: '${botName || 'openclaw-multibot'}',`,
2262
+ ` name: 'openclaw-multibot',`,
2241
2263
  ` script: 'openclaw',`,
2242
2264
  ` args: 'gateway run',`,
2243
2265
  ` cwd: '${projectDir.replace(/\\/g, '/')}',`,
@@ -2485,9 +2507,14 @@ async function main() {
2485
2507
  await writeGeneratedArtifacts(projectDir, buildCliChromeDebugArtifacts());
2486
2508
 
2487
2509
  // ── Uninstall scripts ───────────────────────────────────────────────────────
2488
- await writeGeneratedArtifacts(projectDir, buildCliUninstallArtifacts({
2489
- deployMode, osChoice: detectedOS, projectDir, botName,
2490
- }));
2510
+ await writeGeneratedArtifacts(projectDir, buildCliUninstallArtifacts({
2511
+ deployMode,
2512
+ osChoice: detectedOS,
2513
+ projectDir,
2514
+ botName: (deployMode !== 'docker' && detectedOS === 'vps')
2515
+ ? getNativePm2AppName(isMultiBot)
2516
+ : botName,
2517
+ }));
2491
2518
 
2492
2519
  // ── Upgrade scripts ─────────────────────────────────────────────────────────
2493
2520
  await writeGeneratedArtifacts(projectDir, buildCliUpgradeArtifacts());
@@ -2495,24 +2522,33 @@ async function main() {
2495
2522
  // ── start-bot.bat / start-bot.sh — one-click restart scripts ─────────────
2496
2523
  // Generated for native deployments only (docker has docker compose up)
2497
2524
  if (deployMode !== 'docker') {
2498
- await writeGeneratedArtifacts(projectDir, buildCliStartBotArtifacts({
2499
- projectDir,
2500
- openclawHome: path.join(projectDir, '.openclaw'),
2501
- is9Router: providerKey === '9router',
2502
- isVi,
2503
- }));
2504
-
2505
- console.log(chalk.cyan(
2506
- isVi
2507
- ? `\n🚀 start-bot.bat / start-bot.sh đã tạo — double-click để restart bot.`
2508
- : `\n🚀 start-bot.bat / start-bot.sh created — double-click to restart the bot.`
2509
- ));
2510
- }
2525
+ await writeGeneratedArtifacts(projectDir, buildCliStartBotArtifacts({
2526
+ projectDir,
2527
+ openclawHome: path.join(projectDir, '.openclaw'),
2528
+ is9Router: providerKey === '9router',
2529
+ osChoice,
2530
+ isMultiBot,
2531
+ appName: getNativePm2AppName(isMultiBot),
2532
+ isVi,
2533
+ }));
2534
+
2535
+ console.log(chalk.cyan(
2536
+ process.platform === 'win32'
2537
+ ? (isVi
2538
+ ? `\n🚀 start-bot.bat / start-bot.sh đã tạo — double-click để restart bot.`
2539
+ : `\n🚀 start-bot.bat / start-bot.sh created — double-click to restart the bot.`)
2540
+ : (isVi
2541
+ ? `\n🚀 start-bot.sh đã tạo — chạy ./start-bot.sh để restart bot.`
2542
+ : `\n🚀 start-bot.sh created — run ./start-bot.sh to restart the bot.`)
2543
+ ));
2544
+ }
2511
2545
 
2512
- console.log(chalk.green(`✅ ${isVi ? 'Tạo cấu hình thành công!' : 'Configs created successfully!'}`));
2513
-
2514
- // 7. Auto Run
2515
- const autoRun = deployMode === 'docker' ? await confirm({
2546
+ console.log(chalk.green(`✅ ${isVi ? 'Tạo cấu hình thành công!' : 'Configs created successfully!'}`));
2547
+
2548
+ installLatestOpenClaw({ isVi, osChoice });
2549
+
2550
+ // 7. Auto Run
2551
+ const autoRun = deployMode === 'docker' ? await confirm({
2516
2552
  message: isVi ? 'Bạn có muốn tự động build Docker và khởi động Bot luôn không?' : 'Do you want to run Docker compose and start the bot now?',
2517
2553
  default: true
2518
2554
  }) : false;
@@ -2592,10 +2628,7 @@ async function main() {
2592
2628
  });
2593
2629
 
2594
2630
  }
2595
-
2596
- installLatestOpenClaw({ isVi, osChoice });
2597
-
2598
- if (deployMode === 'docker') {
2631
+ if (deployMode === 'docker') {
2599
2632
 
2600
2633
  // ── Auto-install openclaw binary if not present ──────────────────────────
2601
2634
  const isOpenClawInstalled = () => { try { execSync('openclaw --version', { stdio: 'ignore' }); return true; } catch { return false; } };
@@ -2662,26 +2695,26 @@ async function main() {
2662
2695
  }
2663
2696
  }
2664
2697
 
2665
- if (isMultiBot && channelKey === 'telegram') {
2666
- if (providerKey === '9router') {
2667
- startNative9RouterPm2({ isVi, projectDir, appName: botName || 'openclaw-multibot', syncScriptPath: native9RouterSyncScriptPath });
2668
- }
2669
- execSync('pm2 start ecosystem.config.js && pm2 save', {
2670
- cwd: projectDir,
2671
- stdio: 'inherit',
2672
- shell: true
2673
- });
2674
- console.log(chalk.green(`\n🎉 ${isVi ? 'Setup hoan tat! Multi-bot native dang chay qua PM2.' : 'Setup complete! Native multi-bot is running via PM2.'}`));
2675
- console.log(chalk.gray(isVi ? ` Xem log: pm2 logs ${botName || 'openclaw-multibot'}` : ` View logs: pm2 logs ${botName || 'openclaw-multibot'}`));
2676
- printNativeDashboardAccessInfo({ isVi, providerKey, projectDir });
2677
- if (channelKey === 'zalo-personal') {
2678
- printZaloPersonalLoginInfo({ isVi, deployMode: 'native', projectDir });
2679
- }
2680
- } else {
2681
- const appName = botName || 'openclaw';
2682
- if (providerKey === '9router') {
2683
- startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath: native9RouterSyncScriptPath });
2684
- }
2698
+ if (isMultiBot && channelKey === 'telegram') {
2699
+ if (providerKey === '9router') {
2700
+ startNative9RouterPm2({ isVi, projectDir, appName: getNativePm2AppName(true), syncScriptPath: native9RouterSyncScriptPath });
2701
+ }
2702
+ execSync('pm2 start ecosystem.config.js && pm2 save', {
2703
+ cwd: projectDir,
2704
+ stdio: 'inherit',
2705
+ shell: true
2706
+ });
2707
+ console.log(chalk.green(`\n🎉 ${isVi ? 'Setup hoan tat! Multi-bot native dang chay qua PM2.' : 'Setup complete! Native multi-bot is running via PM2.'}`));
2708
+ console.log(chalk.gray(isVi ? ` Xem log: pm2 logs ${getNativePm2AppName(true)}` : ` View logs: pm2 logs ${getNativePm2AppName(true)}`));
2709
+ printNativeDashboardAccessInfo({ isVi, providerKey, projectDir });
2710
+ if (channelKey === 'zalo-personal') {
2711
+ printZaloPersonalLoginInfo({ isVi, deployMode: 'native', projectDir });
2712
+ }
2713
+ } else {
2714
+ const appName = getNativePm2AppName(false);
2715
+ if (providerKey === '9router') {
2716
+ startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath: native9RouterSyncScriptPath });
2717
+ }
2685
2718
  if (channelKey === 'zalo-personal') {
2686
2719
  await runNativeZaloPersonalLoginFlow({ isVi, projectDir });
2687
2720
  }
@@ -222,9 +222,66 @@ fi
222
222
  projectDir = '.',
223
223
  is9Router = false,
224
224
  isVi = true,
225
+ osChoice = 'linux',
226
+ isMultiBot = false,
227
+ appName = 'openclaw',
225
228
  logFile9r = '/tmp/9router.log',
226
229
  logFileGw = '/tmp/openclaw-gw.log',
227
230
  } = opts;
231
+ if (osChoice === 'vps') {
232
+ const L = [];
233
+ L.push('#!/bin/bash');
234
+ L.push('set -euo pipefail');
235
+ L.push(`PROJECT_DIR="${projectDir}"`);
236
+ L.push('cd "$PROJECT_DIR"');
237
+ L.push('export OPENCLAW_HOME="$PROJECT_DIR/.openclaw"');
238
+ L.push('export OPENCLAW_STATE_DIR="$PROJECT_DIR/.openclaw"');
239
+ L.push('export DATA_DIR="$PROJECT_DIR/.9router"');
240
+ L.push('if [ -f ".env" ]; then set -a; . ./.env; set +a; fi');
241
+ L.push(`APP_NAME="${appName}"`);
242
+ L.push('');
243
+ L.push('if ! command -v pm2 >/dev/null 2>&1; then');
244
+ L.push(isVi ? ' echo "ERROR: Khong tim thay PM2. Chay: npm install -g pm2"' : ' echo "ERROR: PM2 not found. Run: npm install -g pm2"');
245
+ L.push(' exit 1');
246
+ L.push('fi');
247
+ L.push('');
248
+ L.push(isVi ? 'echo "====== OpenClaw — Khoi dong lai bot qua PM2 ======"' : 'echo "====== OpenClaw — Restart Bot via PM2 ======"');
249
+ L.push('echo ""');
250
+ if (is9Router) {
251
+ L.push(isVi ? 'echo "[1] Khoi dong lai 9Router qua PM2..."' : 'echo "[1] Restarting 9Router via PM2..."');
252
+ L.push('NINE_ROUTER_BIN="$(command -v 9router 2>/dev/null || true)"');
253
+ L.push('NODE_BIN="$(command -v node 2>/dev/null || true)"');
254
+ L.push('if [ -z "$NINE_ROUTER_BIN" ] || [ -z "$NODE_BIN" ]; then');
255
+ L.push(isVi ? ' echo "ERROR: Thieu node hoac 9router. Chay: npm install -g 9router"' : ' echo "ERROR: Missing node or 9router. Run: npm install -g 9router"');
256
+ L.push(' exit 1');
257
+ L.push('fi');
258
+ L.push('pm2 delete "$APP_NAME-9router" "$APP_NAME-9router-sync" >/dev/null 2>&1 || true');
259
+ L.push('PORT=20128 HOSTNAME=0.0.0.0 DATA_DIR="$DATA_DIR" pm2 start "$NINE_ROUTER_BIN" --name "$APP_NAME-9router" --interpreter "$NODE_BIN" -- -n -H 0.0.0.0 -p 20128 --skip-update');
260
+ L.push('if [ -f "$PROJECT_DIR/.openclaw/9router-smart-route-sync.js" ]; then');
261
+ L.push(' pm2 start "$NODE_BIN" --name "$APP_NAME-9router-sync" -- "$PROJECT_DIR/.openclaw/9router-smart-route-sync.js"');
262
+ L.push('fi');
263
+ } else {
264
+ L.push(isVi ? 'echo "[1] Khong dung 9Router cho project nay."' : 'echo "[1] This project does not use 9Router."');
265
+ }
266
+ L.push('');
267
+ if (isMultiBot) {
268
+ L.push(isVi ? 'echo "[2] Khoi dong lai multi-bot gateway qua PM2..."' : 'echo "[2] Restarting multi-bot gateway via PM2..."');
269
+ L.push('pm2 delete "$APP_NAME" >/dev/null 2>&1 || true');
270
+ L.push('pm2 start ecosystem.config.js');
271
+ } else {
272
+ L.push(isVi ? 'echo "[2] Khoi dong lai OpenClaw gateway qua PM2..."' : 'echo "[2] Restarting OpenClaw gateway via PM2..."');
273
+ L.push('pm2 delete "$APP_NAME" >/dev/null 2>&1 || true');
274
+ L.push('pm2 start openclaw --name "$APP_NAME" --cwd "$PROJECT_DIR" -- gateway run');
275
+ }
276
+ L.push('pm2 save >/dev/null 2>&1 || true');
277
+ L.push('echo ""');
278
+ L.push('echo "OpenClaw Dashboard: http://127.0.0.1:18791"');
279
+ if (is9Router) L.push('echo "9Router Dashboard: http://127.0.0.1:20128/dashboard"');
280
+ L.push('echo ""');
281
+ L.push(isVi ? 'echo "Log gateway: pm2 logs $APP_NAME"' : 'echo "Gateway logs: pm2 logs $APP_NAME"');
282
+ if (is9Router) L.push(isVi ? 'echo "Log 9Router: pm2 logs $APP_NAME-9router"' : 'echo "9Router logs: pm2 logs $APP_NAME-9router"');
283
+ return L.join('\n');
284
+ }
228
285
  const L = [];
229
286
  L.push('#!/bin/bash');
230
287
  L.push('set -euo pipefail');
package/dist/setup.js CHANGED
@@ -1429,9 +1429,66 @@
1429
1429
  projectDir = '.',
1430
1430
  is9Router = false,
1431
1431
  isVi = true,
1432
+ osChoice = 'linux',
1433
+ isMultiBot = false,
1434
+ appName = 'openclaw',
1432
1435
  logFile9r = '/tmp/9router.log',
1433
1436
  logFileGw = '/tmp/openclaw-gw.log',
1434
1437
  } = opts;
1438
+ if (osChoice === 'vps') {
1439
+ const L = [];
1440
+ L.push('#!/bin/bash');
1441
+ L.push('set -euo pipefail');
1442
+ L.push(`PROJECT_DIR="${projectDir}"`);
1443
+ L.push('cd "$PROJECT_DIR"');
1444
+ L.push('export OPENCLAW_HOME="$PROJECT_DIR/.openclaw"');
1445
+ L.push('export OPENCLAW_STATE_DIR="$PROJECT_DIR/.openclaw"');
1446
+ L.push('export DATA_DIR="$PROJECT_DIR/.9router"');
1447
+ L.push('if [ -f ".env" ]; then set -a; . ./.env; set +a; fi');
1448
+ L.push(`APP_NAME="${appName}"`);
1449
+ L.push('');
1450
+ L.push('if ! command -v pm2 >/dev/null 2>&1; then');
1451
+ L.push(isVi ? ' echo "ERROR: Khong tim thay PM2. Chay: npm install -g pm2"' : ' echo "ERROR: PM2 not found. Run: npm install -g pm2"');
1452
+ L.push(' exit 1');
1453
+ L.push('fi');
1454
+ L.push('');
1455
+ L.push(isVi ? 'echo "====== OpenClaw — Khoi dong lai bot qua PM2 ======"' : 'echo "====== OpenClaw — Restart Bot via PM2 ======"');
1456
+ L.push('echo ""');
1457
+ if (is9Router) {
1458
+ L.push(isVi ? 'echo "[1] Khoi dong lai 9Router qua PM2..."' : 'echo "[1] Restarting 9Router via PM2..."');
1459
+ L.push('NINE_ROUTER_BIN="$(command -v 9router 2>/dev/null || true)"');
1460
+ L.push('NODE_BIN="$(command -v node 2>/dev/null || true)"');
1461
+ L.push('if [ -z "$NINE_ROUTER_BIN" ] || [ -z "$NODE_BIN" ]; then');
1462
+ L.push(isVi ? ' echo "ERROR: Thieu node hoac 9router. Chay: npm install -g 9router"' : ' echo "ERROR: Missing node or 9router. Run: npm install -g 9router"');
1463
+ L.push(' exit 1');
1464
+ L.push('fi');
1465
+ L.push('pm2 delete "$APP_NAME-9router" "$APP_NAME-9router-sync" >/dev/null 2>&1 || true');
1466
+ L.push('PORT=20128 HOSTNAME=0.0.0.0 DATA_DIR="$DATA_DIR" pm2 start "$NINE_ROUTER_BIN" --name "$APP_NAME-9router" --interpreter "$NODE_BIN" -- -n -H 0.0.0.0 -p 20128 --skip-update');
1467
+ L.push('if [ -f "$PROJECT_DIR/.openclaw/9router-smart-route-sync.js" ]; then');
1468
+ L.push(' pm2 start "$NODE_BIN" --name "$APP_NAME-9router-sync" -- "$PROJECT_DIR/.openclaw/9router-smart-route-sync.js"');
1469
+ L.push('fi');
1470
+ } else {
1471
+ L.push(isVi ? 'echo "[1] Khong dung 9Router cho project nay."' : 'echo "[1] This project does not use 9Router."');
1472
+ }
1473
+ L.push('');
1474
+ if (isMultiBot) {
1475
+ L.push(isVi ? 'echo "[2] Khoi dong lai multi-bot gateway qua PM2..."' : 'echo "[2] Restarting multi-bot gateway via PM2..."');
1476
+ L.push('pm2 delete "$APP_NAME" >/dev/null 2>&1 || true');
1477
+ L.push('pm2 start ecosystem.config.js');
1478
+ } else {
1479
+ L.push(isVi ? 'echo "[2] Khoi dong lai OpenClaw gateway qua PM2..."' : 'echo "[2] Restarting OpenClaw gateway via PM2..."');
1480
+ L.push('pm2 delete "$APP_NAME" >/dev/null 2>&1 || true');
1481
+ L.push('pm2 start openclaw --name "$APP_NAME" --cwd "$PROJECT_DIR" -- gateway run');
1482
+ }
1483
+ L.push('pm2 save >/dev/null 2>&1 || true');
1484
+ L.push('echo ""');
1485
+ L.push('echo "OpenClaw Dashboard: http://127.0.0.1:18791"');
1486
+ if (is9Router) L.push('echo "9Router Dashboard: http://127.0.0.1:20128/dashboard"');
1487
+ L.push('echo ""');
1488
+ L.push(isVi ? 'echo "Log gateway: pm2 logs $APP_NAME"' : 'echo "Gateway logs: pm2 logs $APP_NAME"');
1489
+ if (is9Router) L.push(isVi ? 'echo "Log 9Router: pm2 logs $APP_NAME-9router"' : 'echo "9Router logs: pm2 logs $APP_NAME-9router"');
1490
+ return L.join('\n');
1491
+ }
1435
1492
  const L = [];
1436
1493
  L.push('#!/bin/bash');
1437
1494
  L.push('set -euo pipefail');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-openclaw-bot",
3
- "version": "5.6.2",
3
+ "version": "5.6.4",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {