前言¶
在 DSH 里跑长任务时,模型有时会正常结束一轮对话(turn/end 为 completed),但手头工作并未做完:测试没跑完、文件没改全、结论只写到一半。人工盯着界面反复点「继续」既费时间,也容易在限流或工具报错时误判「已经结束了」。
社区里早有自动续跑类插件;dsh-until-done(Until Done)在 KunKun24 维护的分支里,把「何时算完成」改成可配置的结尾暗号,并把工具失败、429、5xx 等情形拆成不同的续跑文案。下面介绍它做什么、怎么装、以及决策逻辑与注意点。
这是什么¶
Until Done 是面向 web profile 的 DSH 工作流插件,仓库为 KunKun24/dsh-until-done,社区目录页见 SkillHub 条目。插件从 HsiangNianian/dsh-auto-continue fork 而来,保留恢复、离线暂停与循环上限等能力,重做了完成判定与失败分类,并使用独立命名空间,可与上游插件并行安装而不冲突。
一句话:模型正常结束但任务未完成时自动发送 continue;只有助手回复在语义上「以完成暗号收尾」,才视为真正完成。
核心功能¶
完成暗号(默认「完成」)¶
开启 Require completion keyword(默认 on)后,turn/end = completed 不再一律停机。助手最后一段文本若未以暗号结尾,插件会续跑;只有以暗号结尾才停止。暗号可配置,且只认尾部:例如「完成之前还要跑测试」不会算作完成。
判定「最后助手文本」时会跳过带 tool call 的消息(不算最终答复),并容忍末尾标点、引号、星号与不可见格式字符。
首轮即告知模型¶
Put the rule in the system prompt(默认 on)会在 system prompt(顺序 900,interpolate: false)注入规则,让模型从第一轮就知道要以暗号收尾,而不是靠第一次 auto-continue 后才学会。规则正文可编辑,其中的 {keyword} 会替换为当前暗号。
更细的失败续跑¶
相对上游,插件为不同失败类型使用不同 continue 文案:
- 工具失败:可带
{tool}/{result},要求先诊断再重试,而不是把失败当完成。 - 429 限流:支持
{status}/{code}。 - 5xx 上游错误:支持
{code}/{status}。
重试策略(延迟、连续上限、退避、离线暂停、分类)、启动恢复、循环守卫、状态桥接与浏览器通知等与 fork 前保持一致。
可选「仅真有活才续」¶
Only continue turns with real work(默认 off)打开后,纯闲聊轮次(本轮无 tool call、无 active goal)不再自动续跑,避免对「hi」一类输入反复 continue。
自主循环(Autonomous loop)¶
Autonomous loop(默认 off)打开后,每一轮正常结束的 turn 都会续跑,直到出现完成暗号。关闭时行为更接近 legacy:仅在可见输出等条件下清理预算。决策流程见 README 中的示意:
turn/end(completed)
└─ autonomous loop on?
├─ no → legacy behaviour (budget cleared only on visible output)
└─ yes → does the last assistant text end with the keyword?
├─ yes → task complete: reset loop counters, stop
└─ no → (real-work-only && no tool this turn && no active goal)
├─ yes → plain chat, stop
└─ no → send the continuation
安装与启用¶
README 推荐的安装方式是从 release 压缩包添加(示例版本为 v1.0.0);本地开发可用 link。安装后需重启 DSH,再在界面左下角 More settings → Plugins → Until Done 中配置。
# from the release tarball (recommended)
dsh plugin --profile web add https://github.com/KunKun24/dsh-until-done/releases/download/v1.0.0/dsh-until-done-1.0.0.tgz
# or from a local checkout while developing
dsh plugin --profile web add link:/path/to/dsh-until-done
仓库 package.json 中当前开发版本号为 1.2.0;若你使用较新的 release,请以 GitHub Releases 页提供的 dsh plugin ... add 地址为准,不要自行拼仓库名安装。
主要配置项¶
在 Until Done 设置卡片中,常用项如下(默认值以 README 为准):
| 配置项 | 默认 | 含义 |
|---|---|---|
| Require completion keyword | on | 无暗号结尾的回复视为未完成并续跑 |
| Completion keyword | 完成 |
宜选正常行文里少见的词 |
| Put the rule in the system prompt | on | 首轮注入完成规则 |
| Completion rule text | 内置 | {keyword} 会被替换 |
| Only continue turns with real work | off | 纯闲聊不再自动续跑 |
| Continue text (tool failure) | 内置 | 支持 {tool} / {result} |
| Continue text (rate limit) | 内置 | 支持 {status} / {code} |
| Continue text (upstream error) | 内置 | 支持 {code} / {status} |
| Autonomous loop | off | 每轮正常结束都续跑直至出现暗号 |
典型用法无需额外 CLI:开启插件后,在对话中给模型一个需要多步才能做完的任务,并在规则或说明里要求其在全部做完后以你配置的暗号(默认「完成」)结束最后一条助手消息。若开启 system prompt 规则,模型从第一轮即被约束;若任务中途遇到工具错误或限流,插件会按对应模板自动 continue。
开发构建(仅供贡献者):
npm install
npm run build # esbuild + tsc → lib/
npm test # includes tests/smart-completion.mjs
npm run typecheck
适用场景与注意¶
适合在 DSH web 环境下做代码修改、多文件重构、长链路调试等「一轮说不完」的智能体任务,又希望用明确信号收尾、减少误停。
请注意:
- 插件在当前 DSH 进程权限下运行,安装前请阅读源码与 MIT 许可证(原创部分 Copyright (c) 2025 HsiangNianian,修改部分 Copyright (c) 2026 KunKun)。
- DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区插件而非官方应用商店条目。
- 暗号只匹配回复尾部;若模型习惯在结尾写总结而不写暗号,会触发续跑直到格式正确,或需在规则文案里写清楚格式要求。
- Autonomous loop 与「仅真有活才续」的组合会显著改变停机条件,开启前建议在低风险任务上先试一轮。
结尾¶
Until Done 把「模型停下来了」和「任务做完了」拆开:用可配置的完成暗号作硬条件,并区分工具失败、限流与上游错误,适合需要少盯屏、又怕误停的长任务工作流。