What happened?
阻塞式 subagent 链式模式下,所有步骤都会执行,且每一步的完整记录都保存在 details.results 中;但工具实际返回给父模型的 content 只有第一步的输出。因此父模型看不到最后一步的产物,也无法得知链路最终如何结束。
后续步骤失败或中止时也有类似问题:返回的 content 仍可能只有第一步的成功结果,失败信息只存在于 details。由于发给父模型的工具正文不包含 details,父模型可能误以为链路已经成功完成。尚未启动的步骤也可能仍被标记为 running。
这是结果回传问题,与子任务指令或步骤间摘要导致的内容失真无关。{previous} 可以正常传给后续步骤。
Steps to reproduce
使用确定性 runner 执行一个阻塞式三步链,例如:
{
"chain": [
{ "agent": "explore", "task": "返回 STEP_1_SOURCE" },
{ "agent": "explore", "task": "将 {previous} 总结为 STEP_2_SUMMARY" },
{ "agent": "general", "task": "基于 {previous} 返回 STEP_3_FINAL" }
]
}
- 让三步分别返回
STEP_1_SOURCE、STEP_2_SUMMARY 和 STEP_3_FINAL,并均以成功状态结束。
- 检查最终工具响应和
details.results。三条记录均为已完成,且 {previous} 正确传递;但工具 content 只有 STEP_1_SOURCE。
- 再次运行,将第二步设为非零退出状态,并返回一条明确的错误信息。
- 此时第三步不会启动,工具
content 仍不包含失败信息,步骤状态可能是 completed / failed / running。
可用 parallel 模式作为对照:其返回内容会包含所有任务的输出。
Expected behavior
- 成功时返回最后一个已完成步骤的输出,并附上简洁的逐步状态摘要。不要把所有子代理的完整输出都拼进父模型上下文;链中每一步都可能产生很长的内容。
- 失败或中止时,在工具
content 中包含失败或中止步骤及其错误,使父模型能明确知道链路未完成。
- 尚未启动的步骤应标记为
skipped 等明确的非运行状态,而不是继续显示为 running。
- 为成功链路、后续步骤失败或中止、未启动步骤,以及 single 和 parallel 模式行为不变添加回归测试。
Version
0.84.4
What happened?
阻塞式
subagent链式模式下,所有步骤都会执行,且每一步的完整记录都保存在details.results中;但工具实际返回给父模型的content只有第一步的输出。因此父模型看不到最后一步的产物,也无法得知链路最终如何结束。后续步骤失败或中止时也有类似问题:返回的
content仍可能只有第一步的成功结果,失败信息只存在于details。由于发给父模型的工具正文不包含details,父模型可能误以为链路已经成功完成。尚未启动的步骤也可能仍被标记为running。这是结果回传问题,与子任务指令或步骤间摘要导致的内容失真无关。
{previous}可以正常传给后续步骤。Steps to reproduce
使用确定性 runner 执行一个阻塞式三步链,例如:
{ "chain": [ { "agent": "explore", "task": "返回 STEP_1_SOURCE" }, { "agent": "explore", "task": "将 {previous} 总结为 STEP_2_SUMMARY" }, { "agent": "general", "task": "基于 {previous} 返回 STEP_3_FINAL" } ] }STEP_1_SOURCE、STEP_2_SUMMARY和STEP_3_FINAL,并均以成功状态结束。details.results。三条记录均为已完成,且{previous}正确传递;但工具content只有STEP_1_SOURCE。content仍不包含失败信息,步骤状态可能是completed / failed / running。可用 parallel 模式作为对照:其返回内容会包含所有任务的输出。
Expected behavior
content中包含失败或中止步骤及其错误,使父模型能明确知道链路未完成。skipped等明确的非运行状态,而不是继续显示为running。Version
0.84.4