Skip to content

[bug] 修复流式请求在 session.idle 前过早 completed #243

@liujuanjuan1984

Description

@liujuanjuan1984

背景

当前 opencode-a2a-server 在流式请求中,会在 /session/{id}/message HTTP 返回后立即结束本次 A2A 流,并取消 /event SSE 订阅。

但上游 opencode serve 的 bus event 语义里,真正可确认本轮会话处理完成的信号是 session.idle;assistant 正文相关的 message.part.updated / message.part.delta 可能晚于 /session/{id}/message 返回才到达。

这会导致服务端在 assistant 正文尚未送达时就输出 final=true completed,下游最终表现为 Content unavailable

复现步骤

  1. 启动 opencode-a2a-server,指向一个正常工作的 opencode serve
  2. 发起 message/stream 请求。
  3. 观察日志:message.updated 已创建 assistant message,但在 session.idle 到达前,A2A 已发送 completed 并取消 SSE。
  4. 下游未收到 assistant 正文 artifact。

期望行为

  • 流式请求应持续消费 /event,直到收到与目标 sessionID 对应的明确结束信号。
  • 成功完成应以 session.idle 为准。
  • 失败完成应以 session.error 为准。
  • 不应仅凭 /session/{id}/message 返回 200 就结束 A2A 流。

实际行为

  • /session/{id}/message 返回后立即发出 final=true completed
  • 紧接着取消 /event 的 SSE 读取。
  • assistant 正文事件尚未来得及到达,导致输出为空。

验收标准

  • message/stream 在成功路径上以 session.idle 作为完成信号。
  • message/stream 在失败路径上以 session.error 作为失败信号。
  • 增加回归测试,覆盖“send_message 先返回,assistant part / session.idle 后到”的场景。
  • 修复后,下游可稳定收到 assistant 正文 artifact,而不是空完成。

HEAD 快照

  • git rev-parse HEAD: 5bfa1d2e719a2986e7da3657e133b742cc5bc58d

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions