agentos_client/
json_rpc.rs1use serde::{Deserialize, Serialize};
8use serde_json::Value;
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12#[serde(untagged)]
13pub enum JsonRpcId {
14 Number(i64),
15 String(String),
16 Null,
17}
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22pub struct JsonRpcResponse {
23 pub jsonrpc: String,
24 pub id: Option<JsonRpcId>,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub result: Option<Value>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub error: Option<JsonRpcError>,
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
33pub struct JsonRpcError {
34 pub code: i64,
35 pub message: String,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub data: Option<Value>,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
42pub struct AcpTimeoutErrorData {
43 pub kind: String,
44 pub method: String,
45 pub id: Option<JsonRpcId>,
46 #[serde(rename = "timeoutMs")]
47 pub timeout_ms: f64,
48 #[serde(default, rename = "exitCode", skip_serializing_if = "Option::is_none")]
49 pub exit_code: Option<i32>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub killed: Option<bool>,
52 #[serde(
53 default,
54 rename = "transportState",
55 skip_serializing_if = "Option::is_none"
56 )]
57 pub transport_state: Option<String>,
58 #[serde(rename = "recentActivity")]
59 pub recent_activity: Vec<String>,
60}
61
62#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
70pub struct UnknownSessionErrorData {
71 pub kind: String,
72 #[serde(rename = "sessionId", skip_serializing_if = "Option::is_none", default)]
76 pub session_id: Option<String>,
77}
78
79pub fn is_unknown_session(error: &JsonRpcError) -> bool {
83 error
84 .data
85 .as_ref()
86 .and_then(|data| data.as_object())
87 .is_some_and(|data| data.get("kind").and_then(Value::as_str) == Some("unknown_session"))
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
92pub struct JsonRpcNotification {
93 pub jsonrpc: String,
94 pub method: String,
95 #[serde(default, skip_serializing_if = "Option::is_none")]
96 pub params: Option<Value>,
97}