@aiyiran/myclaw 1.0.7 → 1.0.9

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 (3) hide show
  1. package/index.js +4 -0
  2. package/package.json +1 -1
  3. package/wsl2.js +70 -132
package/index.js CHANGED
@@ -25,7 +25,9 @@
25
25
 
26
26
  const { execSync } = require('child_process');
27
27
  const os = require('os');
28
+ const path = require('path');
28
29
  const { createAgent } = require('./create_agent');
30
+ const { version } = require(path.join(__dirname, 'package.json'));
29
31
 
30
32
  const args = process.argv.slice(2);
31
33
  const command = args[0];
@@ -276,6 +278,8 @@ function showHelp() {
276
278
  // 主逻辑
277
279
  // ============================================================================
278
280
 
281
+ console.log(colors.blue + 'MyClaw v' + version + colors.nc);
282
+
279
283
  if (!command || command === 'help' || command === '--help' || command === '-h') {
280
284
  showHelp();
281
285
  } else if (command === 'install') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiyiran/myclaw",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
package/wsl2.js CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  /**
4
4
  * ============================================================================
5
- * MyClaw WSL2 一键安装器 (终极全自动版)
5
+ * MyClaw WSL2 一键安装器
6
6
  * ============================================================================
7
7
  *
8
8
  * 使用方式: myclaw wsl2
9
9
  *
10
10
  * 自动检测当前 WSL2 安装状态,分两个阶段完成安装:
11
- * Phase 1: 启用底层 Windows 功能 + 预下载安装包 → 需要重启
12
- * Phase 2: 安装内核更新 + Ubuntu → 完成
11
+ * Phase 1: 启用底层 Windows 功能 + 安装 WSL 完整包 → 需要重启
12
+ * Phase 2: 导入预制 Linux 环境(tar 包) → 完成
13
13
  *
14
14
  * 用户只需反复运行 myclaw wsl2,脚本会自动接续上次的进度。
15
15
  * ============================================================================
@@ -19,23 +19,17 @@ const { execSync } = require('child_process');
19
19
  const os = require('os');
20
20
 
21
21
  // ============================================================================
22
- // 配置
22
+ // 配置 - 所有下载地址集中在这里,方便统一替换
23
23
  // ============================================================================
24
24
 
25
- // 下载源(可替换为你自己的 CDN 地址加速国内下载)
26
25
  const WSL_CDN = {
27
- kernel: 'https://cdn.yiranlaoshi.com/software/myclaw/wsl_update_x64.msi',
26
+ // ★ 新版 WSL 完整安装包(243MB,含内核,替代老的 wsl_update_x64.msi 和 wsl --update)
27
+ wsl: 'https://cdn.yiranlaoshi.com/software/myclaw/wsl.2.7.1.0.x64.msi',
28
28
  // ★ 预制 rootfs tar 包(内含 Node.js + OpenClaw,用户开箱即用)
29
29
  // TODO: 替换为你自己的 CDN 地址,制作方法见 README
30
30
  rootfs: 'https://openclaw.ai/wsl/openclaw-rootfs.tar',
31
- // 降级备选:微软官方 Ubuntu Appx 包
32
- ubuntu: 'https://aka.ms/wslubuntu2204',
33
31
  };
34
32
 
35
- // ★ 是否启用降级方案(方法 B: wsl --install / 方法 C: Appx 离线包)
36
- // 如果你的 CDN 稳定可靠,设为 false 只用方法 A(tar 导入)
37
- const ENABLE_FALLBACK = false;
38
-
39
33
  const isWindows = os.platform() === 'win32';
40
34
 
41
35
  // 颜色(Windows 下禁用避免乱码)
@@ -92,16 +86,16 @@ function detectState() {
92
86
  }
93
87
 
94
88
  // ============================================================================
95
- // Phase 1: 启用底层功能 + 预下载
89
+ // Phase 1: 启用功能 + 安装 WSL 完整包
96
90
  // ============================================================================
97
91
 
98
92
  function runPhase1() {
99
93
  console.log('');
100
94
  console.log('[当前进度] WSL 功能 ' + C.r + '[未启用]' + C.nc);
101
- console.log(' 内核更新 ' + C.r + '[未安装]' + C.nc);
102
- console.log(' Ubuntu ' + C.r + '[未安装]' + C.nc);
95
+ console.log(' WSL 组件 ' + C.r + '[未安装]' + C.nc);
96
+ console.log(' Linux ' + C.r + '[未安装]' + C.nc);
103
97
  console.log('');
104
- console.log('本次执行 阶段 1/2: 启用底层功能 + 预下载安装包');
98
+ console.log('本次执行 阶段 1/2: 启用底层功能 + 安装 WSL 完整包');
105
99
  console.log(' 完成后需要 ' + C.y + '重启电脑' + C.nc);
106
100
  console.log(' 重启后再运行 ' + C.y + 'myclaw wsl2' + C.nc + ' 自动进入阶段 2');
107
101
  console.log('');
@@ -114,10 +108,13 @@ $Host.UI.RawUI.WindowTitle = 'MyClaw WSL2 Installer - Phase 1'
114
108
  Write-Host ''
115
109
  Write-Host '========================================'
116
110
  Write-Host ' MyClaw WSL2 安装 - 阶段 1/2'
117
- Write-Host ' 启用底层功能 + 预下载安装包'
111
+ Write-Host ' 启用底层功能 + 安装 WSL 完整包'
118
112
  Write-Host '========================================'
119
113
  Write-Host ''
120
114
 
115
+ $dir = "$env:LOCALAPPDATA\\myclaw"
116
+ New-Item -ItemType Directory -Force -Path $dir | Out-Null
117
+
121
118
  Write-Host '[1/4] 启用 Windows Subsystem for Linux...'
122
119
  try {
123
120
  dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart | Out-Null
@@ -136,29 +133,33 @@ try {
136
133
  }
137
134
  Write-Host ''
138
135
 
139
- Write-Host '[3/4] 预下载 WSL2 内核更新包...'
140
- $dir = "$env:LOCALAPPDATA\\myclaw"
141
- $msi = "$dir\\wsl_update_x64.msi"
142
- New-Item -ItemType Directory -Force -Path $dir | Out-Null
143
- try {
144
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
145
- Invoke-WebRequest -Uri '${WSL_CDN.kernel}' -OutFile $msi -UseBasicParsing
146
- Write-Host ' [OK] 已缓存'
147
- } catch {
148
- Write-Host ' [跳过] 下载失败, 重启后将重试'
149
- }
150
- Write-Host ''
151
-
152
- Write-Host '[4/4] 尝试提前安装内核更新...'
153
- if (Test-Path $msi) {
136
+ Write-Host '[3/4] 下载 WSL 完整安装包 (约 243MB)...'
137
+ $msi = "$dir\\wsl_full.msi"
138
+ if (-Not (Test-Path $msi)) {
154
139
  try {
155
- Start-Process msiexec.exe -ArgumentList "/i \`"$msi\`" /quiet /norestart" -Wait -NoNewWindow
156
- Write-Host ' [OK]'
140
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
141
+ Invoke-WebRequest -Uri '${WSL_CDN.wsl}' -OutFile $msi -UseBasicParsing
142
+ Write-Host ' [OK] 下载完成'
157
143
  } catch {
158
- Write-Host ' [跳过] 重启后将自动完成'
144
+ Write-Host ' [失败] 下载失败,请检查网络后重试 myclaw wsl2'
145
+ Write-Host ''; Write-Host '按任意键关闭...'
146
+ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
147
+ exit 1
159
148
  }
160
149
  } else {
161
- Write-Host ' [跳过] 文件未就绪'
150
+ Write-Host ' 使用上次缓存的文件'
151
+ }
152
+ Write-Host ''
153
+
154
+ Write-Host '[4/4] 安装 WSL 完整包...'
155
+ try {
156
+ Start-Process msiexec.exe -ArgumentList "/i \`"$msi\`" /quiet /norestart" -Wait -NoNewWindow
157
+ Write-Host ' [OK] 安装成功!'
158
+ } catch {
159
+ Write-Host ' [失败] 安装出错'
160
+ Write-Host ''; Write-Host '按任意键关闭...'
161
+ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
162
+ exit 1
162
163
  }
163
164
 
164
165
  Write-Host ''
@@ -184,15 +185,16 @@ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
184
185
  }
185
186
 
186
187
  // ============================================================================
187
- // Phase 2: 安装内核 + Ubuntu
188
+ // Phase 2: 导入预制 Linux 环境
188
189
  // ============================================================================
189
190
 
190
191
  function runPhase2() {
191
192
  console.log('');
192
- console.log('[当前进度] WSL 功能已启用 ' + C.g + '[OK]' + C.nc);
193
- console.log(' 内核更新 + Ubuntu ' + C.y + '[待安装]' + C.nc);
193
+ console.log('[当前进度] WSL 功能 ' + C.g + '[OK]' + C.nc);
194
+ console.log(' WSL 组件 ' + C.g + '[OK]' + C.nc);
195
+ console.log(' Linux ' + C.y + '[待安装]' + C.nc);
194
196
  console.log('');
195
- console.log('即将自动下载并安装(需要管理员权限)...');
197
+ console.log('即将导入预制 Linux 环境(需要管理员权限)...');
196
198
  console.log('[' + C.y + '注意' + C.nc + '] 请在 UAC 弹窗中点击【是】');
197
199
  console.log('');
198
200
 
@@ -202,120 +204,56 @@ $Host.UI.RawUI.WindowTitle = 'MyClaw WSL2 Installer - Phase 2'
202
204
  Write-Host ''
203
205
  Write-Host '========================================'
204
206
  Write-Host ' MyClaw WSL2 安装 - 阶段 2/2'
205
- Write-Host ' 安装内核更新 + Ubuntu'
207
+ Write-Host ' 导入预制 Linux 环境'
206
208
  Write-Host '========================================'
207
209
  Write-Host ''
208
210
 
209
- Write-Host '[1/5] 设置 WSL2 为默认版本...'
210
- try { wsl --set-default-version 2 2>$null } catch {}
211
- Write-Host ' [OK]'
212
- Write-Host ''
213
-
214
- Write-Host '[2/5] 安装 WSL2 内核更新包...'
215
211
  $dir = "$env:LOCALAPPDATA\\myclaw"
216
- $msi = "$dir\\wsl_update_x64.msi"
217
212
  New-Item -ItemType Directory -Force -Path $dir | Out-Null
218
213
 
219
- if (-Not (Test-Path $msi)) {
220
- Write-Host ' 正在从微软服务器下载...'
221
- try {
222
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
223
- Invoke-WebRequest -Uri '${WSL_CDN.kernel}' -OutFile $msi -UseBasicParsing
224
- Write-Host ' 下载完成!'
225
- } catch {
226
- Write-Host ' [失败] 下载失败,请检查网络'
227
- Write-Host ' 手动下载: https://aka.ms/wsl2kernel'
228
- Write-Host ''; Write-Host '按任意键退出...'
229
- $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
230
- exit 1
231
- }
232
- } else {
233
- Write-Host ' 使用上次预下载的缓存文件'
234
- }
235
- try {
236
- Start-Process msiexec.exe -ArgumentList "/i \`"$msi\`" /quiet /norestart" -Wait -NoNewWindow
237
- Write-Host ' [OK] 内核更新安装成功!'
238
- } catch {
239
- Write-Host ' 可能已安装,继续...'
240
- }
241
- Write-Host ''
242
-
243
- Write-Host '[3/5] 确认 WSL2 为默认版本...'
214
+ Write-Host '[1/3] 设置 WSL2 为默认版本...'
244
215
  try { wsl --set-default-version 2 2>$null } catch {}
245
216
  Write-Host ' [OK]'
246
217
  Write-Host ''
247
218
 
248
- Write-Host '[4/5] 安装 Linux 发行版...'
249
- $installed = $false
219
+ Write-Host '[2/3] 下载并导入预制 Linux 环境...'
220
+ $tarPath = "$dir\\openclaw-rootfs.tar"
250
221
  $distroName = 'OpenClaw'
251
222
  $installDir = "$dir\\OpenClaw"
223
+ $installed = $false
252
224
 
253
- # ---- 方法 A (最强): 预制 rootfs tar 包,wsl --import ----
254
- Write-Host ' 方法 A: 导入 OpenClaw 预制 Linux 环境...'
255
- $tarPath = "$dir\\openclaw-rootfs.tar"
256
225
  if (-Not (Test-Path $tarPath)) {
257
226
  Write-Host ' 正在下载预制环境包...'
258
227
  try {
259
228
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
260
- Invoke-WebRequest -Uri '` + WSL_CDN.rootfs + `' -OutFile $tarPath -UseBasicParsing
229
+ Invoke-WebRequest -Uri '${WSL_CDN.rootfs}' -OutFile $tarPath -UseBasicParsing
261
230
  Write-Host ' 下载完成!'
262
231
  } catch {
263
- Write-Host ' 下载失败, 尝试备选方案...'
232
+ Write-Host ' [失败] 下载失败,请检查网络后重试 myclaw wsl2'
233
+ Write-Host ''; Write-Host '按任意键关闭...'
234
+ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
235
+ exit 1
264
236
  }
265
- }
266
- if (Test-Path $tarPath) {
267
- try {
268
- New-Item -ItemType Directory -Force -Path $installDir | Out-Null
269
- wsl --import $distroName $installDir $tarPath 2>$null
270
- if ($LASTEXITCODE -eq 0) {
271
- $installed = $true
272
- Write-Host ' [OK] 方法 A 成功! (预制环境已导入)'
273
- }
274
- } catch {}
275
- }
276
-
277
- # ---- 方法 B / C (降级备选,由 ENABLE_FALLBACK 控制) ----
278
- ` + (ENABLE_FALLBACK ? `
279
- if (-Not $installed) {
280
- Write-Host ' 方法 B: wsl --install ...'
281
- try {
282
- $output = wsl --install -d Ubuntu --no-launch 2>&1
283
- if ($LASTEXITCODE -eq 0) {
284
- $installed = $true
285
- Write-Host ' [OK] 方法 B 成功!'
286
- }
287
- } catch {}
237
+ } else {
238
+ Write-Host ' 使用上次缓存的文件'
288
239
  }
289
240
 
290
- if (-Not $installed) {
291
- Write-Host ' 方法 C: 离线 Appx 安装...'
292
- $appx = "$dir\\Ubuntu.appx"
293
- if (-Not (Test-Path $appx)) {
294
- Write-Host ' 正在下载 Ubuntu (约 500MB)...'
295
- try {
296
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
297
- Invoke-WebRequest -Uri '` + WSL_CDN.ubuntu + `' -OutFile $appx -UseBasicParsing
298
- } catch {
299
- Write-Host ' [失败] 下载失败'
300
- }
301
- }
302
- if (Test-Path $appx) {
303
- try {
304
- Add-AppxPackage -Path $appx
305
- $installed = $true
306
- Write-Host ' [OK] 方法 C 成功!'
307
- } catch {}
241
+ Write-Host ' 正在导入 (可能需要几分钟)...'
242
+ try {
243
+ New-Item -ItemType Directory -Force -Path $installDir | Out-Null
244
+ wsl --import $distroName $installDir $tarPath 2>$null
245
+ if ($LASTEXITCODE -eq 0) {
246
+ $installed = $true
247
+ Write-Host ' [OK] 导入成功!'
248
+ } else {
249
+ Write-Host ' [失败] 导入失败'
308
250
  }
251
+ } catch {
252
+ Write-Host ' [失败] 导入失败'
309
253
  }
310
- ` : `
311
- if (-Not $installed) {
312
- Write-Host ' [失败] 预制环境包安装失败'
313
- Write-Host ' 请检查网络后重试: myclaw wsl2'
314
- }
315
- `) + `
316
254
  Write-Host ''
317
255
 
318
- Write-Host '[5/5] 验证安装结果...'
256
+ Write-Host '[3/3] 验证安装结果...'
319
257
  try {
320
258
  $result = wsl -l -v 2>&1 | Out-String
321
259
  Write-Host $result
@@ -326,13 +264,13 @@ try {
326
264
  Write-Host ''
327
265
  Write-Host '========================================'
328
266
  if ($installed) {
329
- Write-Host ' [OK] WSL2 + Linux 环境安装完成!'
267
+ Write-Host ' [OK] WSL2 + OpenClaw Linux 安装完成!'
330
268
  Write-Host ''
331
269
  Write-Host ' 输入 wsl 即可进入 Linux 环境'
332
- Write-Host ' 如使用预制包, OpenClaw 已预装就绪'
270
+ Write-Host ' OpenClaw 已预装就绪'
333
271
  } else {
334
- Write-Host ' [注意] Linux 发行版可能需要手动安装'
335
- Write-Host ' 请打开 Microsoft Store 搜索 Ubuntu'
272
+ Write-Host ' [失败] 导入未成功,请检查网络后重试'
273
+ Write-Host ' 运行: myclaw wsl2'
336
274
  }
337
275
  Write-Host '========================================'
338
276
  Write-Host ''