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
    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