Skip to main content
M

dsh-wait-reply

melo7up/dsh-wait-reply

Keeps a root turn open until the child agents and current-turn background jobs it started settle, then asks for one self-contained final answer in that same turn. It observes job settlement without consuming job output, never cancels children, and does not decide task success. Verified on DSH 0.2.2-rc.1 only; on any other host version it stays inactive, logs one warning, and turns close natively. Each batch of results that arrives after a reply costs one extra model call; ordinary questions add none.

Install

dsh plugin --profile web add github:melo7up/dsh-wait-reply

README

dsh-wait-reply

让根会话在准备结束时,等子智能体和本轮后台任务结果回到同一轮;如果先写了总结又收到异步结果,再安排一次完整汇总,让“仅最终回答”保留完整结论。

已在 DSH 0.2.2-rc.1 的隔离运行时验证。官方若提供同等能力,停用或卸载本插件即可。

行为

插件做三件事:

  1. 根会话即将结束、下一步收件箱还是空的、且没有被取消时,调用宿主已有的 subagents.waitForChildren,同时观察本轮由该会话启动的后台任务,等它们结束。
  2. 子结果、后台任务通知或用户的下一步输入到达后,把控制交回原来的轮次。若仍有工作,下次准备结束时再等。不会等待其他会话、无主或更早轮次启动的后台任务,也不读取或消费任务输出;结果仍由宿主原有的通知与 job_output 交给模型。
  3. 若本轮已经输出不带工具调用的正文,之后又收到子结果或后台通知,等结果处理完后注入一条来源为 dsh-wait-reply 的内部汇总请求,附上先前回复,要求完整重述结论、改动、验证及遗留问题。每批结果只请求一次,每次增加一次模型调用;新结果再次到来才重新汇总,普通问答不增加模型调用。用户新的输入优先于旧回复的汇总。

内部汇总请求不会伪装成人类输入,也不改写原始回复。插件不取消子智能体或后台任务,不调用目标完成,也不把“能退出等待”当成业务成功。目标工具原有的权限检查保持不变。不需要改 AGENTS.md。

本轮仍在运行的后台任务会阻止收尾,包括不会自行结束的命令;模型应在收尾前处理自己启动的相关工作。插件不会替它自动杀掉任务。没有 jobs 服务的宿主仍保留子智能体等待和完整汇总功能。

waitForChildren 没有取消参数。停用时只解除插件自己的等待并卸下监听;宿主那次等待会在子工作结束后自行结束,不会因此取消子智能体。

安装

本插件是一个无依赖的本地 bundle。在不是正在使用的桌面 profile 上,可以:

dsh plugin --profile <name> add /absolute/path/to/dsh-wait-reply

正在运行的 DeepSeek Harness 桌面端独占 desktop profile,应用内应使用 设置 → 插件 从本地目录安装。完全退出应用后,才可以用上面的命令管理该 profile。

只验证过 DSH 0.2.2-rc.1。版本或 waitForChildren 接口不匹配时,插件保持未激活并写一条警告,会话回到原生收尾,不会阻止 DSH 启动。

关闭

在设置里停用插件行 dsh-wait-reply。有热重载的环境会立刻解除插件正在进行的等待、去掉监听和内部指导,之后的轮次恢复原生收尾。子智能体和后台任务不会被插件取消。

没有热重载时,插件管理器会报告需要重启。等待要到插件真正卸载才解除,不要假定所有环境都能热停用。

关闭插件不会改回“收起后显示的回复”。那是 DSH 自己的偏好,按轮次生效,不能合并已经分开的多个轮次。需要的话可手动设为“仅最终回答”;它只影响显示,不代替本插件。

卸载

在设置里移除 bundle dsh-wait-reply,或在 profile 未被正在运行的桌面端占用时:

dsh plugin --profile <name> remove dsh-wait-reply

卸载同样不取消子智能体,也不删除已有会话记录。

已验证

隔离 profile、本机原装宿主、脚本模型,没有调用付费模型,也没有改正在使用的 DSH:

  • 通过 bundle patch 由加载器启动,而不是测试代码直接调用 apply
  • 有目标、分批结束的两个子智能体:一次正常收尾,目标完成权限保留
  • 总结后处理已排队的后台结果、延迟返回的后台结果、后台任务失败:运行原装 DSH 的“仅最终回答”答案选择函数,确认最后一条同时保留审查结论、验证和环境问题
  • 普通问答不额外请求汇总;更早轮次和无主后台任务不阻止它收尾
  • 后台等待期间取消或停用:等待及时解除,后台任务不被插件取消
  • 无目标、无子智能体、等待中用户插话、子智能体失败、用户取消
  • 等待过程中停用插件:等待解除,子智能体继续运行
  • 再次启用后仍能并回同一轮
  • 停用 bundle 后恢复多次原生收尾
  • 版本不匹配的夹具 bundle 被跳过,不阻止启动
  • 接口或版本无法确认时,apply 不注册监听

2026-11-10 另在本机 DSH 桌面端、tokenhub/deepseek-flash(Max)、“仅最终回答”模式下完成合成验收:一次后台 sleep/printf,先输出审查草稿,再输出独立补充,随后插件触发完整汇总。最终折叠后同时显示 Standards、Spec、验证及新返回的问题;会话日志确认只有一个轮次、一次工具调用和一次内部汇总请求。此验收未操作真实项目数据。

未验证

以下不能当成已支持:

  • Grok 等其他真实模型和更复杂任务的桌面端到端效果。最终措辞与内容完整度仍依赖模型遵循汇总请求,插件不撤回已经流出的正文,也不修复已经结束的旧轮次
  • 审批、模型 token 上限、复杂嵌套、外部子智能体后端、应用重启后的恢复
  • 没有热重载的 profile 上,等待过程中的即时热停用

测试

node --test test/compat.test.mjs
node test/isolate.mjs --packages /path/to/node_modules/@deepseek-ai

隔离测试使用临时 DSH_HOME 和合成夹具,不读取真实会话。

Related plugins