ai_agent/bridge/
repl_bridge_handle.rs1use crate::session_history::SDKMessage;
6
7pub trait ReplBridgeHandle: Send + Sync {
10 fn bridge_session_id(&self) -> &str;
12
13 fn environment_id(&self) -> &str;
15
16 fn session_ingress_url(&self) -> &str;
18
19 fn write_messages(&self, messages: Vec<SDKMessage>);
21
22 fn write_sdk_messages(&self, messages: Vec<SDKMessage>);
24
25 fn send_control_request(&self, request: crate::bridge::BridgeControlRequest);
27
28 fn send_control_response(&self, response: crate::bridge::BridgeControlResponse);
30
31 fn send_control_cancel_request(&self, request_id: &str);
33
34 fn send_result(&self);
36
37 async fn teardown(&self);
39}
40
41#[derive(Debug, Clone, PartialEq)]
43pub enum BridgeState {
44 Ready,
45 Connected,
46 Reconnecting,
47 Failed,
48}
49
50impl std::fmt::Display for BridgeState {
51 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
52 match self {
53 BridgeState::Ready => write!(f, "ready"),
54 BridgeState::Connected => write!(f, "connected"),
55 BridgeState::Reconnecting => write!(f, "reconnecting"),
56 BridgeState::Failed => write!(f, "failed"),
57 }
58 }
59}
60
61#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
63#[serde(tag = "type", rename_all = "snake_case")]
64pub enum BridgeControlRequest {
65 #[serde(rename = "control_request")]
67 ToolUse {
68 request_id: String,
69 request: ToolUseRequest,
70 },
71 #[serde(rename = "control_request")]
73 TurnStart {
74 request_id: String,
75 request: TurnStartRequest,
76 },
77}
78
79#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
81pub struct ToolUseRequest {
82 pub name: String,
83 pub input: serde_json::Value,
84}
85
86#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
88pub struct TurnStartRequest {
89 pub turn_id: String,
90}
91
92#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
94#[serde(tag = "type", rename_all = "snake_case")]
95pub enum BridgeControlResponse {
96 #[serde(rename = "control_response")]
98 ToolUse {
99 request_id: String,
100 response: ToolUseResponse,
101 },
102 #[serde(rename = "control_response")]
104 TurnEnd {
105 request_id: String,
106 response: TurnEndResponse,
107 },
108}
109
110#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
112pub struct ToolUseResponse {
113 pub content: Vec<serde_json::Value>,
114}
115
116#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
118pub struct TurnEndResponse {
119 #[serde(default)]
121 pub model: Option<String>,
122 #[serde(default)]
124 pub tokens: Option<u32>,
125}
126
127#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
129#[serde(rename_all = "lowercase")]
130pub enum SessionState {
131 Idle,
132 Running,
133 RequiresAction,
134}