@aiyiran/myclaw 1.0.31 → 1.0.32

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/config.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MyClaw 全局配置
3
+ * Docker 打包、open 命令等都统一读取此文件
4
+ */
5
+
6
+ module.exports = {
7
+ // Gateway 认证 Token
8
+ TOKEN: 'qwertyuiop1234567890',
9
+
10
+ // 默认控制台地址
11
+ DEFAULT_URL: 'http://127.0.0.1:18789',
12
+ };
package/index.js CHANGED
@@ -28,6 +28,7 @@ const os = require('os');
28
28
  const path = require('path');
29
29
  const { createAgent } = require('./create_agent');
30
30
  const { version } = require(path.join(__dirname, 'package.json'));
31
+ const { TOKEN, DEFAULT_URL } = require(path.join(__dirname, 'config'));
31
32
 
32
33
  const args = process.argv.slice(2);
33
34
  const command = args[0];
@@ -241,9 +242,13 @@ function runNew() {
241
242
  // ============================================================================
242
243
 
243
244
  function runWeixin() {
244
- const { runWeixin } = require('./wizards/index');
245
+ const { runWeixin, runRebind: _rb } = require('./wizards/index');
245
246
  runWeixin();
246
247
  }
248
+ function runRebind() {
249
+ const { runRebind } = require('./wizards/index');
250
+ runRebind();
251
+ }
247
252
 
248
253
  // ============================================================================
249
254
  // WSL2 安装 (独立模块)
@@ -254,6 +259,15 @@ function runWsl2() {
254
259
  wsl2.run();
255
260
  }
256
261
 
262
+ // ============================================================================
263
+ // Prepare 智能初始化
264
+ // ============================================================================
265
+
266
+ function runPrepare() {
267
+ const prepare = require('./prepare');
268
+ prepare.run();
269
+ }
270
+
257
271
  // ============================================================================
258
272
  // 创建 Windows 桌面快捷启动脚本
259
273
  // ============================================================================
@@ -268,46 +282,157 @@ function runBat() {
268
282
  process.exit(0);
269
283
  }
270
284
 
285
+ const myClawDir = path.join(process.env.LOCALAPPDATA || os.tmpdir(), 'myclaw');
286
+ try { fs.mkdirSync(myClawDir, { recursive: true }); } catch {}
287
+
288
+ const batPath = path.join(myClawDir, 'openclaw-launcher.bat');
271
289
  const desktopPath = path.join(os.homedir(), 'Desktop');
272
- const batPath = path.join(desktopPath, 'start-openclaw.bat');
273
-
274
- // 要注意,我们在 wsl2.js 里的分配的 distroName 是 'OpenClaw'
275
- const content = `@echo off
290
+ const lnkPath = path.join(desktopPath, 'OpenClaw.lnk');
291
+
292
+ // === 智能启动器 bat 内容 ===
293
+ const batContent = `@echo off
294
+ chcp 65001 >nul 2>&1
295
+ title OpenClaw 智能启动器
296
+ color 0A
297
+ echo.
298
+ echo ============================================
299
+ echo OpenClaw 智能启动器
300
+ echo ============================================
301
+ echo.
302
+
303
+ REM ---- Step 1: 检测 WSL 是否可用 ----
304
+ echo [1/4] 检测 WSL 状态...
305
+ wsl --version >nul 2>&1
306
+ if errorlevel 1 (
307
+ echo.
308
+ echo [!] WSL 未安装或功能未启用
309
+ echo [!] 正在调用 myclaw wsl2 进行安装...
310
+ echo.
311
+ call myclaw wsl2
312
+ echo.
313
+ echo ============================================
314
+ echo WSL 安装完成后,请 [重启电脑]
315
+ echo 重启后再次双击此图标即可继续
316
+ echo ============================================
317
+ echo.
318
+ pause
319
+ exit /b
320
+ )
321
+ echo [OK] WSL 已安装
322
+
323
+ REM ---- Step 2: 检测 OpenClaw 发行版 ----
324
+ echo [2/4] 检测 OpenClaw Linux 环境...
325
+ wsl -l -q 2>nul | findstr /i "OpenClaw" >nul 2>&1
326
+ if errorlevel 1 (
327
+ echo.
328
+ echo [!] OpenClaw Linux 环境未导入
329
+ echo [!] 正在调用 myclaw wsl2 进行导入...
330
+ echo.
331
+ call myclaw wsl2
332
+ echo.
333
+ echo 导入完成后,请再次双击此图标启动
334
+ echo.
335
+ pause
336
+ exit /b
337
+ )
338
+ echo [OK] OpenClaw Linux 环境已就绪
339
+
340
+ REM ---- Step 3: 检测 Gateway 是否已运行 ----
341
+ echo [3/4] 检测 OpenClaw Gateway...
342
+ curl -s -o nul -w "%%{http_code}" http://127.0.0.1:18789 2>nul | findstr "200 301 302" >nul 2>&1
343
+ if not errorlevel 1 (
344
+ echo [OK] Gateway 已在运行中
345
+ echo.
346
+ echo [4/4] 打开浏览器...
347
+ start http://127.0.0.1:18789
348
+ echo.
349
+ echo ============================================
350
+ echo OpenClaw 已在运行!浏览器已打开
351
+ echo 关闭此窗口不影响服务
352
+ echo ============================================
353
+ echo.
354
+ timeout /t 5
355
+ exit /b
356
+ )
357
+ echo Gateway 未运行,准备启动...
358
+
359
+ REM ---- Step 4: 启动 Gateway ----
360
+ echo [4/4] 启动 OpenClaw Gateway...
361
+ echo.
362
+ echo ============================================
363
+ echo 正在启动 OpenClaw 服务...
364
+ echo 启动后浏览器会自动打开
365
+ echo 关闭此窗口将停止服务
366
+ echo ============================================
367
+ echo.
368
+
276
369
  start http://127.0.0.1:18789
277
370
  wsl -d OpenClaw -- openclaw gateway
278
371
  pause
372
+ `;
373
+
374
+ // 写入 bat 文件
375
+ fs.writeFileSync(batPath, batContent, 'utf8');
376
+
377
+ // 用 PowerShell 创建带图标的桌面快捷方式
378
+ const psScript = `
379
+ $ws = New-Object -ComObject WScript.Shell
380
+ $sc = $ws.CreateShortcut('${lnkPath.replace(/\\/g, '\\\\')}')
381
+ $sc.TargetPath = '${batPath.replace(/\\/g, '\\\\')}'
382
+ $sc.WorkingDirectory = '${myClawDir.replace(/\\/g, '\\\\')}'
383
+ $sc.WindowStyle = 1
384
+ $sc.IconLocation = '%SystemRoot%\\System32\\shell32.dll,176'
385
+ $sc.Description = 'OpenClaw 智能启动器'
386
+ $sc.Save()
279
387
  `;
280
388
 
281
389
  try {
282
- fs.writeFileSync(batPath, content, 'utf8');
390
+ const { execSync } = require('child_process');
391
+ execSync(`powershell -NoProfile -Command "${psScript.replace(/"/g, '\\"').replace(/\n/g, '; ')}"`, { stdio: 'pipe' });
392
+
283
393
  console.log('');
284
- console.log('[' + colors.green + '成功' + colors.nc + '] 一键启动脚本已生成到桌面!');
394
+ console.log('[' + colors.green + '成功' + colors.nc + '] 桌面快捷方式已创建!');
285
395
  console.log('');
286
- console.log('文件所在路径: ' + colors.yellow + batPath + colors.nc);
287
- console.log('现在你可以回到桌面,双击 ' + colors.yellow + 'start-openclaw.bat' + colors.nc + ' 即可一键启动环境和网页了。');
396
+ console.log(' 快捷方式: ' + colors.yellow + lnkPath + colors.nc);
397
+ console.log(' 脚本位置: ' + colors.yellow + batPath + colors.nc);
398
+ console.log('');
399
+ console.log('双击桌面上的 ' + colors.yellow + 'OpenClaw' + colors.nc + ' 图标即可智能启动:');
400
+ console.log(' • WSL 未装 → 自动安装');
401
+ console.log(' • 环境未导入 → 自动导入');
402
+ console.log(' • 服务未启动 → 自动启动 + 打开浏览器');
403
+ console.log(' • 已在运行 → 直接打开浏览器');
288
404
  console.log('');
289
405
  } catch (err) {
406
+ // 如果创建快捷方式失败,至少 bat 已经生成了
290
407
  console.log('');
291
- console.error('[' + colors.red + '错误' + colors.nc + '] 创建脚本失败: ' + err.message);
408
+ console.log('[' + colors.yellow + '提示' + colors.nc + '] 快捷方式创建失败,但启动脚本已生成');
409
+ console.log(' 脚本位置: ' + colors.yellow + batPath + colors.nc);
410
+ console.log(' 你可以手动将此文件拖到桌面');
292
411
  console.log('');
293
412
  }
294
413
  }
295
414
 
296
415
  // ============================================================================
297
- // Open 命令 - 打开浏览器
416
+ // Open 命令 - 打开浏览器(自动带 token)
298
417
  // ============================================================================
299
418
 
300
419
  function runOpen() {
301
420
  const fs = require('fs');
302
421
  const { exec } = require('child_process');
303
- const url = args[1] || 'http://127.0.0.1:18789';
422
+ const baseUrl = args[1] || DEFAULT_URL;
304
423
  const platform = os.platform();
305
424
  const bar = '----------------------------------------';
306
425
 
426
+ // 拼接 token
427
+ const url = baseUrl + (baseUrl.includes('?') ? '&' : '?') + 'token=' + TOKEN;
428
+
307
429
  console.log('');
308
430
  console.log('[' + colors.blue + 'MyClaw' + colors.nc + '] ' + colors.blue + '打开浏览器' + colors.nc);
309
431
  console.log(bar);
310
432
  console.log('');
433
+ console.log('[Token] ' + TOKEN);
434
+ console.log('[地址] ' + url);
435
+ console.log('');
311
436
 
312
437
  // 定义各平台 Chrome 路径
313
438
  let chromePaths = [];
@@ -405,18 +530,7 @@ function runOpen() {
405
530
  exec('"' + chromePath + '" "' + url + '"');
406
531
  } else {
407
532
  // Linux / WSL2
408
- let isWSL = false;
409
- try {
410
- const releaseInfo = fs.readFileSync('/proc/version', 'utf8');
411
- if (/microsoft|wsl/i.test(releaseInfo)) isWSL = true;
412
- } catch {}
413
-
414
- if (isWSL) {
415
- // WSL2: Chrome 路径中有空格,需要特殊处理
416
- exec('"' + chromePath + '" "' + url + '"');
417
- } else {
418
- exec('"' + chromePath + '" "' + url + '"');
419
- }
533
+ exec('"' + chromePath + '" "' + url + '"');
420
534
  }
421
535
  console.log('');
422
536
  console.log('[' + colors.green + '成功' + colors.nc + '] 浏览器已启动');
@@ -529,13 +643,15 @@ function showHelp() {
529
643
  console.log(' myclaw <command>');
530
644
  console.log('');
531
645
  console.log('向导 (交互式):');
646
+ console.log(' prepare 智能初始化(环境检测 + 安装 + Patch)');
532
647
  console.log(' weixin 微信接入向导(步骤引导 + 教学说明)');
648
+ console.log(' rebind 微信换绑向导(清空、扫码、换Agent)');
533
649
  console.log('');
534
650
  console.log('命令:');
535
651
  console.log(' install 安装 OpenClaw 服务');
536
652
  console.log(' status 简化版状态查看(学生友好)');
537
653
  console.log(' new 创建新的 Agent(学生练习用)');
538
- console.log(' open 打开浏览器控制台(默认 http://127.0.0.1:18789)');
654
+ console.log(' open 打开浏览器控制台(自动带 token)');
539
655
  console.log(' wsl2 WSL2 一键安装/修复 (仅限 Windows)');
540
656
  console.log(' bat 在桌面生成一键启动脚本 (仅限 Windows)');
541
657
  console.log(' patch 注入 MyClaw UI 扩展到 WebChat');
@@ -544,13 +660,16 @@ function showHelp() {
544
660
  console.log(' help 显示帮助信息');
545
661
  console.log('');
546
662
  console.log('示例:');
547
- console.log(' myclaw weixin # 打开微信接入向导');
548
- console.log(' myclaw install # 安装 OpenClaw');
549
- console.log(' myclaw status # 查看状态');
550
- console.log(' myclaw new helper # 创建名为 helper 的 Agent');
551
- console.log(' myclaw open # 打开默认控制台');
552
- console.log(' myclaw patch # 注入 UI 扩展');
553
- console.log(' myclaw restart # 重启 Gateway');
663
+ console.log(' myclaw prepare # 智能初始化(推荐新用户首先执行)');
664
+ console.log(' myclaw weixin # 打开微信接入向导');
665
+ console.log(' myclaw install # 安装 OpenClaw');
666
+ console.log(' myclaw status # 查看状态');
667
+ console.log(' myclaw new helper # 创建名为 helper 的 Agent');
668
+ console.log(' myclaw open # 打开控制台(自动读取 token)');
669
+ console.log(' myclaw open --token kakaxi-2026 # 指定 token 打开');
670
+ console.log(' myclaw open http://x.x.x.x:18789 # 打开指定 URL');
671
+ console.log(' myclaw patch # 注入 UI 扩展');
672
+ console.log(' myclaw restart # 重启 Gateway');
554
673
  console.log('');
555
674
  console.log('跨平台: macOS / Linux / Windows (PowerShell/CMD)');
556
675
  console.log('');
@@ -564,8 +683,12 @@ console.log(colors.blue + 'MyClaw v' + version + colors.nc);
564
683
 
565
684
  if (!command || command === 'help' || command === '--help' || command === '-h') {
566
685
  showHelp();
686
+ } else if (command === 'prepare') {
687
+ runPrepare();
567
688
  } else if (command === 'weixin') {
568
689
  runWeixin();
690
+ } else if (command === 'rebind') {
691
+ runRebind();
569
692
  } else if (command === 'install') {
570
693
  runInstall();
571
694
  } else if (command === 'status') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiyiran/myclaw",
3
- "version": "1.0.31",
3
+ "version": "1.0.32",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {