1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
5#[serde(rename_all = "camelCase")]
6pub struct WireModelSpec {
7 #[serde(rename = "providerID")]
8 pub provider_id: String,
9 #[serde(rename = "modelID")]
10 pub model_id: String,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14#[serde(rename_all = "camelCase")]
15pub struct WireSession {
16 pub id: String,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub slug: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub version: Option<String>,
21 #[serde(rename = "projectID", skip_serializing_if = "Option::is_none")]
22 pub project_id: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub directory: Option<String>,
25 #[serde(rename = "workspaceRoot", skip_serializing_if = "Option::is_none")]
26 pub workspace_root: Option<String>,
27 #[serde(
28 rename = "originWorkspaceRoot",
29 skip_serializing_if = "Option::is_none"
30 )]
31 pub origin_workspace_root: Option<String>,
32 #[serde(
33 rename = "attachedFromWorkspace",
34 skip_serializing_if = "Option::is_none"
35 )]
36 pub attached_from_workspace: Option<String>,
37 #[serde(
38 rename = "attachedToWorkspace",
39 skip_serializing_if = "Option::is_none"
40 )]
41 pub attached_to_workspace: Option<String>,
42 #[serde(rename = "attachTimestampMs", skip_serializing_if = "Option::is_none")]
43 pub attach_timestamp_ms: Option<u64>,
44 #[serde(rename = "attachReason", skip_serializing_if = "Option::is_none")]
45 pub attach_reason: Option<String>,
46 pub title: String,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub time: Option<WireSessionTime>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub model: Option<WireModelSpec>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub provider: Option<String>,
53 #[serde(default)]
54 pub messages: Vec<WireSessionMessage>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
58pub struct WireSessionTime {
59 pub created: u64,
60 pub updated: u64,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
64pub struct WireSessionMessage {
65 pub info: WireMessageInfo,
66 pub parts: Vec<Value>,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
70#[serde(rename_all = "camelCase")]
71pub struct WireMessageInfo {
72 pub id: String,
73 #[serde(rename = "sessionID")]
74 pub session_id: String,
75 pub role: String,
76 pub time: WireMessageTime,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub summary: Option<Value>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub agent: Option<String>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub model: Option<Value>,
83 #[serde(skip_serializing_if = "Option::is_none")]
84 pub deleted: Option<bool>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub reverted: Option<bool>,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
90pub struct WireMessageTime {
91 pub created: u64,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub completed: Option<u64>,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
97#[serde(rename_all = "camelCase")]
98pub struct WireMessagePart {
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub id: Option<String>,
101 #[serde(rename = "sessionID", skip_serializing_if = "Option::is_none")]
102 pub session_id: Option<String>,
103 #[serde(rename = "messageID", skip_serializing_if = "Option::is_none")]
104 pub message_id: Option<String>,
105 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
106 pub part_type: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub text: Option<String>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub tool: Option<String>,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub args: Option<Value>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub state: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub result: Option<Value>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub error: Option<String>,
119}