Skip to main content

tandem_wire/
session.rs

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}