dsh-autorestart 0.8.4 → 0.8.6

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 (42) hide show
  1. package/CHANGELOG.md +313 -0
  2. package/README.md +465 -40
  3. package/assets/icon-9c245e5b.ico +0 -0
  4. package/assets/icon-rescue-1902bb15.ico +0 -0
  5. package/assets/icon-rescue-1902bb15.png +0 -0
  6. package/client.js +3002 -170
  7. package/cordis.patch.yml +12 -0
  8. package/docs/README.zh.md +231 -23
  9. package/docs/platform-matrix.md +171 -55
  10. package/docs/real-machine-verification-0.8.6.md +202 -0
  11. package/index.js +13272 -8513
  12. package/lib/autostart-advice.js +31 -2
  13. package/lib/backup.js +2768 -21
  14. package/lib/checkpoint.js +214 -7
  15. package/lib/cookie-clear.js +260 -0
  16. package/lib/lifecycle.js +23 -40
  17. package/lib/plugin-compare.js +499 -0
  18. package/lib/plugin-failure.js +382 -0
  19. package/lib/plugin-recover.js +1557 -0
  20. package/lib/plugin-watch.js +213 -0
  21. package/lib/rescue-paths.js +982 -56
  22. package/lib/restart-phase.js +5 -0
  23. package/lib/restart-verdict.js +379 -0
  24. package/lib/restart.js +244 -7
  25. package/lib/scheduler-capability.js +19 -3
  26. package/lib/sleep.js +190 -29
  27. package/lib/watchdog-disarm.js +46 -2
  28. package/lib/watchdog-schedule.js +834 -17
  29. package/lib/watchdog-tier.js +8 -1
  30. package/lib/watchdog.js +1222 -47
  31. package/locale/en.json +175 -68
  32. package/locale/zh.json +175 -68
  33. package/package.json +3 -2
  34. package/screenshots.json +6 -6
  35. package/scripts/README.md +6 -3
  36. package/scripts/build-icon.mjs +998 -0
  37. package/scripts/clear-dsh-auth-cookies.mjs +257 -0
  38. package/scripts/emergency-disable.sh +69 -2
  39. package/scripts/emergency-toggle.ps1 +85 -69
  40. package/scripts/rescue-strings.zh.json +36 -18
  41. package/scripts/restore-profile.ps1 +182 -1
  42. package/scripts/watchdog.mjs +432 -79
package/locale/zh.json CHANGED
@@ -175,8 +175,8 @@
175
175
  "restart": "重启相关设置",
176
176
  "shutdown": "关机相关设置",
177
177
  "supervisor": "开机自启",
178
- "report": "报告问题",
179
- "rescue": "出事了怎么办"
178
+ "report": "遇到问题",
179
+ "rescue": "桌面救援入口"
180
180
  },
181
181
  "seconds": {
182
182
  "label": "关机倒数秒数",
@@ -192,26 +192,77 @@
192
192
  },
193
193
  "backup": {
194
194
  "label": "重启前备份",
195
- "hint": "每次重启前先快照一次当前配置;万一重启后起不来,能自动回退。",
195
+ "details": "详情",
196
+ "section": "备份说明及手动备份操作",
197
+ "hint": "重启前自动存一份,重启后起不来时能退回去。存的是:你的设置(一定);你自己写的、直接链接到源码目录的插件(连文件一起拷);从网上下载装的插件(只记下装过哪些、什么版本,不拷文件,真出事时按清单重装)。",
196
198
  "list": "现在备份了什么",
197
- "count": "当前 {n} 份",
199
+ "count": "当前 {n} 份,实际占用 {size}。",
200
+ "multiProfile": "检测到多个 profile,备份和回滚已暂停:它不知道该备份哪一个。解决办法:启动时指定 DSH_PROFILE,或者只保留一个 profile。",
198
201
  "keep": "最多保留 {n} 份,超出自动删最旧的那份。",
202
+ "kindsLocal": "链接安装(自己写的)和本地化过的插件(目录里有 .git)都已完整备份,可以回档。",
203
+ "kindsThirdParty": "第三方插件由插件作者维护,有异常建议重装",
204
+ "limitLabel": "保留份数",
205
+ "limitHint": "备份会占用磁盘空间,建议尽量选更少的备份数。",
206
+ "limitAsk": "将删除 {remove} 份最旧的备份,删除后无法恢复。当前 {from} 份 → 保留 {to} 份。",
207
+ "limitConfirm": "确认删除并改为保留 {to} 份",
208
+ "limitCancel": "取消",
209
+ "limitDeleted": "已删除 {removed} 份,现在保留 {kept} 份。",
210
+ "limitMore": "已选 {requested} 份,实际保留 {kept} 份。",
211
+ "limitFailed": "没能改成功,份数保持原样。",
199
212
  "empty": "还没有备份;每次重启前会自动生成一份。",
200
213
  "path": "存放路径",
201
214
  "copyPath": "复制路径",
202
215
  "copied": "路径已复制",
203
216
  "copyFailed": "复制失败,请手动选中上面的路径",
204
217
  "time": "备份时间",
205
- "size": "备份大小",
206
218
  "withPlugins": "(含已装插件)",
207
- "withoutPlugins": "(不含已装插件)"
219
+ "withoutPlugins": "(不含已装插件)",
220
+ "fallback": {
221
+ "seed": "另有一份首装备份(只含设置、未验证,仅在前一份不可用时才用),{time},{size}",
222
+ "other": "另有一份未验证的备份(不会被自动还原,仅在前一份不可用时才用),{time},{size}"
223
+ },
224
+ "othersSummary": "另有 {n} 份重启前自动拍的备份(未验证,不会自动还原)",
225
+ "scopeLabel": "内容范围",
226
+ "scope": {
227
+ "config-only": "只含配置",
228
+ "config+plugins": "配置 + 已装插件",
229
+ "config+links": "配置 + 链接插件",
230
+ "slim": "精简份(配置 + 手装插件)"
231
+ },
232
+ "scopeMissing": "(没有记录)",
233
+ "interventionLabel": "这次启动有没有被系统介入",
234
+ "intervention": {
235
+ "true": "有(自动救援动过手)",
236
+ "false": "没有",
237
+ "unknown": "没有记录"
238
+ },
239
+ "rollback": "回退到这一份",
240
+ "startupHint": "这是最近一次启动时的状态。DSH 能启动不代表插件都正常——坏掉的插件会被排除,主机照样起来。要回退到哪一份,请自己判断。",
241
+ "rollbackConfirmTitle": "确定回退到这一份?",
242
+ "rollbackConfirmBody": "会把 {time} 的那份备份还原到现在——**当前状态会被它覆盖**(覆盖前会先自动存一份当前快照,所以这次回退还能再退回来)。",
243
+ "rollbackConfirmRestart": "还原完成后会自动重启一次:回退前已自动存了一份可撤回的现场;回退后的这次重启不会再额外备份。重启期间这个页面会断开,回来后接着用。",
244
+ "rollbackConfirmYes": "确认回退",
245
+ "rollbackConfirmNo": "取消",
246
+ "rollbackBusy": "正在回退…",
247
+ "rollbackDone": "已回退,正在重启…",
248
+ "rollbackFailed": "回退没成功:{message}"
208
249
  },
209
250
  "backupPlugins": {
210
251
  "label": "备份包含已安装插件",
211
252
  "hint": "关闭后只备份 DSH 自身状态,不含 profile 里的插件目录。"
212
253
  },
254
+ "restartBanner": {
255
+ "title": "这台机器现在还没有重启能力:本插件不会重启,也不会在重启前备份。点一下「帮我配好」,我自动推导并写入;配错了可以撤销。",
256
+ "fix": "帮我配好"
257
+ },
213
258
  "supervisor": {
214
259
  "status": "当前由",
260
+ "status.external": "我记下的启动方式:由你的脚本拉起(重启交给它,我不插手)",
261
+ "status.bareWritten": "我记下的启动方式:按你确认过的那条命令重启",
262
+ "status.bareUnknown": "我还不知道怎么把你拉起来",
263
+ "status.unknown": "我看不出你是怎么启动的(我不猜,也不会自己乱拉)",
264
+ "status.selfSupervised": "我记下的启动方式:插件自己的守护在管(重启交给它)",
265
+ "status.container": "这里没有\"登录时自启\"这回事:由编排器负责",
215
266
  "installed": "插件守护",
216
267
  "external": "你自己的方式",
217
268
  "unknown": "未知",
@@ -229,12 +280,6 @@
229
280
  "accessHint": "重启后 token 会变,链接也会变。这个链接一直是最新的。",
230
281
  "pending": "卸载没有完成,请手动执行:{commands}",
231
282
  "reason": "说明",
232
- "command": "重启命令",
233
- "derive": "推导重启命令",
234
- "apply": "就用这条命令",
235
- "revert": "撤销",
236
- "noCommand": "推不出可重放的重启命令",
237
- "plan": "干跑预览",
238
283
  "reason.ok": "可以用这条命令重新拉起这个 DSH。",
239
284
  "reason.desktop-app": "桌面版自带重启,不用管这条命令。",
240
285
  "reason.not-a-web-host": "这个 DSH 不是网页型宿主,没有端口也没有监听器。",
@@ -243,12 +288,12 @@
243
288
  "reason.container-no-init": "这台机器没有开机自启机制(容器),所以不承诺自动拉起。",
244
289
  "reason.port-not-fixable": "端口每次都变,浏览器会被踢出去;得先把端口固定下来。",
245
290
  "reason.supervised": "插件自己的守护在管这个进程,重启直接交给它。",
246
- "status.external": "我记下的启动方式:由你的脚本拉起(重启交给它,我不插手)",
247
- "status.bareWritten": "我记下的启动方式:按你确认过的那条命令重启",
248
- "status.bareUnknown": "我还不知道怎么把你拉起来",
249
- "status.unknown": "我看不出你是怎么启动的(我不猜,也不会自己乱拉)",
250
- "status.selfSupervised": "我记下的启动方式:插件自己的守护在管(重启交给它)",
251
- "status.container": "这里没有\"登录时自启\"这回事:由编排器负责",
291
+ "command": "重启命令",
292
+ "derive": "推导重启命令",
293
+ "apply": "就用这条命令",
294
+ "revert": "撤销",
295
+ "noCommand": "推不出可重放的重启命令",
296
+ "plan": "干跑预览",
252
297
  "redetect": "重新检测",
253
298
  "deriveHelp": "帮我看看怎么重启",
254
299
  "technical": "技术细节",
@@ -264,15 +309,27 @@
264
309
  "startup.unknown": "认不出是谁拉起它的",
265
310
  "autostart": "开机自启怎么做"
266
311
  },
267
- "report": {
268
- "label": "遇到问题了?",
269
- "github": "复制诊断信息并去 GitHub 提问题",
270
- "hint": "诊断信息里没有你的访问令牌,也没有任何密钥;把它贴进 issue,我们就能看出问题出在哪。",
271
- "email": "没有 GitHub 账号?发邮件到 {email}",
272
- "copy": "复制诊断信息",
273
- "copyFailed": "复制失败,请手动复制这段",
274
- "issueTitle": "重启 / 开机自启相关的问题",
275
- "issueBody": "请把刚才复制的诊断信息粘贴到下面。\n\n## 发生了什么\n\n\n## 期望什么\n\n\n## 怎么复现\n"
312
+ "autostartKind": {
313
+ "other": "其他方式",
314
+ "windows-task": "Windows 计划任务",
315
+ "windows-startup": "Windows 启动文件夹",
316
+ "systemd-user": "systemd 用户服务",
317
+ "systemd-system": "systemd 系统服务",
318
+ "wsl-systemd": "WSL 里的 systemd",
319
+ "wsl-no-systemd": "WSL(没有 systemd)",
320
+ "linux-no-systemd": "Linux(没有 systemd)",
321
+ "container": "容器",
322
+ "desktop": "桌面版自带重启",
323
+ "unknown": "认不出",
324
+ "pm2": "pm2(进程守护工具)"
325
+ },
326
+ "startupWhy": {
327
+ "desktop": "这个进程就是桌面客户端本体,它自己会重启自己",
328
+ "bare": "它是被人在终端里手动起的,没人管它",
329
+ "external": "它是由另一个守护进程拉起来的",
330
+ "container": "它跑在容器里,由编排器负责",
331
+ "unknown": "看不出它是怎么被拉起来的",
332
+ "self-supervised": "它由本插件自己的守护在管"
276
333
  },
277
334
  "rescue": {
278
335
  "hint": "DSH 打不开的时候,用下面这两个脚本救自己(都不用 DSH 跑起来)。",
@@ -284,21 +341,41 @@
284
341
  "copyFailed": "复制失败,请手动选中上面的路径",
285
342
  "reveal": "打开所在文件夹",
286
343
  "which": "怎么选:整个环境坏了(改了配置、装了别的插件、升级崩了)→ 用「回到上一次好状态」;只怀疑这个插件 → 用「只把这个插件摘掉」。",
287
- "warning": "重要:这两个脚本是在 DSH 打不开的时候用的。DSH 正开着的时候用「回到上一次好状态」,会把你现在正在用的配置覆盖掉。",
288
- "shortcut": "在桌面放一个快捷方式",
289
- "shortcutDone": "已在桌面",
290
- "noDesktop": "这台机器上没有桌面目录,所以放不了快捷方式(脚本的路径在上面,可以手动复制过去)。",
291
- "shortcutFailed": "快捷方式没放成:{message}",
292
- "revealFailed": "文件夹没打开:{message}",
344
+ "warning": "重要:这个桌面入口和上面两个脚本,都只在你打不开 DSH 的时候用;DSH 正常开着的时候不要点它——用「回到上一次好状态」会把你现在正在用的配置覆盖掉。",
293
345
  "rollbackOk": "自动回滚:可用(重启后起不来会自动回到上一个好状态)",
294
346
  "rollbackBlocked": "自动回滚:**不可用** —— 这台电脑不允许创建计划任务。**会丢失:重启后 DSH 起不来时不会自动恢复**;出问题时请双击「出事了怎么办」里的还原脚本。",
295
347
  "rollbackUnknown": "自动回滚:还不知道(这台机器的能力还没检查过)",
296
348
  "watchdogTier": "看门狗的触发方式:{tier}",
297
349
  "watchdogLast": "上一次看门狗的结果:{result}",
350
+ "watchdogStrict": "上一次自动救援没有动手:找不到同时满足两个条件的备份——那份备份有过启动记录,而且那次启动没有系统介入过。请手动处理。",
351
+ "watchdogRestoredFrom": "上一次自动救援还原的这一份:{dir}",
298
352
  "tierScheduledTask": "Windows 计划任务",
299
353
  "tierSystemdRun": "systemd 定时器",
300
354
  "tierDetachedProcess": "自建后台进程",
301
- "tierNone": "(这台机器没有可用机制)"
355
+ "tierNone": "(这台机器没有可用机制)",
356
+ "shortcut": "在桌面放一个快捷方式",
357
+ "shortcutDone": "已在桌面",
358
+ "noDesktop": "这台机器上没有桌面目录,所以放不了快捷方式(脚本的路径在上面,可以手动复制过去)。",
359
+ "noDesktopPlatform": "网页版 / 服务器版没有桌面,所以没有这个一键入口;请用上面两个 .sh 脚本。",
360
+ "commandLabel": "救援入口(命令)",
361
+ "copyCommand": "复制命令",
362
+ "commandHint": "复制这条命令执行,效果和桌面上双击那个入口一样。",
363
+ "commandUnavailable": "这台机器上没有找到可用的救援命令。",
364
+ "shortcutScope": "它只能把整个环境退回上一次好状态,不能只摘掉某一个插件。",
365
+ "shortcutBlocked": "系统策略不允许创建快捷方式(比如组策略或权限限制)。把下面的脚本路径复制出来,手动放到桌面:",
366
+ "shortcutWriteFailed": "快捷方式没写成功:{message}。把下面的脚本路径复制出来,手动放到桌面:",
367
+ "shortcutFailed": "快捷方式没放成:{message}",
368
+ "revealFailed": "文件夹没打开:{message}"
369
+ },
370
+ "report": {
371
+ "label": "遇到问题了?",
372
+ "github": "复制诊断信息并去 GitHub 提问题",
373
+ "hint": "诊断信息里没有你的访问令牌,也没有任何密钥;把它贴进 issue,我们就能看出问题出在哪。",
374
+ "email": "没有 GitHub 账号?发邮件到 {email}",
375
+ "copy": "复制诊断信息",
376
+ "copyFailed": "复制失败,请手动复制这段",
377
+ "issueTitle": "重启 / 开机自启相关的问题",
378
+ "issueBody": "请把刚才复制的诊断信息粘贴到下面。\n\n## 发生了什么\n\n\n## 期望什么\n\n\n## 怎么复现\n"
302
379
  },
303
380
  "error": "没能保存设置:{message}",
304
381
  "saveNotice": {
@@ -306,40 +383,12 @@
306
383
  "failed": "没保存成功",
307
384
  "dismiss": "关闭"
308
385
  },
309
- "autostartKind": {
310
- "other": "其他方式",
311
- "windows-task": "Windows 计划任务",
312
- "windows-startup": "Windows 启动文件夹",
313
- "systemd-user": "systemd 用户服务",
314
- "systemd-system": "systemd 系统服务",
315
- "wsl-systemd": "WSL 里的 systemd",
316
- "wsl-no-systemd": "WSL(没有 systemd)",
317
- "container": "容器",
318
- "desktop": "桌面版自带重启",
319
- "unknown": "认不出",
320
- "pm2": "pm2(进程守护工具)"
321
- },
322
- "startupWhy": {
323
- "desktop": "这个进程就是桌面客户端本体,它自己会重启自己",
324
- "bare": "它是被人在终端里手动起的,没人管它",
325
- "external": "它是由另一个守护进程拉起来的",
326
- "container": "它跑在容器里,由编排器负责",
327
- "unknown": "看不出它是怎么被拉起来的",
328
- "self-supervised": "它由本插件自己的守护在管"
329
- }
330
- },
331
- "restart": {
332
- "stage": {
333
- "snapshotting": "重启前备份中",
334
- "restarting": "正在重启…",
335
- "back": "已回来"
336
- },
337
- "overlay": {
338
- "snapshotting": "DSH 重启前备份中",
339
- "size": "{done} / {total}",
340
- "sizeDone": "{done}",
341
- "restarting": "正在重启…",
342
- "back": "已回来"
386
+ "description": "自动重启 DSH、守护插件,出问题能一键恢复。",
387
+ "restore": "恢复",
388
+ "thirdParty": "这个插件不是你自己开发的,没法从备份恢复,需要重新安装。",
389
+ "version": "版本 {version}",
390
+ "restart": {
391
+ "cancelledNote": "上次要的重启没有做成:你在 {at} 请求重启,等了 {waited},它一直没有执行;这次宿主重启之后,那个请求已经被取消了。想重启的话,再点一次就行。"
343
392
  }
344
393
  },
345
394
  "meta": {
@@ -358,5 +407,63 @@
358
407
  "disabled": "按钮目前关闭,可在设置里打开。",
359
408
  "button": "知道了",
360
409
  "error": "没能记下来:{message}"
410
+ },
411
+ "pluginFailure": {
412
+ "title": "有两件事要你看一下",
413
+ "hint": "这些功能已经记下来了,之后可以在「插件」页里再恢复。",
414
+ "dismiss": "知道了",
415
+ "dismissLabel": "关掉这个提示(这次启动不再显示,下次启动会重新出现)",
416
+ "certainTitle": "这些功能这次没起来",
417
+ "certainIntro": "上次启动时这些功能还在,这次没有。这是已经发生的事,不是猜测。",
418
+ "clueTitle": "这些插件跟备份不一样",
419
+ "clueIntro": "这些插件的文件和最近一次备份不同。可能只是升级过,也可能有别的原因,所以这里只列出差异,不下结论。",
420
+ "uiBlindSpot": "另外有 {count} 个界面模块这次没出现(它们没有对应到你安装的插件,所以不在这里列出)。",
421
+ "restoreAll": "全部恢复({count} 个)",
422
+ "restoreAllDone": "恢复完成:{done} 个成功,{failed} 个没成功。",
423
+ "close": "关掉这个提示",
424
+ "linkedHint": "这个插件是你自己写在本地、以链接方式安装的,可以直接恢复到备份里的版本。",
425
+ "thirdPartyHint": "这个插件是第三方安装的,备份里没有它的文件。要还原就用下面这条命令,它会装回原来的那个版本(不是最新版):",
426
+ "commandLabel": "复制这条命令",
427
+ "noVersion": "备份里查不到它的精确版本,只能按插件名重新安装。",
428
+ "restore": "只恢复 {plugin}",
429
+ "restoring": "正在恢复 {plugin}…",
430
+ "restored": "已经把 {plugin} 恢复到备份版本(备份时间 {at})。",
431
+ "failed": "{plugin} 恢复没有完成:{reason}",
432
+ "noBackup": "这台机器没有可用备份,只能手动处理。"
433
+ },
434
+ "watchdog": {
435
+ "hint": "后面想改主意,可以到「插件」页里找 dsh-autorestart 的设置。",
436
+ "title": "重启失败时,会自动帮你救回来",
437
+ "explain": "这个插件自带自动救援:重启之后新版本一直起不来时,它会拿一份它自己认为可用的备份帮你恢复(判据是内容指纹一致、且那次启动起来了——这不代表里面的插件都正常),再把程序重新拉起来。它默认就是开着的。",
438
+ "whereOff": "不想要的话,到设置页把「自动救援」的开关关掉就行——关掉之后,新版本起不来就只能手动处理了。",
439
+ "gotIt": "知道了",
440
+ "noticeSaved": "好的,就这一条提示,以后不会再弹了。",
441
+ "warnOff": "关掉之后,万一新版本起不来,就只能手动处理了。",
442
+ "keepOn": "开着(推荐)",
443
+ "turnOff": "不要,我自己处理",
444
+ "savedOn": "已开启:下次重启如果起不来,会自动帮你救回来。",
445
+ "savedOff": "已关闭:下次重启如果起不来,不会自动救。",
446
+ "saveFailed": "没能保存你的选择,设置没有变。请再点一次,或到设置页里改。"
447
+ },
448
+ "restart": {
449
+ "stage": {
450
+ "snapshotting": "重启前备份中",
451
+ "restarting": "正在重启…",
452
+ "back": "已回来"
453
+ },
454
+ "overlay": {
455
+ "snapshotting": "DSH 重启前备份中",
456
+ "size": "{done} / {total}",
457
+ "sizeDone": "{done}",
458
+ "restarting": "正在重启…",
459
+ "deferred": "有新会话在跑,重启已暂缓",
460
+ "deferredNote": "等它结束会自动继续 · 已等 {count} 个会话",
461
+ "deferredNoteZero": "等它结束会自动继续",
462
+ "back": "已回来"
463
+ },
464
+ "waitedSeconds": "几秒",
465
+ "waitedMinutes": "约 {n} 分钟",
466
+ "waitedHours": "约 {n} 小时 {m} 分",
467
+ "waitedHoursExact": "约 {n} 小时"
361
468
  }
362
469
  }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "dsh-autorestart",
3
- "version": "0.8.4",
3
+ "version": "0.8.6",
4
4
  "type": "module",
5
- "description": "DeepSeek Harness plugin: restart without losing work. Waits until every conversation is idle, restarts the host, then automatically resumes the interrupted sessions. AI-generated, not human-reviewed: use with caution.",
5
+ "description": "DeepSeek Harness plugin: idle-aware restart with session resume, a snapshot before every restart that is restored automatically if the host fails to come back, and a countdown shutdown; verified on the Windows desktop client and on hosted dsh web on WSL with systemd; implemented but not yet verified on hosted dsh web on Windows, on WSL without systemd, and on native Linux. AI-generated, not human-reviewed: use with caution.",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
8
  "dsh",
@@ -42,6 +42,7 @@
42
42
  "locale/*.json",
43
43
  "icon.svg",
44
44
  "assets/*.png",
45
+ "assets/*.ico",
45
46
  "screenshots.json",
46
47
  "README.md",
47
48
  "CHANGELOG.md",
package/screenshots.json CHANGED
@@ -1,7 +1,7 @@
1
- [
2
- "assets/screenshot-1.png",
3
- "assets/screenshot-2.png",
4
- "assets/screenshot-3.png",
5
- "assets/screenshot-4.png",
6
- "assets/screenshot-5.png"
1
+ [
2
+ "assets/screenshot-1.png",
3
+ "assets/screenshot-2.png",
4
+ "assets/screenshot-3.png",
5
+ "assets/screenshot-4.png",
6
+ "assets/screenshot-5.png"
7
7
  ]
package/scripts/README.md CHANGED
@@ -2,12 +2,15 @@
2
2
 
3
3
  DSH 起不来的时候,这个文件夹里的东西**不用 DSH 自己**就能救自己。
4
4
 
5
- ## 按平台挑文件(**别拿错平台的**)
5
+ ## 按宿主挑文件(**别拿错宿主的**)
6
6
 
7
- | 你的机器 | 还原 profile | 摘掉本插件 |
7
+ | 你的宿主 | 还原 profile | 摘掉本插件 |
8
8
  |---|---|---|
9
9
  | **Windows**(桌面客户端 / Windows 上的 `dsh web`) | 双击 `restore-profile.cmd` | 双击 `emergency-disable.cmd` |
10
- | **Linux / WSL / macOS**(托管端) | `sh scripts/restore-profile.sh` | `sh scripts/emergency-disable.sh` |
10
+ | **WSL / Linux**(托管端) | `sh scripts/restore-profile.sh` | `sh scripts/emergency-disable.sh` |
11
+ | **macOS** | `sh scripts/restore-profile.sh` | `sh scripts/emergency-disable.sh` |
12
+
13
+ macOS 用同样的两个 POSIX `sh` 脚本;从未在真 Mac 上跑过,属于未验,不作承诺。
11
14
 
12
15
  Linux/WSL 的机器上**没有** `.cmd` 文件,Windows 的机器上**没有** `.sh` —— 设置页的
13
16
  「出事了怎么办」只显示**这台机器上真有的**那两个路径,不会给你一条走不通的死路。