dsh-continue-button:会话中断后一键「继续」

前言

在 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,在聊天记录里表现为上下文行,而不是用户手动输入的一句话。

双端分工

  1. lib/client.js(浏览器)
    不重画 React 输入框,只改主按钮的 d / aria-label / title / disabled / svg 尺寸;改前备份 React 原值,条件不满足时原样恢复。点击在 capture 阶段拦截,避免空内容被 React 当提交处理。

  2. 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:<这个目录的绝对路径>

典型用法

  1. 在 profile 中按上文命令安装插件并重启桌面端。
  2. 打开一条会话,让任务在中断类结束状态下停住,且 Composer 输入框保持为空。
  3. 确认主按钮为 ▶「继续任务」且可点击,点一次即可续跑。
  4. 若在输入框输入任意内容,主按钮应恢复为 ↑ 发送;清空后再次按上表规则显示。

仓库内测试可运行:

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
羽毛球分组比赛记分
小程序二维码

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

小夜