dsh-agent-delegate:DeepSeek Harness 的委派治理与工作流管理

DSH 的核心理念是「一切皆插件」。在官方 ctx.subagents 的基础上加一层委派边界,解决子代理调用中常见的深度失控、角色越界和并发溢出问题。

这是什么

dsh-agent-delegate 是一个委派代理(Broker)插件,由 xingyingyuzhui 维护。它不提供控制面 UI,而是通过代码逻辑治理委派行为。它解决了以下具体问题:

  • 委派深度:按父链真实计数,防止无限嵌套。
  • 角色衰减:限制子代理的角色权限,避免权限扩散。
  • 并发预算:限制同时存在的未结束子代理数量。
  • 写入隔离:为写入型子代理分配独立的 Git worktree,避免污染主工作区。
  • 结果合入:提供 patch 机制,由父任务验收后决定是否合入。

核心能力

深度与并发控制

插件基于父链的真实调用深度进行计数。当调用 subagent 时,如果当前深度超过 policy.delegation.maxDepth,调用会被直接拒绝。

对于并发,插件默认限制最多 4 个未结束的子代理并行写入任务。如果同时存在的未结束 child 超过 delegation.maxChildren,新的委派请求也会被拒绝。

角色过滤与限制

委派时可以指定目标角色,支持以下形式:
* role
* [research] 标签
* role: reviewer 提示词

子代理的角色策略计算公式为 child = parent ∩ 角色预设。如果目标角色不在 delegation.roles 配置中,委派会被直接拒绝。例如,默认情况下 developer 角色只能委派给 research 或 reviewer。

独立工作树与 Handoff

仅写入型 child(例如配置了 files.write: all)会与后台写入任务分配独立的 Git worktree。主会话和前台 bash 继续在项目根目录工作。

创建 worktree 时,插件会将父工作区的未提交改动和非忽略未跟踪文件拷贝进去。子代理任务结束后,相对种子提交的 diff 会被写入 ~/.dsh/agent-delegate/handoffs/<id>.patch,状态标记为 pending。不会自动 merge。

父任务验收后,需要调用 delegate_handoff 命令:
* accept:对父仓库执行 git apply(必要时使用 --3way)。如果合入失败,状态会被标记为 conflicted,父树保持原样。
* reject:放弃该次委派的更改。
* list:查看所有待处理的 handoff。

Sandbox 约束

对于 research、reviewer、public 角色,或者在 sandbox.requireEnforcement: full 模式下,当 sandbox 报告 partial(部分执行)时,插件会拒绝任何文件动作,不会降级放行。

安装与启用

使用官方安装命令添加插件:

dsh plugin --profile web add github:xingyingyuzhui/dsh-agent-delegate

建议同时安装 dsh-session-permissions 与 dsh-agent-gate,装完重启 dsh web。

如果是本地开发调试,可以使用本地路径:

dsh plugin --profile web add link:/abs/path/to/dsh-agent-delegate

卸载

卸载后,插件不再创建 worktree,不再执行深度/衰减拦截,系统会回落到 DSH 原有的子代理行为(但已安装的 dsh-agent-gate 仍会生效)。

dsh plugin --profile web remove dsh-agent-delegate

技术细节

  • 版本:0.2.10
  • 引擎要求:Node.js >= 20
  • 许可证:MIT
  • 文件大小限制:handoff 默认截取 64KiB

适用场景

适合需要在 DSH 环境中严格控制子代理权限、防止无限递归调用、以及需要将子代理的修改以 patch 形式由人工审核后再合入的场景。

更多细节与源码,请参考 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

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

小夜