前言¶
DeepSeek Harness (DSH) 运行模型会话,智能体有时需要通过 SSH 或 shell 命令控制宿主机服务。如果命令处理不当,模型可能会发出停止 Harness 自身的指令,导致服务崩溃。由于是正常退出,Restart=on-failure 不会触发重启。
dsh-self-preserve 是一个插件,用于拦截此类操作,确保 Harness 自身不会被模型会话意外终止。
插件定位¶
这是一个 DeepSeek Harness hook 插件。它由 n8guru 维护,旨在防止模型会话停止其所在的 Harness 进程。
核心功能¶
-
拦截自毁命令
在 Linux 环境下,通过读取/proc/self/cgroup获取当前 Harness 的 systemd 单元名称。任何匹配systemctl stop/kill/restart目标为自身单元的命令都会被拦截并返回拒绝策略。 -
支持 macOS launchd
在 macOS 环境下,通过设置环境变量DSH_SELF_PRESERVE_TARGET,可以拦截对特定服务标签的launchd停止、移除、卸载等命令。 -
保留只读权限
插件仅拦截对自身服务的控制操作,允许对其他服务进行只读查询。 -
日志记录
保护激活时会记录[dsh-self-preserve] armed for <target>。如果无法发现或配置目标,会记录明确的不活动警告。
安装¶
将插件作为本地包安装到 DSH profiles 目录:
git clone https://github.com/n8guru/dsh-self-preserve ~/.dsh/local-mods/dsh-self-preserve
cd ~/.dsh/profiles/web # 以及 profiles/headless(如果使用)
# 在 package.json 的 "dependencies" 和 "dsh.profile.bundles" 中添加:
# "dsh-self-preserve": "file:../../local-mods/dsh-self-preserve"
pnpm install --ignore-workspace
安装后,必须由外部机器或外部 supervisor 发起重启。
典型用法¶
防止 SSH 中的命令注入¶
在 SSH 命令中调用 systemctl stop 时,如果命令位于双引号字符串中,本地 shell 可能会提前解析该命令。插件会阻止对自身 Harness 的停止操作:
ssh peer "cat > RUNBOOK.md <<'EOF'
1. `systemctl --user stop deepseek-harness.service`
5. `systemctl --user start deepseek-harness.service`
EOF"
运行测试¶
插件包含独立的测试文件,可直接运行:
node --test guard.test.mjs
适用场景与注意¶
- 权限依赖:插件以当前 DSH 进程的权限运行。安装前应检查源码与许可证。
- 重启限制:插件无法自我重启。重启必须由外部机器或外部 supervisor 发起。
- 配置要求:如果无法发现或配置目标,会记录不活动警告。这是预期行为。
总结¶
dsh-self-preserve 通过在 tools/pre-execute 阶段进行策略拦截,解决了模型会话意外停止 Harness 的问题。它保留了其他服务的只读访问能力,确保了工作流的稳定性。