前言¶
在 DeepSeek Harness (DSH) 中,修改宿主半代码(如 index.js 或 lib/*.js)通常需要整进程重启才能生效。Agent 没有重启手段时,只能依赖用户手动操作。这个插件将重启能力下沉到 Agent 层面,并增加了安全控制,确保重启行为可控。
这是什么¶
dsh-safety-restart 是 DeepSeek Harness 的一个安全、无缝重启插件,由 Dayi-Z 维护,属于 admin-security 类别。它允许 Agent 重启宿主并恢复,但重启前必须通过四道安全闸门(循环熔断、其他会话、不可解析的 bundle、不可用的拉起手段),任何闸门失败都会拒绝重启并说明原因。
核心功能¶
- 重启循环熔断:基于
loopMax和loopWindowMs的计数器,防止 Agent 在配置错误时陷入无限重启风暴。 - 会话状态检查:在重启前检查是否有其他会话处于活跃状态(
turn/start之后未turn/end),避免打断他人工作。 - Profile Bundle 验证:检查
node_modules和入口文件是否存在,拒绝checked:false的配置。 - 跨平台拉起机制:
- 桌面端使用 Electron
app.relaunch()。 - Web/CLI 使用
process.exit()和分离的 helper。
- 桌面端使用 Electron
- 会话恢复机制:重启前写入续作标记,重启后恢复会话上下文。
- 审计日志:记录所有重启决策和状态,文件名为
safety-restart-audit.l。
安装与启用¶
在 profiles/<name>/package.json 中添加依赖和 bundle:
// profiles/<name>/package.json
{
"dependencies": { "dsh-safety-restart": "link:/path/to/dsh-safety-restart" },
"dsh": { "profile": { "bundles": [ "...", "dsh-safety-restart" ] } }
}
安装后必须重启一次 DSH 实例,以确保插件被加载。
典型用法¶
Agent 侧调用:
safety_restart({ reason: "改了宿主半的 index.js,让新路由生效" })
safety_restart({ reason: "...", force: true })
UI 操作:设置 → 插件 → 「dsh-safety-restart」卡片。
HTTP API(仅接受本机请求):
GET /safety-restart/status
POST /safety-restart/restart { "reason": "ui" }
适用场景与注意¶
- 权限与执行:插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
- 健康检查机制:Web/CLI 端的健康检查是 TCP 端口恢复,不是 HTTP 200。
- 会话检查范围:
busy状态只覆盖本进程启动之后的会话,更早的会话不在此列。 - Bundle 检查范围:仅证明文件存在,不证明导入成功,更不证明客户端契约正确。
- 网络限制:HTTP API 只接受本机请求,反代或远程访问会被 403。
- 客户端兼容性:客户端代码需要兼容 rc 契约(
list或keyed)。
总结¶
dsh-safety-restart 将 Agent 的重启能力从手动操作转变为可调用的工具,同时通过四道闸门确保环境不会因重启而损坏。它提供了审计日志和会话恢复机制,适合需要频繁调整宿主代码的场景。