1use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6
7use crate::types::{RequestId, SessionId};
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
11pub enum SessionEventType {
12 #[serde(rename = "session.start")]
13 SessionStart,
14 #[serde(rename = "session.resume")]
15 SessionResume,
16 #[serde(rename = "session.remote_steerable_changed")]
17 SessionRemoteSteerableChanged,
18 #[serde(rename = "session.error")]
19 SessionError,
20 #[serde(rename = "session.idle")]
21 SessionIdle,
22 #[serde(rename = "session.title_changed")]
23 SessionTitleChanged,
24 #[serde(rename = "session.info")]
25 SessionInfo,
26 #[serde(rename = "session.warning")]
27 SessionWarning,
28 #[serde(rename = "session.model_change")]
29 SessionModelChange,
30 #[serde(rename = "session.mode_changed")]
31 SessionModeChanged,
32 #[serde(rename = "session.plan_changed")]
33 SessionPlanChanged,
34 #[serde(rename = "session.workspace_file_changed")]
35 SessionWorkspaceFileChanged,
36 #[serde(rename = "session.handoff")]
37 SessionHandoff,
38 #[serde(rename = "session.truncation")]
39 SessionTruncation,
40 #[serde(rename = "session.snapshot_rewind")]
41 SessionSnapshotRewind,
42 #[serde(rename = "session.shutdown")]
43 SessionShutdown,
44 #[serde(rename = "session.context_changed")]
45 SessionContextChanged,
46 #[serde(rename = "session.usage_info")]
47 SessionUsageInfo,
48 #[serde(rename = "session.compaction_start")]
49 SessionCompactionStart,
50 #[serde(rename = "session.compaction_complete")]
51 SessionCompactionComplete,
52 #[serde(rename = "session.task_complete")]
53 SessionTaskComplete,
54 #[serde(rename = "user.message")]
55 UserMessage,
56 #[serde(rename = "pending_messages.modified")]
57 PendingMessagesModified,
58 #[serde(rename = "assistant.turn_start")]
59 AssistantTurnStart,
60 #[serde(rename = "assistant.intent")]
61 AssistantIntent,
62 #[serde(rename = "assistant.reasoning")]
63 AssistantReasoning,
64 #[serde(rename = "assistant.reasoning_delta")]
65 AssistantReasoningDelta,
66 #[serde(rename = "assistant.streaming_delta")]
67 AssistantStreamingDelta,
68 #[serde(rename = "assistant.message")]
69 AssistantMessage,
70 #[serde(rename = "assistant.message_start")]
71 AssistantMessageStart,
72 #[serde(rename = "assistant.message_delta")]
73 AssistantMessageDelta,
74 #[serde(rename = "assistant.turn_end")]
75 AssistantTurnEnd,
76 #[serde(rename = "assistant.usage")]
77 AssistantUsage,
78 #[serde(rename = "model.call_failure")]
79 ModelCallFailure,
80 #[serde(rename = "abort")]
81 Abort,
82 #[serde(rename = "tool.user_requested")]
83 ToolUserRequested,
84 #[serde(rename = "tool.execution_start")]
85 ToolExecutionStart,
86 #[serde(rename = "tool.execution_partial_result")]
87 ToolExecutionPartialResult,
88 #[serde(rename = "tool.execution_progress")]
89 ToolExecutionProgress,
90 #[serde(rename = "tool.execution_complete")]
91 ToolExecutionComplete,
92 #[serde(rename = "skill.invoked")]
93 SkillInvoked,
94 #[serde(rename = "subagent.started")]
95 SubagentStarted,
96 #[serde(rename = "subagent.completed")]
97 SubagentCompleted,
98 #[serde(rename = "subagent.failed")]
99 SubagentFailed,
100 #[serde(rename = "subagent.selected")]
101 SubagentSelected,
102 #[serde(rename = "subagent.deselected")]
103 SubagentDeselected,
104 #[serde(rename = "hook.start")]
105 HookStart,
106 #[serde(rename = "hook.end")]
107 HookEnd,
108 #[serde(rename = "system.message")]
109 SystemMessage,
110 #[serde(rename = "system.notification")]
111 SystemNotification,
112 #[serde(rename = "permission.requested")]
113 PermissionRequested,
114 #[serde(rename = "permission.completed")]
115 PermissionCompleted,
116 #[serde(rename = "user_input.requested")]
117 UserInputRequested,
118 #[serde(rename = "user_input.completed")]
119 UserInputCompleted,
120 #[serde(rename = "elicitation.requested")]
121 ElicitationRequested,
122 #[serde(rename = "elicitation.completed")]
123 ElicitationCompleted,
124 #[serde(rename = "sampling.requested")]
125 SamplingRequested,
126 #[serde(rename = "sampling.completed")]
127 SamplingCompleted,
128 #[serde(rename = "mcp.oauth_required")]
129 McpOauthRequired,
130 #[serde(rename = "mcp.oauth_completed")]
131 McpOauthCompleted,
132 #[serde(rename = "external_tool.requested")]
133 ExternalToolRequested,
134 #[serde(rename = "external_tool.completed")]
135 ExternalToolCompleted,
136 #[serde(rename = "command.queued")]
137 CommandQueued,
138 #[serde(rename = "command.execute")]
139 CommandExecute,
140 #[serde(rename = "command.completed")]
141 CommandCompleted,
142 #[serde(rename = "auto_mode_switch.requested")]
143 AutoModeSwitchRequested,
144 #[serde(rename = "auto_mode_switch.completed")]
145 AutoModeSwitchCompleted,
146 #[serde(rename = "commands.changed")]
147 CommandsChanged,
148 #[serde(rename = "capabilities.changed")]
149 CapabilitiesChanged,
150 #[serde(rename = "exit_plan_mode.requested")]
151 ExitPlanModeRequested,
152 #[serde(rename = "exit_plan_mode.completed")]
153 ExitPlanModeCompleted,
154 #[serde(rename = "session.tools_updated")]
155 SessionToolsUpdated,
156 #[serde(rename = "session.background_tasks_changed")]
157 SessionBackgroundTasksChanged,
158 #[serde(rename = "session.skills_loaded")]
159 SessionSkillsLoaded,
160 #[serde(rename = "session.custom_agents_updated")]
161 SessionCustomAgentsUpdated,
162 #[serde(rename = "session.mcp_servers_loaded")]
163 SessionMcpServersLoaded,
164 #[serde(rename = "session.mcp_server_status_changed")]
165 SessionMcpServerStatusChanged,
166 #[serde(rename = "session.extensions_loaded")]
167 SessionExtensionsLoaded,
168 #[serde(other)]
170 Unknown,
171}
172
173#[derive(Debug, Clone, Serialize, Deserialize)]
177#[serde(tag = "type", content = "data")]
178pub enum SessionEventData {
179 #[serde(rename = "session.start")]
180 SessionStart(SessionStartData),
181 #[serde(rename = "session.resume")]
182 SessionResume(SessionResumeData),
183 #[serde(rename = "session.remote_steerable_changed")]
184 SessionRemoteSteerableChanged(SessionRemoteSteerableChangedData),
185 #[serde(rename = "session.error")]
186 SessionError(SessionErrorData),
187 #[serde(rename = "session.idle")]
188 SessionIdle(SessionIdleData),
189 #[serde(rename = "session.title_changed")]
190 SessionTitleChanged(SessionTitleChangedData),
191 #[serde(rename = "session.info")]
192 SessionInfo(SessionInfoData),
193 #[serde(rename = "session.warning")]
194 SessionWarning(SessionWarningData),
195 #[serde(rename = "session.model_change")]
196 SessionModelChange(SessionModelChangeData),
197 #[serde(rename = "session.mode_changed")]
198 SessionModeChanged(SessionModeChangedData),
199 #[serde(rename = "session.plan_changed")]
200 SessionPlanChanged(SessionPlanChangedData),
201 #[serde(rename = "session.workspace_file_changed")]
202 SessionWorkspaceFileChanged(SessionWorkspaceFileChangedData),
203 #[serde(rename = "session.handoff")]
204 SessionHandoff(SessionHandoffData),
205 #[serde(rename = "session.truncation")]
206 SessionTruncation(SessionTruncationData),
207 #[serde(rename = "session.snapshot_rewind")]
208 SessionSnapshotRewind(SessionSnapshotRewindData),
209 #[serde(rename = "session.shutdown")]
210 SessionShutdown(SessionShutdownData),
211 #[serde(rename = "session.context_changed")]
212 SessionContextChanged(SessionContextChangedData),
213 #[serde(rename = "session.usage_info")]
214 SessionUsageInfo(SessionUsageInfoData),
215 #[serde(rename = "session.compaction_start")]
216 SessionCompactionStart(SessionCompactionStartData),
217 #[serde(rename = "session.compaction_complete")]
218 SessionCompactionComplete(SessionCompactionCompleteData),
219 #[serde(rename = "session.task_complete")]
220 SessionTaskComplete(SessionTaskCompleteData),
221 #[serde(rename = "user.message")]
222 UserMessage(UserMessageData),
223 #[serde(rename = "pending_messages.modified")]
224 PendingMessagesModified(PendingMessagesModifiedData),
225 #[serde(rename = "assistant.turn_start")]
226 AssistantTurnStart(AssistantTurnStartData),
227 #[serde(rename = "assistant.intent")]
228 AssistantIntent(AssistantIntentData),
229 #[serde(rename = "assistant.reasoning")]
230 AssistantReasoning(AssistantReasoningData),
231 #[serde(rename = "assistant.reasoning_delta")]
232 AssistantReasoningDelta(AssistantReasoningDeltaData),
233 #[serde(rename = "assistant.streaming_delta")]
234 AssistantStreamingDelta(AssistantStreamingDeltaData),
235 #[serde(rename = "assistant.message")]
236 AssistantMessage(AssistantMessageData),
237 #[serde(rename = "assistant.message_start")]
238 AssistantMessageStart(AssistantMessageStartData),
239 #[serde(rename = "assistant.message_delta")]
240 AssistantMessageDelta(AssistantMessageDeltaData),
241 #[serde(rename = "assistant.turn_end")]
242 AssistantTurnEnd(AssistantTurnEndData),
243 #[serde(rename = "assistant.usage")]
244 AssistantUsage(AssistantUsageData),
245 #[serde(rename = "model.call_failure")]
246 ModelCallFailure(ModelCallFailureData),
247 #[serde(rename = "abort")]
248 Abort(AbortData),
249 #[serde(rename = "tool.user_requested")]
250 ToolUserRequested(ToolUserRequestedData),
251 #[serde(rename = "tool.execution_start")]
252 ToolExecutionStart(ToolExecutionStartData),
253 #[serde(rename = "tool.execution_partial_result")]
254 ToolExecutionPartialResult(ToolExecutionPartialResultData),
255 #[serde(rename = "tool.execution_progress")]
256 ToolExecutionProgress(ToolExecutionProgressData),
257 #[serde(rename = "tool.execution_complete")]
258 ToolExecutionComplete(ToolExecutionCompleteData),
259 #[serde(rename = "skill.invoked")]
260 SkillInvoked(SkillInvokedData),
261 #[serde(rename = "subagent.started")]
262 SubagentStarted(SubagentStartedData),
263 #[serde(rename = "subagent.completed")]
264 SubagentCompleted(SubagentCompletedData),
265 #[serde(rename = "subagent.failed")]
266 SubagentFailed(SubagentFailedData),
267 #[serde(rename = "subagent.selected")]
268 SubagentSelected(SubagentSelectedData),
269 #[serde(rename = "subagent.deselected")]
270 SubagentDeselected(SubagentDeselectedData),
271 #[serde(rename = "hook.start")]
272 HookStart(HookStartData),
273 #[serde(rename = "hook.end")]
274 HookEnd(HookEndData),
275 #[serde(rename = "system.message")]
276 SystemMessage(SystemMessageData),
277 #[serde(rename = "system.notification")]
278 SystemNotification(SystemNotificationData),
279 #[serde(rename = "permission.requested")]
280 PermissionRequested(PermissionRequestedData),
281 #[serde(rename = "permission.completed")]
282 PermissionCompleted(PermissionCompletedData),
283 #[serde(rename = "user_input.requested")]
284 UserInputRequested(UserInputRequestedData),
285 #[serde(rename = "user_input.completed")]
286 UserInputCompleted(UserInputCompletedData),
287 #[serde(rename = "elicitation.requested")]
288 ElicitationRequested(ElicitationRequestedData),
289 #[serde(rename = "elicitation.completed")]
290 ElicitationCompleted(ElicitationCompletedData),
291 #[serde(rename = "sampling.requested")]
292 SamplingRequested(SamplingRequestedData),
293 #[serde(rename = "sampling.completed")]
294 SamplingCompleted(SamplingCompletedData),
295 #[serde(rename = "mcp.oauth_required")]
296 McpOauthRequired(McpOauthRequiredData),
297 #[serde(rename = "mcp.oauth_completed")]
298 McpOauthCompleted(McpOauthCompletedData),
299 #[serde(rename = "external_tool.requested")]
300 ExternalToolRequested(ExternalToolRequestedData),
301 #[serde(rename = "external_tool.completed")]
302 ExternalToolCompleted(ExternalToolCompletedData),
303 #[serde(rename = "command.queued")]
304 CommandQueued(CommandQueuedData),
305 #[serde(rename = "command.execute")]
306 CommandExecute(CommandExecuteData),
307 #[serde(rename = "command.completed")]
308 CommandCompleted(CommandCompletedData),
309 #[serde(rename = "auto_mode_switch.requested")]
310 AutoModeSwitchRequested(AutoModeSwitchRequestedData),
311 #[serde(rename = "auto_mode_switch.completed")]
312 AutoModeSwitchCompleted(AutoModeSwitchCompletedData),
313 #[serde(rename = "commands.changed")]
314 CommandsChanged(CommandsChangedData),
315 #[serde(rename = "capabilities.changed")]
316 CapabilitiesChanged(CapabilitiesChangedData),
317 #[serde(rename = "exit_plan_mode.requested")]
318 ExitPlanModeRequested(ExitPlanModeRequestedData),
319 #[serde(rename = "exit_plan_mode.completed")]
320 ExitPlanModeCompleted(ExitPlanModeCompletedData),
321 #[serde(rename = "session.tools_updated")]
322 SessionToolsUpdated(SessionToolsUpdatedData),
323 #[serde(rename = "session.background_tasks_changed")]
324 SessionBackgroundTasksChanged(SessionBackgroundTasksChangedData),
325 #[serde(rename = "session.skills_loaded")]
326 SessionSkillsLoaded(SessionSkillsLoadedData),
327 #[serde(rename = "session.custom_agents_updated")]
328 SessionCustomAgentsUpdated(SessionCustomAgentsUpdatedData),
329 #[serde(rename = "session.mcp_servers_loaded")]
330 SessionMcpServersLoaded(SessionMcpServersLoadedData),
331 #[serde(rename = "session.mcp_server_status_changed")]
332 SessionMcpServerStatusChanged(SessionMcpServerStatusChangedData),
333 #[serde(rename = "session.extensions_loaded")]
334 SessionExtensionsLoaded(SessionExtensionsLoadedData),
335}
336
337#[derive(Debug, Clone, Serialize, Deserialize)]
343#[serde(rename_all = "camelCase")]
344pub struct TypedSessionEvent {
345 pub id: String,
347 pub timestamp: String,
349 #[serde(skip_serializing_if = "Option::is_none")]
351 pub parent_id: Option<String>,
352 #[serde(skip_serializing_if = "Option::is_none")]
354 pub ephemeral: Option<bool>,
355 #[serde(skip_serializing_if = "Option::is_none")]
358 pub agent_id: Option<String>,
359 #[serde(flatten)]
361 pub payload: SessionEventData,
362}
363
364#[derive(Debug, Clone, Serialize, Deserialize)]
366#[serde(rename_all = "camelCase")]
367pub struct WorkingDirectoryContext {
368 #[serde(skip_serializing_if = "Option::is_none")]
370 pub base_commit: Option<String>,
371 #[serde(skip_serializing_if = "Option::is_none")]
373 pub branch: Option<String>,
374 pub cwd: String,
376 #[serde(skip_serializing_if = "Option::is_none")]
378 pub git_root: Option<String>,
379 #[serde(skip_serializing_if = "Option::is_none")]
381 pub head_commit: Option<String>,
382 #[serde(skip_serializing_if = "Option::is_none")]
384 pub host_type: Option<WorkingDirectoryContextHostType>,
385 #[serde(skip_serializing_if = "Option::is_none")]
387 pub repository: Option<String>,
388 #[serde(skip_serializing_if = "Option::is_none")]
390 pub repository_host: Option<String>,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
395#[serde(rename_all = "camelCase")]
396pub struct SessionStartData {
397 #[serde(skip_serializing_if = "Option::is_none")]
399 pub already_in_use: Option<bool>,
400 #[serde(skip_serializing_if = "Option::is_none")]
402 pub context: Option<WorkingDirectoryContext>,
403 pub copilot_version: String,
405 pub producer: String,
407 #[serde(skip_serializing_if = "Option::is_none")]
409 pub reasoning_effort: Option<String>,
410 #[serde(skip_serializing_if = "Option::is_none")]
412 pub remote_steerable: Option<bool>,
413 #[serde(skip_serializing_if = "Option::is_none")]
415 pub selected_model: Option<String>,
416 pub session_id: SessionId,
418 pub start_time: String,
420 pub version: f64,
422}
423
424#[derive(Debug, Clone, Serialize, Deserialize)]
426#[serde(rename_all = "camelCase")]
427pub struct SessionResumeData {
428 #[serde(skip_serializing_if = "Option::is_none")]
430 pub already_in_use: Option<bool>,
431 #[serde(skip_serializing_if = "Option::is_none")]
433 pub context: Option<WorkingDirectoryContext>,
434 #[serde(skip_serializing_if = "Option::is_none")]
436 pub continue_pending_work: Option<bool>,
437 pub event_count: f64,
439 #[serde(skip_serializing_if = "Option::is_none")]
441 pub reasoning_effort: Option<String>,
442 #[serde(skip_serializing_if = "Option::is_none")]
444 pub remote_steerable: Option<bool>,
445 pub resume_time: String,
447 #[serde(skip_serializing_if = "Option::is_none")]
449 pub selected_model: Option<String>,
450 #[serde(skip_serializing_if = "Option::is_none")]
452 pub session_was_active: Option<bool>,
453}
454
455#[derive(Debug, Clone, Serialize, Deserialize)]
457#[serde(rename_all = "camelCase")]
458pub struct SessionRemoteSteerableChangedData {
459 pub remote_steerable: bool,
461}
462
463#[derive(Debug, Clone, Serialize, Deserialize)]
465#[serde(rename_all = "camelCase")]
466pub struct SessionErrorData {
467 #[serde(skip_serializing_if = "Option::is_none")]
469 pub eligible_for_auto_switch: Option<bool>,
470 #[serde(skip_serializing_if = "Option::is_none")]
472 pub error_code: Option<String>,
473 pub error_type: String,
475 pub message: String,
477 #[serde(skip_serializing_if = "Option::is_none")]
479 pub provider_call_id: Option<String>,
480 #[serde(skip_serializing_if = "Option::is_none")]
482 pub stack: Option<String>,
483 #[serde(skip_serializing_if = "Option::is_none")]
485 pub status_code: Option<i64>,
486 #[serde(skip_serializing_if = "Option::is_none")]
488 pub url: Option<String>,
489}
490
491#[derive(Debug, Clone, Serialize, Deserialize)]
493#[serde(rename_all = "camelCase")]
494pub struct SessionIdleData {
495 #[serde(skip_serializing_if = "Option::is_none")]
497 pub aborted: Option<bool>,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502#[serde(rename_all = "camelCase")]
503pub struct SessionTitleChangedData {
504 pub title: String,
506}
507
508#[derive(Debug, Clone, Serialize, Deserialize)]
510#[serde(rename_all = "camelCase")]
511pub struct SessionInfoData {
512 pub info_type: String,
514 pub message: String,
516 #[serde(skip_serializing_if = "Option::is_none")]
518 pub tip: Option<String>,
519 #[serde(skip_serializing_if = "Option::is_none")]
521 pub url: Option<String>,
522}
523
524#[derive(Debug, Clone, Serialize, Deserialize)]
526#[serde(rename_all = "camelCase")]
527pub struct SessionWarningData {
528 pub message: String,
530 #[serde(skip_serializing_if = "Option::is_none")]
532 pub url: Option<String>,
533 pub warning_type: String,
535}
536
537#[derive(Debug, Clone, Serialize, Deserialize)]
539#[serde(rename_all = "camelCase")]
540pub struct SessionModelChangeData {
541 #[serde(skip_serializing_if = "Option::is_none")]
543 pub cause: Option<String>,
544 pub new_model: String,
546 #[serde(skip_serializing_if = "Option::is_none")]
548 pub previous_model: Option<String>,
549 #[serde(skip_serializing_if = "Option::is_none")]
551 pub previous_reasoning_effort: Option<String>,
552 #[serde(skip_serializing_if = "Option::is_none")]
554 pub reasoning_effort: Option<String>,
555}
556
557#[derive(Debug, Clone, Serialize, Deserialize)]
559#[serde(rename_all = "camelCase")]
560pub struct SessionModeChangedData {
561 pub new_mode: String,
563 pub previous_mode: String,
565}
566
567#[derive(Debug, Clone, Serialize, Deserialize)]
569#[serde(rename_all = "camelCase")]
570pub struct SessionPlanChangedData {
571 pub operation: PlanChangedOperation,
573}
574
575#[derive(Debug, Clone, Serialize, Deserialize)]
577#[serde(rename_all = "camelCase")]
578pub struct SessionWorkspaceFileChangedData {
579 pub operation: WorkspaceFileChangedOperation,
581 pub path: String,
583}
584
585#[derive(Debug, Clone, Serialize, Deserialize)]
587#[serde(rename_all = "camelCase")]
588pub struct HandoffRepository {
589 #[serde(skip_serializing_if = "Option::is_none")]
591 pub branch: Option<String>,
592 pub name: String,
594 pub owner: String,
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize)]
600#[serde(rename_all = "camelCase")]
601pub struct SessionHandoffData {
602 #[serde(skip_serializing_if = "Option::is_none")]
604 pub context: Option<String>,
605 pub handoff_time: String,
607 #[serde(skip_serializing_if = "Option::is_none")]
609 pub host: Option<String>,
610 #[serde(skip_serializing_if = "Option::is_none")]
612 pub remote_session_id: Option<SessionId>,
613 #[serde(skip_serializing_if = "Option::is_none")]
615 pub repository: Option<HandoffRepository>,
616 pub source_type: HandoffSourceType,
618 #[serde(skip_serializing_if = "Option::is_none")]
620 pub summary: Option<String>,
621}
622
623#[derive(Debug, Clone, Serialize, Deserialize)]
625#[serde(rename_all = "camelCase")]
626pub struct SessionTruncationData {
627 pub messages_removed_during_truncation: f64,
629 pub performed_by: String,
631 pub post_truncation_messages_length: f64,
633 pub post_truncation_tokens_in_messages: f64,
635 pub pre_truncation_messages_length: f64,
637 pub pre_truncation_tokens_in_messages: f64,
639 pub token_limit: f64,
641 pub tokens_removed_during_truncation: f64,
643}
644
645#[derive(Debug, Clone, Serialize, Deserialize)]
647#[serde(rename_all = "camelCase")]
648pub struct SessionSnapshotRewindData {
649 pub events_removed: f64,
651 pub up_to_event_id: String,
653}
654
655#[derive(Debug, Clone, Serialize, Deserialize)]
657#[serde(rename_all = "camelCase")]
658pub struct ShutdownCodeChanges {
659 pub files_modified: Vec<String>,
661 pub lines_added: f64,
663 pub lines_removed: f64,
665}
666
667#[derive(Debug, Clone, Serialize, Deserialize)]
669#[serde(rename_all = "camelCase")]
670pub struct ShutdownModelMetricRequests {
671 pub cost: f64,
673 pub count: f64,
675}
676
677#[derive(Debug, Clone, Serialize, Deserialize)]
678#[serde(rename_all = "camelCase")]
679pub struct ShutdownModelMetricTokenDetail {
680 pub token_count: f64,
682}
683
684#[derive(Debug, Clone, Serialize, Deserialize)]
686#[serde(rename_all = "camelCase")]
687pub struct ShutdownModelMetricUsage {
688 pub cache_read_tokens: f64,
690 pub cache_write_tokens: f64,
692 pub input_tokens: f64,
694 pub output_tokens: f64,
696 #[serde(skip_serializing_if = "Option::is_none")]
698 pub reasoning_tokens: Option<f64>,
699}
700
701#[derive(Debug, Clone, Serialize, Deserialize)]
702#[serde(rename_all = "camelCase")]
703pub struct ShutdownModelMetric {
704 pub requests: ShutdownModelMetricRequests,
706 #[serde(default)]
708 pub token_details: HashMap<String, ShutdownModelMetricTokenDetail>,
709 #[serde(skip_serializing_if = "Option::is_none")]
711 pub total_nano_aiu: Option<f64>,
712 pub usage: ShutdownModelMetricUsage,
714}
715
716#[derive(Debug, Clone, Serialize, Deserialize)]
717#[serde(rename_all = "camelCase")]
718pub struct ShutdownTokenDetail {
719 pub token_count: f64,
721}
722
723#[derive(Debug, Clone, Serialize, Deserialize)]
725#[serde(rename_all = "camelCase")]
726pub struct SessionShutdownData {
727 pub code_changes: ShutdownCodeChanges,
729 #[serde(skip_serializing_if = "Option::is_none")]
731 pub conversation_tokens: Option<f64>,
732 #[serde(skip_serializing_if = "Option::is_none")]
734 pub current_model: Option<String>,
735 #[serde(skip_serializing_if = "Option::is_none")]
737 pub current_tokens: Option<f64>,
738 #[serde(skip_serializing_if = "Option::is_none")]
740 pub error_reason: Option<String>,
741 pub model_metrics: HashMap<String, ShutdownModelMetric>,
743 pub session_start_time: f64,
745 pub shutdown_type: ShutdownType,
747 #[serde(skip_serializing_if = "Option::is_none")]
749 pub system_tokens: Option<f64>,
750 #[serde(default)]
752 pub token_details: HashMap<String, ShutdownTokenDetail>,
753 #[serde(skip_serializing_if = "Option::is_none")]
755 pub tool_definitions_tokens: Option<f64>,
756 pub total_api_duration_ms: f64,
758 #[serde(skip_serializing_if = "Option::is_none")]
760 pub total_nano_aiu: Option<f64>,
761 pub total_premium_requests: f64,
763}
764
765#[derive(Debug, Clone, Serialize, Deserialize)]
767#[serde(rename_all = "camelCase")]
768pub struct SessionContextChangedData {
769 #[serde(skip_serializing_if = "Option::is_none")]
771 pub base_commit: Option<String>,
772 #[serde(skip_serializing_if = "Option::is_none")]
774 pub branch: Option<String>,
775 pub cwd: String,
777 #[serde(skip_serializing_if = "Option::is_none")]
779 pub git_root: Option<String>,
780 #[serde(skip_serializing_if = "Option::is_none")]
782 pub head_commit: Option<String>,
783 #[serde(skip_serializing_if = "Option::is_none")]
785 pub host_type: Option<WorkingDirectoryContextHostType>,
786 #[serde(skip_serializing_if = "Option::is_none")]
788 pub repository: Option<String>,
789 #[serde(skip_serializing_if = "Option::is_none")]
791 pub repository_host: Option<String>,
792}
793
794#[derive(Debug, Clone, Serialize, Deserialize)]
796#[serde(rename_all = "camelCase")]
797pub struct SessionUsageInfoData {
798 #[serde(skip_serializing_if = "Option::is_none")]
800 pub conversation_tokens: Option<f64>,
801 pub current_tokens: f64,
803 #[serde(skip_serializing_if = "Option::is_none")]
805 pub is_initial: Option<bool>,
806 pub messages_length: f64,
808 #[serde(skip_serializing_if = "Option::is_none")]
810 pub system_tokens: Option<f64>,
811 pub token_limit: f64,
813 #[serde(skip_serializing_if = "Option::is_none")]
815 pub tool_definitions_tokens: Option<f64>,
816}
817
818#[derive(Debug, Clone, Serialize, Deserialize)]
820#[serde(rename_all = "camelCase")]
821pub struct SessionCompactionStartData {
822 #[serde(skip_serializing_if = "Option::is_none")]
824 pub conversation_tokens: Option<f64>,
825 #[serde(skip_serializing_if = "Option::is_none")]
827 pub system_tokens: Option<f64>,
828 #[serde(skip_serializing_if = "Option::is_none")]
830 pub tool_definitions_tokens: Option<f64>,
831}
832
833#[derive(Debug, Clone, Serialize, Deserialize)]
835#[serde(rename_all = "camelCase")]
836pub struct CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail {
837 pub batch_size: f64,
839 pub cost_per_batch: f64,
841 pub token_count: f64,
843 pub token_type: String,
845}
846
847#[derive(Debug, Clone, Serialize, Deserialize)]
849#[serde(rename_all = "camelCase")]
850pub struct CompactionCompleteCompactionTokensUsedCopilotUsage {
851 pub token_details: Vec<CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail>,
853 pub total_nano_aiu: f64,
855}
856
857#[derive(Debug, Clone, Serialize, Deserialize)]
859#[serde(rename_all = "camelCase")]
860pub struct CompactionCompleteCompactionTokensUsed {
861 #[serde(skip_serializing_if = "Option::is_none")]
863 pub cache_read_tokens: Option<f64>,
864 #[serde(skip_serializing_if = "Option::is_none")]
866 pub cache_write_tokens: Option<f64>,
867 #[serde(skip_serializing_if = "Option::is_none")]
869 pub copilot_usage: Option<CompactionCompleteCompactionTokensUsedCopilotUsage>,
870 #[serde(skip_serializing_if = "Option::is_none")]
872 pub duration: Option<f64>,
873 #[serde(skip_serializing_if = "Option::is_none")]
875 pub input_tokens: Option<f64>,
876 #[serde(skip_serializing_if = "Option::is_none")]
878 pub model: Option<String>,
879 #[serde(skip_serializing_if = "Option::is_none")]
881 pub output_tokens: Option<f64>,
882}
883
884#[derive(Debug, Clone, Serialize, Deserialize)]
886#[serde(rename_all = "camelCase")]
887pub struct SessionCompactionCompleteData {
888 #[serde(skip_serializing_if = "Option::is_none")]
890 pub checkpoint_number: Option<f64>,
891 #[serde(skip_serializing_if = "Option::is_none")]
893 pub checkpoint_path: Option<String>,
894 #[serde(skip_serializing_if = "Option::is_none")]
896 pub compaction_tokens_used: Option<CompactionCompleteCompactionTokensUsed>,
897 #[serde(skip_serializing_if = "Option::is_none")]
899 pub conversation_tokens: Option<f64>,
900 #[serde(skip_serializing_if = "Option::is_none")]
902 pub error: Option<String>,
903 #[serde(skip_serializing_if = "Option::is_none")]
905 pub messages_removed: Option<f64>,
906 #[serde(skip_serializing_if = "Option::is_none")]
908 pub post_compaction_tokens: Option<f64>,
909 #[serde(skip_serializing_if = "Option::is_none")]
911 pub pre_compaction_messages_length: Option<f64>,
912 #[serde(skip_serializing_if = "Option::is_none")]
914 pub pre_compaction_tokens: Option<f64>,
915 #[serde(skip_serializing_if = "Option::is_none")]
917 pub request_id: Option<RequestId>,
918 pub success: bool,
920 #[serde(skip_serializing_if = "Option::is_none")]
922 pub summary_content: Option<String>,
923 #[serde(skip_serializing_if = "Option::is_none")]
925 pub system_tokens: Option<f64>,
926 #[serde(skip_serializing_if = "Option::is_none")]
928 pub tokens_removed: Option<f64>,
929 #[serde(skip_serializing_if = "Option::is_none")]
931 pub tool_definitions_tokens: Option<f64>,
932}
933
934#[derive(Debug, Clone, Serialize, Deserialize)]
936#[serde(rename_all = "camelCase")]
937pub struct SessionTaskCompleteData {
938 #[serde(skip_serializing_if = "Option::is_none")]
940 pub success: Option<bool>,
941 #[serde(skip_serializing_if = "Option::is_none")]
943 pub summary: Option<String>,
944}
945
946#[derive(Debug, Clone, Serialize, Deserialize)]
947#[serde(rename_all = "camelCase")]
948pub struct UserMessageData {
949 #[serde(skip_serializing_if = "Option::is_none")]
951 pub agent_mode: Option<UserMessageAgentMode>,
952 #[serde(default)]
954 pub attachments: Vec<serde_json::Value>,
955 pub content: String,
957 #[serde(skip_serializing_if = "Option::is_none")]
959 pub interaction_id: Option<String>,
960 #[serde(default)]
962 pub native_document_path_fallback_paths: Vec<String>,
963 #[serde(skip_serializing_if = "Option::is_none")]
965 pub parent_agent_task_id: Option<String>,
966 #[serde(skip_serializing_if = "Option::is_none")]
968 pub source: Option<String>,
969 #[serde(default)]
971 pub supported_native_document_mime_types: Vec<String>,
972 #[serde(skip_serializing_if = "Option::is_none")]
974 pub transformed_content: Option<String>,
975}
976
977#[derive(Debug, Clone, Serialize, Deserialize)]
979#[serde(rename_all = "camelCase")]
980pub struct PendingMessagesModifiedData {}
981
982#[derive(Debug, Clone, Serialize, Deserialize)]
984#[serde(rename_all = "camelCase")]
985pub struct AssistantTurnStartData {
986 #[serde(skip_serializing_if = "Option::is_none")]
988 pub interaction_id: Option<String>,
989 pub turn_id: String,
991}
992
993#[derive(Debug, Clone, Serialize, Deserialize)]
995#[serde(rename_all = "camelCase")]
996pub struct AssistantIntentData {
997 pub intent: String,
999}
1000
1001#[derive(Debug, Clone, Serialize, Deserialize)]
1003#[serde(rename_all = "camelCase")]
1004pub struct AssistantReasoningData {
1005 pub content: String,
1007 pub reasoning_id: String,
1009}
1010
1011#[derive(Debug, Clone, Serialize, Deserialize)]
1013#[serde(rename_all = "camelCase")]
1014pub struct AssistantReasoningDeltaData {
1015 pub delta_content: String,
1017 pub reasoning_id: String,
1019}
1020
1021#[derive(Debug, Clone, Serialize, Deserialize)]
1023#[serde(rename_all = "camelCase")]
1024pub struct AssistantStreamingDeltaData {
1025 pub total_response_size_bytes: f64,
1027}
1028
1029#[derive(Debug, Clone, Serialize, Deserialize)]
1031#[serde(rename_all = "camelCase")]
1032pub struct AssistantMessageToolRequest {
1033 #[serde(skip_serializing_if = "Option::is_none")]
1035 pub arguments: Option<serde_json::Value>,
1036 #[serde(skip_serializing_if = "Option::is_none")]
1038 pub intention_summary: Option<String>,
1039 #[serde(skip_serializing_if = "Option::is_none")]
1041 pub mcp_server_name: Option<String>,
1042 pub name: String,
1044 pub tool_call_id: String,
1046 #[serde(skip_serializing_if = "Option::is_none")]
1048 pub tool_title: Option<String>,
1049 #[serde(skip_serializing_if = "Option::is_none")]
1051 pub r#type: Option<AssistantMessageToolRequestType>,
1052}
1053
1054#[derive(Debug, Clone, Serialize, Deserialize)]
1056#[serde(rename_all = "camelCase")]
1057pub struct AssistantMessageData {
1058 pub content: String,
1060 #[serde(skip_serializing_if = "Option::is_none")]
1062 pub encrypted_content: Option<String>,
1063 #[serde(skip_serializing_if = "Option::is_none")]
1065 pub interaction_id: Option<String>,
1066 pub message_id: String,
1068 #[serde(skip_serializing_if = "Option::is_none")]
1070 pub output_tokens: Option<f64>,
1071 #[deprecated]
1073 #[serde(skip_serializing_if = "Option::is_none")]
1074 pub parent_tool_call_id: Option<String>,
1075 #[serde(skip_serializing_if = "Option::is_none")]
1077 pub phase: Option<String>,
1078 #[serde(skip_serializing_if = "Option::is_none")]
1080 pub reasoning_opaque: Option<String>,
1081 #[serde(skip_serializing_if = "Option::is_none")]
1083 pub reasoning_text: Option<String>,
1084 #[serde(skip_serializing_if = "Option::is_none")]
1086 pub request_id: Option<RequestId>,
1087 #[serde(default)]
1089 pub tool_requests: Vec<AssistantMessageToolRequest>,
1090 #[serde(skip_serializing_if = "Option::is_none")]
1092 pub turn_id: Option<String>,
1093}
1094
1095#[derive(Debug, Clone, Serialize, Deserialize)]
1097#[serde(rename_all = "camelCase")]
1098pub struct AssistantMessageStartData {
1099 pub message_id: String,
1101 #[serde(skip_serializing_if = "Option::is_none")]
1103 pub phase: Option<String>,
1104}
1105
1106#[derive(Debug, Clone, Serialize, Deserialize)]
1108#[serde(rename_all = "camelCase")]
1109pub struct AssistantMessageDeltaData {
1110 pub delta_content: String,
1112 pub message_id: String,
1114 #[deprecated]
1116 #[serde(skip_serializing_if = "Option::is_none")]
1117 pub parent_tool_call_id: Option<String>,
1118}
1119
1120#[derive(Debug, Clone, Serialize, Deserialize)]
1122#[serde(rename_all = "camelCase")]
1123pub struct AssistantTurnEndData {
1124 pub turn_id: String,
1126}
1127
1128#[derive(Debug, Clone, Serialize, Deserialize)]
1130#[serde(rename_all = "camelCase")]
1131pub struct AssistantUsageCopilotUsageTokenDetail {
1132 pub batch_size: f64,
1134 pub cost_per_batch: f64,
1136 pub token_count: f64,
1138 pub token_type: String,
1140}
1141
1142#[derive(Debug, Clone, Serialize, Deserialize)]
1144#[serde(rename_all = "camelCase")]
1145pub struct AssistantUsageCopilotUsage {
1146 pub token_details: Vec<AssistantUsageCopilotUsageTokenDetail>,
1148 pub total_nano_aiu: f64,
1150}
1151
1152#[derive(Debug, Clone, Serialize, Deserialize)]
1153#[serde(rename_all = "camelCase")]
1154pub struct AssistantUsageQuotaSnapshot {
1155 pub entitlement_requests: f64,
1157 pub is_unlimited_entitlement: bool,
1159 pub overage: f64,
1161 pub overage_allowed_with_exhausted_quota: bool,
1163 pub remaining_percentage: f64,
1165 #[serde(skip_serializing_if = "Option::is_none")]
1167 pub reset_date: Option<String>,
1168 pub usage_allowed_with_exhausted_quota: bool,
1170 pub used_requests: f64,
1172}
1173
1174#[derive(Debug, Clone, Serialize, Deserialize)]
1176#[serde(rename_all = "camelCase")]
1177pub struct AssistantUsageData {
1178 #[serde(skip_serializing_if = "Option::is_none")]
1180 pub api_call_id: Option<String>,
1181 #[serde(skip_serializing_if = "Option::is_none")]
1183 pub cache_read_tokens: Option<f64>,
1184 #[serde(skip_serializing_if = "Option::is_none")]
1186 pub cache_write_tokens: Option<f64>,
1187 #[serde(skip_serializing_if = "Option::is_none")]
1189 pub copilot_usage: Option<AssistantUsageCopilotUsage>,
1190 #[serde(skip_serializing_if = "Option::is_none")]
1192 pub cost: Option<f64>,
1193 #[serde(skip_serializing_if = "Option::is_none")]
1195 pub duration: Option<f64>,
1196 #[serde(skip_serializing_if = "Option::is_none")]
1198 pub initiator: Option<String>,
1199 #[serde(skip_serializing_if = "Option::is_none")]
1201 pub input_tokens: Option<f64>,
1202 #[serde(skip_serializing_if = "Option::is_none")]
1204 pub inter_token_latency_ms: Option<f64>,
1205 pub model: String,
1207 #[serde(skip_serializing_if = "Option::is_none")]
1209 pub output_tokens: Option<f64>,
1210 #[deprecated]
1212 #[serde(skip_serializing_if = "Option::is_none")]
1213 pub parent_tool_call_id: Option<String>,
1214 #[serde(skip_serializing_if = "Option::is_none")]
1216 pub provider_call_id: Option<String>,
1217 #[serde(default)]
1219 pub quota_snapshots: HashMap<String, AssistantUsageQuotaSnapshot>,
1220 #[serde(skip_serializing_if = "Option::is_none")]
1222 pub reasoning_effort: Option<String>,
1223 #[serde(skip_serializing_if = "Option::is_none")]
1225 pub reasoning_tokens: Option<f64>,
1226 #[serde(skip_serializing_if = "Option::is_none")]
1228 pub ttft_ms: Option<f64>,
1229}
1230
1231#[derive(Debug, Clone, Serialize, Deserialize)]
1233#[serde(rename_all = "camelCase")]
1234pub struct ModelCallFailureData {
1235 #[serde(skip_serializing_if = "Option::is_none")]
1237 pub api_call_id: Option<String>,
1238 #[serde(skip_serializing_if = "Option::is_none")]
1240 pub duration_ms: Option<f64>,
1241 #[serde(skip_serializing_if = "Option::is_none")]
1243 pub error_message: Option<String>,
1244 #[serde(skip_serializing_if = "Option::is_none")]
1246 pub initiator: Option<String>,
1247 #[serde(skip_serializing_if = "Option::is_none")]
1249 pub model: Option<String>,
1250 #[serde(skip_serializing_if = "Option::is_none")]
1252 pub provider_call_id: Option<String>,
1253 pub source: ModelCallFailureSource,
1255 #[serde(skip_serializing_if = "Option::is_none")]
1257 pub status_code: Option<i64>,
1258}
1259
1260#[derive(Debug, Clone, Serialize, Deserialize)]
1262#[serde(rename_all = "camelCase")]
1263pub struct AbortData {
1264 pub reason: String,
1266}
1267
1268#[derive(Debug, Clone, Serialize, Deserialize)]
1270#[serde(rename_all = "camelCase")]
1271pub struct ToolUserRequestedData {
1272 #[serde(skip_serializing_if = "Option::is_none")]
1274 pub arguments: Option<serde_json::Value>,
1275 pub tool_call_id: String,
1277 pub tool_name: String,
1279}
1280
1281#[derive(Debug, Clone, Serialize, Deserialize)]
1283#[serde(rename_all = "camelCase")]
1284pub struct ToolExecutionStartData {
1285 #[serde(skip_serializing_if = "Option::is_none")]
1287 pub arguments: Option<serde_json::Value>,
1288 #[serde(skip_serializing_if = "Option::is_none")]
1290 pub mcp_server_name: Option<String>,
1291 #[serde(skip_serializing_if = "Option::is_none")]
1293 pub mcp_tool_name: Option<String>,
1294 #[deprecated]
1296 #[serde(skip_serializing_if = "Option::is_none")]
1297 pub parent_tool_call_id: Option<String>,
1298 pub tool_call_id: String,
1300 pub tool_name: String,
1302 #[serde(skip_serializing_if = "Option::is_none")]
1304 pub turn_id: Option<String>,
1305}
1306
1307#[derive(Debug, Clone, Serialize, Deserialize)]
1309#[serde(rename_all = "camelCase")]
1310pub struct ToolExecutionPartialResultData {
1311 pub partial_output: String,
1313 pub tool_call_id: String,
1315}
1316
1317#[derive(Debug, Clone, Serialize, Deserialize)]
1319#[serde(rename_all = "camelCase")]
1320pub struct ToolExecutionProgressData {
1321 pub progress_message: String,
1323 pub tool_call_id: String,
1325}
1326
1327#[derive(Debug, Clone, Serialize, Deserialize)]
1329#[serde(rename_all = "camelCase")]
1330pub struct ToolExecutionCompleteError {
1331 #[serde(skip_serializing_if = "Option::is_none")]
1333 pub code: Option<String>,
1334 pub message: String,
1336}
1337
1338#[derive(Debug, Clone, Serialize, Deserialize)]
1340#[serde(rename_all = "camelCase")]
1341pub struct ToolExecutionCompleteResult {
1342 pub content: String,
1344 #[serde(default)]
1346 pub contents: Vec<serde_json::Value>,
1347 #[serde(skip_serializing_if = "Option::is_none")]
1349 pub detailed_content: Option<String>,
1350}
1351
1352#[derive(Debug, Clone, Serialize, Deserialize)]
1354#[serde(rename_all = "camelCase")]
1355pub struct ToolExecutionCompleteData {
1356 #[serde(skip_serializing_if = "Option::is_none")]
1358 pub error: Option<ToolExecutionCompleteError>,
1359 #[serde(skip_serializing_if = "Option::is_none")]
1361 pub interaction_id: Option<String>,
1362 #[serde(skip_serializing_if = "Option::is_none")]
1364 pub is_user_requested: Option<bool>,
1365 #[serde(skip_serializing_if = "Option::is_none")]
1367 pub model: Option<String>,
1368 #[deprecated]
1370 #[serde(skip_serializing_if = "Option::is_none")]
1371 pub parent_tool_call_id: Option<String>,
1372 #[serde(skip_serializing_if = "Option::is_none")]
1374 pub result: Option<ToolExecutionCompleteResult>,
1375 pub success: bool,
1377 pub tool_call_id: String,
1379 #[serde(default)]
1381 pub tool_telemetry: HashMap<String, serde_json::Value>,
1382 #[serde(skip_serializing_if = "Option::is_none")]
1384 pub turn_id: Option<String>,
1385}
1386
1387#[derive(Debug, Clone, Serialize, Deserialize)]
1389#[serde(rename_all = "camelCase")]
1390pub struct SkillInvokedData {
1391 #[serde(default)]
1393 pub allowed_tools: Vec<String>,
1394 pub content: String,
1396 #[serde(skip_serializing_if = "Option::is_none")]
1398 pub description: Option<String>,
1399 pub name: String,
1401 pub path: String,
1403 #[serde(skip_serializing_if = "Option::is_none")]
1405 pub plugin_name: Option<String>,
1406 #[serde(skip_serializing_if = "Option::is_none")]
1408 pub plugin_version: Option<String>,
1409}
1410
1411#[derive(Debug, Clone, Serialize, Deserialize)]
1413#[serde(rename_all = "camelCase")]
1414pub struct SubagentStartedData {
1415 pub agent_description: String,
1417 pub agent_display_name: String,
1419 pub agent_name: String,
1421 pub tool_call_id: String,
1423}
1424
1425#[derive(Debug, Clone, Serialize, Deserialize)]
1427#[serde(rename_all = "camelCase")]
1428pub struct SubagentCompletedData {
1429 pub agent_display_name: String,
1431 pub agent_name: String,
1433 #[serde(skip_serializing_if = "Option::is_none")]
1435 pub duration_ms: Option<f64>,
1436 #[serde(skip_serializing_if = "Option::is_none")]
1438 pub model: Option<String>,
1439 pub tool_call_id: String,
1441 #[serde(skip_serializing_if = "Option::is_none")]
1443 pub total_tokens: Option<f64>,
1444 #[serde(skip_serializing_if = "Option::is_none")]
1446 pub total_tool_calls: Option<f64>,
1447}
1448
1449#[derive(Debug, Clone, Serialize, Deserialize)]
1451#[serde(rename_all = "camelCase")]
1452pub struct SubagentFailedData {
1453 pub agent_display_name: String,
1455 pub agent_name: String,
1457 #[serde(skip_serializing_if = "Option::is_none")]
1459 pub duration_ms: Option<f64>,
1460 pub error: String,
1462 #[serde(skip_serializing_if = "Option::is_none")]
1464 pub model: Option<String>,
1465 pub tool_call_id: String,
1467 #[serde(skip_serializing_if = "Option::is_none")]
1469 pub total_tokens: Option<f64>,
1470 #[serde(skip_serializing_if = "Option::is_none")]
1472 pub total_tool_calls: Option<f64>,
1473}
1474
1475#[derive(Debug, Clone, Serialize, Deserialize)]
1477#[serde(rename_all = "camelCase")]
1478pub struct SubagentSelectedData {
1479 pub agent_display_name: String,
1481 pub agent_name: String,
1483 pub tools: Vec<String>,
1485}
1486
1487#[derive(Debug, Clone, Serialize, Deserialize)]
1489#[serde(rename_all = "camelCase")]
1490pub struct SubagentDeselectedData {}
1491
1492#[derive(Debug, Clone, Serialize, Deserialize)]
1494#[serde(rename_all = "camelCase")]
1495pub struct HookStartData {
1496 pub hook_invocation_id: String,
1498 pub hook_type: String,
1500 #[serde(skip_serializing_if = "Option::is_none")]
1502 pub input: Option<serde_json::Value>,
1503}
1504
1505#[derive(Debug, Clone, Serialize, Deserialize)]
1507#[serde(rename_all = "camelCase")]
1508pub struct HookEndError {
1509 pub message: String,
1511 #[serde(skip_serializing_if = "Option::is_none")]
1513 pub stack: Option<String>,
1514}
1515
1516#[derive(Debug, Clone, Serialize, Deserialize)]
1518#[serde(rename_all = "camelCase")]
1519pub struct HookEndData {
1520 #[serde(skip_serializing_if = "Option::is_none")]
1522 pub error: Option<HookEndError>,
1523 pub hook_invocation_id: String,
1525 pub hook_type: String,
1527 #[serde(skip_serializing_if = "Option::is_none")]
1529 pub output: Option<serde_json::Value>,
1530 pub success: bool,
1532}
1533
1534#[derive(Debug, Clone, Serialize, Deserialize)]
1536#[serde(rename_all = "camelCase")]
1537pub struct SystemMessageMetadata {
1538 #[serde(skip_serializing_if = "Option::is_none")]
1540 pub prompt_version: Option<String>,
1541 #[serde(default)]
1543 pub variables: HashMap<String, serde_json::Value>,
1544}
1545
1546#[derive(Debug, Clone, Serialize, Deserialize)]
1548#[serde(rename_all = "camelCase")]
1549pub struct SystemMessageData {
1550 pub content: String,
1552 #[serde(skip_serializing_if = "Option::is_none")]
1554 pub metadata: Option<SystemMessageMetadata>,
1555 #[serde(skip_serializing_if = "Option::is_none")]
1557 pub name: Option<String>,
1558 pub role: SystemMessageRole,
1560}
1561
1562#[derive(Debug, Clone, Serialize, Deserialize)]
1564#[serde(rename_all = "camelCase")]
1565pub struct SystemNotificationData {
1566 pub content: String,
1568 pub kind: serde_json::Value,
1570}
1571
1572#[derive(Debug, Clone, Serialize, Deserialize)]
1573#[serde(rename_all = "camelCase")]
1574pub struct PermissionRequestShellCommand {
1575 pub identifier: String,
1577 pub read_only: bool,
1579}
1580
1581#[derive(Debug, Clone, Serialize, Deserialize)]
1582#[serde(rename_all = "camelCase")]
1583pub struct PermissionRequestShellPossibleUrl {
1584 pub url: String,
1586}
1587
1588#[derive(Debug, Clone, Serialize, Deserialize)]
1590#[serde(rename_all = "camelCase")]
1591pub struct PermissionRequestShell {
1592 pub can_offer_session_approval: bool,
1594 pub commands: Vec<PermissionRequestShellCommand>,
1596 pub full_command_text: String,
1598 pub has_write_file_redirection: bool,
1600 pub intention: String,
1602 pub kind: PermissionRequestShellKind,
1604 pub possible_paths: Vec<String>,
1606 pub possible_urls: Vec<PermissionRequestShellPossibleUrl>,
1608 #[serde(skip_serializing_if = "Option::is_none")]
1610 pub tool_call_id: Option<String>,
1611 #[serde(skip_serializing_if = "Option::is_none")]
1613 pub warning: Option<String>,
1614}
1615
1616#[derive(Debug, Clone, Serialize, Deserialize)]
1618#[serde(rename_all = "camelCase")]
1619pub struct PermissionRequestWrite {
1620 pub can_offer_session_approval: bool,
1622 pub diff: String,
1624 pub file_name: String,
1626 pub intention: String,
1628 pub kind: PermissionRequestWriteKind,
1630 #[serde(skip_serializing_if = "Option::is_none")]
1632 pub new_file_contents: Option<String>,
1633 #[serde(skip_serializing_if = "Option::is_none")]
1635 pub tool_call_id: Option<String>,
1636}
1637
1638#[derive(Debug, Clone, Serialize, Deserialize)]
1640#[serde(rename_all = "camelCase")]
1641pub struct PermissionRequestRead {
1642 pub intention: String,
1644 pub kind: PermissionRequestReadKind,
1646 pub path: String,
1648 #[serde(skip_serializing_if = "Option::is_none")]
1650 pub tool_call_id: Option<String>,
1651}
1652
1653#[derive(Debug, Clone, Serialize, Deserialize)]
1655#[serde(rename_all = "camelCase")]
1656pub struct PermissionRequestMcp {
1657 #[serde(skip_serializing_if = "Option::is_none")]
1659 pub args: Option<serde_json::Value>,
1660 pub kind: PermissionRequestMcpKind,
1662 pub read_only: bool,
1664 pub server_name: String,
1666 #[serde(skip_serializing_if = "Option::is_none")]
1668 pub tool_call_id: Option<String>,
1669 pub tool_name: String,
1671 pub tool_title: String,
1673}
1674
1675#[derive(Debug, Clone, Serialize, Deserialize)]
1677#[serde(rename_all = "camelCase")]
1678pub struct PermissionRequestUrl {
1679 pub intention: String,
1681 pub kind: PermissionRequestUrlKind,
1683 #[serde(skip_serializing_if = "Option::is_none")]
1685 pub tool_call_id: Option<String>,
1686 pub url: String,
1688}
1689
1690#[derive(Debug, Clone, Serialize, Deserialize)]
1692#[serde(rename_all = "camelCase")]
1693pub struct PermissionRequestMemory {
1694 #[serde(skip_serializing_if = "Option::is_none")]
1696 pub action: Option<PermissionRequestMemoryAction>,
1697 #[serde(skip_serializing_if = "Option::is_none")]
1699 pub citations: Option<String>,
1700 #[serde(skip_serializing_if = "Option::is_none")]
1702 pub direction: Option<PermissionRequestMemoryDirection>,
1703 pub fact: String,
1705 pub kind: PermissionRequestMemoryKind,
1707 #[serde(skip_serializing_if = "Option::is_none")]
1709 pub reason: Option<String>,
1710 #[serde(skip_serializing_if = "Option::is_none")]
1712 pub subject: Option<String>,
1713 #[serde(skip_serializing_if = "Option::is_none")]
1715 pub tool_call_id: Option<String>,
1716}
1717
1718#[derive(Debug, Clone, Serialize, Deserialize)]
1720#[serde(rename_all = "camelCase")]
1721pub struct PermissionRequestCustomTool {
1722 #[serde(skip_serializing_if = "Option::is_none")]
1724 pub args: Option<serde_json::Value>,
1725 pub kind: PermissionRequestCustomToolKind,
1727 #[serde(skip_serializing_if = "Option::is_none")]
1729 pub tool_call_id: Option<String>,
1730 pub tool_description: String,
1732 pub tool_name: String,
1734}
1735
1736#[derive(Debug, Clone, Serialize, Deserialize)]
1738#[serde(rename_all = "camelCase")]
1739pub struct PermissionRequestHook {
1740 #[serde(skip_serializing_if = "Option::is_none")]
1742 pub hook_message: Option<String>,
1743 pub kind: PermissionRequestHookKind,
1745 #[serde(skip_serializing_if = "Option::is_none")]
1747 pub tool_args: Option<serde_json::Value>,
1748 #[serde(skip_serializing_if = "Option::is_none")]
1750 pub tool_call_id: Option<String>,
1751 pub tool_name: String,
1753}
1754
1755#[derive(Debug, Clone, Serialize, Deserialize)]
1757#[serde(rename_all = "camelCase")]
1758pub struct PermissionPromptRequestCommands {
1759 pub can_offer_session_approval: bool,
1761 pub command_identifiers: Vec<String>,
1763 pub full_command_text: String,
1765 pub intention: String,
1767 pub kind: PermissionPromptRequestCommandsKind,
1769 #[serde(skip_serializing_if = "Option::is_none")]
1771 pub tool_call_id: Option<String>,
1772 #[serde(skip_serializing_if = "Option::is_none")]
1774 pub warning: Option<String>,
1775}
1776
1777#[derive(Debug, Clone, Serialize, Deserialize)]
1779#[serde(rename_all = "camelCase")]
1780pub struct PermissionPromptRequestWrite {
1781 pub can_offer_session_approval: bool,
1783 pub diff: String,
1785 pub file_name: String,
1787 pub intention: String,
1789 pub kind: PermissionPromptRequestWriteKind,
1791 #[serde(skip_serializing_if = "Option::is_none")]
1793 pub new_file_contents: Option<String>,
1794 #[serde(skip_serializing_if = "Option::is_none")]
1796 pub tool_call_id: Option<String>,
1797}
1798
1799#[derive(Debug, Clone, Serialize, Deserialize)]
1801#[serde(rename_all = "camelCase")]
1802pub struct PermissionPromptRequestRead {
1803 pub intention: String,
1805 pub kind: PermissionPromptRequestReadKind,
1807 pub path: String,
1809 #[serde(skip_serializing_if = "Option::is_none")]
1811 pub tool_call_id: Option<String>,
1812}
1813
1814#[derive(Debug, Clone, Serialize, Deserialize)]
1816#[serde(rename_all = "camelCase")]
1817pub struct PermissionPromptRequestMcp {
1818 #[serde(skip_serializing_if = "Option::is_none")]
1820 pub args: Option<serde_json::Value>,
1821 pub kind: PermissionPromptRequestMcpKind,
1823 pub server_name: String,
1825 #[serde(skip_serializing_if = "Option::is_none")]
1827 pub tool_call_id: Option<String>,
1828 pub tool_name: String,
1830 pub tool_title: String,
1832}
1833
1834#[derive(Debug, Clone, Serialize, Deserialize)]
1836#[serde(rename_all = "camelCase")]
1837pub struct PermissionPromptRequestUrl {
1838 pub intention: String,
1840 pub kind: PermissionPromptRequestUrlKind,
1842 #[serde(skip_serializing_if = "Option::is_none")]
1844 pub tool_call_id: Option<String>,
1845 pub url: String,
1847}
1848
1849#[derive(Debug, Clone, Serialize, Deserialize)]
1851#[serde(rename_all = "camelCase")]
1852pub struct PermissionPromptRequestMemory {
1853 #[serde(skip_serializing_if = "Option::is_none")]
1855 pub action: Option<PermissionPromptRequestMemoryAction>,
1856 #[serde(skip_serializing_if = "Option::is_none")]
1858 pub citations: Option<String>,
1859 #[serde(skip_serializing_if = "Option::is_none")]
1861 pub direction: Option<PermissionPromptRequestMemoryDirection>,
1862 pub fact: String,
1864 pub kind: PermissionPromptRequestMemoryKind,
1866 #[serde(skip_serializing_if = "Option::is_none")]
1868 pub reason: Option<String>,
1869 #[serde(skip_serializing_if = "Option::is_none")]
1871 pub subject: Option<String>,
1872 #[serde(skip_serializing_if = "Option::is_none")]
1874 pub tool_call_id: Option<String>,
1875}
1876
1877#[derive(Debug, Clone, Serialize, Deserialize)]
1879#[serde(rename_all = "camelCase")]
1880pub struct PermissionPromptRequestCustomTool {
1881 #[serde(skip_serializing_if = "Option::is_none")]
1883 pub args: Option<serde_json::Value>,
1884 pub kind: PermissionPromptRequestCustomToolKind,
1886 #[serde(skip_serializing_if = "Option::is_none")]
1888 pub tool_call_id: Option<String>,
1889 pub tool_description: String,
1891 pub tool_name: String,
1893}
1894
1895#[derive(Debug, Clone, Serialize, Deserialize)]
1897#[serde(rename_all = "camelCase")]
1898pub struct PermissionPromptRequestPath {
1899 pub access_kind: PermissionPromptRequestPathAccessKind,
1901 pub kind: PermissionPromptRequestPathKind,
1903 pub paths: Vec<String>,
1905 #[serde(skip_serializing_if = "Option::is_none")]
1907 pub tool_call_id: Option<String>,
1908}
1909
1910#[derive(Debug, Clone, Serialize, Deserialize)]
1912#[serde(rename_all = "camelCase")]
1913pub struct PermissionPromptRequestHook {
1914 #[serde(skip_serializing_if = "Option::is_none")]
1916 pub hook_message: Option<String>,
1917 pub kind: PermissionPromptRequestHookKind,
1919 #[serde(skip_serializing_if = "Option::is_none")]
1921 pub tool_args: Option<serde_json::Value>,
1922 #[serde(skip_serializing_if = "Option::is_none")]
1924 pub tool_call_id: Option<String>,
1925 pub tool_name: String,
1927}
1928
1929#[derive(Debug, Clone, Serialize, Deserialize)]
1931#[serde(rename_all = "camelCase")]
1932pub struct PermissionRequestedData {
1933 pub permission_request: PermissionRequest,
1935 #[serde(skip_serializing_if = "Option::is_none")]
1937 pub prompt_request: Option<PermissionPromptRequest>,
1938 pub request_id: RequestId,
1940 #[serde(skip_serializing_if = "Option::is_none")]
1942 pub resolved_by_hook: Option<bool>,
1943}
1944
1945#[derive(Debug, Clone, Serialize, Deserialize)]
1946#[serde(rename_all = "camelCase")]
1947pub struct PermissionApproved {
1948 pub kind: PermissionApprovedKind,
1950}
1951
1952#[derive(Debug, Clone, Serialize, Deserialize)]
1953#[serde(rename_all = "camelCase")]
1954pub struct UserToolSessionApprovalCommands {
1955 pub command_identifiers: Vec<String>,
1957 pub kind: UserToolSessionApprovalCommandsKind,
1959}
1960
1961#[derive(Debug, Clone, Serialize, Deserialize)]
1962#[serde(rename_all = "camelCase")]
1963pub struct UserToolSessionApprovalRead {
1964 pub kind: UserToolSessionApprovalReadKind,
1966}
1967
1968#[derive(Debug, Clone, Serialize, Deserialize)]
1969#[serde(rename_all = "camelCase")]
1970pub struct UserToolSessionApprovalWrite {
1971 pub kind: UserToolSessionApprovalWriteKind,
1973}
1974
1975#[derive(Debug, Clone, Serialize, Deserialize)]
1976#[serde(rename_all = "camelCase")]
1977pub struct UserToolSessionApprovalMcp {
1978 pub kind: UserToolSessionApprovalMcpKind,
1980 pub server_name: String,
1982 pub tool_name: Option<String>,
1984}
1985
1986#[derive(Debug, Clone, Serialize, Deserialize)]
1987#[serde(rename_all = "camelCase")]
1988pub struct UserToolSessionApprovalMemory {
1989 pub kind: UserToolSessionApprovalMemoryKind,
1991}
1992
1993#[derive(Debug, Clone, Serialize, Deserialize)]
1994#[serde(rename_all = "camelCase")]
1995pub struct UserToolSessionApprovalCustomTool {
1996 pub kind: UserToolSessionApprovalCustomToolKind,
1998 pub tool_name: String,
2000}
2001
2002#[derive(Debug, Clone, Serialize, Deserialize)]
2003#[serde(rename_all = "camelCase")]
2004pub struct PermissionApprovedForSession {
2005 pub approval: UserToolSessionApproval,
2007 pub kind: PermissionApprovedForSessionKind,
2009}
2010
2011#[derive(Debug, Clone, Serialize, Deserialize)]
2012#[serde(rename_all = "camelCase")]
2013pub struct PermissionApprovedForLocation {
2014 pub approval: UserToolSessionApproval,
2016 pub kind: PermissionApprovedForLocationKind,
2018 pub location_key: String,
2020}
2021
2022#[derive(Debug, Clone, Serialize, Deserialize)]
2023#[serde(rename_all = "camelCase")]
2024pub struct PermissionCancelled {
2025 pub kind: PermissionCancelledKind,
2027 #[serde(skip_serializing_if = "Option::is_none")]
2029 pub reason: Option<String>,
2030}
2031
2032#[derive(Debug, Clone, Serialize, Deserialize)]
2033#[serde(rename_all = "camelCase")]
2034pub struct PermissionRule {
2035 pub argument: Option<String>,
2037 pub kind: String,
2039}
2040
2041#[derive(Debug, Clone, Serialize, Deserialize)]
2042#[serde(rename_all = "camelCase")]
2043pub struct PermissionDeniedByRules {
2044 pub kind: PermissionDeniedByRulesKind,
2046 pub rules: Vec<PermissionRule>,
2048}
2049
2050#[derive(Debug, Clone, Serialize, Deserialize)]
2051#[serde(rename_all = "camelCase")]
2052pub struct PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser {
2053 pub kind: PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUserKind,
2055}
2056
2057#[derive(Debug, Clone, Serialize, Deserialize)]
2058#[serde(rename_all = "camelCase")]
2059pub struct PermissionDeniedInteractivelyByUser {
2060 #[serde(skip_serializing_if = "Option::is_none")]
2062 pub feedback: Option<String>,
2063 #[serde(skip_serializing_if = "Option::is_none")]
2065 pub force_reject: Option<bool>,
2066 pub kind: PermissionDeniedInteractivelyByUserKind,
2068}
2069
2070#[derive(Debug, Clone, Serialize, Deserialize)]
2071#[serde(rename_all = "camelCase")]
2072pub struct PermissionDeniedByContentExclusionPolicy {
2073 pub kind: PermissionDeniedByContentExclusionPolicyKind,
2075 pub message: String,
2077 pub path: String,
2079}
2080
2081#[derive(Debug, Clone, Serialize, Deserialize)]
2082#[serde(rename_all = "camelCase")]
2083pub struct PermissionDeniedByPermissionRequestHook {
2084 #[serde(skip_serializing_if = "Option::is_none")]
2086 pub interrupt: Option<bool>,
2087 pub kind: PermissionDeniedByPermissionRequestHookKind,
2089 #[serde(skip_serializing_if = "Option::is_none")]
2091 pub message: Option<String>,
2092}
2093
2094#[derive(Debug, Clone, Serialize, Deserialize)]
2096#[serde(rename_all = "camelCase")]
2097pub struct PermissionCompletedData {
2098 pub request_id: RequestId,
2100 pub result: PermissionResult,
2102 #[serde(skip_serializing_if = "Option::is_none")]
2104 pub tool_call_id: Option<String>,
2105}
2106
2107#[derive(Debug, Clone, Serialize, Deserialize)]
2109#[serde(rename_all = "camelCase")]
2110pub struct UserInputRequestedData {
2111 #[serde(skip_serializing_if = "Option::is_none")]
2113 pub allow_freeform: Option<bool>,
2114 #[serde(default)]
2116 pub choices: Vec<String>,
2117 pub question: String,
2119 pub request_id: RequestId,
2121 #[serde(skip_serializing_if = "Option::is_none")]
2123 pub tool_call_id: Option<String>,
2124}
2125
2126#[derive(Debug, Clone, Serialize, Deserialize)]
2128#[serde(rename_all = "camelCase")]
2129pub struct UserInputCompletedData {
2130 #[serde(skip_serializing_if = "Option::is_none")]
2132 pub answer: Option<String>,
2133 pub request_id: RequestId,
2135 #[serde(skip_serializing_if = "Option::is_none")]
2137 pub was_freeform: Option<bool>,
2138}
2139
2140#[derive(Debug, Clone, Serialize, Deserialize)]
2142#[serde(rename_all = "camelCase")]
2143pub struct ElicitationRequestedSchema {
2144 pub properties: HashMap<String, serde_json::Value>,
2146 #[serde(default)]
2148 pub required: Vec<String>,
2149 pub r#type: ElicitationRequestedSchemaType,
2151}
2152
2153#[derive(Debug, Clone, Serialize, Deserialize)]
2155#[serde(rename_all = "camelCase")]
2156pub struct ElicitationRequestedData {
2157 #[serde(skip_serializing_if = "Option::is_none")]
2159 pub elicitation_source: Option<String>,
2160 pub message: String,
2162 #[serde(skip_serializing_if = "Option::is_none")]
2164 pub mode: Option<ElicitationRequestedMode>,
2165 #[serde(skip_serializing_if = "Option::is_none")]
2167 pub requested_schema: Option<ElicitationRequestedSchema>,
2168 pub request_id: RequestId,
2170 #[serde(skip_serializing_if = "Option::is_none")]
2172 pub tool_call_id: Option<String>,
2173 #[serde(skip_serializing_if = "Option::is_none")]
2175 pub url: Option<String>,
2176}
2177
2178#[derive(Debug, Clone, Serialize, Deserialize)]
2180#[serde(rename_all = "camelCase")]
2181pub struct ElicitationCompletedData {
2182 #[serde(skip_serializing_if = "Option::is_none")]
2184 pub action: Option<ElicitationCompletedAction>,
2185 #[serde(default)]
2187 pub content: HashMap<String, serde_json::Value>,
2188 pub request_id: RequestId,
2190}
2191
2192#[derive(Debug, Clone, Serialize, Deserialize)]
2194#[serde(rename_all = "camelCase")]
2195pub struct SamplingRequestedData {
2196 pub mcp_request_id: serde_json::Value,
2198 pub request_id: RequestId,
2200 pub server_name: String,
2202}
2203
2204#[derive(Debug, Clone, Serialize, Deserialize)]
2206#[serde(rename_all = "camelCase")]
2207pub struct SamplingCompletedData {
2208 pub request_id: RequestId,
2210}
2211
2212#[derive(Debug, Clone, Serialize, Deserialize)]
2214#[serde(rename_all = "camelCase")]
2215pub struct McpOauthRequiredStaticClientConfig {
2216 pub client_id: String,
2218 #[serde(skip_serializing_if = "Option::is_none")]
2220 pub grant_type: Option<McpOauthRequiredStaticClientConfigGrantType>,
2221 #[serde(skip_serializing_if = "Option::is_none")]
2223 pub public_client: Option<bool>,
2224}
2225
2226#[derive(Debug, Clone, Serialize, Deserialize)]
2228#[serde(rename_all = "camelCase")]
2229pub struct McpOauthRequiredData {
2230 pub request_id: RequestId,
2232 pub server_name: String,
2234 pub server_url: String,
2236 #[serde(skip_serializing_if = "Option::is_none")]
2238 pub static_client_config: Option<McpOauthRequiredStaticClientConfig>,
2239}
2240
2241#[derive(Debug, Clone, Serialize, Deserialize)]
2243#[serde(rename_all = "camelCase")]
2244pub struct McpOauthCompletedData {
2245 pub request_id: RequestId,
2247}
2248
2249#[derive(Debug, Clone, Serialize, Deserialize)]
2251#[serde(rename_all = "camelCase")]
2252pub struct ExternalToolRequestedData {
2253 #[serde(skip_serializing_if = "Option::is_none")]
2255 pub arguments: Option<serde_json::Value>,
2256 pub request_id: RequestId,
2258 pub session_id: SessionId,
2260 pub tool_call_id: String,
2262 pub tool_name: String,
2264 #[serde(skip_serializing_if = "Option::is_none")]
2266 pub traceparent: Option<String>,
2267 #[serde(skip_serializing_if = "Option::is_none")]
2269 pub tracestate: Option<String>,
2270}
2271
2272#[derive(Debug, Clone, Serialize, Deserialize)]
2274#[serde(rename_all = "camelCase")]
2275pub struct ExternalToolCompletedData {
2276 pub request_id: RequestId,
2278}
2279
2280#[derive(Debug, Clone, Serialize, Deserialize)]
2282#[serde(rename_all = "camelCase")]
2283pub struct CommandQueuedData {
2284 pub command: String,
2286 pub request_id: RequestId,
2288}
2289
2290#[derive(Debug, Clone, Serialize, Deserialize)]
2292#[serde(rename_all = "camelCase")]
2293pub struct CommandExecuteData {
2294 pub args: String,
2296 pub command: String,
2298 pub command_name: String,
2300 pub request_id: RequestId,
2302}
2303
2304#[derive(Debug, Clone, Serialize, Deserialize)]
2306#[serde(rename_all = "camelCase")]
2307pub struct CommandCompletedData {
2308 pub request_id: RequestId,
2310}
2311
2312#[derive(Debug, Clone, Serialize, Deserialize)]
2314#[serde(rename_all = "camelCase")]
2315pub struct AutoModeSwitchRequestedData {
2316 #[serde(skip_serializing_if = "Option::is_none")]
2318 pub error_code: Option<String>,
2319 pub request_id: RequestId,
2321 #[serde(skip_serializing_if = "Option::is_none")]
2323 pub retry_after_seconds: Option<f64>,
2324}
2325
2326#[derive(Debug, Clone, Serialize, Deserialize)]
2328#[serde(rename_all = "camelCase")]
2329pub struct AutoModeSwitchCompletedData {
2330 pub request_id: RequestId,
2332 pub response: String,
2334}
2335
2336#[derive(Debug, Clone, Serialize, Deserialize)]
2337#[serde(rename_all = "camelCase")]
2338pub struct CommandsChangedCommand {
2339 #[serde(skip_serializing_if = "Option::is_none")]
2340 pub description: Option<String>,
2341 pub name: String,
2342}
2343
2344#[derive(Debug, Clone, Serialize, Deserialize)]
2346#[serde(rename_all = "camelCase")]
2347pub struct CommandsChangedData {
2348 pub commands: Vec<CommandsChangedCommand>,
2350}
2351
2352#[derive(Debug, Clone, Serialize, Deserialize)]
2354#[serde(rename_all = "camelCase")]
2355pub struct CapabilitiesChangedUI {
2356 #[serde(skip_serializing_if = "Option::is_none")]
2358 pub elicitation: Option<bool>,
2359}
2360
2361#[derive(Debug, Clone, Serialize, Deserialize)]
2363#[serde(rename_all = "camelCase")]
2364pub struct CapabilitiesChangedData {
2365 #[serde(skip_serializing_if = "Option::is_none")]
2367 pub ui: Option<CapabilitiesChangedUI>,
2368}
2369
2370#[derive(Debug, Clone, Serialize, Deserialize)]
2372#[serde(rename_all = "camelCase")]
2373pub struct ExitPlanModeRequestedData {
2374 pub actions: Vec<String>,
2376 pub plan_content: String,
2378 pub recommended_action: String,
2380 pub request_id: RequestId,
2382 pub summary: String,
2384}
2385
2386#[derive(Debug, Clone, Serialize, Deserialize)]
2388#[serde(rename_all = "camelCase")]
2389pub struct ExitPlanModeCompletedData {
2390 #[serde(skip_serializing_if = "Option::is_none")]
2392 pub approved: Option<bool>,
2393 #[serde(skip_serializing_if = "Option::is_none")]
2395 pub auto_approve_edits: Option<bool>,
2396 #[serde(skip_serializing_if = "Option::is_none")]
2398 pub feedback: Option<String>,
2399 pub request_id: RequestId,
2401 #[serde(skip_serializing_if = "Option::is_none")]
2403 pub selected_action: Option<String>,
2404}
2405
2406#[derive(Debug, Clone, Serialize, Deserialize)]
2407#[serde(rename_all = "camelCase")]
2408pub struct SessionToolsUpdatedData {
2409 pub model: String,
2410}
2411
2412#[derive(Debug, Clone, Serialize, Deserialize)]
2413#[serde(rename_all = "camelCase")]
2414pub struct SessionBackgroundTasksChangedData {}
2415
2416#[derive(Debug, Clone, Serialize, Deserialize)]
2417#[serde(rename_all = "camelCase")]
2418pub struct SkillsLoadedSkill {
2419 pub description: String,
2421 pub enabled: bool,
2423 pub name: String,
2425 #[serde(skip_serializing_if = "Option::is_none")]
2427 pub path: Option<String>,
2428 pub source: String,
2430 pub user_invocable: bool,
2432}
2433
2434#[derive(Debug, Clone, Serialize, Deserialize)]
2435#[serde(rename_all = "camelCase")]
2436pub struct SessionSkillsLoadedData {
2437 pub skills: Vec<SkillsLoadedSkill>,
2439}
2440
2441#[derive(Debug, Clone, Serialize, Deserialize)]
2442#[serde(rename_all = "camelCase")]
2443pub struct CustomAgentsUpdatedAgent {
2444 pub description: String,
2446 pub display_name: String,
2448 pub id: String,
2450 #[serde(skip_serializing_if = "Option::is_none")]
2452 pub model: Option<String>,
2453 pub name: String,
2455 pub source: String,
2457 pub tools: Vec<String>,
2459 pub user_invocable: bool,
2461}
2462
2463#[derive(Debug, Clone, Serialize, Deserialize)]
2464#[serde(rename_all = "camelCase")]
2465pub struct SessionCustomAgentsUpdatedData {
2466 pub agents: Vec<CustomAgentsUpdatedAgent>,
2468 pub errors: Vec<String>,
2470 pub warnings: Vec<String>,
2472}
2473
2474#[derive(Debug, Clone, Serialize, Deserialize)]
2475#[serde(rename_all = "camelCase")]
2476pub struct McpServersLoadedServer {
2477 #[serde(skip_serializing_if = "Option::is_none")]
2479 pub error: Option<String>,
2480 pub name: String,
2482 #[serde(skip_serializing_if = "Option::is_none")]
2484 pub source: Option<String>,
2485 pub status: McpServersLoadedServerStatus,
2487}
2488
2489#[derive(Debug, Clone, Serialize, Deserialize)]
2490#[serde(rename_all = "camelCase")]
2491pub struct SessionMcpServersLoadedData {
2492 pub servers: Vec<McpServersLoadedServer>,
2494}
2495
2496#[derive(Debug, Clone, Serialize, Deserialize)]
2497#[serde(rename_all = "camelCase")]
2498pub struct SessionMcpServerStatusChangedData {
2499 pub server_name: String,
2501 pub status: McpServerStatusChangedStatus,
2503}
2504
2505#[derive(Debug, Clone, Serialize, Deserialize)]
2506#[serde(rename_all = "camelCase")]
2507pub struct ExtensionsLoadedExtension {
2508 pub id: String,
2510 pub name: String,
2512 pub source: ExtensionsLoadedExtensionSource,
2514 pub status: ExtensionsLoadedExtensionStatus,
2516}
2517
2518#[derive(Debug, Clone, Serialize, Deserialize)]
2519#[serde(rename_all = "camelCase")]
2520pub struct SessionExtensionsLoadedData {
2521 pub extensions: Vec<ExtensionsLoadedExtension>,
2523}
2524
2525#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2527pub enum WorkingDirectoryContextHostType {
2528 #[serde(rename = "github")]
2529 Github,
2530 #[serde(rename = "ado")]
2531 Ado,
2532 #[serde(other)]
2534 Unknown,
2535}
2536
2537#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2539pub enum PlanChangedOperation {
2540 #[serde(rename = "create")]
2541 Create,
2542 #[serde(rename = "update")]
2543 Update,
2544 #[serde(rename = "delete")]
2545 Delete,
2546 #[serde(other)]
2548 Unknown,
2549}
2550
2551#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2553pub enum WorkspaceFileChangedOperation {
2554 #[serde(rename = "create")]
2555 Create,
2556 #[serde(rename = "update")]
2557 Update,
2558 #[serde(other)]
2560 Unknown,
2561}
2562
2563#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2565pub enum HandoffSourceType {
2566 #[serde(rename = "remote")]
2567 Remote,
2568 #[serde(rename = "local")]
2569 Local,
2570 #[serde(other)]
2572 Unknown,
2573}
2574
2575#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2577pub enum ShutdownType {
2578 #[serde(rename = "routine")]
2579 Routine,
2580 #[serde(rename = "error")]
2581 Error,
2582 #[serde(other)]
2584 Unknown,
2585}
2586
2587#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2589pub enum UserMessageAgentMode {
2590 #[serde(rename = "interactive")]
2591 Interactive,
2592 #[serde(rename = "plan")]
2593 Plan,
2594 #[serde(rename = "autopilot")]
2595 Autopilot,
2596 #[serde(rename = "shell")]
2597 Shell,
2598 #[serde(other)]
2600 Unknown,
2601}
2602
2603#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2605pub enum AssistantMessageToolRequestType {
2606 #[serde(rename = "function")]
2607 Function,
2608 #[serde(rename = "custom")]
2609 Custom,
2610 #[serde(other)]
2612 Unknown,
2613}
2614
2615#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2617pub enum ModelCallFailureSource {
2618 #[serde(rename = "top_level")]
2619 TopLevel,
2620 #[serde(rename = "subagent")]
2621 Subagent,
2622 #[serde(rename = "mcp_sampling")]
2623 McpSampling,
2624 #[serde(other)]
2626 Unknown,
2627}
2628
2629#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2631pub enum SystemMessageRole {
2632 #[serde(rename = "system")]
2633 System,
2634 #[serde(rename = "developer")]
2635 Developer,
2636 #[serde(other)]
2638 Unknown,
2639}
2640
2641#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2643pub enum PermissionRequestShellKind {
2644 #[serde(rename = "shell")]
2645 Shell,
2646}
2647
2648#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2650pub enum PermissionRequestWriteKind {
2651 #[serde(rename = "write")]
2652 Write,
2653}
2654
2655#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2657pub enum PermissionRequestReadKind {
2658 #[serde(rename = "read")]
2659 Read,
2660}
2661
2662#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2664pub enum PermissionRequestMcpKind {
2665 #[serde(rename = "mcp")]
2666 Mcp,
2667}
2668
2669#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2671pub enum PermissionRequestUrlKind {
2672 #[serde(rename = "url")]
2673 Url,
2674}
2675
2676#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2678pub enum PermissionRequestMemoryAction {
2679 #[serde(rename = "store")]
2680 Store,
2681 #[serde(rename = "vote")]
2682 Vote,
2683 #[serde(other)]
2685 Unknown,
2686}
2687
2688#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2690pub enum PermissionRequestMemoryDirection {
2691 #[serde(rename = "upvote")]
2692 Upvote,
2693 #[serde(rename = "downvote")]
2694 Downvote,
2695 #[serde(other)]
2697 Unknown,
2698}
2699
2700#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2702pub enum PermissionRequestMemoryKind {
2703 #[serde(rename = "memory")]
2704 Memory,
2705}
2706
2707#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2709pub enum PermissionRequestCustomToolKind {
2710 #[serde(rename = "custom-tool")]
2711 CustomTool,
2712}
2713
2714#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2716pub enum PermissionRequestHookKind {
2717 #[serde(rename = "hook")]
2718 Hook,
2719}
2720
2721#[derive(Debug, Clone, Serialize, Deserialize)]
2723#[serde(untagged)]
2724pub enum PermissionRequest {
2725 Shell(PermissionRequestShell),
2726 Write(PermissionRequestWrite),
2727 Read(PermissionRequestRead),
2728 Mcp(PermissionRequestMcp),
2729 Url(PermissionRequestUrl),
2730 Memory(PermissionRequestMemory),
2731 CustomTool(PermissionRequestCustomTool),
2732 Hook(PermissionRequestHook),
2733}
2734
2735#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2737pub enum PermissionPromptRequestCommandsKind {
2738 #[serde(rename = "commands")]
2739 Commands,
2740}
2741
2742#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2744pub enum PermissionPromptRequestWriteKind {
2745 #[serde(rename = "write")]
2746 Write,
2747}
2748
2749#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2751pub enum PermissionPromptRequestReadKind {
2752 #[serde(rename = "read")]
2753 Read,
2754}
2755
2756#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2758pub enum PermissionPromptRequestMcpKind {
2759 #[serde(rename = "mcp")]
2760 Mcp,
2761}
2762
2763#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2765pub enum PermissionPromptRequestUrlKind {
2766 #[serde(rename = "url")]
2767 Url,
2768}
2769
2770#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2772pub enum PermissionPromptRequestMemoryAction {
2773 #[serde(rename = "store")]
2774 Store,
2775 #[serde(rename = "vote")]
2776 Vote,
2777 #[serde(other)]
2779 Unknown,
2780}
2781
2782#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2784pub enum PermissionPromptRequestMemoryDirection {
2785 #[serde(rename = "upvote")]
2786 Upvote,
2787 #[serde(rename = "downvote")]
2788 Downvote,
2789 #[serde(other)]
2791 Unknown,
2792}
2793
2794#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2796pub enum PermissionPromptRequestMemoryKind {
2797 #[serde(rename = "memory")]
2798 Memory,
2799}
2800
2801#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2803pub enum PermissionPromptRequestCustomToolKind {
2804 #[serde(rename = "custom-tool")]
2805 CustomTool,
2806}
2807
2808#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2810pub enum PermissionPromptRequestPathAccessKind {
2811 #[serde(rename = "read")]
2812 Read,
2813 #[serde(rename = "shell")]
2814 Shell,
2815 #[serde(rename = "write")]
2816 Write,
2817 #[serde(other)]
2819 Unknown,
2820}
2821
2822#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2824pub enum PermissionPromptRequestPathKind {
2825 #[serde(rename = "path")]
2826 Path,
2827}
2828
2829#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2831pub enum PermissionPromptRequestHookKind {
2832 #[serde(rename = "hook")]
2833 Hook,
2834}
2835
2836#[derive(Debug, Clone, Serialize, Deserialize)]
2838#[serde(untagged)]
2839pub enum PermissionPromptRequest {
2840 Commands(PermissionPromptRequestCommands),
2841 Write(PermissionPromptRequestWrite),
2842 Read(PermissionPromptRequestRead),
2843 Mcp(PermissionPromptRequestMcp),
2844 Url(PermissionPromptRequestUrl),
2845 Memory(PermissionPromptRequestMemory),
2846 CustomTool(PermissionPromptRequestCustomTool),
2847 Path(PermissionPromptRequestPath),
2848 Hook(PermissionPromptRequestHook),
2849}
2850
2851#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2853pub enum PermissionApprovedKind {
2854 #[serde(rename = "approved")]
2855 Approved,
2856}
2857
2858#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2860pub enum UserToolSessionApprovalCommandsKind {
2861 #[serde(rename = "commands")]
2862 Commands,
2863}
2864
2865#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2867pub enum UserToolSessionApprovalReadKind {
2868 #[serde(rename = "read")]
2869 Read,
2870}
2871
2872#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2874pub enum UserToolSessionApprovalWriteKind {
2875 #[serde(rename = "write")]
2876 Write,
2877}
2878
2879#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2881pub enum UserToolSessionApprovalMcpKind {
2882 #[serde(rename = "mcp")]
2883 Mcp,
2884}
2885
2886#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2888pub enum UserToolSessionApprovalMemoryKind {
2889 #[serde(rename = "memory")]
2890 Memory,
2891}
2892
2893#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2895pub enum UserToolSessionApprovalCustomToolKind {
2896 #[serde(rename = "custom-tool")]
2897 CustomTool,
2898}
2899
2900#[derive(Debug, Clone, Serialize, Deserialize)]
2902#[serde(untagged)]
2903pub enum UserToolSessionApproval {
2904 Commands(UserToolSessionApprovalCommands),
2905 Read(UserToolSessionApprovalRead),
2906 Write(UserToolSessionApprovalWrite),
2907 Mcp(UserToolSessionApprovalMcp),
2908 Memory(UserToolSessionApprovalMemory),
2909 CustomTool(UserToolSessionApprovalCustomTool),
2910}
2911
2912#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2914pub enum PermissionApprovedForSessionKind {
2915 #[serde(rename = "approved-for-session")]
2916 ApprovedForSession,
2917}
2918
2919#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2921pub enum PermissionApprovedForLocationKind {
2922 #[serde(rename = "approved-for-location")]
2923 ApprovedForLocation,
2924}
2925
2926#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2928pub enum PermissionCancelledKind {
2929 #[serde(rename = "cancelled")]
2930 Cancelled,
2931}
2932
2933#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2935pub enum PermissionDeniedByRulesKind {
2936 #[serde(rename = "denied-by-rules")]
2937 DeniedByRules,
2938}
2939
2940#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2942pub enum PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUserKind {
2943 #[serde(rename = "denied-no-approval-rule-and-could-not-request-from-user")]
2944 DeniedNoApprovalRuleAndCouldNotRequestFromUser,
2945}
2946
2947#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2949pub enum PermissionDeniedInteractivelyByUserKind {
2950 #[serde(rename = "denied-interactively-by-user")]
2951 DeniedInteractivelyByUser,
2952}
2953
2954#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2956pub enum PermissionDeniedByContentExclusionPolicyKind {
2957 #[serde(rename = "denied-by-content-exclusion-policy")]
2958 DeniedByContentExclusionPolicy,
2959}
2960
2961#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2963pub enum PermissionDeniedByPermissionRequestHookKind {
2964 #[serde(rename = "denied-by-permission-request-hook")]
2965 DeniedByPermissionRequestHook,
2966}
2967
2968#[derive(Debug, Clone, Serialize, Deserialize)]
2970#[serde(untagged)]
2971pub enum PermissionResult {
2972 Approved(PermissionApproved),
2973 ApprovedForSession(PermissionApprovedForSession),
2974 ApprovedForLocation(PermissionApprovedForLocation),
2975 Cancelled(PermissionCancelled),
2976 DeniedByRules(PermissionDeniedByRules),
2977 DeniedNoApprovalRuleAndCouldNotRequestFromUser(
2978 PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser,
2979 ),
2980 DeniedInteractivelyByUser(PermissionDeniedInteractivelyByUser),
2981 DeniedByContentExclusionPolicy(PermissionDeniedByContentExclusionPolicy),
2982 DeniedByPermissionRequestHook(PermissionDeniedByPermissionRequestHook),
2983}
2984
2985#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2987pub enum ElicitationRequestedMode {
2988 #[serde(rename = "form")]
2989 Form,
2990 #[serde(rename = "url")]
2991 Url,
2992 #[serde(other)]
2994 Unknown,
2995}
2996
2997#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
2999pub enum ElicitationRequestedSchemaType {
3000 #[serde(rename = "object")]
3001 Object,
3002}
3003
3004#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
3006pub enum ElicitationCompletedAction {
3007 #[serde(rename = "accept")]
3008 Accept,
3009 #[serde(rename = "decline")]
3010 Decline,
3011 #[serde(rename = "cancel")]
3012 Cancel,
3013 #[serde(other)]
3015 Unknown,
3016}
3017
3018#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
3020pub enum McpOauthRequiredStaticClientConfigGrantType {
3021 #[serde(rename = "client_credentials")]
3022 ClientCredentials,
3023}
3024
3025#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
3027pub enum McpServersLoadedServerStatus {
3028 #[serde(rename = "connected")]
3029 Connected,
3030 #[serde(rename = "failed")]
3031 Failed,
3032 #[serde(rename = "needs-auth")]
3033 NeedsAuth,
3034 #[serde(rename = "pending")]
3035 Pending,
3036 #[serde(rename = "disabled")]
3037 Disabled,
3038 #[serde(rename = "not_configured")]
3039 NotConfigured,
3040 #[serde(other)]
3042 Unknown,
3043}
3044
3045#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
3047pub enum McpServerStatusChangedStatus {
3048 #[serde(rename = "connected")]
3049 Connected,
3050 #[serde(rename = "failed")]
3051 Failed,
3052 #[serde(rename = "needs-auth")]
3053 NeedsAuth,
3054 #[serde(rename = "pending")]
3055 Pending,
3056 #[serde(rename = "disabled")]
3057 Disabled,
3058 #[serde(rename = "not_configured")]
3059 NotConfigured,
3060 #[serde(other)]
3062 Unknown,
3063}
3064
3065#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
3067pub enum ExtensionsLoadedExtensionSource {
3068 #[serde(rename = "project")]
3069 Project,
3070 #[serde(rename = "user")]
3071 User,
3072 #[serde(other)]
3074 Unknown,
3075}
3076
3077#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
3079pub enum ExtensionsLoadedExtensionStatus {
3080 #[serde(rename = "running")]
3081 Running,
3082 #[serde(rename = "disabled")]
3083 Disabled,
3084 #[serde(rename = "failed")]
3085 Failed,
3086 #[serde(rename = "starting")]
3087 Starting,
3088 #[serde(other)]
3090 Unknown,
3091}