dsh-autorestart 0.8.1 → 0.8.3
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/CHANGELOG.md +81 -0
- package/README.md +60 -10
- package/client.js +1038 -49
- package/docs/README.zh.md +8 -6
- package/index.js +538 -44
- package/lib/backup.js +279 -9
- package/lib/checkpoint.js +153 -0
- package/lib/diagnostics.js +18 -0
- package/lib/restart-phase.js +304 -0
- package/lib/watchdog-disarm.js +506 -0
- package/lib/watchdog.js +86 -0
- package/locale/en.json +27 -5
- package/locale/zh.json +27 -5
- package/package.json +1 -1
- package/scripts/drill-watchdog.mjs +135 -2
- package/scripts/watchdog.mjs +107 -0
package/docs/README.zh.md
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
- 多个会话同时要求重启时合并成一次,且每个请求者都会被唤醒;
|
|
21
21
|
- 带 goal 的会话不会把重启卡死:重启前自动**解除(disarm)**它的 goal(当前那一轮照常跑完,什么都不丢),重启之后自动重新上链;
|
|
22
22
|
- 重启前有两道检查:宿主侧查一次,独立 helper 在杀进程前再查一次;
|
|
23
|
-
- 界面上能看到状态:输入框工具行左侧的"待重启 · 等待 N
|
|
23
|
+
- 界面上能看到状态:输入框工具行左侧的"待重启 · 等待 N 个会话"小胶囊、左侧栏会话标题旁的圆点;快重启时圆点呼吸,点胶囊看详情;
|
|
24
24
|
- 可配置:静默窗口(默认 2 秒)、杀进程前等待(默认 2 秒)、忙碌时是否允许强制重启等。
|
|
25
25
|
- 同一套"等到大家都安静"的想法还做成了**收工关机**:左侧栏最底部(设置按钮旁边)一个月亮按钮 → 等所有会话收工 → 屏幕上倒数(一张浮动卡片:大字 + 鲸鱼娘)→ **关掉整台电脑**(见「收工关机」)。
|
|
26
26
|
|
|
@@ -183,7 +183,9 @@ session resume on boot, durable-goal re-arm, and an agent-callable idle-aware gr
|
|
|
183
183
|
|
|
184
184
|
**由一个函数决定**(`lib/watchdog-tier.js`),设置页、diagnostics 和看门狗自己问的都是这同一个函数 —— 所以"这台机器没有自动回滚"这句警告**不可能**和插件实际做的事对不上。
|
|
185
185
|
|
|
186
|
-
三档跑的是**同一套**流程(`lib/watchdog.js`):等新宿主写下 ready 标记 → **再问一次**(起得慢不等于死了)→ 有实例活着吗(活着就没什么好还原的)→ 抢共用的锁(`rollback.lock`,保证只有一个在还原)→ 还原快照 → **再拉起宿主** → 再等一次 ready。最多**一次**还原 + **一次**拉起;然后看门狗停下,把结果写进 `<stateDir>/last-watchdog-report.json
|
|
186
|
+
三档跑的是**同一套**流程(`lib/watchdog.js`):等新宿主写下 ready 标记 → **再问一次**(起得慢不等于死了)→ 有实例活着吗(活着就没什么好还原的)→ **直接问宿主自己的 health 路由**(只要它在应答就绝不还原;一个端口都问不到时,再等一轮、复查标记,仍然没动静才允许还原)→ 抢共用的锁(`rollback.lock`,保证只有一个在还原)→ 还原快照 → **再拉起宿主** → 再等一次 ready。最多**一次**还原 + **一次**拉起;然后看门狗停下,把结果写进 `<stateDir>/last-watchdog-report.json`(用的是哪一档、`healthCheck` 是什么、为什么)。
|
|
187
|
+
|
|
188
|
+
**撤销看门狗是宿主的责任,而且开机就做。** 插件一加载就会写下 ready 标记、删掉 `watchdog-pending.json`、并把自己注册的调度项删掉(带退避重试,删完回查计划任务,过程写进 `<stateDir>/watchdog-disarm.json`)。它**不等任何人来打 health 接口** —— 没人开界面时看门狗也必须被撤掉;撤销失败会出现在 `health`、诊断文本和那份记录里,而不是悄悄消失。这就是 0.8.2 修的那个线上缺陷:一个被 health 路由吞掉的异常,让一个健康宿主背后留着一只看门狗。
|
|
187
189
|
|
|
188
190
|
**同一时刻只有一个监护者。** 插件里还有一版旧的看门狗(只还原快照、**不拉起**宿主)。两者抢同一把锁,同时开反而更糟:抢不到锁的那个会放弃 —— 要是新版抢输了,结果就是**配置还原了,但没有任何东西在跑**。所以插件只在一个地方做这个决定(`lib/watchdog-arbiter.js`):**新版能用就是新版接管**(v2),新版用不了(这台机器没有档位、看门狗被关掉、或者注册失败)才**回落旧版**(v1)。报告里写着当时是谁在监护(`arbiter: "v2"` 或 `"v1"`),一眼就能看出来。
|
|
189
191
|
|
|
@@ -328,7 +330,7 @@ agent/status(running) ──► 写 checkpoint(<DSH_HOME>\storages\dsh-autores
|
|
|
328
330
|
|
|
329
331
|
## 安装
|
|
330
332
|
|
|
331
|
-
当前版本:**0.8.
|
|
333
|
+
当前版本:**0.8.3**。
|
|
332
334
|
|
|
333
335
|
```powershell
|
|
334
336
|
# 在 dsh 里(或对 Agent 说):把工作区里的这个包安装为 profile bundle
|
|
@@ -531,7 +533,7 @@ restart gate: action=wait reason=agents-busy-within-soft-window busyCount=1 quie
|
|
|
531
533
|
不放名字,也不放任何"双击可以取消"之类的提示(没地方放)。**单击**它(或聚焦后按 Enter / 空格)会在上方
|
|
532
534
|
弹出一个小面板:
|
|
533
535
|
|
|
534
|
-
-
|
|
536
|
+
- 这次重启还在等几个会话;
|
|
535
537
|
- 还有几个**别的**会话也在等同一次重启;
|
|
536
538
|
- 一个按钮:「取消我的这次重启」。
|
|
537
539
|
|
|
@@ -931,8 +933,8 @@ or by requesting the health path with ?gate=1.
|
|
|
931
933
|
|
|
932
934
|
- 胶囊渲染在**输入框工具行左侧**(`conversation.input.left` 槽位),是一个高度约 22px 的小胶囊,**不额外占一行**(不再是输入框上方的一整行)。
|
|
933
935
|
- 只有当健康路由 `/__dsh_autorestart/health?state=1` 返回 `pendingRestart: true` **且**本会话 id 出现在 `waiters` 列表里时才会出现;别的会话等待重启时你看不到它。
|
|
934
|
-
-
|
|
935
|
-
- 悬停提示(原生 `title
|
|
936
|
+
- 文案有多种状态:还有别的**会话**占着时显示「待重启 · 等待 N 个会话」;都空闲时显示「待重启 · 空闲后自动重启」;被某个**自动续跑的 goal** 占着时显示「待重启 · 被某个自动续跑的 goal 占着」(见下面的升级 3)。
|
|
937
|
+
- 悬停提示(原生 `title`):「等待其他会话结束(计数含"排队但还没开始"的会话)后自动重启;重启后会自动继续本会话进度」。
|
|
936
938
|
- **每个占用者都说清自己是什么**:普通会话用它自己的标题;**子智能体**用"创建它的那个会话"的标题来称呼(显示成「子智能体(那个会话)」)。**原始的 `session-xxxx` 永远不会推给界面** —— 取不到标题时用一个通用说法。
|
|
937
939
|
- 颜色走**品牌色(蓝紫)** `var(--dsw-alias-brand-primary, #5b8def)`,**不再用告警黄(warning)色**:胶囊里的小圆点和侧边栏圆点都是品牌色,胶囊边框保持中性(`--dsw-alias-border-l1`),文字保持中性。
|
|
938
940
|
- 左侧边栏会话行的**行首 16px 状态格**里也会出现一个同款 8px 圆点(`sidebar.session.row.leading` 槽位,id `autorestart-restart-dot`,order 20):纯图标,完整说明放在悬停 `title` 里,aria-label 为「待重启」/「Pending restart」。
|