1use serde::{Deserialize, Serialize};
2
3use super::content::UserInput;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, 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
28impl InitializeParams {
29 pub fn new(protocol_version: impl Into<String>) -> Self {
31 Self {
32 protocol_version: protocol_version.into(),
33 client: None,
34 external_tools: None,
35 capabilities: None,
36 hooks: None,
37 }
38 }
39
40 #[must_use]
42 pub fn with_client(mut self, client: ClientInfo) -> Self {
43 self.client = Some(client);
44 self
45 }
46
47 #[must_use]
49 pub fn with_external_tools(mut self, tools: Vec<ExternalTool>) -> Self {
50 self.external_tools = Some(tools);
51 self
52 }
53
54 #[must_use]
56 pub const fn with_capabilities(mut self, caps: ClientCapabilities) -> Self {
57 self.capabilities = Some(caps);
58 self
59 }
60
61 #[must_use]
63 pub fn with_hooks(mut self, hooks: Vec<WireHookSubscription>) -> Self {
64 self.hooks = Some(hooks);
65 self
66 }
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
71pub struct ClientInfo {
72 pub name: String,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub version: Option<String>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
81pub struct ClientCapabilities {
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub supports_question: Option<bool>,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub supports_plan_mode: Option<bool>,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
92pub struct WireHookSubscription {
93 pub id: String,
95 pub event: String,
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub matcher: Option<String>,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub timeout: Option<u32>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
107pub struct ExternalTool {
108 pub name: String,
110 pub description: String,
112 pub parameters: serde_json::Value,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
118pub struct InitializeResult {
119 pub protocol_version: String,
121 pub server: ServerInfo,
123 pub slash_commands: Vec<SlashCommandInfo>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub external_tools: Option<ExternalToolsResult>,
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub capabilities: Option<ServerCapabilities>,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub hooks: Option<HooksInfo>,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
138pub struct ServerInfo {
139 pub name: String,
141 pub version: String,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
147pub struct SlashCommandInfo {
148 pub name: String,
150 pub description: String,
152 pub aliases: Vec<String>,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
158pub struct ExternalToolsResult {
159 pub accepted: Vec<String>,
161 pub rejected: Vec<RejectedExternalTool>,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
167pub struct RejectedExternalTool {
168 pub name: String,
170 pub reason: String,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
176pub struct ServerCapabilities {
177 #[serde(skip_serializing_if = "Option::is_none")]
179 pub supports_question: Option<bool>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
184pub struct HooksInfo {
185 pub supported_events: Vec<String>,
187 pub configured: std::collections::HashMap<String, u32>,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
197pub struct PromptParams {
198 pub user_input: UserInput,
200}
201
202#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
204pub struct PromptResult {
205 pub status: PromptStatus,
207 #[serde(skip_serializing_if = "Option::is_none")]
209 pub steps: Option<u64>,
210}
211
212#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
214#[serde(rename_all = "snake_case")]
215#[non_exhaustive]
216pub enum PromptStatus {
217 Finished,
219 Cancelled,
221 MaxStepsReached,
223 Pending,
232 UnexpectedEof,
240}
241
242#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
248pub struct ReplayParams {}
249
250#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
252pub struct ReplayResult {
253 pub status: ReplayStatus,
255 pub events: u64,
257 pub requests: u64,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
263#[serde(rename_all = "snake_case")]
264#[non_exhaustive]
265pub enum ReplayStatus {
266 Finished,
268 Cancelled,
270}
271
272#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
278pub struct SteerParams {
279 pub user_input: UserInput,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
285pub struct SteerResult {
286 pub status: SteerStatus,
288}
289
290#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
292#[serde(rename_all = "snake_case")]
293#[non_exhaustive]
294pub enum SteerStatus {
295 Steered,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
305pub struct SetPlanModeParams {
306 pub enabled: bool,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
312pub struct SetPlanModeResult {
313 pub status: SetPlanModeStatus,
315 pub plan_mode: bool,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
321#[serde(rename_all = "snake_case")]
322#[non_exhaustive]
323pub enum SetPlanModeStatus {
324 Ok,
326}
327
328#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
334pub struct CancelParams {}
335
336#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
338pub struct CancelResult {}