Skip to content

[bug] 修复上游 in-band error 被误报为 completed #242

@liujuanjuan1984

Description

@liujuanjuan1984

背景

当前 opencode-a2a-server 在流式请求里,如果上游 opencode serve 通过 session.error 事件或最终 /session/{id}/message 响应中的 info.error 返回业务失败,服务端仍可能输出 final=truestatus.state=completed 的 A2A 状态事件。

这会把真实的上游错误伪装成“成功完成但没有正文”,下游通常只会显示 Content unavailable,无法看到实际失败原因。

复现步骤

  1. 启动 opencode-a2a-server,指向一个可返回上游业务错误的 opencode serve
  2. 发起 message/stream 请求。
  3. 让上游在流中产生 session.error,或让最终 /session/{id}/message 返回 info.error
  4. 观察 A2A 输出事件。

期望行为

  • 当上游出现 session.error 或最终 info.error 时,A2A 任务应进入失败态,而不是 completed
  • 下游应能看到可读的错误摘要,而不是空内容完成。
  • 如果上游已经失败,不应再输出误导性的成功完成事件。

实际行为

  • A2A 输出 working 后直接输出 final=truecompleted 状态。
  • 输出中没有正文 artifact。
  • usage 通常为全 0。
  • 下游最终显示 Content unavailable,掩盖了上游真实错误。

验收标准

  • session.error 能被记录并影响最终状态决策。
  • /session/{id}/message 返回 info.error 时,服务端输出失败态而不是成功完成态。
  • 失败输出包含简明的上游错误摘要。
  • 补充覆盖 session.error 和最终 info.error 的回归测试。

HEAD 快照

  • git rev-parse HEAD: aa72fd297029ab53c6b4c7ec010dded3c4b4c938

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