Skip to main content

claude_codex/providers/cursor/
proto.rs

1use prost::Message;
2
3// ---------------------------------------------------------------------------
4// Agent client message (request)
5// ---------------------------------------------------------------------------
6
7#[derive(Clone, PartialEq, Message)]
8pub struct AgentClientMessage {
9    #[prost(message, optional, tag = "1")]
10    pub run_request: Option<RunRequest>,
11    #[prost(message, optional, tag = "2")]
12    pub client_heartbeat: Option<ClientHeartbeat>,
13}
14
15#[derive(Clone, PartialEq, Message)]
16pub struct RunRequest {
17    #[prost(message, optional, tag = "1")]
18    pub conversation_state: Option<ConversationState>,
19    #[prost(message, optional, tag = "2")]
20    pub action: Option<Action>,
21    #[prost(message, optional, tag = "6")]
22    pub mcp_tools: Option<McpTools>,
23    #[prost(string, tag = "7")]
24    pub conversation_id: String,
25    #[prost(message, optional, tag = "8")]
26    pub requested_model: Option<CursorModel>,
27    #[prost(bool, tag = "9")]
28    pub exclude_workspace_context: bool,
29    #[prost(message, repeated, tag = "10")]
30    pub selected_subagent_models: Vec<CursorModelRequest>,
31    #[prost(string, tag = "11")]
32    pub conversation_group_id: String,
33    #[prost(bool, tag = "12")]
34    pub client_supports_inline_images: bool,
35}
36
37#[derive(Clone, PartialEq, Message)]
38pub struct ConversationState {
39    #[prost(message, repeated, tag = "1")]
40    pub messages: Vec<ConversationMessage>,
41}
42
43#[derive(Clone, PartialEq, Message)]
44pub struct ConversationMessage {
45    #[prost(string, tag = "1")]
46    pub role: String,
47    #[prost(string, tag = "2")]
48    pub text: String,
49}
50
51#[derive(Clone, PartialEq, Message)]
52pub struct Action {
53    #[prost(message, optional, tag = "1")]
54    pub user_message_action: Option<UserMessageAction>,
55}
56
57#[derive(Clone, PartialEq, Message)]
58pub struct UserMessageAction {
59    #[prost(message, optional, tag = "1")]
60    pub user_message: Option<UserMessage>,
61}
62
63#[derive(Clone, PartialEq, Message)]
64pub struct UserMessage {
65    #[prost(string, tag = "1")]
66    pub text: String,
67    #[prost(string, tag = "2")]
68    pub message_id: String,
69    #[prost(message, optional, tag = "3")]
70    pub selected_context: Option<SelectedContext>,
71    #[prost(string, tag = "4")]
72    pub mode: String,
73}
74
75#[derive(Clone, PartialEq, Message)]
76pub struct SelectedContext {
77    #[prost(message, repeated, tag = "1")]
78    pub selected_images: Vec<SelectedImage>,
79}
80
81#[derive(Clone, PartialEq, Message)]
82pub struct McpTools {
83    #[prost(message, repeated, tag = "1")]
84    pub tools: Vec<McpTool>,
85}
86
87#[derive(Clone, PartialEq, Message)]
88pub struct McpTool {
89    #[prost(string, tag = "1")]
90    pub name: String,
91    #[prost(string, tag = "2")]
92    pub description: String,
93    #[prost(string, tag = "3")]
94    pub input_schema: String,
95}
96
97#[derive(Clone, PartialEq, Message)]
98pub struct ClientHeartbeat {}
99
100#[derive(Clone, PartialEq, Message)]
101pub struct CursorModel {
102    #[prost(string, tag = "1")]
103    pub model_id: String,
104    #[prost(message, repeated, tag = "2")]
105    pub parameters: Vec<ModelParameter>,
106}
107
108#[derive(Clone, PartialEq, Message)]
109pub struct CursorModelRequest {
110    #[prost(string, tag = "1")]
111    pub model_id: String,
112    #[prost(message, repeated, tag = "2")]
113    pub parameters: Vec<ModelParameter>,
114}
115
116#[derive(Clone, PartialEq, Message)]
117pub struct ModelParameter {
118    #[prost(string, tag = "1")]
119    pub id: String,
120    #[prost(string, tag = "2")]
121    pub value: String,
122}
123
124#[derive(Clone, PartialEq, Message)]
125pub struct SelectedImage {
126    #[prost(string, tag = "1")]
127    pub data: String,
128    #[prost(string, tag = "2")]
129    pub uuid: String,
130    #[prost(string, tag = "3")]
131    pub path: String,
132    #[prost(string, tag = "4")]
133    pub mime_type: String,
134}
135
136// ---------------------------------------------------------------------------
137// Agent server message (response)
138// ---------------------------------------------------------------------------
139
140#[derive(Clone, PartialEq, Message)]
141pub struct AgentServerMessage {
142    #[prost(message, optional, tag = "1")]
143    pub interaction_update: Option<InteractionUpdate>,
144    #[prost(message, optional, tag = "3")]
145    pub exec_server_message: Option<ExecServerMessage>,
146}
147
148#[derive(Clone, PartialEq, Message)]
149pub struct InteractionUpdate {
150    #[prost(message, optional, tag = "1")]
151    pub thinking_delta: Option<ThinkingDelta>,
152    #[prost(message, optional, tag = "2")]
153    pub text_delta: Option<TextDelta>,
154    #[prost(message, optional, tag = "3")]
155    pub turn_ended: Option<TurnEnded>,
156}
157
158#[derive(Clone, PartialEq, Message)]
159pub struct ThinkingDelta {
160    #[prost(string, tag = "1")]
161    pub text: String,
162}
163
164#[derive(Clone, PartialEq, Message)]
165pub struct TextDelta {
166    #[prost(string, tag = "1")]
167    pub text: String,
168}
169
170#[derive(Clone, PartialEq, Message)]
171pub struct TurnEnded {
172    #[prost(uint64, tag = "1")]
173    pub input_tokens: u64,
174    #[prost(uint64, tag = "2")]
175    pub output_tokens: u64,
176    #[prost(uint64, tag = "3")]
177    pub cache_read_tokens: u64,
178    #[prost(uint64, tag = "4")]
179    pub cache_write_tokens: u64,
180}
181
182#[derive(Clone, PartialEq, Message)]
183pub struct ExecServerMessage {
184    #[prost(string, optional, tag = "1")]
185    pub notes_session_id: Option<String>,
186}