create-openclaw-bot 5.6.3 → 5.6.5

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,49 +824,64 @@ 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
- function startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath }) {
846
- const routerAppName = `${appName}-9router`;
847
- const routerLaunch = resolveNative9RouterDesktopLaunch();
848
- const normalizedProjectDir = projectDir.replace(/\\/g, '/');
849
- const normalizedSyncScriptPath = syncScriptPath ? syncScriptPath.replace(/\\/g, '/') : '';
850
- execFileSync('pm2', [
851
- 'start',
852
- routerLaunch.command,
868
+ function startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath }) {
869
+ const routerAppName = `${appName}-9router`;
870
+ const routerLaunch = resolveNative9RouterDesktopLaunch();
871
+ const normalizedProjectDir = projectDir.replace(/\\/g, '/');
872
+ const normalizedSyncScriptPath = syncScriptPath ? syncScriptPath.replace(/\\/g, '/') : '';
873
+ try {
874
+ execSync(`pm2 delete ${routerAppName}`, {
875
+ cwd: projectDir,
876
+ stdio: 'ignore',
877
+ shell: true
878
+ });
879
+ } catch {
880
+ // ignore missing app
881
+ }
882
+ execFileSync('pm2', [
883
+ 'start',
884
+ routerLaunch.command,
853
885
  '--name',
854
886
  routerAppName,
855
887
  '--cwd',
@@ -863,22 +895,30 @@ function startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath }) {
863
895
  stdio: 'inherit',
864
896
  env: { ...process.env, ...routerLaunch.env }
865
897
  });
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
898
+ if (syncScriptPath) {
899
+ const syncAppName = `${appName}-9router-sync`;
900
+ try {
901
+ execSync(`pm2 delete ${syncAppName}`, {
902
+ cwd: projectDir,
903
+ stdio: 'ignore',
904
+ shell: true
905
+ });
906
+ } catch {
907
+ // ignore missing app
908
+ }
909
+ execFileSync('pm2', [
910
+ 'start',
911
+ normalizedSyncScriptPath,
912
+ '--name',
913
+ syncAppName,
914
+ '--cwd',
915
+ normalizedProjectDir,
916
+ '--interpreter',
917
+ process.execPath
918
+ ], {
919
+ cwd: projectDir,
920
+ stdio: 'inherit',
921
+ env: process.env
882
922
  });
883
923
  }
884
924
  runPm2Save({ projectDir, isVi });
@@ -2237,7 +2277,7 @@ async function main() {
2237
2277
  if (deployMode === 'native') {
2238
2278
  const pm2Apps = [
2239
2279
  ' {',
2240
- ` name: '${botName || 'openclaw-multibot'}',`,
2280
+ ` name: 'openclaw-multibot',`,
2241
2281
  ` script: 'openclaw',`,
2242
2282
  ` args: 'gateway run',`,
2243
2283
  ` cwd: '${projectDir.replace(/\\/g, '/')}',`,
@@ -2485,9 +2525,14 @@ async function main() {
2485
2525
  await writeGeneratedArtifacts(projectDir, buildCliChromeDebugArtifacts());
2486
2526
 
2487
2527
  // ── Uninstall scripts ───────────────────────────────────────────────────────
2488
- await writeGeneratedArtifacts(projectDir, buildCliUninstallArtifacts({
2489
- deployMode, osChoice: detectedOS, projectDir, botName,
2490
- }));
2528
+ await writeGeneratedArtifacts(projectDir, buildCliUninstallArtifacts({
2529
+ deployMode,
2530
+ osChoice: detectedOS,
2531
+ projectDir,
2532
+ botName: (deployMode !== 'docker' && detectedOS === 'vps')
2533
+ ? getNativePm2AppName(isMultiBot)
2534
+ : botName,
2535
+ }));
2491
2536
 
2492
2537
  // ── Upgrade scripts ─────────────────────────────────────────────────────────
2493
2538
  await writeGeneratedArtifacts(projectDir, buildCliUpgradeArtifacts());
@@ -2495,19 +2540,26 @@ async function main() {
2495
2540
  // ── start-bot.bat / start-bot.sh — one-click restart scripts ─────────────
2496
2541
  // Generated for native deployments only (docker has docker compose up)
2497
2542
  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
- }
2543
+ await writeGeneratedArtifacts(projectDir, buildCliStartBotArtifacts({
2544
+ projectDir,
2545
+ openclawHome: path.join(projectDir, '.openclaw'),
2546
+ is9Router: providerKey === '9router',
2547
+ osChoice,
2548
+ isMultiBot,
2549
+ appName: getNativePm2AppName(isMultiBot),
2550
+ isVi,
2551
+ }));
2552
+
2553
+ console.log(chalk.cyan(
2554
+ process.platform === 'win32'
2555
+ ? (isVi
2556
+ ? `\n🚀 start-bot.bat / start-bot.sh đã tạo — double-click để restart bot.`
2557
+ : `\n🚀 start-bot.bat / start-bot.sh created — double-click to restart the bot.`)
2558
+ : (isVi
2559
+ ? `\n🚀 start-bot.sh đã tạo — chạy ./start-bot.sh để restart bot.`
2560
+ : `\n🚀 start-bot.sh created — run ./start-bot.sh to restart the bot.`)
2561
+ ));
2562
+ }
2511
2563
 
2512
2564
  console.log(chalk.green(`✅ ${isVi ? 'Tạo cấu hình thành công!' : 'Configs created successfully!'}`));
2513
2565
 
@@ -2661,26 +2713,26 @@ async function main() {
2661
2713
  }
2662
2714
  }
2663
2715
 
2664
- if (isMultiBot && channelKey === 'telegram') {
2665
- if (providerKey === '9router') {
2666
- startNative9RouterPm2({ isVi, projectDir, appName: botName || 'openclaw-multibot', syncScriptPath: native9RouterSyncScriptPath });
2667
- }
2668
- execSync('pm2 start ecosystem.config.js && pm2 save', {
2669
- cwd: projectDir,
2670
- stdio: 'inherit',
2671
- shell: true
2672
- });
2673
- 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.'}`));
2674
- console.log(chalk.gray(isVi ? ` Xem log: pm2 logs ${botName || 'openclaw-multibot'}` : ` View logs: pm2 logs ${botName || 'openclaw-multibot'}`));
2675
- printNativeDashboardAccessInfo({ isVi, providerKey, projectDir });
2676
- if (channelKey === 'zalo-personal') {
2677
- printZaloPersonalLoginInfo({ isVi, deployMode: 'native', projectDir });
2678
- }
2679
- } else {
2680
- const appName = botName || 'openclaw';
2681
- if (providerKey === '9router') {
2682
- startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath: native9RouterSyncScriptPath });
2683
- }
2716
+ if (isMultiBot && channelKey === 'telegram') {
2717
+ if (providerKey === '9router') {
2718
+ startNative9RouterPm2({ isVi, projectDir, appName: getNativePm2AppName(true), syncScriptPath: native9RouterSyncScriptPath });
2719
+ }
2720
+ execSync('pm2 start ecosystem.config.js && pm2 save', {
2721
+ cwd: projectDir,
2722
+ stdio: 'inherit',
2723
+ shell: true
2724
+ });
2725
+ 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.'}`));
2726
+ console.log(chalk.gray(isVi ? ` Xem log: pm2 logs ${getNativePm2AppName(true)}` : ` View logs: pm2 logs ${getNativePm2AppName(true)}`));
2727
+ printNativeDashboardAccessInfo({ isVi, providerKey, projectDir });
2728
+ if (channelKey === 'zalo-personal') {
2729
+ printZaloPersonalLoginInfo({ isVi, deployMode: 'native', projectDir });
2730
+ }
2731
+ } else {
2732
+ const appName = getNativePm2AppName(false);
2733
+ if (providerKey === '9router') {
2734
+ startNative9RouterPm2({ isVi, projectDir, appName, syncScriptPath: native9RouterSyncScriptPath });
2735
+ }
2684
2736
  if (channelKey === 'zalo-personal') {
2685
2737
  await runNativeZaloPersonalLoginFlow({ isVi, projectDir });
2686
2738
  }
@@ -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.3",
3
+ "version": "5.6.5",
4
4
  "description": "Interactive CLI installer for OpenClaw Bot",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {