1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//! A2A (Agent-to-Agent) 协议支持
//!
//! 实现 Google A2A 协议规范,支持:
//! - **Agent Card** 发布:描述 Agent 的能力、技能和端点
//! - **Agent 发现**:通过 `/.well-known/agent.json` 发现远程 Agent
//! - **任务交互**:跨框架 Agent 间的任务发送与状态查询
//! - **任务状态机**:`submitted → working → [input-required] → completed / failed`
//! - **流式事件**:通过 `tasks/sendSubscribe` 接收实时 SSE 事件流
//!
//! # 状态机
//!
//! ```text
//! submitted → working → completed
//! → failed
//! → input-required ⇄ working
//!
//! 任何非终态 → canceled
//! ```
//!
//! # 核心类型
//!
//! | 类型 | 说明 |
//! |------|------|
//! | [`AgentCard`] | Agent 能力描述卡片 |
//! | [`A2AServer`] | 服务端,暴露 Agent Card 和任务接口 |
//! | [`A2AClient`] | 客户端,发现和调用远程 Agent |
//! | [`TaskState`] | 任务生命周期状态枚举 |
//! | [`A2AStreamEvent`] | 流式事件(状态变更 / Artifact 更新)|
//!
//! # 示例
//!
//! ```rust,no_run
//! use echo_agent::a2a::{AgentCard, AgentSkill, A2AServer, TaskState};
//! use echo_agent::prelude::*;
//!
//! # #[tokio::main]
//! # async fn main() -> echo_agent::error::Result<()> {
//! let card = AgentCard::builder("translator", "http://localhost:8080")
//! .description("多语言翻译 Agent")
//! .version("1.0.0")
//! .skill(AgentSkill::new("translate", "翻译文本"))
//! .streaming()
//! .build();
//!
//! let agent = ReactAgentBuilder::simple("qwen3-max", "翻译助手")?;
//! let server = A2AServer::new(card, agent);
//! // server.handle_request(...) for sync
//! // server.handle_request_stream(...) for SSE streaming
//! # Ok(())
//! # }
//! ```
pub use ;
pub use A2AClient;
pub use ;
pub use A2AServer;
pub use *;