Skip to content

Invariants

以下不变量适用于所有符合 agent-service-spec v1 的实现:

  1. 每个 run MUST 绑定一个 orgId 与一个资源目标。
  2. 每个 run 在任一时间点 MUST 至多有一个活动 attempt。
  3. 同一 run 内 event.sequence MUST 唯一且严格递增。
  4. 用户可见输出 MUST 可由 input + event log 重建。
  5. cancel 对终态 run MUST 为幂等 no-op。
  6. projection MUST NOT 依赖单实例内存作为唯一事实源。
  7. runtime reconnect MUST NOT 导致重复 RUN_STARTED
  8. webhook 投递 MUST 是可去重的至少一次语义。
  9. secrets MUST NOT 以明文形式写入公开读模型。
  10. stream resume MUST 能基于 cursor 恢复后续事件,而不是重新发送已确认事件。
  11. 每个 span MUST 只属于一个 trace,且根 span 满足 rootSpanId == spanId
  12. span 一旦终止 MUST NOT 再被修改或重复导出为新版本。
  13. trace metadata MUST NOT 默认泄露 secret、token 或原始凭证。
  14. 远端传入的 trace context 如被接受,导出的 span MUST 保持同一 traceId,除非显式启动新 trace。
  15. LLM 输入输出内容捕获 MUSTcontentCaptureMode 控制,并可区分 noneredactedspan_eventsexternal_blob 等落点。
  16. run.blockingInteractionId 如存在,MUST 指向同一 run 的一个 openblocking=trueInteractionRequest
  17. 一个 run MUST NOT 同时暴露多个当前阻塞 interaction,但 MAY 同时存在多个非阻塞 open interaction。
  18. interaction response 事实 MUST 先于依赖该交互结果的后续输出在事件序列中可见。
  19. 新建 run MUST 解析到确定的 resourceRevisionId,且该解析结果在 run 生命周期内不可漂移。
  20. 启用的 protocolProfiles MUST 准确声明实际能力;启用的 ProtocolBinding MUST 准确声明实际 endpoint、transport 和安全要求。
  21. 协议适配层 MUST NOT 引入与 canonical run 状态机冲突的私有终态或排序语义。
  22. A2A、ACP、AG-UI 中的审批、补充输入和鉴权语义 MUST 收敛到 canonical InteractionRequest 模型。
  23. 同一 run 的 retry attempt MUST 保持相同的 resourceRevisionIdexecutionProfileSnapshot.executionClass.runEnv,不得自动升级或降级。
  24. attempt 的 sdkCapabilitySnapshot 一旦写入事实,MUST NOT 被就地改写;同一 attempt 内 reconnect 必须沿用该 snapshot。
  25. 如 reconnect 后 runtime 不能满足既有 capability snapshot,恢复 MUST NOT 伪装为成功;实现 MUST 显式拒绝恢复,如需继续则 MUST 由 orchestrator 创建新 attempt。
  26. 每个 Session MUST 绑定且只绑定一个 runSpaceId
  27. 同一 runSpaceId 在同一时刻 MUST NOT 归属多个未终止 Session
  28. 每个 RuntimeConnection MUST 绑定到一个当前 Session;连接恢复可以更换 runtimeConnectionId,但 MUST NOT 跨 Session 劫持。
  29. 每个 Session MUST 引用一个已存在的 RunSpace
  30. RunSpace.currentSessionId 如存在,MUST 指向绑定到同一 runSpaceId 的一个未终止 Session
  31. terminatedRunSpace MUST NOT 再接收新的 Session 绑定。
  32. ReleaseChannelProtocolBinding 更新 MUST 使用版本并发控制,避免无条件覆盖已发布状态。
  33. ProtocolBinding(protocol=mcp) MUST 绑定到 mcp_server_revision,不得继续绑定到 agent_revisiontool_revision
  34. resourceType=mcp_server 的 direct run MUST 使用 McpServerRunInput 创建托管 MCP session,后续 MCP request MUST 通过 ContinueRunCommand(mode=mcp_server) 进入 canonical write path。
  35. AgentRevision.callableRefs[] 中跨组织条目 MUST 通过 CallableGrant,不得直接硬编码外部 resourceId
  36. bindingMode=inject 的 callable MUST 对应 resourceType=mcp_serverresourceType=agent | tool 的 callable MUST 使用 bindingMode=invoke
  37. 由平台级 callable 调用产生的子任务 SHOULD 暴露为子 run,并通过 RunLink 记录 delegationhandofftool_subrunmcp_session

白皮书与规范内容以仓库真源为准。