@aiyiran/myclaw 1.0.8 → 1.0.11

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 +1 -1
  2. package/wsl2.js +80 -130
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiyiran/myclaw",
3
- "version": "1.0.8",
3
+ "version": "1.0.11",
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,45 @@ 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
136
+ Write-Host '[3/4] 检查并安装 WSL 完整包...'
137
+ $wslInstalled = $false
143
138
  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 ''
139
+ $ver = wsl --version 2>&1 | Out-String
140
+ if ($ver -match 'WSL') { $wslInstalled = $true }
141
+ } catch {}
151
142
 
152
- Write-Host '[4/4] 尝试提前安装内核更新...'
153
- if (Test-Path $msi) {
143
+ if ($wslInstalled) {
144
+ Write-Host ' WSL 组件已安装,跳过下载 (节省 243MB)'
145
+ Write-Host ' [OK]'
146
+ } else {
147
+ Write-Host ' WSL 未安装,正在下载完整安装包 (约 243MB)...'
148
+ $msi = "$dir\\wsl_full.msi"
149
+ if (-Not (Test-Path $msi)) {
150
+ try {
151
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
152
+ Invoke-WebRequest -Uri '${WSL_CDN.wsl}' -OutFile $msi -UseBasicParsing
153
+ Write-Host ' 下载完成!'
154
+ } catch {
155
+ Write-Host ' [失败] 下载失败,请检查网络后重试 myclaw wsl2'
156
+ Write-Host ''; Write-Host '按任意键关闭...'
157
+ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
158
+ exit 1
159
+ }
160
+ } else {
161
+ Write-Host ' 使用上次缓存的文件'
162
+ }
163
+
164
+ Write-Host ''
165
+ Write-Host '[4/4] 安装 WSL 完整包...'
154
166
  try {
155
167
  Start-Process msiexec.exe -ArgumentList "/i \`"$msi\`" /quiet /norestart" -Wait -NoNewWindow
156
- Write-Host ' [OK]'
168
+ Write-Host ' [OK] 安装成功!'
157
169
  } catch {
158
- Write-Host ' [跳过] 重启后将自动完成'
170
+ Write-Host ' [失败] 安装出错'
171
+ Write-Host ''; Write-Host '按任意键关闭...'
172
+ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
173
+ exit 1
159
174
  }
160
- } else {
161
- Write-Host ' [跳过] 文件未就绪'
162
175
  }
163
176
 
164
177
  Write-Host ''
@@ -184,15 +197,16 @@ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
184
197
  }
185
198
 
186
199
  // ============================================================================
187
- // Phase 2: 安装内核 + Ubuntu
200
+ // Phase 2: 导入预制 Linux 环境
188
201
  // ============================================================================
189
202
 
190
203
  function runPhase2() {
191
204
  console.log('');
192
- console.log('[当前进度] WSL 功能已启用 ' + C.g + '[OK]' + C.nc);
193
- console.log(' 内核更新 + Ubuntu ' + C.y + '[待安装]' + C.nc);
205
+ console.log('[当前进度] WSL 功能 ' + C.g + '[OK]' + C.nc);
206
+ console.log(' WSL 组件 ' + C.g + '[OK]' + C.nc);
207
+ console.log(' Linux ' + C.y + '[待安装]' + C.nc);
194
208
  console.log('');
195
- console.log('即将自动下载并安装(需要管理员权限)...');
209
+ console.log('即将导入预制 Linux 环境(需要管理员权限)...');
196
210
  console.log('[' + C.y + '注意' + C.nc + '] 请在 UAC 弹窗中点击【是】');
197
211
  console.log('');
198
212
 
@@ -202,120 +216,56 @@ $Host.UI.RawUI.WindowTitle = 'MyClaw WSL2 Installer - Phase 2'
202
216
  Write-Host ''
203
217
  Write-Host '========================================'
204
218
  Write-Host ' MyClaw WSL2 安装 - 阶段 2/2'
205
- Write-Host ' 安装内核更新 + Ubuntu'
219
+ Write-Host ' 导入预制 Linux 环境'
206
220
  Write-Host '========================================'
207
221
  Write-Host ''
208
222
 
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
223
  $dir = "$env:LOCALAPPDATA\\myclaw"
216
- $msi = "$dir\\wsl_update_x64.msi"
217
224
  New-Item -ItemType Directory -Force -Path $dir | Out-Null
218
225
 
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 为默认版本...'
226
+ Write-Host '[1/3] 设置 WSL2 为默认版本...'
244
227
  try { wsl --set-default-version 2 2>$null } catch {}
245
228
  Write-Host ' [OK]'
246
229
  Write-Host ''
247
230
 
248
- Write-Host '[4/5] 安装 Linux 发行版...'
249
- $installed = $false
231
+ Write-Host '[2/3] 下载并导入预制 Linux 环境...'
232
+ $tarPath = "$dir\\openclaw-rootfs.tar"
250
233
  $distroName = 'OpenClaw'
251
234
  $installDir = "$dir\\OpenClaw"
235
+ $installed = $false
252
236
 
253
- # ---- 方法 A (最强): 预制 rootfs tar 包,wsl --import ----
254
- Write-Host ' 方法 A: 导入 OpenClaw 预制 Linux 环境...'
255
- $tarPath = "$dir\\openclaw-rootfs.tar"
256
237
  if (-Not (Test-Path $tarPath)) {
257
238
  Write-Host ' 正在下载预制环境包...'
258
239
  try {
259
240
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
260
- Invoke-WebRequest -Uri '` + WSL_CDN.rootfs + `' -OutFile $tarPath -UseBasicParsing
241
+ Invoke-WebRequest -Uri '${WSL_CDN.rootfs}' -OutFile $tarPath -UseBasicParsing
261
242
  Write-Host ' 下载完成!'
262
243
  } catch {
263
- Write-Host ' 下载失败, 尝试备选方案...'
244
+ Write-Host ' [失败] 下载失败,请检查网络后重试 myclaw wsl2'
245
+ Write-Host ''; Write-Host '按任意键关闭...'
246
+ $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
247
+ exit 1
264
248
  }
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 {}
249
+ } else {
250
+ Write-Host ' 使用上次缓存的文件'
288
251
  }
289
252
 
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 {}
253
+ Write-Host ' 正在导入 (可能需要几分钟)...'
254
+ try {
255
+ New-Item -ItemType Directory -Force -Path $installDir | Out-Null
256
+ wsl --import $distroName $installDir $tarPath 2>$null
257
+ if ($LASTEXITCODE -eq 0) {
258
+ $installed = $true
259
+ Write-Host ' [OK] 导入成功!'
260
+ } else {
261
+ Write-Host ' [失败] 导入失败'
308
262
  }
263
+ } catch {
264
+ Write-Host ' [失败] 导入失败'
309
265
  }
310
- ` : `
311
- if (-Not $installed) {
312
- Write-Host ' [失败] 预制环境包安装失败'
313
- Write-Host ' 请检查网络后重试: myclaw wsl2'
314
- }
315
- `) + `
316
266
  Write-Host ''
317
267
 
318
- Write-Host '[5/5] 验证安装结果...'
268
+ Write-Host '[3/3] 验证安装结果...'
319
269
  try {
320
270
  $result = wsl -l -v 2>&1 | Out-String
321
271
  Write-Host $result
@@ -326,13 +276,13 @@ try {
326
276
  Write-Host ''
327
277
  Write-Host '========================================'
328
278
  if ($installed) {
329
- Write-Host ' [OK] WSL2 + Linux 环境安装完成!'
279
+ Write-Host ' [OK] WSL2 + OpenClaw Linux 安装完成!'
330
280
  Write-Host ''
331
281
  Write-Host ' 输入 wsl 即可进入 Linux 环境'
332
- Write-Host ' 如使用预制包, OpenClaw 已预装就绪'
282
+ Write-Host ' OpenClaw 已预装就绪'
333
283
  } else {
334
- Write-Host ' [注意] Linux 发行版可能需要手动安装'
335
- Write-Host ' 请打开 Microsoft Store 搜索 Ubuntu'
284
+ Write-Host ' [失败] 导入未成功,请检查网络后重试'
285
+ Write-Host ' 运行: myclaw wsl2'
336
286
  }
337
287
  Write-Host '========================================'
338
288
  Write-Host ''