Skip to content

[chore] 移除 extension URI 中的 shared/private 语义层 #484

@liujuanjuan1984

Description

@liujuanjuan1984

背景

当前 extension URI 采用如下风格:

urn:opencode-a2a:extension:shared:stream-hints:v1
urn:opencode-a2a:extension:private:session-management:v1

这里的 opencode-a2a namespace 已经表达了 URI ownership:这些 extension 都是 opencode-a2a 自己定义和维护的扩展。继续在 URI path 中加入 shared / private 会引入第二层语义,容易被误解为 auth / disclosure 层级。

实际需要表达的维度应拆开:

  • URI ownership:由 urn:opencode-a2a:* 表达。
  • contract semantic family:例如 portable metadata contract、provider-owned operational surface、machine-readable metadata。
  • disclosure/auth:由 public Agent Card、authenticated extended Agent Card、OpenAPI disclosure 和 endpoint auth 控制。

需求

评估并实施移除 extension URI 中的 shared / private 语义占位层,将 canonical URI 收敛为更扁平的形式。

建议目标形态示例:

urn:opencode-a2a:extension:session-binding:v1
urn:opencode-a2a:extension:model-selection:v1
urn:opencode-a2a:extension:stream-hints:v1
urn:opencode-a2a:extension:interactive-interrupt:v1
urn:opencode-a2a:extension:session-management:v1
urn:opencode-a2a:extension:provider-discovery:v1
urn:opencode-a2a:extension:workspace-control:v1
urn:opencode-a2a:extension:interrupt-recovery:v1
urn:opencode-a2a:extension:compatibility-profile:v1
urn:opencode-a2a:extension:wire-contract:v1

设计原则

  • 不改变 metadata.shared.* payload namespace;这里的 shared 表示跨实现可读的 metadata 区域,和 URI path 中的 shared/private 不是同一层。
  • 不把 URI path 用作 auth/disclosure 信号。
  • 若仍需要分类,应放在 registry / params / compatibility metadata 中,例如 familysemantic_scopepublic_agent_cardauthenticated_agent_cardnegotiation_mode
  • 客户端应把 URI 当作 opaque identifier,而不是从 path segment 推断安全语义。

验收标准

  • Agent Card、extended Agent Card、OpenAPI extension metadata 统一使用新的 canonical URI。
  • extension spec 文档与 contract consistency tests 更新。
  • machine-readable compatibility / wire contract 中的 extension_uris 使用新 URI。
  • 如需短期 alias,必须明确标注为 migration-only,并创建后续清理项;不建议长期保留旧 URI alias。
  • 与 downstream consumer(例如 a2a-client-hub)的适配需求通过跨仓 issue 链接跟踪。

快照

  • HEAD: 45b183ccdb48591e3f1615978f57a688f71a1133

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