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
64
//! Transport Layer for AG-UI Events
//!
//! This module provides transport implementations for streaming AG-UI events
//! to frontend clients:
//!
//! - **SSE (Server-Sent Events)**: HTTP-based unidirectional streaming via [`sse`]
//! - **WebSocket**: Bidirectional WebSocket transport via [`ws`]
//!
//! # SSE Example
//!
//! ```rust,ignore
//! use ag_ui_server::transport::sse;
//! use syncable_ag_ui_core::{Event, RunErrorEvent};
//!
//! // Create channel pair
//! let (sender, handler) = sse::channel::<serde_json::Value>(32);
//!
//! // Send events from agent code
//! sender.send(Event::RunError(RunErrorEvent::new("error"))).await?;
//!
//! // Return handler as axum response
//! handler.into_response()
//! ```
//!
//! # WebSocket Example
//!
//! ```rust,ignore
//! use ag_ui_server::transport::ws;
//! use syncable_ag_ui_core::{Event, RunErrorEvent};
//! use axum::extract::ws::WebSocketUpgrade;
//!
//! async fn ws_endpoint(upgrade: WebSocketUpgrade) -> impl IntoResponse {
//! let (sender, handler) = ws::channel::<serde_json::Value>(32);
//!
//! tokio::spawn(async move {
//! sender.send(Event::RunError(RunErrorEvent::new("error"))).await.ok();
//! });
//!
//! handler.into_response(upgrade)
//! }
//! ```
//!
//! # Choosing Between SSE and WebSocket
//!
//! | Feature | SSE | WebSocket |
//! |---------|-----|-----------|
//! | Direction | Server → Client | Bidirectional |
//! | Auto-reconnect | Built-in (EventSource) | Manual |
//! | HTTP/2 multiplexing | Yes | No |
//! | Binary data | No (text only) | Yes |
//! | Browser connection limit | Per-domain | Per-domain |
// Re-export SSE types (default transport)
pub use ;
// Re-export WebSocket types with ws_ prefix to avoid conflicts
pub use ;