@aiyiran/myclaw 1.0.154 → 1.0.155

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.
Files changed (2) hide show
  1. package/package.json +3 -7
  2. package/wsl2.js +107 -1
package/package.json CHANGED
@@ -1,22 +1,18 @@
1
1
  {
2
2
  "name": "@aiyiran/myclaw",
3
- "version": "1.0.154",
3
+ "version": "1.0.155",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
7
- "myclaw": "index.js",
8
- "mc": "index.js"
7
+ "mc": "index.js",
8
+ "myclaw": "index.js"
9
9
  },
10
10
  "scripts": {
11
11
  "test": "echo \"Error: no test specified\" && exit 1"
12
12
  },
13
- "keywords": [],
14
13
  "author": "",
15
14
  "license": "ISC",
16
15
  "dependencies": {
17
16
  "chalk": "^4.1.2"
18
- },
19
- "engines": {
20
- "node": ">=16"
21
17
  }
22
18
  }
package/wsl2.js CHANGED
@@ -36,6 +36,8 @@ const C = isWindows
36
36
  const STATE_FILE = path.join(os.homedir(), '.myclaw_wsl_state');
37
37
  const MARKER_PATH_PS = STATE_FILE.replace(/\\/g, '\\\\');
38
38
 
39
+ const CONFIG_FILE = path.join(os.homedir(), '.myclaw_config');
40
+
39
41
  const WORK_DIR = path.join(os.homedir(), '.myclaw_tmp');
40
42
  try { fs.mkdirSync(WORK_DIR, { recursive: true }); } catch {}
41
43
  const WORK_DIR_PS = WORK_DIR.replace(/\\/g, '\\\\');
@@ -55,6 +57,22 @@ function setState(state) {
55
57
  fs.writeFileSync(STATE_FILE, state, 'utf8');
56
58
  }
57
59
 
60
+ function getConfig() {
61
+ try {
62
+ if (fs.existsSync(CONFIG_FILE)) {
63
+ const content = fs.readFileSync(CONFIG_FILE, 'utf8');
64
+ return JSON.parse(content);
65
+ }
66
+ } catch {}
67
+ return {};
68
+ }
69
+
70
+ function setConfig(key, value) {
71
+ const config = getConfig();
72
+ config[key] = value;
73
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf8');
74
+ }
75
+
58
76
  function launchElevatedPS(script) {
59
77
  const tmpDir = process.env.LOCALAPPDATA
60
78
  ? path.join(process.env.LOCALAPPDATA, 'myclaw')
@@ -80,7 +98,8 @@ function launchElevatedPS(script) {
80
98
  }
81
99
 
82
100
  function makeAskLocalOrCDN(prompt, destVar, cdnUrl, desc, fileName) {
83
- const callerDir = process.cwd().replace(/\\/g, '\\\\');
101
+ const config = getConfig();
102
+ const callerDir = (config.installerDir || process.env.MYCLAW_INSTALLER_DIR || process.cwd()).replace(/\\/g, '\\\\');
84
103
  const cdnFilename = cdnUrl.split('/').pop();
85
104
  return `
86
105
  $callerDir = "${callerDir}"
@@ -436,6 +455,87 @@ if ($installed) {
436
455
  }
437
456
  }
438
457
 
458
+ // ============================================================================
459
+ // ============================================================================
460
+ // CLI 模式
461
+ // ============================================================================
462
+
463
+ function runCliMode() {
464
+ const readline = require('readline');
465
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
466
+
467
+ const question = (prompt) => new Promise(resolve => rl.question(prompt, resolve));
468
+
469
+ async function showMenu() {
470
+ console.log('');
471
+ console.log('========================================');
472
+ console.log(' MyClaw WSL2 CLI 控制面板');
473
+ console.log('========================================');
474
+ console.log('');
475
+
476
+ const config = getConfig();
477
+ const currentPath = config.installerDir || '(未设置)';
478
+
479
+ console.log('当前安装包路径: ' + C.y + currentPath + C.nc);
480
+ console.log('');
481
+ console.log('请选择操作:');
482
+ console.log(' 1. 重新安装 Phase 1 (启用功能 + 下载)');
483
+ console.log(' 2. 重新安装 Phase 2 (导入 Linux 环境)');
484
+ console.log(' 3. 重新设置安装包路径');
485
+ console.log(' 0. 退出');
486
+ console.log('');
487
+
488
+ const choice = await question('请输入选项 (0-3): ');
489
+
490
+ switch (choice.trim()) {
491
+ case '1':
492
+ console.log('');
493
+ console.log('[' + C.y + '执行' + C.nc + '] 开始 Phase 1 安装...');
494
+ setState('needs-features');
495
+ rl.close();
496
+ runPhase1();
497
+ break;
498
+
499
+ case '2':
500
+ console.log('');
501
+ console.log('[' + C.y + '执行' + C.nc + '] 开始 Phase 2 安装...');
502
+ setState('phase1-done');
503
+ rl.close();
504
+ runPhase2();
505
+ break;
506
+
507
+ case '3':
508
+ console.log('');
509
+ const newPath = await question('请输入安装包存放路径: ');
510
+ if (newPath.trim()) {
511
+ setConfig('installerDir', newPath.trim());
512
+ console.log('');
513
+ console.log('[' + C.g + 'OK' + C.nc + '] 路径已保存: ' + C.y + newPath.trim() + C.nc);
514
+ console.log('');
515
+ console.log('再次运行 ' + C.y + 'myclaw wsl2' + C.nc + ' 时将使用此路径。');
516
+ } else {
517
+ console.log('[' + C.r + '取消' + C.nc + '] 路径为空,未保存。');
518
+ }
519
+ rl.close();
520
+ break;
521
+
522
+ case '0':
523
+ console.log('');
524
+ console.log('已退出。');
525
+ rl.close();
526
+ break;
527
+
528
+ default:
529
+ console.log('');
530
+ console.log('[' + C.r + '错误' + C.nc + '] 无效选项,请重试。');
531
+ await showMenu();
532
+ break;
533
+ }
534
+ }
535
+
536
+ showMenu();
537
+ }
538
+
439
539
  // ============================================================================
440
540
  // 主入口
441
541
  // ============================================================================
@@ -446,6 +546,12 @@ function run() {
446
546
  process.exit(0);
447
547
  }
448
548
 
549
+ // CLI 模式
550
+ if (process.argv.includes('--cli')) {
551
+ runCliMode();
552
+ return;
553
+ }
554
+
449
555
  // 隐藏的高级玩家后门
450
556
  if (process.argv.includes('--force-phase1')) {
451
557
  setState('needs-features');