前言¶
在 DeepSeek Harness(DSH)里跑长任务时,会话可能因为 aborted、error、interrupted 等原因停在中途。此时输入框仍是空的,主按钮却仍是「发送」或处于不可用状态,想接着跑往往要多点几步或自己组织续跑话术。桌面内置 UI 里已有 composer 续跑逻辑;社区维护者 yy1588133 把同类能力抽成独立客户端插件,装到 profile 里即可在 Web 会话界面复用同一套判断与文案。
下面介绍插件定位、按钮行为、安装方式,以及客户端与宿主各负责什么。
这是什么¶
dsh-continue-button 是 DSH 的客户端插件:当上一轮在可续跑状态下结束且输入框为空时,Composer 主按钮显示为「继续任务」(▶),点一下由宿主向会话投递 continue 消息并续跑;输入框里只要有文字,主按钮始终是「发送」,不受上一轮结束方式影响。
维护者:yy1588133。分类:客户端。实现上对照 dsh-tauri/deepseek-harness-desktop 里 packages/builtin-plugin-ui/src/client/register/composer-resume.ts 的判断规则、图标与文案,README 写明未自行发挥。许可证:MIT(见仓库 README)。
核心功能¶
主按钮与输入框的组合规则¶
插件按「输入框是否为空(靠占位符判断)」和「上一轮 / 当前运行状态」决定主按钮样式与是否可点:
| 输入框 | 上一轮怎么结束的 | 主按钮 |
|---|---|---|
| 空 | aborted / error / interrupted |
▶「继续任务」,可点,点一下接着跑 |
| 空 | completed / blocked / max-tokens |
↑ 发送(灰的,正常情况) |
| 空 | 正在跑 | ■ 停止 |
| 有内容 | 随便 | ↑ 发送 |
「有内容就显示发送」不是单独特判:空输入框才有占位符,用户一开始打字占位符消失,图标自然换回发送。
续跑时宿主投递的内容¶
续接时发送的 followup 与原版一致,例如:
Continue the interrupted task from where it stopped. Do not repeat work that is already complete.
消息 source.kind 为 continue,在聊天记录里表现为上下文行,而不是用户手动输入的一句话。
双端分工¶
-
lib/client.js(浏览器)
不重画 React 输入框,只改主按钮的d/aria-label/title/disabled/ svg 尺寸;改前备份 React 原值,条件不满足时原样恢复。点击在 capture 阶段拦截,避免空内容被 React 当提交处理。 -
lib/index.js(宿主)
浏览器无法直接向会话 Inbox 写消息,由宿主提供 API(挂在 Connection 的/api鉴权后):
-GET /api/continue-button/state?sessionId=…— 当前会话是否可继续
-POST /api/continue-button/resume— 执行续跑(followup continue 消息)
安装与启用¶
从 GitHub 安装,无需发布到 npm。将 <你的 profile> 换成实际 profile 名:
dsh plugin --profile <你的 profile> add yy1588133/dsh-continue-button
也可写完整地址:
dsh plugin --profile <你的 profile> add github:yy1588133/dsh-continue-button
装完后重启 DSH 桌面端。插件行会自动进入 dsh.profile.bundles,不必手工改 bundle 配置。
更新(同版本重复 add 会报 already-installed,可先删再装):
dsh plugin --profile <你的 profile> remove dsh-continue-button
dsh plugin --profile <你的 profile> add yy1588133/dsh-continue-button
包为纯 JavaScript,无构建步骤;README 说明 pnpm 10.26 起默认阻止 git 依赖执行 prepare 脚本,此类纯 JS 包装完即可运行。
环境要求(package.json):engines.dsh 为 >=0.2.1-rc.1。
本地改源码并希望立刻生效时,可用 file: 指向目录绝对路径:
dsh plugin --profile <你的 profile> add file:<这个目录的绝对路径>
典型用法¶
- 在 profile 中按上文命令安装插件并重启桌面端。
- 打开一条会话,让任务在中断类结束状态下停住,且 Composer 输入框保持为空。
- 确认主按钮为 ▶「继续任务」且可点击,点一次即可续跑。
- 若在输入框输入任意内容,主按钮应恢复为 ↑ 发送;清空后再次按上表规则显示。
仓库内测试可运行:
node --test
README 说明宿主侧 13 条、客户端 11 条用例,覆盖多种 turn 结束类型、运行中、HTTP 错误码及英文界面等。
适用场景与注意¶
适合:经常在 DSH 桌面/Web 会话里跑 agent,希望在中断后少操作、直接续跑,且希望行为与官方 desktop 内置 composer-resume 一致的用户。
注意:
- 插件在 当前 DSH 进程权限 下运行;安装前建议阅读 GitHub 仓库 源码与 MIT 许可证。
- 社区目录 skillhub.cn 插件页 与 GitHub 为独立生态入口,与 DeepSeek / 幻方无官方从属关系;以仓库 README 与
package.json为准。
结尾¶
dsh-continue-button 把「中断后可继续、有字则发送」的 Composer 行为做成可安装的客户端插件,宿主 API 负责鉴权与投递 continue 消息,浏览器脚本只改按钮与拦截点击。需要安装命令与行为表时,可直接查仓库 README。
- 目录页:https://www.skillhub.cn/plugins/yy1588133/dsh-continue-button
- GitHub:https://github.com/yy1588133/dsh-continue-button