dsh-autorestart 0.3.6 → 0.5.0
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/README.md +147 -7
- package/client.js +2362 -147
- package/cordis.patch.yml +16 -0
- package/docs/README.zh.md +98 -10
- package/index.js +896 -67
- package/lib/checkpoint.js +38 -0
- package/lib/sleep.js +828 -0
- package/locale/en.json +101 -1
- package/locale/zh.json +101 -1
- package/package.json +1 -1
package/cordis.patch.yml
CHANGED
|
@@ -45,3 +45,19 @@
|
|
|
45
45
|
# How long the detached watcher waits for the relaunched host (ms) before
|
|
46
46
|
# it restores the snapshot and launches the host again.
|
|
47
47
|
rollbackTimeoutMs: 90000
|
|
48
|
+
# 收工关机:Show the graceful-shutdown button at the foot of the left
|
|
49
|
+
# sidebar, next to the Settings row (root scope: it is there even when
|
|
50
|
+
# no conversation is open).
|
|
51
|
+
# The button arms the countdown; the machine is switched off for real
|
|
52
|
+
# (a WSL host shuts Windows down, not the WSL distribution).
|
|
53
|
+
showSleepButton: true
|
|
54
|
+
# How many seconds the countdown lasts after every conversation is done.
|
|
55
|
+
# A DROPDOWN in the settings page: 0 / 10 / 20 / 30 / 60 seconds.
|
|
56
|
+
# `0` means no countdown at all — the machine is switched off as soon
|
|
57
|
+
# as every conversation is idle (the busy conversations still block
|
|
58
|
+
# it). The plugin counts down itself, so the operating system is asked
|
|
59
|
+
# to shut down immediately afterwards.
|
|
60
|
+
sleepCountdownSeconds: 20
|
|
61
|
+
# A custom shutdown command. Empty = the host is detected automatically
|
|
62
|
+
# (Windows / WSL / Linux / macOS); a value replaces the detected command.
|
|
63
|
+
sleepCommand: ''
|
package/docs/README.zh.md
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
- 重启前有两道检查:宿主侧查一次,独立 helper 在杀进程前再查一次;
|
|
21
21
|
- 界面上能看到状态:输入框工具行左侧的"待重启 · 被 N 个会话占用"小胶囊、左侧栏会话标题旁的圆点;快重启时圆点呼吸,点胶囊看详情;
|
|
22
22
|
- 可配置:静默窗口(默认 2 秒)、杀进程前等待(默认 2 秒)、忙碌时是否允许强制重启等。
|
|
23
|
+
- 同一套"等到大家都安静"的想法还做成了**收工关机**:左侧栏最底部(设置按钮旁边)一个月亮按钮 → 等所有会话收工 → 屏幕上倒数(一张浮动卡片:大字 + 鲸鱼娘)→ **关掉整台电脑**(见「收工关机」)。
|
|
23
24
|
|
|
24
25
|
场景对照:
|
|
25
26
|
|
|
@@ -55,8 +56,8 @@ session resume on boot, durable-goal re-arm, and an agent-callable idle-aware gr
|
|
|
55
56
|
| 类型 | 具体占用 |
|
|
56
57
|
| --- | --- |
|
|
57
58
|
| Agent 工具(6 个) | `continuum_restart`、`continuum_status`、`continuum_cancel_restart`、`continuum_park_goal`、`continuum_recover_now`、`continuum_handoff` |
|
|
58
|
-
| HTTP 路由(
|
|
59
|
-
| 前端槽位(
|
|
59
|
+
| HTTP 路由(7 条) | `<healthPath>`(默认 `/__dsh_autorestart`)下的 `GET /health`(另有 `?state=1`、`?gate=1`、`?probeIndex=1`)、`POST /park`、`POST /recover`、`POST /handoff`、`GET /sleep`、`POST /sleep`(收工关机——桌面端和 web 端走的是同一条路由)、`GET /announcements`、`POST /announcements`(一次性新功能公告);只接受本机回环或已认证的浏览器 |
|
|
60
|
+
| 前端槽位(6 个) | `conversation.input.left`(待重启小胶囊,id `autorestart-restart-pill`)、`sidebar.session.row.leading`(侧栏状态圆点,id `autorestart-restart-dot`)、`conversation.input.dock`(一次性安装提问,id `autorestart-backup-choice`;一次性新功能公告,id `autorestart-feature-announcement`)、`sidebar.footer.action`(收工关机的月亮按钮,id `autorestart-sleep-button`)、`shell.overlay`(倒数浮动卡片)、`settings.section`(设置页里的「自动重启与关机」分区,id `dsh-autorestart`) |
|
|
60
61
|
| 系统提示词 | 一段「重启政策」说明,告诉 agent 怎么请求重启、插件会做什么 |
|
|
61
62
|
| 宿主事件 | `agent/status`(跟踪哪些会话在忙)、`tools/pre-execute`(拦下"手动杀/重启 DSH"的 shell 命令)、启动时的恢复流程 |
|
|
62
63
|
| profile 行 | 一条 bundle 行:`dsh-autorestart` |
|
|
@@ -83,8 +84,24 @@ session resume on boot, durable-goal re-arm, and an agent-callable idle-aware gr
|
|
|
83
84
|
- **只问一次**:只有 `localStorage['dsh-autorestart:backup-choice-v1']` 缺失时才渲染;点任一项都会写下这个键,之后不再出现。
|
|
84
85
|
- **关掉也算作答**:按 `×` 或 `Esc` 与点选项写的是同一个「已作答」标记,这个浏览器此后**不会再被问**;关掉等于保留默认(配置 + 已安装插件)。
|
|
85
86
|
- **不打扰**:面板是 `role="status"` 的普通块,放在输入框下方的 dock 里;可聚焦、键盘可达、`Esc` 关闭。
|
|
86
|
-
- **答案存在哪**:宿主用官方 `configEditor` Service 写进 profile
|
|
87
|
-
- **想改主意**:设置 →
|
|
87
|
+
- **答案存在哪**:宿主用官方 `configEditor` Service 写进 profile 配置(就是设置分区里那个 `backupIncludePlugins` 键,**只有一份真相**)。万一这个服务不可用,才退化到写 `<DSH_HOME>/storages/dsh-autorestart/install-choice.json` 并在日志里 `warn`。**托管 profile 如果自己没有声明 `dsh-autorestart` 行**,就没有行可写,答案同样落在这个文件里而不是 profile 里 —— 声明那一行(见「平台与部署」)才能让 profile 配置保持唯一真相。
|
|
88
|
+
- **想改主意**:设置 → 自动重启与关机 → `backupIncludePlugins`。`continuum_status` 里随时能看到当前生效值(`backupIncludePlugins: true | false`)。
|
|
89
|
+
|
|
90
|
+
### 升级也会被告知一次:从旧版升级会看到一次新功能公告
|
|
91
|
+
|
|
92
|
+
**它补的漏洞**:上面那两个安装提问只在**首次安装**时出现一次。已经装好的老用户升级之后,**新功能对他们等于不存在** —— 新做的「收工关机」月亮按钮,老用户根本不会知道。所以从 **0.5.0** 起,每加一个新功能,都会在同一个位置(输入框下方的 dock)弹**一次**公告卡片:
|
|
93
|
+
|
|
94
|
+
> **新功能:收工关机**
|
|
95
|
+
> 左侧栏最底部多了一个 🌙「收工关机」按钮。
|
|
96
|
+
> 点一下 → 所有会话收工后倒数 **N 秒**关机。
|
|
97
|
+
> 想改行为,去「设置 → 自动重启与关机」。
|
|
98
|
+
> **知道了**
|
|
99
|
+
|
|
100
|
+
- **只有升级才会看到**:宿主把「这个功能的版本」和「已经展示过的版本」比一比(记在检查点文件的 `seenFeatureVersions` 里)。**新装**的用户不会看到这张卡 —— 安装提问已经把功能讲清楚了,答完就等于"已看过"。
|
|
101
|
+
- **每个版本只弹一次**:点「知道了」→ 宿主记下版本 → 卡片立刻消失 → **以后再也不出现**(重启宿主不会,升级到下一个版本也不会 —— 除非那个新版本又改了同一个功能,那时才再公告一次)。
|
|
102
|
+
- **没点不会静默吞掉**:卡片一直挂在那里等你回答;不回答,下次启动还会再出现一次。
|
|
103
|
+
- **秒数是读出来的,不是写死的**:卡片里的秒数就是当前生效的 `sleepCountdownSeconds`;月亮按钮被关掉时,卡片还会补一句「按钮目前关闭,可在设置里打开。」
|
|
104
|
+
- **状态存在哪**:`<DSH_HOME>/storages/dsh-autorestart/state.json`(和插件的检查点同一个文件)。宿主用 `GET /announcements` 报(`{ ok, pending: [{ feature, version }] }`),用 `POST /announcements`(body `{ feature }`)记。
|
|
88
105
|
|
|
89
106
|
## 工作方式
|
|
90
107
|
|
|
@@ -117,6 +134,8 @@ agent/status(running) ──► 写 checkpoint(<DSH_HOME>\storages\dsh-autores
|
|
|
117
134
|
|
|
118
135
|
## 安装
|
|
119
136
|
|
|
137
|
+
当前版本:**0.5.0**。
|
|
138
|
+
|
|
120
139
|
```powershell
|
|
121
140
|
# 在 dsh 里(或对 Agent 说):把工作区里的这个包安装为 profile bundle
|
|
122
141
|
# plugin_manager install_bundle target = <本目录绝对路径>
|
|
@@ -154,6 +173,13 @@ dsh plugin --profile desktop add C:\path\to\dsh-autorestart
|
|
|
154
173
|
| `blockManualRestart` | `true` | 硬拦截 agent 用 shell 命令手动杀掉/重启 DSH,并引导到 `continuum_restart` |
|
|
155
174
|
| `healthPath` | `/__dsh_autorestart/health` | 健康检查路由(返回 bootId/pid/phase/自检标志) |
|
|
156
175
|
| `continuationText` | `''` | 覆盖默认续接提示文本 |
|
|
176
|
+
| `backupOnRestart` | `true` | 每次重启前给 profile 拍快照;重启后起不来时能自动回退 |
|
|
177
|
+
| `backupIncludePlugins` | `true` | 快照里是否带上已安装插件目录(本机约 117 MB、多约 3 秒);关掉就只备配置文件 |
|
|
178
|
+
| `maxBackups` | `2` | 保留几份快照;写新的时自动删旧的 |
|
|
179
|
+
| `rollbackTimeoutMs` | `90000` | 看护脚本等新宿主多久(毫秒),超时就回退快照并再拉起一次 |
|
|
180
|
+
| `showSleepButton` | `true` | 收工关机的月亮按钮是否显示在左侧栏最底部、设置按钮旁边 |
|
|
181
|
+
| `sleepCountdownSeconds` | `20` | 收工关机在真正关机前倒数几秒——**下拉框:0 / 10 / 20 / 30 / 60 秒**,默认 20;`0` 表示**不倒数、立即关机**(仍会先等所有会话收工) |
|
|
182
|
+
| `sleepCommand` | `''` | 收工关机的自定义关机命令;留空 = 自动识别宿主(Windows 用 `cmd.exe /c …`,其它平台用 `/bin/sh -c …`) |
|
|
157
183
|
|
|
158
184
|
## Agent 工具与"它怎么知道该用插件"
|
|
159
185
|
|
|
@@ -190,6 +216,67 @@ dsh plugin --profile desktop add C:\path\to\dsh-autorestart
|
|
|
190
216
|
所以**不需要改 AGENTS.md**——这是 Host 插件钩子(工具注册 + system prompt section + tools.guard),对 profile 内所有 agent 生效;
|
|
191
217
|
你当然也可以额外在 AGENTS.md 里写一条团队规范,但它只是重复。
|
|
192
218
|
|
|
219
|
+
## 收工关机(Graceful shutdown)
|
|
220
|
+
|
|
221
|
+
**它干什么。** 左侧栏最底部一个月亮按钮:点一下 → 等**所有**会话都收工 → 屏幕上倒数(一个巨大的数字 + 一只蓝色小鲸鱼,每秒换一句中文)→ **关掉整台电脑**。倒数期间随时可以取消:卡片上有按钮,月亮按钮本身在关机期间也变成了"再点一下 = 取消"。倒数期间要是有会话又开始干活,倒计时会退回"等待",**绝不关机**。
|
|
222
|
+
|
|
223
|
+
**按钮在哪。** 月亮按钮在**左侧栏最底部、设置按钮旁边**(`sidebar.footer.action` 槽位)。这个槽位是 **root 作用域**的,所以**没有会话、切换任何页面时它也都在**。侧栏收成窄轨(折叠态)时按钮只显示月亮图标(`title` 和 `aria-label` 仍然说明它是干什么的),不会把窄轨撑变形。
|
|
224
|
+
|
|
225
|
+
**倒计时不遮界面。** 倒数是角落里的一张**浮动卡片**,不是全屏遮罩:它不压暗页面、不锁滚动、也不吃掉任何点击——卡片外面照常能读正文、能滚动、能点侧栏切会话,卡片自己**只有那个「算了,别关」按钮能点**。切换会话或切换页面也**不会打断或重置**倒数:秒数来自宿主的轮询,不是来自当前打开的那个视图。
|
|
226
|
+
|
|
227
|
+
**倒数多长由设置分区决定。** `sleepCountdownSeconds` 是一个**下拉框**:0 / 10 / 20 / 30 / 60 秒,默认 20 秒。`0` = **不倒数、立即关机**:所有会话一收工、闸门一开就直接关机(忙着的会话照样挡住它),屏幕上**不会出现倒计时卡片**。配置里还留着下拉框之外的老数值(15、45…)时,会自动吸附到最近的一档(15→20、45→60),不会把插件弄坏。这个下拉框就在**设置 → 自动重启与关机**分区里。
|
|
228
|
+
|
|
229
|
+
**点一下就够了。** 月亮按钮按下就武装:宿主等所有忙会话收工,在角落里倒数 **20 秒**(浮动卡片,不遮挡界面),然后关掉整台机器。**再点一下**(或点卡片上的「算了,别关」)就取消。除此之外什么都不用用户做:没有确认框、不用点第二次。
|
|
230
|
+
|
|
231
|
+
**桌面端和 web 端行为完全一致。** 没有票据、没有额外请求头、没有隐藏模式:`POST /__dsh_autorestart/sleep` 只带一个动作,两端走的是同一条路由。脚本(或者 agent)同样可以驱动它:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# 武装(倒数之后关机)
|
|
235
|
+
curl -s -X POST http://127.0.0.1:<端口>/__dsh_autorestart/sleep \
|
|
236
|
+
-H 'content-type: application/json' -d '{"action":"arm"}'
|
|
237
|
+
# 取消
|
|
238
|
+
curl -s -X POST http://127.0.0.1:<端口>/__dsh_autorestart/sleep \
|
|
239
|
+
-H 'content-type: application/json' -d '{"action":"cancel"}'
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**关的是真宿主机。** 不是关子系统,是关**整台机器**:
|
|
243
|
+
|
|
244
|
+
| 宿主 | 执行的命令 |
|
|
245
|
+
| --- | --- |
|
|
246
|
+
| Windows | `shutdown.exe /s /f /t 0` |
|
|
247
|
+
| **WSL**(DSH 跑在发行版里) | `/mnt/c/Windows/System32/shutdown.exe /s /f /t 0` —— 借挂载的 `C:` 盘调 Windows 的程序,所以**关掉的是整台 Windows**;**绝不只关 WSL 子系统** |
|
|
248
|
+
| 真 Linux 主机 | `systemctl poweroff`(兜底 `shutdown -h now`) |
|
|
249
|
+
| macOS | `osascript -e 'tell application "System Events" to shut down'` |
|
|
250
|
+
| 其它平台 | **一条命令都不执行**:按钮不显示,路由报 `phase: "unsupported"` |
|
|
251
|
+
|
|
252
|
+
WSL 的判定依据:`WSL_DISTRO_NAME`、`WSL_INTEROP`、`/proc/version` 里出现 microsoft,或挂载的 Windows 程序存在。倒数是插件自己做的,所以操作系统被要求**立即**关机(`/t 0`),不会再倒数第二遍。
|
|
253
|
+
|
|
254
|
+
**三个配置项。**
|
|
255
|
+
|
|
256
|
+
| 键 | 默认 | 说明 |
|
|
257
|
+
| --- | --- | --- |
|
|
258
|
+
| `showSleepButton` | `true` | 左侧栏最底部(设置按钮旁边)的月亮按钮是否显示 |
|
|
259
|
+
| `sleepCountdownSeconds` | `20` | 真正关机前倒数几秒——**下拉框:0 / 10 / 20 / 30 / 60 秒**,默认 20;`0` = 不倒数、立即关机(仍会先等会话收工) |
|
|
260
|
+
| `sleepCommand` | `''` | 自定义关机命令;留空 = 自动识别宿主,填了就用这条命令代替(Windows 走 `cmd.exe /c …`,其它平台走 `/bin/sh -c …`) |
|
|
261
|
+
|
|
262
|
+
**设置分区(设置 → 自动重启与关机)里只有三样东西。** 这个分区是设置页侧栏里的**独立一栏**(排在「Agent预设」下面),点进去直接就是这三个控件——不用先去插件详情页,也不用再展开任何一层。
|
|
263
|
+
|
|
264
|
+
| 控件 | 配置键 | 说明 |
|
|
265
|
+
| --- | --- | --- |
|
|
266
|
+
| 倒计时秒数(下拉) | `sleepCountdownSeconds` | 0 / 10 / 20 / 30 / 60 秒;`0` = 不倒数、立即关机 |
|
|
267
|
+
| 重启前备份(开关) | `backupOnRestart` | 关掉就完全不做重启前快照 |
|
|
268
|
+
| 备份包含已安装插件(开关) | `backupIncludePlugins` | 关掉后只备份 DSH 自身状态,不含 profile 里的插件目录;**「重启前备份」关掉时它置灰** |
|
|
269
|
+
|
|
270
|
+
改完立刻写进 profile 配置(走插件自己的 choice 路由,用官方 `configEditor` Service),并且**从宿主回读**,所以分区里永远不会出现宿主没接受的值。**非法值一律 400、一个字节都不写。**
|
|
271
|
+
|
|
272
|
+
**首次安装会问一次「按钮要不要留着」。** 答完写进 profile 配置的 `showSleepButton` 键(用官方 `configEditor` Service,和备份范围那次问询同一条路),所以设置分区和问询看到的永远是同一个值。
|
|
273
|
+
|
|
274
|
+
**想空跑、不真关机。** 给宿主进程的环境变量设 `DSH_AUTORESTART_SLEEP_DRYRUN=1`:插件只报告"本来会执行什么命令",**一条都不执行**。
|
|
275
|
+
|
|
276
|
+
**给代码看的状态字段。** `GET <healthPath 前缀>/sleep`(默认 `/__dsh_autorestart/sleep`)会回答阶段、倒数和"要关的是哪台机器"。其中几个字段是给**程序**看的、不是给人看的:`host.kind` 是机器类别(`windows` / `wsl` / `linux` / `macos` / `unsupported`;如果平台没认出来、但你配了 `sleepCommand`,则是 `custom`);`host.suspect` 为 `true` 表示这台机器**只凭挂着 Windows 盘**才被认成 WSL(是佐证,不是铁证);`lastRun.dryRun` 表示上一次是**试运行**,什么都没真关;`backupOnRestart` / `backupIncludePlugins` 报告重启前备份的当前范围。
|
|
277
|
+
|
|
278
|
+
**关机命令起不来时的退路。** 宿主会等命令的**真实结果**(进程有没有真的起来)。命令起不来(找不到程序、权限不够)时,关机**不会假装成功**:状态回到 `idle`,并给出原因("关机命令没跑起来(…),电脑还开着,可以再点一次月亮按钮。"),电脑保持开机。界面上那个「正在关机」的卡片也**不会把界面锁死**:最多停留 8 秒就会给出一个"关掉这个提示"的按钮。
|
|
279
|
+
|
|
193
280
|
## 需要 goal 吗?
|
|
194
281
|
|
|
195
282
|
不需要。
|
|
@@ -316,7 +403,7 @@ dsh plugin --profile desktop add C:\path\to\dsh-autorestart
|
|
|
316
403
|
```powershell
|
|
317
404
|
curl http://127.0.0.1:<当前 GUI 端口>/__dsh_autorestart/health
|
|
318
405
|
# {"ok":true,"plugin":"dsh-autorestart","bootId":"…","pid":17884,"phase":"running",
|
|
319
|
-
# "pageHeartbeat":true,"systemPrompt":true,"configSchema":true,"indexTaps":
|
|
406
|
+
# "pageHeartbeat":true,"systemPrompt":true,"configSchema":true,"indexTaps":1,…}
|
|
320
407
|
|
|
321
408
|
# 自检:把页面心跳注入逻辑作用到一段探针 HTML 上(不需要鉴权页面)
|
|
322
409
|
curl "http://127.0.0.1:<端口>/__dsh_autorestart/health?probeIndex=1"
|
|
@@ -351,12 +438,12 @@ curl -X POST http://127.0.0.1:<端口>/__dsh_autorestart/recover \
|
|
|
351
438
|
`<dsh 安装目录>/app.asar/dsh/node_modules/@deepseek-ai/schemastery/lib/index.mjs` 加载。健康路由的
|
|
352
439
|
`schemastery` 字段只报告粗粒度来源 `bare` / `asar-fallback` / `unresolved`;schema 缺失时降级为"配置照常可用、
|
|
353
440
|
只是没有可视化 schema",并在日志里给出警告,**不会**因此让插件激活失败。)
|
|
354
|
-
- 测试:**
|
|
355
|
-
`continuum_recover_now` / `/recover`
|
|
441
|
+
- 测试:**250 个插件用例全绿**(`plugins/dsh-autorestart/test/*.test.mjs`,其中 goal 解除 / 自述式恢复 /
|
|
442
|
+
`continuum_recover_now` / `/recover` 路由 / 收工关机(宿主侧状态机 + 前端纯函数)是新增的用例)。运行:
|
|
356
443
|
`<bundled node> --test "plugins/dsh-autorestart/test/*.test.mjs"`
|
|
357
444
|
(Node 24 把位置参数当 glob,务必加引号)。
|
|
358
445
|
注意:仓库外的 `verification/adversarial.test.mjs` 里仍是"只注册一条/两条路由"的旧断言(插件现在注册
|
|
359
|
-
健康 + park + recover
|
|
446
|
+
健康 + park + recover + handoff + choice + sleep 六条),该文件不在本插件改动范围内。
|
|
360
447
|
- 独立验证员复验:`verification/verify-report.md`。
|
|
361
448
|
- WMI 脱离进程树已实测(`Invoke-CimMethod Win32_Process Create` 的子进程 parent 是 `WmiPrvSE.exe`)。
|
|
362
449
|
- 健康路由在"开机时激活"的情况下会短暂晚于 webserver 就绪,插件会重试注册(≤30 次 × 2s)。
|
|
@@ -372,9 +459,10 @@ curl -X POST http://127.0.0.1:<端口>/__dsh_autorestart/recover \
|
|
|
372
459
|
|
|
373
460
|
```
|
|
374
461
|
index.js 插件入口:apply / 事件跟踪 / 工具 / 健康路由 / 启动恢复
|
|
375
|
-
lib/checkpoint.js 原子 JSON 检查点,容错读取,boot/restart/session/解除记录(含旧 parked
|
|
462
|
+
lib/checkpoint.js 原子 JSON 检查点,容错读取,boot/restart/session/解除记录(含旧 parked 记录)与"已看过的新功能公告"变更函数
|
|
376
463
|
lib/lifecycle.js 纯决策:bootPlan / restartDecision / selectGoalDisarms / continuationPrompt / describeState
|
|
377
464
|
lib/restart.js Windows 脱离重启(WMI 主、schtasks 兜底、dryRun、自定义命令)
|
|
465
|
+
lib/sleep.js 收工关机:识别真宿主机(含 WSL)、关机命令、等待→倒数→关机的状态机
|
|
378
466
|
locale/{en,zh}.json Plugin Manager 显示用标题/描述
|
|
379
467
|
icon.svg 插件图标
|
|
380
468
|
LICENSE MIT 许可(发布到插件市场需要)
|
|
@@ -517,7 +605,7 @@ or by requesting the health path with ?gate=1.
|
|
|
517
605
|
|
|
518
606
|
同一个 profile 行也是首次安装那次提问的落点:**托管 profile 如果自己没有 `dsh-autorestart` 行**,
|
|
519
607
|
`configEditor` 就没有行可写,答案会退到 `<DSH_HOME>/storages/dsh-autorestart/install-choice.json`
|
|
520
|
-
而不是 profile 配置;声明这一行才能让 profile
|
|
608
|
+
而不是 profile 配置;声明这一行才能让 profile(以及设置分区)保持唯一真相。
|
|
521
609
|
|
|
522
610
|
- **浏览器侧的「待重启」小胶囊**依赖 `GET <healthPath>?state=1` 这条状态路由。这条路由现在接受
|
|
523
611
|
**loopback 调用者**,*或* **宿主 connection 服务判定为「已认证浏览器」的请求**
|