在 DSH Web 环境中,进程崩溃或网络波动会导致会话中断,系统重启后状态难以恢复。DSH Maestro Supervisor 是一个守护进程与插件组合,用于自动检测 DSH Web 的崩溃,回滚到已知良好的状态(LKG),并恢复中断的会话。
该插件由 ddtcorex 维护,采用 MIT 许可证。它通过一个独立于 pnpm 树的系统级守护进程来保证存活,同时作为 DSH Web 内部的插件来处理会话恢复和浏览器重载。
核心功能¶
1. 崩溃检测与 LKG 回滚¶
守护进程运行在 dsh web 进程树之外,通过 Systemd 管理或手动启动。它每 3 秒轮询一次 Web 服务端口。当检测到服务不可用或崩溃时,守护进程会尝试将系统回滚到最近一次已知的良好快照(LKG)。
- 存储位置:LKG 快照存储在
~/.dsh/.supervisor/lkg/目录下。 - 验证机制:快照文件通过 SHA256 校验。
- 回滚触发:检测到崩溃后,守护进程会等待 60 秒防抖,然后执行回滚。
2. 自动恢复中断会话¶
当 DSH Web 重启后,插件会自动扫描并恢复中断的会话和未完成的轮次(open turns)。
- 扫描范围:扫描最近 5 分钟内(默认配置)的会话日志。
- 恢复逻辑:查找包含中断标记(
reason.kind === 'interrupted')的会话,或查找未闭合的轮次,并尝试通过 RPC 重新连接或恢复上下文。 - 客户端行为:浏览器端插件会在离线、WebSocket 断开或页面可见性变化时,每 1 秒尝试获取头部信息,成功后自动刷新页面。
3. 健康报告¶
崩溃或回滚操作完成后,守护进程会生成一份健康报告。报告包含系统状态摘要、Git Diff 以及最近的日志片段。
安装与启用¶
1. 构建插件¶
如果从源码安装,需要执行构建命令。注意客户端构建需要 build-client.mjs 包装器,直接使用 tsc 会导致客户端文件不完整。
pnpm --dir packages/dsh-maestro-supervisor install
pnpm --dir packages/dsh-maestro-supervisor build
pnpm --dir packages/dsh-maestro-supervisor verify
2. 添加到 DSH Web Profile¶
将插件添加到 Web 配置文件中。该包声明了 dsh.client,浏览器端会自动加载。
dsh plugin --profile web add @ddtcorex/dsh-maestro-supervisor
pnpm --dir ~/.dsh/profiles/web install
前置检查:在将插件添加到活跃配置的 bundles 之前,必须确保 dry-boot 通过。这能捕获加载时失败(如 lib/index.js 缺失、构建缓存陈旧等)。
DSH_HOME=$(mktemp -d) pnpm --dir deepseek-harness dsh web --port 0 &
# 等待启动成功并 curl 200,然后 kill
3. 安装守护进程¶
为了在进程树崩溃时存活,建议安装 Systemd 守护进程。
bash packages/dsh-maestro-supervisor/scripts/install-systemd.sh
systemctl --user daemon-reload
systemctl --user enable --now dsh-web-supervisor
如果不使用 Systemd,可以在前台手动运行守护进程进行调试。
node packages/dsh-maestro-supervisor/lib/index.js daemon
配置¶
插件的自动恢复行为通过配置文件控制,优先级从高到低依次为:Cordis 配置 > 环境变量 > Supervisor 配置文件 > Maestro 设置 > 默认值。
配置文件位于 ~/.dsh/.supervisor/config.json。
{
"autoResumeEnabled": true,
"autoResumeWithin": 5
}
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
autoResumeEnabled |
boolean | true |
是否启用自动恢复。设为 false 时仅通知。 |
autoResumeWithin |
number/string | 5 |
恢复窗口,单位为分钟或 5m 格式。 |
使用方法¶
守护进程管理¶
node packages/dsh-maestro-supervisor/lib/index.js status
node packages/dsh-maestro-supervisor/lib/index.js logs --tail 50
node packages/dsh-maestro-supervisor/lib/index.js daemon
手动回滚¶
当需要强制回滚到最新 LKG 时:
node packages/dsh-maestro-supervisor/lib/index.js rollback --latest
RPC 接口(Loopback)¶
守护进程通过 Loopback RPC 接口提供服务,用于手动扫描和恢复特定会话。
扫描中断会话:
curl -s http://127.0.0.1:3080/dsh-maestro-supervisor-resume/scan -X POST \
-H 'content-type: application/json' \
-d '{"type":"client-request","rpcId":"r1","method":"scan","payload":{"withinMs":300000}}'
恢复指定会话:
curl -s http://127.0.0.1:3080/dsh-maestro-supervisor-resume/resume -X POST \
-H 'content-type: application/json' \
-d '{"type":"client-request","rpcId":"r2","method":"resume","payload":{"ids":["session-id"]}}'
注意事项¶
- 构建依赖:
src/目录有任何修改后,必须运行pnpm build。客户端构建依赖build-client.mjs,直接使用tsc无法生成正确的客户端 bundle。 - 文件位置:LKG 快照存储在用户目录下的
.supervisor文件夹中。 - 权限:守护进程以用户权限运行,若需 Telegram 通知需在 Systemd 配置中取消相关环境变量的注释。
- 生态说明:DSH 插件目录与 DeepSeek 或幻方官方无隶属关系,仅作为社区资源索引。
链接¶
- 插件目录:[catalog_url]
- GitHub 仓库:[github_url]