Skip to content

bug: SubAgentTask status/result not persisted in blocking dispatch mode #23

Description

@robscc

描述

通过 Chat 触发 dispatch_sub_agent 工具(blocking=true)派遣 SubAgent 时,工具本身可以正确返回执行结果,但对应的 SubAgentTask 记录在数据库中永远停留在 pending 状态,result、execution_log、started_at、finished_at 均为空。

复现步骤

  1. 在对话中发送消息,触发主 Agent 调用 dispatch_sub_agent 工具(blocking=true)
  2. 等待工具返回结果(主 Agent 在聊天中正常展示 SubAgent 的输出)
  3. 访问 /tasks 页面,找到该次派遣对应的任务
  4. 发现状态为"等待中"(pending),无结果、无执行日志

期望行为

任务完成后,SubAgentTask 记录应更新为:

  • status = done
  • result = <SubAgent 输出内容>
  • started_at, finished_at 有值
  • execution_log 包含完整的 LLM 对话过程

根因分析

agentpal/tools/builtin.py 的 dispatch_sub_agent 函数在 blocking=True 模式下:

  1. 创建 SubAgentTask 记录并写入 DB(status=PENDING)✅
  2. 调用 runtime.execute(task_prompt) 执行任务 ✅
  3. 工具函数返回 result.output 给主 Agent ✅
  4. 但 runtime 的内部执行路径未将最终状态(DONE/FAILED)和 result 持久化回 SubAgentTask 表 ❌

对比非阻塞模式(blocking=False)通过 /api/v1/agent/dispatch API 派遣的任务,状态更新正常。

影响

  • /tasks 页面中该任务永久显示"等待中",用户无法追溯历史
  • 服务重启时会将这些 pending 任务误标记为 failed(lifespan 清理逻辑)
  • 任务执行历史不完整,无法审计

环境

  • 发现于 SubAgent E2E 测试,通过 Chat UI 触发 dispatch_sub_agent 工具时复现
  • 使用 /api/v1/agent/dispatch API 直接派遣时不复现

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions