READMESource: main@abaa1f64
同步委派(DSH 插件)
给 agent 补上一个「派活并等结果」的工具(delegate_sync)。它解决的是这样一类事故:主 agent 派了子代理去复审,但内置的 subagent 工具只是登记任务、立刻返回,拿结果的唯一方式是结束本轮等完成通知;当交付门禁要求「复审完成才算交付」时,模型没有可等待的动作,只能反复查 list_agents,而这个列表不带耗时——于是它按感觉估时间,把 2 分钟当成 20 分钟,最后把还在干活的子代理打断。
安装
需要先有 DeepSeek Harness(DSH)。
在 DSH 的插件安装界面里填这份仓库的地址:
github:tf961656585/dsh-plugin-sync-delegate
也可以填这份仓库在本机的绝对路径。装完重启 DSH,工具列表里就会出现 delegate_sync;它没有侧栏入口。
用起来是什么样
模型调用 delegate_sync,传入一份自包含的任务说明:
- 子代理正常完成:工具返回子代理的最终文本,主 agent 在同一个回合里拿到结果继续干活。
- 等超时:返回「还在跑」,不取消子代理。子代理继续干,干完后结果以一条跟进消息送到主 agent,自动开新一轮;不会凭空丢结果,也不鼓励重复派同一件事。
- 用户中断本轮:工具调用被取消,子代理被停止(避免留下没人收的结果)。
参数
| 参数 | 必填 | 含义 |
|---|---|---|
prompt |
是 | 完整、自包含的任务说明。子代理看不到当前对话。 |
label |
否 | 列表里显示的短标签,默认取任务第一行。 |
timeout_ms |
否 | 等待上限,默认 180000(3 分钟),范围 5000–600000。 |
配置(可选)
可以在 cordis.patch.yml 的这一行加 config:
- insert:
- id: sync-delegate
name: dsh-plugin-sync-delegate
config:
timeoutMs: 180000
maxTimeoutMs: 600000
maxOutputChars: 20000
toolName: delegate_sync
provider: spawn
不写就用上面的默认值。
实现要点
- 走
ctx.subagents.startActivation({ delivery: 'caller' }):这个投递模式本来就是给「调用方等待结果」的工作流用的,不会额外发父级完成通知,所以不会和内置通知重复。 - 子代理继承父级模型设置、当前目录、委派深度上限;不额外提供模型/preset 选择,保持入口最小。
- 超时后用
followup把结果写回父会话;父级空闲会直接唤醒,繁忙则排队到下一轮。 - 子代理的结果在超时后仍会
dispose,不会常驻占用名额。
边界
- 本插件只提供工具契约(什么时候选它、超时怎么处理);「需要结果的门禁用同步委派、不得凭自估耗时打断」这类协作原则写在
master-subagentskill 里,插件不重复承载。 - 只支持进程内
spawn后端(换后端可改provider,但外部后端是否支持delivery: caller未验证)。 - 不支持给子代理指定模型/preset。
- 应用重启会丢失超时后待送达的那次结果(activation 不跨进程);子代理会话本身仍在,可用
send_message续跑。 - 阻塞期间该轮次不结束;这是「同步」的本意,超时上限因此默认 3 分钟、最高 10 分钟。
验证
- 安装后可用
cordis_inspect_query的Tool.listTools看到delegate_sync。 - 用一条小任务实测:正常返回、超时返回「还在跑」、随后收到跟进结果。
协议
MIT,见 LICENSE。
No comments yet. Be the first to write one.