前言¶
DeepSeek Harness (DSH) 的设计理念是「一切皆插件」。在使用 DSH 构建智能体工作流时,智能体可能会执行长时间运行的任务(例如开发自己的插件)。如果承载 DSH 进程的服务(如因崩溃重启或手动重启)发生中断,处于活跃状态的目标会保持持久化,但其「激活状态」会丢失。这意味着回合驱动程序(goal-round driver)会停止工作,直到人工介入执行 /goal resume。
dsh-goal-restart 插件解决了这个问题。它旨在让智能体在服务重启后能够自动恢复工作,无需人工干预。
插件简介¶
- 名称:dsh-goal-restart
- 所有者:joshryandavis
- 类别:工作流
- 许可证:MIT
该插件的作用是在 DSH 服务重启时,自动检测并重新激活仍然处于活跃状态且有余量预算的持久化目标。它会调用 ctx.goals.resume,让目标回合驱动程序能够无缝接管并继续执行后续回合。
安装与启用¶
安装插件需要使用 DSH 的插件管理命令,并指定配置文件(profile)。
- 执行安装命令:
dsh plugin --profile <profile> add dsh-goal-restart
*说明:将 `<profile>` 替换为你当前使用的配置文件名称。*
- 重启 dsh 服务以加载新插件。
禁用插件¶
如果需要临时关闭此功能,可以通过修改配置文件中的补丁来禁用。
在 profile 的 cordis.patch.yml 文件中添加以下配置:
- id: goal-restart
disabled: true
工作原理¶
插件的核心逻辑位于 agent/session-start 事件处理中。只有当会话恢复源(payload.source)为 'resume' 时,插件才会介入。
检查条件¶
插件会根据策略表决定是否重新激活目标:
- 触发条件:
agent/session-start且payload.source === 'resume'(会话刚从持久化存储加载)。 - 动作:调用
ctx.goals.resume(agent, ref)。 - 持久化:重新激活会向会话日志写入一次持久化的
resumemutation(revision +1),这与人工执行/goal resume的写入一致。
驱动程序职责¶
需要注意的是,回合驱动程序(goal-round driver)已经内置了持久化和取消安全机制。此插件仅负责决定「是否需要继续」,具体的执行逻辑和回合调度由驱动程序处理。
限制与策略¶
插件并非对所有场景都生效,它会跳过以下情况:
- 会话全新启动(
source: 'startup')。 - 会话是由其他进程派生的(如 forked session 或 subagent session,此时 lineage 在进程中)。
- 目标状态为
paused、blocked或complete(由持久化的阶段状态决定)。 - 目标已处于
armed状态(幂等操作,跳过)。 - 目标回合数已达到上限(
roundsStarted >= maxGoalRounds)。
验证与测试¶
该策略经过了充分的验证。代码库中包含了 13 个内存单元测试(npm test),以及一个无需网络和实时进程即可运行的冒烟测试脚本(npm run smoke)。
总结¶
dsh-goal-restart 插件通过在服务重启后自动调用 resume,消除了人工干预的必要步骤。对于需要长时间运行或自主开发的智能体工作流,这是一个关键的「自愈」机制。