Skip to content

[统一能力平台] SDK/CLI 支持 API Key、OAuth Device Flow 与 Agent Delegation #200

Description

@ax2

背景

toolkit 需要在保留 API Key 兼容性的同时,为交互式用户、无浏览器终端和 Agent 提供统一的凭证抽象。这个 parent issue 只跟踪公开客户端能力;Authorization Server、Resource Server 和计费服务的实现不属于本仓库。

2026-07-18 状态审计

Phase 0 已由 #226 / #231 完成。Phase 1 已由 #227 / #250 完成,并已基于两个受支持测试部署的公开 Device Authorization、refresh rotation 与 revoke 契约完成验证。

Phase 2 仍缺少完整、可验证的公开 token exchange / Agent Delegation 契约,包括受众绑定、scope/resource/预算收窄规则、错误结构和测试 fixtures。因此 parent issue 继续保持 blocked,不实现猜测性的 delegation 客户端。正式部署的 Device Flow 上线和发布验收属于外部服务发布动作,不影响 toolkit Phase 1 客户端实现的完成状态。

分阶段目标

Phase 0:凭证抽象,已完成(#226 / #231

  • CLI、JavaScript SDK 和 Python SDK 的请求层从统一 provider 获取凭证。
  • 现有 QVERIS_API_KEY、构造参数和配置文件优先级保持不变。
  • provider contract 支持未来按 resource/scopes 请求 token,但不伪造 OAuth endpoint。
  • 日志、异常、telemetry 和 repr 不显示完整 API Key 或 token。
  • API Key 回归和 provider contract tests 完整。

Phase 1:Device Flow 与会话生命周期,已完成(#227 / #250

  • CLI auth login/status/logout
  • Device Authorization Grant 的 pending、slow_down、denied、expired 状态机。
  • refresh rotation、并发刷新合并、revoke 和安全存储。
  • 缺 scope/resource 时给出可执行的重新授权提示。

实现依据:受支持测试部署的 discovery 已声明 Device Authorization、refresh、revoke 能力,并提供已登记的 public CLI client 和稳定错误契约。客户端对未声明该契约的部署明确失败,不猜测 endpoint 或静默降级。

Phase 2:Agent Delegation,blocked(#228

  • 用户授权换取短期、不可刷新的 Agent token。
  • scope/resource、run_id、预算以及 tool/model 限制只能收窄。
  • 默认不将 delegation token 写入磁盘。
  • 401 最多进行一次安全的凭证更新重试,业务 4xx 不重试。

开始条件:公开 token exchange/delegation 契约、受众绑定 Resource Server 和测试 fixtures 可用。

统一 Provider 方向

  • ApiKeyCredentialProvider
  • OAuthCredentialProvider(Phase 1)
  • AgentDelegationProvider(Phase 2)
  • 可选 WorkloadCredentialProvider(另行评估)

请求层只依赖类似 getCredential(resource, scopes) 的接口,不根据 API Key 前缀或 region 参数切换 endpoint,也不在 resource/audience 不匹配时静默回退到 API Key。

总体验收标准

  • API Key 行为和 endpoint 选择无回退。
  • Tool、Model、Usage 请求不各自维护认证逻辑。
  • 无浏览器终端可通过标准 Device Flow 登录。
  • refresh token 自动轮换、并发安全且可撤销。
  • Agent 只获得短期最小权限 token。
  • token/API Key 不出现在日志、异常、telemetry 或普通状态输出中。
  • README、CLI help 和最小示例与受支持部署的公开 discovery 一致。

公开关联

非目标

  • 不在本仓库实现 Authorization Server、Resource Server、模型路由或 Billing。
  • 不在公开契约就绪前硬编码 endpoint、issuer、client、resource 或错误码。

Metadata

Metadata

Assignees

No one assigned

    Labels

    architectureArchitecture design, boundary, or system structure workenhancementNew feature or requestpriority: P1High priority roadmap itemstatus: blockedWaiting for an external contract or dependency before implementation can proceed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions