@aiyiran/myclaw 1.0.30 → 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];
@@ -237,13 +238,16 @@ function runNew() {
237
238
  }
238
239
 
239
240
  // ============================================================================
240
- // 微信接入向导
241
+ // 向导系统(统一入口)
241
242
  // ============================================================================
242
243
 
243
244
  function runWeixin() {
244
- const { WizardRunner } = require('./wizards/wizard-runner');
245
- const config = require('./wizards/weixin.config.json');
246
- new WizardRunner(config).run();
245
+ const { runWeixin, runRebind: _rb } = require('./wizards/index');
246
+ runWeixin();
247
+ }
248
+ function runRebind() {
249
+ const { runRebind } = require('./wizards/index');
250
+ runRebind();
247
251
  }
248
252
 
249
253
  // ============================================================================
@@ -255,6 +259,15 @@ function runWsl2() {
255
259
  wsl2.run();
256
260
  }
257
261
 
262
+ // ============================================================================
263
+ // Prepare 智能初始化
264
+ // ============================================================================
265
+
266
+ function runPrepare() {
267
+ const prepare = require('./prepare');
268
+ prepare.run();
269
+ }
270
+
258
271
  // ============================================================================
259
272
  // 创建 Windows 桌面快捷启动脚本
260
273
  // ============================================================================
@@ -269,46 +282,157 @@ function runBat() {
269
282
  process.exit(0);
270
283
  }
271
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');
272
289
  const desktopPath = path.join(os.homedir(), 'Desktop');
273
- const batPath = path.join(desktopPath, 'start-openclaw.bat');
274
-
275
- // 要注意,我们在 wsl2.js 里的分配的 distroName 是 'OpenClaw'
276
- 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
+
277
369
  start http://127.0.0.1:18789
278
370
  wsl -d OpenClaw -- openclaw gateway
279
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()
280
387
  `;
281
388
 
282
389
  try {
283
- 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
+
284
393
  console.log('');
285
- console.log('[' + colors.green + '成功' + colors.nc + '] 一键启动脚本已生成到桌面!');
394
+ console.log('[' + colors.green + '成功' + colors.nc + '] 桌面快捷方式已创建!');
286
395
  console.log('');
287
- console.log('文件所在路径: ' + colors.yellow + batPath + colors.nc);
288
- 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(' • 已在运行 → 直接打开浏览器');
289
404
  console.log('');
290
405
  } catch (err) {
406
+ // 如果创建快捷方式失败,至少 bat 已经生成了
291
407
  console.log('');
292
- 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(' 你可以手动将此文件拖到桌面');
293
411
  console.log('');
294
412
  }
295
413
  }
296
414
 
297
415
  // ============================================================================
298
- // Open 命令 - 打开浏览器
416
+ // Open 命令 - 打开浏览器(自动带 token)
299
417
  // ============================================================================
300
418
 
301
419
  function runOpen() {
302
420
  const fs = require('fs');
303
421
  const { exec } = require('child_process');
304
- const url = args[1] || 'http://127.0.0.1:18789';
422
+ const baseUrl = args[1] || DEFAULT_URL;
305
423
  const platform = os.platform();
306
424
  const bar = '----------------------------------------';
307
425
 
426
+ // 拼接 token
427
+ const url = baseUrl + (baseUrl.includes('?') ? '&' : '?') + 'token=' + TOKEN;
428
+
308
429
  console.log('');
309
430
  console.log('[' + colors.blue + 'MyClaw' + colors.nc + '] ' + colors.blue + '打开浏览器' + colors.nc);
310
431
  console.log(bar);
311
432
  console.log('');
433
+ console.log('[Token] ' + TOKEN);
434
+ console.log('[地址] ' + url);
435
+ console.log('');
312
436
 
313
437
  // 定义各平台 Chrome 路径
314
438
  let chromePaths = [];
@@ -406,18 +530,7 @@ function runOpen() {
406
530
  exec('"' + chromePath + '" "' + url + '"');
407
531
  } else {
408
532
  // Linux / WSL2
409
- let isWSL = false;
410
- try {
411
- const releaseInfo = fs.readFileSync('/proc/version', 'utf8');
412
- if (/microsoft|wsl/i.test(releaseInfo)) isWSL = true;
413
- } catch {}
414
-
415
- if (isWSL) {
416
- // WSL2: Chrome 路径中有空格,需要特殊处理
417
- exec('"' + chromePath + '" "' + url + '"');
418
- } else {
419
- exec('"' + chromePath + '" "' + url + '"');
420
- }
533
+ exec('"' + chromePath + '" "' + url + '"');
421
534
  }
422
535
  console.log('');
423
536
  console.log('[' + colors.green + '成功' + colors.nc + '] 浏览器已启动');
@@ -530,13 +643,15 @@ function showHelp() {
530
643
  console.log(' myclaw <command>');
531
644
  console.log('');
532
645
  console.log('向导 (交互式):');
646
+ console.log(' prepare 智能初始化(环境检测 + 安装 + Patch)');
533
647
  console.log(' weixin 微信接入向导(步骤引导 + 教学说明)');
648
+ console.log(' rebind 微信换绑向导(清空、扫码、换Agent)');
534
649
  console.log('');
535
650
  console.log('命令:');
536
651
  console.log(' install 安装 OpenClaw 服务');
537
652
  console.log(' status 简化版状态查看(学生友好)');
538
653
  console.log(' new 创建新的 Agent(学生练习用)');
539
- console.log(' open 打开浏览器控制台(默认 http://127.0.0.1:18789)');
654
+ console.log(' open 打开浏览器控制台(自动带 token)');
540
655
  console.log(' wsl2 WSL2 一键安装/修复 (仅限 Windows)');
541
656
  console.log(' bat 在桌面生成一键启动脚本 (仅限 Windows)');
542
657
  console.log(' patch 注入 MyClaw UI 扩展到 WebChat');
@@ -545,13 +660,16 @@ function showHelp() {
545
660
  console.log(' help 显示帮助信息');
546
661
  console.log('');
547
662
  console.log('示例:');
548
- console.log(' myclaw weixin # 打开微信接入向导');
549
- console.log(' myclaw install # 安装 OpenClaw');
550
- console.log(' myclaw status # 查看状态');
551
- console.log(' myclaw new helper # 创建名为 helper 的 Agent');
552
- console.log(' myclaw open # 打开默认控制台');
553
- console.log(' myclaw patch # 注入 UI 扩展');
554
- 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');
555
673
  console.log('');
556
674
  console.log('跨平台: macOS / Linux / Windows (PowerShell/CMD)');
557
675
  console.log('');
@@ -565,8 +683,12 @@ console.log(colors.blue + 'MyClaw v' + version + colors.nc);
565
683
 
566
684
  if (!command || command === 'help' || command === '--help' || command === '-h') {
567
685
  showHelp();
686
+ } else if (command === 'prepare') {
687
+ runPrepare();
568
688
  } else if (command === 'weixin') {
569
689
  runWeixin();
690
+ } else if (command === 'rebind') {
691
+ runRebind();
570
692
  } else if (command === 'install') {
571
693
  runInstall();
572
694
  } else if (command === 'status') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiyiran/myclaw",
3
- "version": "1.0.30",
3
+ "version": "1.0.32",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -15,7 +15,9 @@
15
15
  "author": "",
16
16
  "license": "ISC",
17
17
  "dependencies": {
18
- "chalk": "^4.1.2",
19
- "ora": "^5.4.1"
18
+ "chalk": "^4.1.2"
19
+ },
20
+ "engines": {
21
+ "node": ">=16"
20
22
  }
21
23
  }