A2A 过程透出协议
机器人互访(A2A)时,把被叫端 Agent 的执行过程(工具调用、思考、流式输出)结构化带回主叫侧, 供前端在「工具调用详情」区持续追加渲染——而不是让对端 Agent 成为一个黑盒。
!!! note "状态" 定稿(2026-09-09,随 TFRS-401 D4 落定)。 归属 TFRS-401 L1 实时过程,实施见 TFRS-420(服务端)+ TFRF-142(前端)。
权威规范
| 文档 | 范围 |
|---|---|
| a2a-progress-envelope-spec.md ⭐ | 被叫端出门:信封 Schema v1、载体选型(Part.text 回退 + metadata.tfrs)、kind 枚举、向后兼容与降级、生产端改造点 |
| tool-detail-stream-spec.md ⭐ | 主叫侧进门:tool_event_stream 事件、归属键 callId、生命周期、前端渲染语义(按 seq 排序、乱序容忍) |
两份是同一条链路的两段,分开读、但必须一起实现:
被叫 Agent ──working 状态消息──▶ A2A SSE ──▶ 主叫 worker ──Socket.IO──▶ 前端详情区
[信封文档:出门] [详情流文档:进门]
新读者从这两份开始。
不变式(跨两份文档)
- 终值单源:最终回复只认
completed终态(及failed/canceled)。信封与过程流都是 best-effort 进度——可断、可丢、可被终态覆盖,前端不得据此推断结论。 - 不新增 A2A 方法或事件类型:复用中间
working更新;Socket.IO 侧新增tool_event_stream与现有chat_event快照并存,不合并、不改快照语义。 - 文本回退恒定:每个 working Part 始终携带人类可读
text,信封挂在metadata.tfrs。 未升级的主叫 / 第三方对端行为 = 现状(方案 A,见信封文档的取舍表)。
明确不覆盖
| 范围 | 原因 |
|---|---|
TFRS-401 L2(Task.history / ListTasks) |
L2 是持久化任务记录(跨进程跨会话可查);本协议是当次调用的实时过程流,不持久化 |
| TFRS-401 L3(异步调用) | 异步调用的工具节点在返回 handle 时即终态,过程流不在该节点展开 |
| TFRS-339 / TFRF-116(Trajectory 链树) | 链树是图谱(结构、可见性、LLM 形态字段);本协议是单工具节点内部的时间线追加流,是链树里一个节点「肚子里的内容」 |