1use serde::{Deserialize, Serialize};
2
3use super::content::UserInput;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
11pub struct InitializeParams {
12 pub protocol_version: String,
14 #[serde(skip_serializing_if = "Option::is_none")]
16 pub client: Option<ClientInfo>,
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub external_tools: Option<Vec<ExternalTool>>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub capabilities: Option<ClientCapabilities>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub hooks: Option<Vec<WireHookSubscription>>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
30pub struct ClientInfo {
31 pub name: String,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub version: Option<String>,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
40pub struct ClientCapabilities {
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub supports_question: Option<bool>,
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub supports_plan_mode: Option<bool>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
51pub struct WireHookSubscription {
52 pub id: String,
54 pub event: String,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub matcher: Option<String>,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub timeout: Option<u32>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
66pub struct ExternalTool {
67 pub name: String,
69 pub description: String,
71 pub parameters: serde_json::Value,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
77pub struct InitializeResult {
78 pub protocol_version: String,
80 pub server: ServerInfo,
82 pub slash_commands: Vec<SlashCommandInfo>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub external_tools: Option<ExternalToolsResult>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub capabilities: Option<ServerCapabilities>,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub hooks: Option<HooksInfo>,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
97pub struct ServerInfo {
98 pub name: String,
100 pub version: String,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
106pub struct SlashCommandInfo {
107 pub name: String,
109 pub description: String,
111 pub aliases: Vec<String>,
113}
114
115#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
117pub struct ExternalToolsResult {
118 pub accepted: Vec<String>,
120 pub rejected: Vec<RejectedExternalTool>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
126pub struct RejectedExternalTool {
127 pub name: String,
129 pub reason: String,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
135pub struct ServerCapabilities {
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub supports_question: Option<bool>,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
143pub struct HooksInfo {
144 pub supported_events: Vec<String>,
146 pub configured: std::collections::HashMap<String, u32>,
148}
149
150#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
156pub struct PromptParams {
157 pub user_input: UserInput,
159}
160
161#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
163pub struct PromptResult {
164 pub status: PromptStatus,
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub steps: Option<u64>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
173#[serde(rename_all = "snake_case")]
174pub enum PromptStatus {
175 Finished,
177 Cancelled,
179 MaxStepsReached,
181 Pending,
183 UnexpectedEof,
185}
186
187#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
193pub struct ReplayParams {}
194
195#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
197pub struct ReplayResult {
198 pub status: ReplayStatus,
200 pub events: u64,
202 pub requests: u64,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
208#[serde(rename_all = "snake_case")]
209pub enum ReplayStatus {
210 Finished,
212 Cancelled,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
222pub struct SteerParams {
223 pub user_input: UserInput,
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
229pub struct SteerResult {
230 pub status: SteerStatus,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
236#[serde(rename_all = "snake_case")]
237pub enum SteerStatus {
238 Steered,
240}
241
242#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
248pub struct SetPlanModeParams {
249 pub enabled: bool,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
255pub struct SetPlanModeResult {
256 pub status: SetPlanModeStatus,
258 pub plan_mode: bool,
260}
261
262#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
264#[serde(rename_all = "snake_case")]
265pub enum SetPlanModeStatus {
266 Ok,
268}
269
270#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
276pub struct CancelParams {}
277
278#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
280pub struct CancelResult {}