为 DSH Web 增加对话任务暂停、恢复与取消能力,支持安全与强制两种暂停粒度,恢复时从暂停点继续不重做已完成工作。
- 语言
- JavaScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add dsh-task-control在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 p2coder/dsh-task-control:先查看仓库 https://github.com/p2coder/dsh-task-control 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
为 DSH Web 增加对话任务的暂停、恢复和取消三种控制能力。当 AI 正在执行一个长任务时,你可以中途暂停它(保留全部执行进度),稍后从暂停点继续,也可以立即取消当前回合。
核心能力
- 暂停任务:支持安全暂停(等待推理/工具自然完成后落地)和强制暂停(立即中断在途工具与模型输出)
- 恢复任务:从暂停点继续,不会重复执行已经完成的工作
- 取消任务:立即终止当前回合,并提示被打断的工具预期目的与潜在副作用
- 暂停粒度设置:在 Web 设置页可配置默认暂停模式与安全暂停下推理粒度(wait/stop),保存后立即生效
- 状态持久化:每个会话的暂停状态写入本地文件,重启 dsh web 也不会丢失
- 供其他插件调用:通过
taskControl服务按会话 ID 提供程序化接口 - 三种入口:输入框旁的常驻按钮、斜杠命令(
/pause/resume/cancel)、其他插件通过服务调用
技术实现
- 语言: TypeScript / JavaScript(编译产物)
- 关键依赖:
@deepseek-ai/cordis、@deepseek-ai/dsh-llm、@deepseek-ai/dsh-client-ui-primitives、react - 架构模式: Host/Client 双面插件。Host 端通过 cordis
bundle.patch注册斜杠命令、session 事件监听、taskControl服务和两个 HTTP 路由;Client 端通过package.json#dsh.client.inject注入宿主提供的 runtime/locale/ui-settings/conversation 服务,在 composer 工具栏渲染按钮、在设置页渲染粒度配置面板 - 入口文件:
lib/index.js(host)+lib/client.js(browser)+cordis.patch.yml
适用场景
适合需要在 DSH Web 中管理长时任务的场景:当 AI 正在跑一次大迁移、批量测试或多步工具调用时,你可能想暂停一下切换上下文,或者立刻取消一个方向跑偏的任务。安装后无需复杂配置,输入框旁就会出现三个常驻按钮,斜杠命令也可直接调用。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH Web | >= 0.1.0-rc.6 | 由 peerDependencies 中多个 @deepseek-ai/dsh-* 包推断 |
| React | ^18.2.0 | 客户端渲染依赖 |
| @deepseek-ai/cordis | ^4.0.1 | host 端框架 |
| Node | 未声明 | package.json 未声明 engines 字段 |
| 平台 | 跨平台 | 仅使用 Node 内置 fs / path 模块 |
安装方式
dsh plugin --profile web add github:p2coder/dsh-task-control
安装后请完整重启 dsh web 并刷新浏览器。
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 默认暂停模式 | 枚举:safe / force | 未显式指定模式的 /pause 与输入框的暂停按钮都按此模式执行;safe 等待推理/工具完成后落地,force 立即中断 | safe |
| 安全暂停的推理粒度 | 枚举:wait / stop | 当默认模式为 safe 时生效;wait 等当前推理完成后再暂停,stop 立即终止当前模型输出 | wait |
| 任务控制状态存档目录 | 路径 | 每个会话的暂停快照写入此目录,原子 tmp+rename;可通过环境变量 DSH_TASK_CONTROL_STATE_DIR 覆盖 | ~/.dsh/task-control |
配置入口在 Web 设置页「设置 → 任务控制」,也可直接调用 /task-control/settings JSON 接口修改。
常见问题
Q: 安装后是否需要重启?
A: 需要。按 README 与 patch 描述,必须完整重启 dsh web 并刷新浏览器,cordis bundle patch 和客户端注入才会生效;只刷新页面会拿到旧的 UI。
Q: 暂停和官方自带的"停止"按钮有什么区别?
A: 官方"停止"按钮直接终止当前回合,状态丢失;本插件的"暂停"会保留全部执行进度并写入本地存档,恢复时从暂停点继续,不会重做已完成的工作。
Q: 强制暂停会破坏正在执行的工具吗?
A: 会。任何在途的工具都会被立刻中断,可能产生部分副作用。恢复时插件会弹出选择菜单,让你决定重新执行、跳过该工具还是继续保持暂停。
Q: 暂停状态保存在哪里?重启会丢吗?
A: 保存在用户目录下的 ~/.dsh/task-control/,每个会话一个 JSON 文件,采用 tmp+rename 原子写,重启 dsh web 不会丢失。测试时可用环境变量 DSH_TASK_CONTROL_STATE_DIR 改路径。
Q: 其他插件可以调用任务控制吗?
A: 可以。Host 端注册了 taskControl 服务,其他插件通过 ctx.get("taskControl") 拿到后,按会话 ID 调用 pause / resume / cancel / state 四个方法。
Q: 暂停期间定时提醒会触发吗?
A: 会。dsh-schedule 到期时仍会唤醒当前会话,暂停只控制当前回合,不会拦截定时事件。
Q: 子代理会被一起暂停吗?
A: 不会。已经派发的子代理独立运行,不会随父任务一起暂停。
Q: 修改插件代码后需要做什么?
A: 需要重新加载插件并重启 dsh web。客户端每 2 秒轮询一次状态,不重启的话浏览器拿到的仍是旧版本。
上手难度
入门 — 只需一条安装命令,无强制配置;输入框旁的按钮和斜杠命令开箱可用,进阶用户再调暂停粒度。
已知问题与限制
- 强制暂停会立即中断在途工具,工具的副作用状态未知,恢复时需用户手动选择重新执行或跳过(lib/index.js:303-310, 545-572)
- 暂停状态以独立 JSON 文件存于本地而非会话日志:源码明确说明 harness 的持久化读取器只接受已知事件类型,把
task-control/*事件写入会话会导致会话重启后无法加载,因此采用外挂存储(lib/index.js:42-50) - 暂停只控制当前回合,暂停期间发送新消息会开启新回合(README.md:81)
safe wait模式下暂停发生在推理完成后、工具派发前,会记录deferredTools,恢复时需用户确认重新执行还是跳过(lib/index.js:484-526, 640-641)- 已派发的子代理不会被父任务暂停,行为独立(README.md:83)
- 浏览器端每 2 秒轮询一次
/task-control/state,状态同步有最多 2 秒延迟(lib/client.js:195-198) - 插件热卸载必须通过
ctx.effect注销/task-control路由,否则 webserver 会抛"duplicate prefix route"(lib/index.js:828-834)
English | 中文
为 DSH Web 增加任务暂停、恢复和取消能力。支持安全暂停与强制暂停,恢复时从暂停点继续,不重复已完成的工作。
安装
dsh plugin --profile web add github:p2coder/dsh-task-control
安装后请完整重启 dsh web,然后刷新浏览器页面。
快速使用
任务运行时,输入框旁会显示三个常驻按钮:
| 按钮 | 作用 | 可用状态 |
|---|---|---|
| ⏸ 暂停 | 按默认粒度暂停任务 | 运行中 |
| ▶ 恢复 | 从暂停点继续 | 已暂停 |
| ⏹ 取消 | 立即终止当前回合 | 运行中或已暂停 |
灰色按钮表示当前不可用,黑色按钮表示可点击。

暂停模式
| 模式 | 行为 | 适合场景 |
|---|---|---|
safe wait(默认) | 等待推理和工具自然完成后暂停 | 长任务、迁移、测试 |
safe stop | 工具完成后暂停;可中断当前推理 | 希望更快暂停 |
force | 立即中断推理及在途工具 | 紧急停止 |
在「设置 → 任务控制」中修改默认模式,保存后立即生效:

命令
| 命令 | 说明 |
|---|---|
/pause | 按设置中的默认模式暂停 |
/pause force | 强制暂停 |
/pause safe wait | 安全暂停,不中断推理 |
/pause safe stop | 安全暂停,可中断推理 |
/resume | 恢复任务 |
/resume confirm rerun | 重新执行被中断或未派发的工具后恢复 |
/resume confirm skip | 跳过该工具后恢复 |
/cancel | 取消当前回合 |

供其他插件调用
通过 ctx.get("taskControl") 获取服务:
| API | 作用 |
|---|---|
pause(sessionId, options?) | 暂停任务 |
resume(sessionId, options?) | 恢复任务 |
cancel(sessionId) | 取消任务 |
state(sessionId) | 查询 idle、running 或 offline 状态及暂停信息 |
暂停状态保存在 ~/.dsh/task-control/,重启后不会丢失。测试时可用 DSH_TASK_CONTROL_STATE_DIR 修改存储目录。
注意事项
| 情况 | 说明 |
|---|---|
| 强制暂停 | 工具可能已产生部分副作用;恢复前可选择重新执行、跳过或保持暂停 |
safe wait 的未派发工具 | 恢复时需要选择重新执行或跳过 |
| 暂停期间发送新消息 | 会开启新回合;暂停只控制当前回合 |
| 定时提醒 | dsh-schedule 到期后仍会唤醒 |
| 子代理 | 已派发的子代理不会被父任务暂停 |
| 状态同步 | 浏览器每 2 秒轮询一次,修改插件后需重启 dsh web |
测试
node test/host-smoke.mjs
查看使用指南 →
该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。
收录徽章
[](https://deepseek-plugin.org/plugins/p2coder/dsh-task-control)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。