dsh-session-continue: Continuation Prompt upon Abnormal Session Termination

前言

在 DeepSeek Harness(DSH)里跑 Agent,一轮对话并不总是以 turn/end 正常收尾。进程崩溃、刷新页面、断线、任务报错或输出触顶、以及中途按停止,都会把工作停在半路。宿主自带的待办面板能看任务,但不会自动帮你把「接着干」这件事填进输入框。下面介绍社区插件 dsh-session-continue(维护者 notpdpton,分类:客户端):在输入框上方显示提示条与「继续」按钮,把中断原因、轮次和未完成任务清单折叠成可一键提交的状态。

这是什么

dsh-session-continue 是一个独立的 DSH 插件:会话非正常结束时,在输入框上方显示提示条与「继续」按钮。单包自带 Host 与浏览器半边,无子包、无运行时依赖,也不依赖其他插件。

项 值
npm 包名 dsh-session-continue
插件名(诊断用) dsh-session-continue
投影键 sessionContinueInterruption
版本 0.1.1
许可 MIT

目录页:https://www.skillhub.cn/plugins/notpdpton/dsh-session-continue
源码:https://github.com/notpdpton/dsh-session-continue

解决什么问题

Agent 一轮可能因以下情况未正常结束:

  • 进程被杀或崩溃,日志尾部缺少 turn/end;
  • 重启、刷新、断线导致正在跑的一轮被掐断;
  • 任务出错、被阻止,或输出撞到长度上限;
  • 用户按停止,但工作尚未完成。

插件把「这一轮如何结束」「停在哪一轮」「当时的任务清单」折叠成少量状态,在 conversation.input.dock 槽位(输入框正上方,排在自带待办 dock 之上)显示提示,并提供「继续」:点击后将接续指令填入输入框并提交,便于模型从上次未完成处接着做。任务清单不在提示条里重复展示(待办面板在上方),而是随「继续」指令一并发给模型。

界面与行为

收起时提示条一行:状态点、标题「会话未正常结束」、一句话原因。展开「详情」后增加中断轮次、错误代码、错误信息三行;展开区无分割线,在卡片表面向下延伸。右侧三个按钮:详情 / 继续 / 忽略。

  • 仅在会话没有正常结束且 agent 当前不在运行时出现;
  • 「忽略」只对当前这一次中断生效,下一次中断会再次出现;
  • 插件页卡片标题为「会话中断继续」,图标为蓝底播放三角。

配置

总启用/禁用由「插件」页该卡片上的开关控制。详情页(plugins.bundle.config)只有两个偏好开关,不重复总开关;侧边栏不会单独增加「会话中断继续」导航项。

开关 默认 作用
恢复进度与任务清单 开 「继续」时附带未完成任务清单与中断轮次
提示手动停止的会话 开 关闭后只提示非你主动结束的会话

安装与宿主版本

从 npm 安装

在 DSH「插件」页选择「添加插件」,填入包名 dsh-session-continue,装好后在 bundle 列表确认已启用。命令行等价写法:

npm install dsh-session-continue

从 Git 仓库安装

在「插件」页选择安装,填入仓库地址(<主机>/<账号>/dsh-session-continue)。资料未给出固定的 dsh plugin add 单行命令,以插件页填写的仓库地址为准。

宿主版本要求

package.json 中 engines.dsh 为 ^0.2.1-rc.5。落在范围外时宿主在导入插件代码前会拒绝装载。资料中的兼容表:

宿主 结果
0.2.1-rc.5 放行
0.2.2-alpha.2 / 0.2.2-alpha.3 / 0.2.2 放行
0.2.1-rc.4 及更早 拒绝
0.3.0 及更新 拒绝

范围外使用需通过宿主版本豁免(compatibility.json / dsh plugin allow-version)显式授予。

本地开发安装

将源码 link 进 profile,并把包名加入 bundle:

// <profile>/package.json
{
  "dependencies": {
    "dsh-session-continue": "link:<本仓库的绝对路径>"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "dsh-session-continue"
      ]
    }
  }
}

cordis.patch.yml 插入挂载行;浏览器半边由 package.json 的 dsh.client 声明发现。

典型用法

  1. 安装并启用插件,满足宿主 ^0.2.1-rc.5。
  2. 正常用 DSH 跑 Agent;若某轮未正常结束且当前没有在跑,输入框上方会出现提示条。
  3. 需要接续时点「继续」,输入框会收到附带任务清单(若开关开启)的接续指令并提交;若只是误报或暂不需要,可点「忽略」。
  4. 若不想在「自己按停止」时也看到提示,在插件详情页关闭「提示手动停止的会话」。

诊断「某会话为何显示或不显示继续」时,可在插件仓库 test/ 下用真实会话目录(默认 $DSH_HOME/sessions,否则 ~/.dsh/sessions)运行只读脚本,例如:

node explain-session.mjs <sessionDirOrId>

实现要点(选读)

Host 在 ctx.sessionProjections 注册投影 sessionContinueInterruption,从完整会话日志折叠出 wire 视图推给客户端;浏览器 client.js 从 wire 读取 status、turn、reason、abortCause、errorCode、errorMessage、partialMessage、todos 等字段驱动提示条。主动停止与 Workspace 触发的 agent.cancel({ kind: 'user' }) 在日志上形态相同,插件借助是否存在带 interrupted: true 的 partialMessage 区分;无该消息时默认按中断处理,避免漏掉崩溃后的提示。设计细节见仓库 docs/design.md。

适用场景与注意

适合经常在 DSH 里长跑 Agent、又容易遇到刷新、崩溃或中途停止的开发者。插件在当前 DSH 进程权限下运行,安装前建议阅读源码与 MIT 许可证。SkillHub 上的插件目录是社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-continue 把「未正常结束的会话」变成输入框上方可操作的继续入口,减少在半截任务里手动拼提示词的成本。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye