dsh-stop-kills-jobs

在 DeepSeek Harness(DSH)中,当开启 run_in_background: true 运行后台 bash 任务或后台子代理时,任务会注册 ctx.jobs 并在返回 job id 后使用 job cancellation 机制而非工具调用信号来控制。这意味着当用户点击停止按钮时,前台回复会被中断,但后台任务往往会继续运行。任务完成后,其完成通知会唤醒模型,导致为已取消的对话产生额外的请求。dsh-stop-kills-jobs 插件监听 UI 的 turn/end 事件,识别用户按停止的行为,并取消当前会话关联的后台任务,防止这种情况发生。

插件概况

这是一个客户端插件,由 Ezisup 维护,采用 MIT 许可证。它的核心作用是在用户主动中断对话时,一并结束本轮发起的后台任务。

安装

通过命令行添加插件:

dsh plugin --profile web add link:/xxx/dsh-stop-kills-jobs

安装后需要重启 DSH 才能生效(客户端部分需要重新加载)。

配置与使用

  1. 进入 设置 → 插件 → 插件配置,找到「停止时结束后台任务」卡片。
  2. 默认情况下该卡片是折叠的,点击标题展开。
  3. 卡片分为两部分:「停止时结束什么」和「插件自身的输出」。
    • 停止时结束什么:控制是否结束后台 bash 任务和后台子代理,受总开关管辖。
    • 插件自身的输出:显示提示和详细日志,与停止按钮无关,任何时候都生效。
  4. 总开关:默认开启。关闭总开关后,「停止时结束什么」整段隐藏(插件不做任何事),但已保存的设置会原样保留,重新开启即可恢复。

开关说明

开关 默认值 说明
启用 开 总开关,关闭即恢复 DSH 原行为
后台命令(bash) 开 是否结束 run_in_background 的 bash 任务
后台子代理(subagent) 开 是否结束后台子代理
在对话中显示提示 开 在设置页显示最近结束的任务
输出详细日志 关 将判断过程写入服务端日志

核心功能

  • 监听与识别:监听 UI 的 turn/end 事件,精确匹配 reason?.kind === 'aborted' && reason?.reason?.kind === 'user',仅对用户主动点击停止的行为响应。
  • 取消任务:利用授权凭据(ctx.agents.get(session.id))取消当前会话及其子代理注册的后台任务。
  • 防止唤醒:通过及时取消任务,防止任务完成后通知唤醒模型,避免已取消的对话产生额外请求。
  • Verbose 模式:支持开启详细日志,便于排查任务未正常终止的问题。

注意事项

  • 作用范围:仅影响当前会话发起的任务,不影响其他会话。
  • 依赖环境:插件以当前 dsh 进程权限运行,使用前应检查源码与许可证。
  • 会话隔离:子代理任务注册时使用 owner: parent,插件通过 ownerSession 过滤条件同时覆盖了父会话和子代理任务。
  • 卸载:如需移除,使用 dsh plugin --profile web remove dsh-stop-kills-jobs,并重启 DSH。
羽毛球分组比赛记分
小程序二维码

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

小夜