@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 +12 -0
- package/index.js +157 -35
- package/package.json +5 -3
- package/prepare.js +452 -0
- package/wizards/TESTING.md +203 -0
- package/wizards/commons/gateway.steps.json +52 -0
- package/wizards/configs/rebind/full-reset.config.json +116 -0
- package/wizards/configs/rebind/index.config.json +44 -0
- package/wizards/configs/rebind/new-account.config.json +74 -0
- package/wizards/configs/rebind/soft-switch.config.json +55 -0
- package/wizards/configs/weixin/bind.config.json +153 -0
- package/wizards/{weixin.config.json → configs/weixin/index.config.json} +16 -19
- package/wizards/index.js +37 -0
- package/wizards/runner/config-loader.js +126 -0
- package/wizards/runner/input-prompt.js +96 -0
- package/wizards/runner/render.js +87 -0
- package/wizards/runner/wizard-runner.js +541 -0
- package/wizards/scripts/bind_dm_route.py +97 -0
- package/wizards/scripts/rebind.py +215 -0
- package/wizards/scripts/reset_dm_route_state.py +219 -0
- package/wizards/wizard-runner.js +0 -353
package/config.js
ADDED
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 {
|
|
245
|
-
|
|
246
|
-
|
|
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
|
|
274
|
-
|
|
275
|
-
//
|
|
276
|
-
const
|
|
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
|
-
|
|
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('
|
|
288
|
-
console.log('
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
549
|
-
console.log(' myclaw
|
|
550
|
-
console.log(' myclaw
|
|
551
|
-
console.log(' myclaw
|
|
552
|
-
console.log(' myclaw
|
|
553
|
-
console.log(' myclaw
|
|
554
|
-
console.log(' myclaw
|
|
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.
|
|
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
|
-
|
|
18
|
+
"chalk": "^4.1.2"
|
|
19
|
+
},
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=16"
|
|
20
22
|
}
|
|
21
23
|
}
|