前言¶
在 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 声明发现。
典型用法¶
- 安装并启用插件,满足宿主
^0.2.1-rc.5。 - 正常用 DSH 跑 Agent;若某轮未正常结束且当前没有在跑,输入框上方会出现提示条。
- 需要接续时点「继续」,输入框会收到附带任务清单(若开关开启)的接续指令并提交;若只是误报或暂不需要,可点「忽略」。
- 若不想在「自己按停止」时也看到提示,在插件详情页关闭「提示手动停止的会话」。
诊断「某会话为何显示或不显示继续」时,可在插件仓库 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 仓库。