dsh-goal-restart:DSH 服务重启后自动恢复目标回合

前言

DeepSeek Harness (DSH) 的设计理念是「一切皆插件」。在使用 DSH 构建智能体工作流时,智能体可能会执行长时间运行的任务(例如开发自己的插件)。如果承载 DSH 进程的服务(如因崩溃重启或手动重启)发生中断,处于活跃状态的目标会保持持久化,但其「激活状态」会丢失。这意味着回合驱动程序(goal-round driver)会停止工作,直到人工介入执行 /goal resume。

dsh-goal-restart 插件解决了这个问题。它旨在让智能体在服务重启后能够自动恢复工作,无需人工干预。

插件简介

  • 名称:dsh-goal-restart
  • 所有者:joshryandavis
  • 类别:工作流
  • 许可证:MIT

该插件的作用是在 DSH 服务重启时,自动检测并重新激活仍然处于活跃状态且有余量预算的持久化目标。它会调用 ctx.goals.resume,让目标回合驱动程序能够无缝接管并继续执行后续回合。

安装与启用

安装插件需要使用 DSH 的插件管理命令,并指定配置文件(profile)。

  1. 执行安装命令:
    dsh plugin --profile <profile> add dsh-goal-restart
*说明:将 `<profile>` 替换为你当前使用的配置文件名称。*
  1. 重启 dsh 服务以加载新插件。

禁用插件

如果需要临时关闭此功能,可以通过修改配置文件中的补丁来禁用。

在 profile 的 cordis.patch.yml 文件中添加以下配置:

- id: goal-restart
  disabled: true

工作原理

插件的核心逻辑位于 agent/session-start 事件处理中。只有当会话恢复源(payload.source)为 'resume' 时,插件才会介入。

检查条件

插件会根据策略表决定是否重新激活目标:

  1. 触发条件:agent/session-start 且 payload.source === 'resume'(会话刚从持久化存储加载)。
  2. 动作:调用 ctx.goals.resume(agent, ref)。
  3. 持久化:重新激活会向会话日志写入一次持久化的 resume mutation(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,消除了人工干预的必要步骤。对于需要长时间运行或自主开发的智能体工作流,这是一个关键的「自愈」机制。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜