@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 +12 -0
- package/index.js +155 -32
- package/package.json +1 -1
- package/prepare.js +452 -0
- package/wizards/TESTING.md +203 -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 +6 -6
- package/wizards/configs/weixin/index.config.json +3 -3
- package/wizards/index.js +6 -1
- package/wizards/runner/config-loader.js +39 -2
- 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/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];
|
|
@@ -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
|
|
273
|
-
|
|
274
|
-
//
|
|
275
|
-
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
|
+
|
|
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
|
-
|
|
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('
|
|
287
|
-
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(' • 已在运行 → 直接打开浏览器');
|
|
288
404
|
console.log('');
|
|
289
405
|
} catch (err) {
|
|
406
|
+
// 如果创建快捷方式失败,至少 bat 已经生成了
|
|
290
407
|
console.log('');
|
|
291
|
-
console.
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
548
|
-
console.log(' myclaw
|
|
549
|
-
console.log(' myclaw
|
|
550
|
-
console.log(' myclaw
|
|
551
|
-
console.log(' myclaw
|
|
552
|
-
console.log(' myclaw
|
|
553
|
-
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');
|
|
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') {
|