Skip to content

[chore] 跟踪 JSON-RPC 通用 upstream error type 的跨仓收敛遗留 #301

@liujuanjuan1984

Description

@liujuanjuan1984

背景

当前仓库在 JSON-RPC session query / provider discovery / session control / interrupt callback 错误出口中,仍保留以下通用错误类型:

  • UPSTREAM_HTTP_ERROR
  • UPSTREAM_UNREACHABLE
  • UPSTREAM_PAYLOAD_ERROR

#274 的本轮实现中,已确认这不是纯内部历史残留,而是仍被外部下游消费。

已核对的外部消费点(位于 ~/a2a-client-hub):

  • docs/contracts/shared-session-query-reference-payloads.json
  • backend/tests/extensions/test_session_query_extension_discovery.py
  • backend/tests/extensions/test_opencode_provider_discovery.py

现状

本仓内部已经具备更细粒度的共享 upstream taxonomy,但为了保持现有 JSON-RPC 契约兼容性,对外仍返回上述通用类型,而没有直接暴露更细的 canonical profile(如 401/403/429 对应的细粒度分类)。

问题

这会带来一个明确的收敛遗留:

  • 内部错误分类已经细化;
  • 对外 JSON-RPC 契约仍维持较粗粒度 business type;
  • 跨仓文档与测试也仍依赖旧值。

如果未来要移除上述三个通用类型,不能只改本仓,需要同步调整下游消费与契约说明。

复现 / 证据

  1. 在当前仓库检索:
    • rg -n "UPSTREAM_HTTP_ERROR|UPSTREAM_UNREACHABLE|UPSTREAM_PAYLOAD_ERROR" src/opencode_a2a tests
  2. ~/a2a-client-hub 检索:
    • rg -n "UPSTREAM_HTTP_ERROR|UPSTREAM_UNREACHABLE|UPSTREAM_PAYLOAD_ERROR" /home/juanjuan/a2a-client-hub
  3. 可见 a2a-client-hub 的文档与测试仍显式引用这些类型。

期望行为

定义并执行一套跨仓收敛方案:

  • 先更新 a2a-client-hub 的消费逻辑、文档契约和测试;
  • 再回到本仓移除或替换这三个通用 JSON-RPC error type;
  • 最终让 JSON-RPC 对外契约也直接复用更一致的 canonical upstream taxonomy。

实际行为

当前只能在本仓内部共享 taxonomy,外部 JSON-RPC error type 仍保留旧兼容值。

建议实施步骤

  1. 盘点 a2a-client-hub 中所有对这三个 error type 的直接判断、文档样例和测试断言。
  2. 设计新的跨仓对外 error contract:
    • 是直接暴露 canonical type,还是新增更细字段并逐步迁移。
  3. 先在 a2a-client-hub 完成消费侧兼容与文档更新。
  4. 再在本仓移除这三个通用 type 或将其降级为兼容层。
  5. 最后同步更新 agent card / extension contract 文档与回归测试。

验收标准

  • a2a-client-hub 不再依赖 UPSTREAM_HTTP_ERROR / UPSTREAM_UNREACHABLE / UPSTREAM_PAYLOAD_ERROR 作为唯一对外契约值。
  • 本仓 JSON-RPC error 输出与内部共享 taxonomy 对齐。
  • 两个仓库的测试与文档同步更新,无遗留旧契约断言。

快照

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions