use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::types::{RequestId, SessionId};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum SessionEventType {
#[serde(rename = "session.start")]
SessionStart,
#[serde(rename = "session.resume")]
SessionResume,
#[serde(rename = "session.remote_steerable_changed")]
SessionRemoteSteerableChanged,
#[serde(rename = "session.error")]
SessionError,
#[serde(rename = "session.idle")]
SessionIdle,
#[serde(rename = "session.title_changed")]
SessionTitleChanged,
#[serde(rename = "session.info")]
SessionInfo,
#[serde(rename = "session.warning")]
SessionWarning,
#[serde(rename = "session.model_change")]
SessionModelChange,
#[serde(rename = "session.mode_changed")]
SessionModeChanged,
#[serde(rename = "session.plan_changed")]
SessionPlanChanged,
#[serde(rename = "session.workspace_file_changed")]
SessionWorkspaceFileChanged,
#[serde(rename = "session.handoff")]
SessionHandoff,
#[serde(rename = "session.truncation")]
SessionTruncation,
#[serde(rename = "session.snapshot_rewind")]
SessionSnapshotRewind,
#[serde(rename = "session.shutdown")]
SessionShutdown,
#[serde(rename = "session.context_changed")]
SessionContextChanged,
#[serde(rename = "session.usage_info")]
SessionUsageInfo,
#[serde(rename = "session.compaction_start")]
SessionCompactionStart,
#[serde(rename = "session.compaction_complete")]
SessionCompactionComplete,
#[serde(rename = "session.task_complete")]
SessionTaskComplete,
#[serde(rename = "user.message")]
UserMessage,
#[serde(rename = "pending_messages.modified")]
PendingMessagesModified,
#[serde(rename = "assistant.turn_start")]
AssistantTurnStart,
#[serde(rename = "assistant.intent")]
AssistantIntent,
#[serde(rename = "assistant.reasoning")]
AssistantReasoning,
#[serde(rename = "assistant.reasoning_delta")]
AssistantReasoningDelta,
#[serde(rename = "assistant.streaming_delta")]
AssistantStreamingDelta,
#[serde(rename = "assistant.message")]
AssistantMessage,
#[serde(rename = "assistant.message_start")]
AssistantMessageStart,
#[serde(rename = "assistant.message_delta")]
AssistantMessageDelta,
#[serde(rename = "assistant.turn_end")]
AssistantTurnEnd,
#[serde(rename = "assistant.usage")]
AssistantUsage,
#[serde(rename = "model.call_failure")]
ModelCallFailure,
#[serde(rename = "abort")]
Abort,
#[serde(rename = "tool.user_requested")]
ToolUserRequested,
#[serde(rename = "tool.execution_start")]
ToolExecutionStart,
#[serde(rename = "tool.execution_partial_result")]
ToolExecutionPartialResult,
#[serde(rename = "tool.execution_progress")]
ToolExecutionProgress,
#[serde(rename = "tool.execution_complete")]
ToolExecutionComplete,
#[serde(rename = "skill.invoked")]
SkillInvoked,
#[serde(rename = "subagent.started")]
SubagentStarted,
#[serde(rename = "subagent.completed")]
SubagentCompleted,
#[serde(rename = "subagent.failed")]
SubagentFailed,
#[serde(rename = "subagent.selected")]
SubagentSelected,
#[serde(rename = "subagent.deselected")]
SubagentDeselected,
#[serde(rename = "hook.start")]
HookStart,
#[serde(rename = "hook.end")]
HookEnd,
#[serde(rename = "system.message")]
SystemMessage,
#[serde(rename = "system.notification")]
SystemNotification,
#[serde(rename = "permission.requested")]
PermissionRequested,
#[serde(rename = "permission.completed")]
PermissionCompleted,
#[serde(rename = "user_input.requested")]
UserInputRequested,
#[serde(rename = "user_input.completed")]
UserInputCompleted,
#[serde(rename = "elicitation.requested")]
ElicitationRequested,
#[serde(rename = "elicitation.completed")]
ElicitationCompleted,
#[serde(rename = "sampling.requested")]
SamplingRequested,
#[serde(rename = "sampling.completed")]
SamplingCompleted,
#[serde(rename = "mcp.oauth_required")]
McpOauthRequired,
#[serde(rename = "mcp.oauth_completed")]
McpOauthCompleted,
#[serde(rename = "external_tool.requested")]
ExternalToolRequested,
#[serde(rename = "external_tool.completed")]
ExternalToolCompleted,
#[serde(rename = "command.queued")]
CommandQueued,
#[serde(rename = "command.execute")]
CommandExecute,
#[serde(rename = "command.completed")]
CommandCompleted,
#[serde(rename = "auto_mode_switch.requested")]
AutoModeSwitchRequested,
#[serde(rename = "auto_mode_switch.completed")]
AutoModeSwitchCompleted,
#[serde(rename = "commands.changed")]
CommandsChanged,
#[serde(rename = "capabilities.changed")]
CapabilitiesChanged,
#[serde(rename = "exit_plan_mode.requested")]
ExitPlanModeRequested,
#[serde(rename = "exit_plan_mode.completed")]
ExitPlanModeCompleted,
#[serde(rename = "session.tools_updated")]
SessionToolsUpdated,
#[serde(rename = "session.background_tasks_changed")]
SessionBackgroundTasksChanged,
#[serde(rename = "session.skills_loaded")]
SessionSkillsLoaded,
#[serde(rename = "session.custom_agents_updated")]
SessionCustomAgentsUpdated,
#[serde(rename = "session.mcp_servers_loaded")]
SessionMcpServersLoaded,
#[serde(rename = "session.mcp_server_status_changed")]
SessionMcpServerStatusChanged,
#[serde(rename = "session.extensions_loaded")]
SessionExtensionsLoaded,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum SessionEventData {
#[serde(rename = "session.start")]
SessionStart(SessionStartData),
#[serde(rename = "session.resume")]
SessionResume(SessionResumeData),
#[serde(rename = "session.remote_steerable_changed")]
SessionRemoteSteerableChanged(SessionRemoteSteerableChangedData),
#[serde(rename = "session.error")]
SessionError(SessionErrorData),
#[serde(rename = "session.idle")]
SessionIdle(SessionIdleData),
#[serde(rename = "session.title_changed")]
SessionTitleChanged(SessionTitleChangedData),
#[serde(rename = "session.info")]
SessionInfo(SessionInfoData),
#[serde(rename = "session.warning")]
SessionWarning(SessionWarningData),
#[serde(rename = "session.model_change")]
SessionModelChange(SessionModelChangeData),
#[serde(rename = "session.mode_changed")]
SessionModeChanged(SessionModeChangedData),
#[serde(rename = "session.plan_changed")]
SessionPlanChanged(SessionPlanChangedData),
#[serde(rename = "session.workspace_file_changed")]
SessionWorkspaceFileChanged(SessionWorkspaceFileChangedData),
#[serde(rename = "session.handoff")]
SessionHandoff(SessionHandoffData),
#[serde(rename = "session.truncation")]
SessionTruncation(SessionTruncationData),
#[serde(rename = "session.snapshot_rewind")]
SessionSnapshotRewind(SessionSnapshotRewindData),
#[serde(rename = "session.shutdown")]
SessionShutdown(SessionShutdownData),
#[serde(rename = "session.context_changed")]
SessionContextChanged(SessionContextChangedData),
#[serde(rename = "session.usage_info")]
SessionUsageInfo(SessionUsageInfoData),
#[serde(rename = "session.compaction_start")]
SessionCompactionStart(SessionCompactionStartData),
#[serde(rename = "session.compaction_complete")]
SessionCompactionComplete(SessionCompactionCompleteData),
#[serde(rename = "session.task_complete")]
SessionTaskComplete(SessionTaskCompleteData),
#[serde(rename = "user.message")]
UserMessage(UserMessageData),
#[serde(rename = "pending_messages.modified")]
PendingMessagesModified(PendingMessagesModifiedData),
#[serde(rename = "assistant.turn_start")]
AssistantTurnStart(AssistantTurnStartData),
#[serde(rename = "assistant.intent")]
AssistantIntent(AssistantIntentData),
#[serde(rename = "assistant.reasoning")]
AssistantReasoning(AssistantReasoningData),
#[serde(rename = "assistant.reasoning_delta")]
AssistantReasoningDelta(AssistantReasoningDeltaData),
#[serde(rename = "assistant.streaming_delta")]
AssistantStreamingDelta(AssistantStreamingDeltaData),
#[serde(rename = "assistant.message")]
AssistantMessage(AssistantMessageData),
#[serde(rename = "assistant.message_start")]
AssistantMessageStart(AssistantMessageStartData),
#[serde(rename = "assistant.message_delta")]
AssistantMessageDelta(AssistantMessageDeltaData),
#[serde(rename = "assistant.turn_end")]
AssistantTurnEnd(AssistantTurnEndData),
#[serde(rename = "assistant.usage")]
AssistantUsage(AssistantUsageData),
#[serde(rename = "model.call_failure")]
ModelCallFailure(ModelCallFailureData),
#[serde(rename = "abort")]
Abort(AbortData),
#[serde(rename = "tool.user_requested")]
ToolUserRequested(ToolUserRequestedData),
#[serde(rename = "tool.execution_start")]
ToolExecutionStart(ToolExecutionStartData),
#[serde(rename = "tool.execution_partial_result")]
ToolExecutionPartialResult(ToolExecutionPartialResultData),
#[serde(rename = "tool.execution_progress")]
ToolExecutionProgress(ToolExecutionProgressData),
#[serde(rename = "tool.execution_complete")]
ToolExecutionComplete(ToolExecutionCompleteData),
#[serde(rename = "skill.invoked")]
SkillInvoked(SkillInvokedData),
#[serde(rename = "subagent.started")]
SubagentStarted(SubagentStartedData),
#[serde(rename = "subagent.completed")]
SubagentCompleted(SubagentCompletedData),
#[serde(rename = "subagent.failed")]
SubagentFailed(SubagentFailedData),
#[serde(rename = "subagent.selected")]
SubagentSelected(SubagentSelectedData),
#[serde(rename = "subagent.deselected")]
SubagentDeselected(SubagentDeselectedData),
#[serde(rename = "hook.start")]
HookStart(HookStartData),
#[serde(rename = "hook.end")]
HookEnd(HookEndData),
#[serde(rename = "system.message")]
SystemMessage(SystemMessageData),
#[serde(rename = "system.notification")]
SystemNotification(SystemNotificationData),
#[serde(rename = "permission.requested")]
PermissionRequested(PermissionRequestedData),
#[serde(rename = "permission.completed")]
PermissionCompleted(PermissionCompletedData),
#[serde(rename = "user_input.requested")]
UserInputRequested(UserInputRequestedData),
#[serde(rename = "user_input.completed")]
UserInputCompleted(UserInputCompletedData),
#[serde(rename = "elicitation.requested")]
ElicitationRequested(ElicitationRequestedData),
#[serde(rename = "elicitation.completed")]
ElicitationCompleted(ElicitationCompletedData),
#[serde(rename = "sampling.requested")]
SamplingRequested(SamplingRequestedData),
#[serde(rename = "sampling.completed")]
SamplingCompleted(SamplingCompletedData),
#[serde(rename = "mcp.oauth_required")]
McpOauthRequired(McpOauthRequiredData),
#[serde(rename = "mcp.oauth_completed")]
McpOauthCompleted(McpOauthCompletedData),
#[serde(rename = "external_tool.requested")]
ExternalToolRequested(ExternalToolRequestedData),
#[serde(rename = "external_tool.completed")]
ExternalToolCompleted(ExternalToolCompletedData),
#[serde(rename = "command.queued")]
CommandQueued(CommandQueuedData),
#[serde(rename = "command.execute")]
CommandExecute(CommandExecuteData),
#[serde(rename = "command.completed")]
CommandCompleted(CommandCompletedData),
#[serde(rename = "auto_mode_switch.requested")]
AutoModeSwitchRequested(AutoModeSwitchRequestedData),
#[serde(rename = "auto_mode_switch.completed")]
AutoModeSwitchCompleted(AutoModeSwitchCompletedData),
#[serde(rename = "commands.changed")]
CommandsChanged(CommandsChangedData),
#[serde(rename = "capabilities.changed")]
CapabilitiesChanged(CapabilitiesChangedData),
#[serde(rename = "exit_plan_mode.requested")]
ExitPlanModeRequested(ExitPlanModeRequestedData),
#[serde(rename = "exit_plan_mode.completed")]
ExitPlanModeCompleted(ExitPlanModeCompletedData),
#[serde(rename = "session.tools_updated")]
SessionToolsUpdated(SessionToolsUpdatedData),
#[serde(rename = "session.background_tasks_changed")]
SessionBackgroundTasksChanged(SessionBackgroundTasksChangedData),
#[serde(rename = "session.skills_loaded")]
SessionSkillsLoaded(SessionSkillsLoadedData),
#[serde(rename = "session.custom_agents_updated")]
SessionCustomAgentsUpdated(SessionCustomAgentsUpdatedData),
#[serde(rename = "session.mcp_servers_loaded")]
SessionMcpServersLoaded(SessionMcpServersLoadedData),
#[serde(rename = "session.mcp_server_status_changed")]
SessionMcpServerStatusChanged(SessionMcpServerStatusChangedData),
#[serde(rename = "session.extensions_loaded")]
SessionExtensionsLoaded(SessionExtensionsLoadedData),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TypedSessionEvent {
pub id: String,
pub timestamp: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ephemeral: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_id: Option<String>,
#[serde(flatten)]
pub payload: SessionEventData,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WorkingDirectoryContext {
#[serde(skip_serializing_if = "Option::is_none")]
pub base_commit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
pub cwd: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub git_root: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub head_commit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub host_type: Option<WorkingDirectoryContextHostType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repository: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repository_host: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionStartData {
#[serde(skip_serializing_if = "Option::is_none")]
pub already_in_use: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<WorkingDirectoryContext>,
pub copilot_version: String,
pub producer: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remote_steerable: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected_model: Option<String>,
pub session_id: SessionId,
pub start_time: String,
pub version: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionResumeData {
#[serde(skip_serializing_if = "Option::is_none")]
pub already_in_use: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<WorkingDirectoryContext>,
#[serde(skip_serializing_if = "Option::is_none")]
pub continue_pending_work: Option<bool>,
pub event_count: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remote_steerable: Option<bool>,
pub resume_time: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected_model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_was_active: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionRemoteSteerableChangedData {
pub remote_steerable: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionErrorData {
#[serde(skip_serializing_if = "Option::is_none")]
pub eligible_for_auto_switch: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
pub error_type: String,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stack: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status_code: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionIdleData {
#[serde(skip_serializing_if = "Option::is_none")]
pub aborted: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionTitleChangedData {
pub title: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionInfoData {
pub info_type: String,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionWarningData {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
pub warning_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionModelChangeData {
#[serde(skip_serializing_if = "Option::is_none")]
pub cause: Option<String>,
pub new_model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub previous_model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub previous_reasoning_effort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionModeChangedData {
pub new_mode: String,
pub previous_mode: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionPlanChangedData {
pub operation: PlanChangedOperation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionWorkspaceFileChangedData {
pub operation: WorkspaceFileChangedOperation,
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HandoffRepository {
#[serde(skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
pub name: String,
pub owner: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionHandoffData {
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<String>,
pub handoff_time: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub host: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remote_session_id: Option<SessionId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repository: Option<HandoffRepository>,
pub source_type: HandoffSourceType,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionTruncationData {
pub messages_removed_during_truncation: f64,
pub performed_by: String,
pub post_truncation_messages_length: f64,
pub post_truncation_tokens_in_messages: f64,
pub pre_truncation_messages_length: f64,
pub pre_truncation_tokens_in_messages: f64,
pub token_limit: f64,
pub tokens_removed_during_truncation: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionSnapshotRewindData {
pub events_removed: f64,
pub up_to_event_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShutdownCodeChanges {
pub files_modified: Vec<String>,
pub lines_added: f64,
pub lines_removed: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShutdownModelMetricRequests {
pub cost: f64,
pub count: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShutdownModelMetricTokenDetail {
pub token_count: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShutdownModelMetricUsage {
pub cache_read_tokens: f64,
pub cache_write_tokens: f64,
pub input_tokens: f64,
pub output_tokens: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_tokens: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShutdownModelMetric {
pub requests: ShutdownModelMetricRequests,
#[serde(default)]
pub token_details: HashMap<String, ShutdownModelMetricTokenDetail>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_nano_aiu: Option<f64>,
pub usage: ShutdownModelMetricUsage,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ShutdownTokenDetail {
pub token_count: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionShutdownData {
pub code_changes: ShutdownCodeChanges,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub current_model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub current_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_reason: Option<String>,
pub model_metrics: HashMap<String, ShutdownModelMetric>,
pub session_start_time: f64,
pub shutdown_type: ShutdownType,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_tokens: Option<f64>,
#[serde(default)]
pub token_details: HashMap<String, ShutdownTokenDetail>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_definitions_tokens: Option<f64>,
pub total_api_duration_ms: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_nano_aiu: Option<f64>,
pub total_premium_requests: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionContextChangedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub base_commit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branch: Option<String>,
pub cwd: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub git_root: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub head_commit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub host_type: Option<WorkingDirectoryContextHostType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repository: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repository_host: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionUsageInfoData {
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_tokens: Option<f64>,
pub current_tokens: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_initial: Option<bool>,
pub messages_length: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_tokens: Option<f64>,
pub token_limit: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_definitions_tokens: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionCompactionStartData {
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_definitions_tokens: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail {
pub batch_size: f64,
pub cost_per_batch: f64,
pub token_count: f64,
pub token_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CompactionCompleteCompactionTokensUsedCopilotUsage {
pub token_details: Vec<CompactionCompleteCompactionTokensUsedCopilotUsageTokenDetail>,
pub total_nano_aiu: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CompactionCompleteCompactionTokensUsed {
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_read_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_write_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub copilot_usage: Option<CompactionCompleteCompactionTokensUsedCopilotUsage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionCompactionCompleteData {
#[serde(skip_serializing_if = "Option::is_none")]
pub checkpoint_number: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub checkpoint_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compaction_tokens_used: Option<CompactionCompleteCompactionTokensUsed>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub messages_removed: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_compaction_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_compaction_messages_length: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pre_compaction_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_id: Option<RequestId>,
pub success: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tokens_removed: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_definitions_tokens: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionTaskCompleteData {
#[serde(skip_serializing_if = "Option::is_none")]
pub success: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserMessageData {
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_mode: Option<UserMessageAgentMode>,
#[serde(default)]
pub attachments: Vec<serde_json::Value>,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub interaction_id: Option<String>,
#[serde(default)]
pub native_document_path_fallback_paths: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_agent_task_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(default)]
pub supported_native_document_mime_types: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transformed_content: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PendingMessagesModifiedData {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantTurnStartData {
#[serde(skip_serializing_if = "Option::is_none")]
pub interaction_id: Option<String>,
pub turn_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantIntentData {
pub intent: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantReasoningData {
pub content: String,
pub reasoning_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantReasoningDeltaData {
pub delta_content: String,
pub reasoning_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantStreamingDeltaData {
pub total_response_size_bytes: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantMessageToolRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub intention_summary: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mcp_server_name: Option<String>,
pub name: String,
pub tool_call_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<AssistantMessageToolRequestType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantMessageData {
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub encrypted_content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interaction_id: Option<String>,
pub message_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens: Option<f64>,
#[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_tool_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phase: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_opaque: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_id: Option<RequestId>,
#[serde(default)]
pub tool_requests: Vec<AssistantMessageToolRequest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub turn_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantMessageStartData {
pub message_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub phase: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantMessageDeltaData {
pub delta_content: String,
pub message_id: String,
#[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantTurnEndData {
pub turn_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantUsageCopilotUsageTokenDetail {
pub batch_size: f64,
pub cost_per_batch: f64,
pub token_count: f64,
pub token_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantUsageCopilotUsage {
pub token_details: Vec<AssistantUsageCopilotUsageTokenDetail>,
pub total_nano_aiu: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantUsageQuotaSnapshot {
pub entitlement_requests: f64,
pub is_unlimited_entitlement: bool,
pub overage: f64,
pub overage_allowed_with_exhausted_quota: bool,
pub remaining_percentage: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub reset_date: Option<String>,
pub usage_allowed_with_exhausted_quota: bool,
pub used_requests: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssistantUsageData {
#[serde(skip_serializing_if = "Option::is_none")]
pub api_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_read_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_write_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub copilot_usage: Option<AssistantUsageCopilotUsage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cost: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub initiator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inter_token_latency_ms: Option<f64>,
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens: Option<f64>,
#[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_tool_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_call_id: Option<String>,
#[serde(default)]
pub quota_snapshots: HashMap<String, AssistantUsageQuotaSnapshot>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reasoning_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ttft_ms: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelCallFailureData {
#[serde(skip_serializing_if = "Option::is_none")]
pub api_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_ms: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub initiator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_call_id: Option<String>,
pub source: ModelCallFailureSource,
#[serde(skip_serializing_if = "Option::is_none")]
pub status_code: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AbortData {
pub reason: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolUserRequestedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<serde_json::Value>,
pub tool_call_id: String,
pub tool_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolExecutionStartData {
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mcp_server_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mcp_tool_name: Option<String>,
#[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_tool_call_id: Option<String>,
pub tool_call_id: String,
pub tool_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub turn_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolExecutionPartialResultData {
pub partial_output: String,
pub tool_call_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolExecutionProgressData {
pub progress_message: String,
pub tool_call_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolExecutionCompleteError {
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolExecutionCompleteResult {
pub content: String,
#[serde(default)]
pub contents: Vec<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub detailed_content: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ToolExecutionCompleteData {
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<ToolExecutionCompleteError>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_user_requested: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_tool_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result: Option<ToolExecutionCompleteResult>,
pub success: bool,
pub tool_call_id: String,
#[serde(default)]
pub tool_telemetry: HashMap<String, serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub turn_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SkillInvokedData {
#[serde(default)]
pub allowed_tools: Vec<String>,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub name: String,
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub plugin_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub plugin_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubagentStartedData {
pub agent_description: String,
pub agent_display_name: String,
pub agent_name: String,
pub tool_call_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubagentCompletedData {
pub agent_display_name: String,
pub agent_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_ms: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
pub tool_call_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tool_calls: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubagentFailedData {
pub agent_display_name: String,
pub agent_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_ms: Option<f64>,
pub error: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
pub tool_call_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tokens: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tool_calls: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubagentSelectedData {
pub agent_display_name: String,
pub agent_name: String,
pub tools: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubagentDeselectedData {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HookStartData {
pub hook_invocation_id: String,
pub hook_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub input: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HookEndError {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub stack: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HookEndData {
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<HookEndError>,
pub hook_invocation_id: String,
pub hook_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<serde_json::Value>,
pub success: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SystemMessageMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_version: Option<String>,
#[serde(default)]
pub variables: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SystemMessageData {
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<SystemMessageMetadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
pub role: SystemMessageRole,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SystemNotificationData {
pub content: String,
pub kind: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestShellCommand {
pub identifier: String,
pub read_only: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestShellPossibleUrl {
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestShell {
pub can_offer_session_approval: bool,
pub commands: Vec<PermissionRequestShellCommand>,
pub full_command_text: String,
pub has_write_file_redirection: bool,
pub intention: String,
pub kind: PermissionRequestShellKind,
pub possible_paths: Vec<String>,
pub possible_urls: Vec<PermissionRequestShellPossibleUrl>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warning: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestWrite {
pub can_offer_session_approval: bool,
pub diff: String,
pub file_name: String,
pub intention: String,
pub kind: PermissionRequestWriteKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_file_contents: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestRead {
pub intention: String,
pub kind: PermissionRequestReadKind,
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestMcp {
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
pub kind: PermissionRequestMcpKind,
pub read_only: bool,
pub server_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub tool_name: String,
pub tool_title: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestUrl {
pub intention: String,
pub kind: PermissionRequestUrlKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestMemory {
#[serde(skip_serializing_if = "Option::is_none")]
pub action: Option<PermissionRequestMemoryAction>,
#[serde(skip_serializing_if = "Option::is_none")]
pub citations: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub direction: Option<PermissionRequestMemoryDirection>,
pub fact: String,
pub kind: PermissionRequestMemoryKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestCustomTool {
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
pub kind: PermissionRequestCustomToolKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub tool_description: String,
pub tool_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestHook {
#[serde(skip_serializing_if = "Option::is_none")]
pub hook_message: Option<String>,
pub kind: PermissionRequestHookKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_args: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub tool_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestCommands {
pub can_offer_session_approval: bool,
pub command_identifiers: Vec<String>,
pub full_command_text: String,
pub intention: String,
pub kind: PermissionPromptRequestCommandsKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warning: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestWrite {
pub can_offer_session_approval: bool,
pub diff: String,
pub file_name: String,
pub intention: String,
pub kind: PermissionPromptRequestWriteKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub new_file_contents: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestRead {
pub intention: String,
pub kind: PermissionPromptRequestReadKind,
pub path: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestMcp {
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
pub kind: PermissionPromptRequestMcpKind,
pub server_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub tool_name: String,
pub tool_title: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestUrl {
pub intention: String,
pub kind: PermissionPromptRequestUrlKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestMemory {
#[serde(skip_serializing_if = "Option::is_none")]
pub action: Option<PermissionPromptRequestMemoryAction>,
#[serde(skip_serializing_if = "Option::is_none")]
pub citations: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub direction: Option<PermissionPromptRequestMemoryDirection>,
pub fact: String,
pub kind: PermissionPromptRequestMemoryKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestCustomTool {
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
pub kind: PermissionPromptRequestCustomToolKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub tool_description: String,
pub tool_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestPath {
pub access_kind: PermissionPromptRequestPathAccessKind,
pub kind: PermissionPromptRequestPathKind,
pub paths: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPromptRequestHook {
#[serde(skip_serializing_if = "Option::is_none")]
pub hook_message: Option<String>,
pub kind: PermissionPromptRequestHookKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_args: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
pub tool_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRequestedData {
pub permission_request: PermissionRequest,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_request: Option<PermissionPromptRequest>,
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub resolved_by_hook: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionApproved {
pub kind: PermissionApprovedKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserToolSessionApprovalCommands {
pub command_identifiers: Vec<String>,
pub kind: UserToolSessionApprovalCommandsKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserToolSessionApprovalRead {
pub kind: UserToolSessionApprovalReadKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserToolSessionApprovalWrite {
pub kind: UserToolSessionApprovalWriteKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserToolSessionApprovalMcp {
pub kind: UserToolSessionApprovalMcpKind,
pub server_name: String,
pub tool_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserToolSessionApprovalMemory {
pub kind: UserToolSessionApprovalMemoryKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserToolSessionApprovalCustomTool {
pub kind: UserToolSessionApprovalCustomToolKind,
pub tool_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionApprovedForSession {
pub approval: UserToolSessionApproval,
pub kind: PermissionApprovedForSessionKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionApprovedForLocation {
pub approval: UserToolSessionApproval,
pub kind: PermissionApprovedForLocationKind,
pub location_key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionCancelled {
pub kind: PermissionCancelledKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionRule {
pub argument: Option<String>,
pub kind: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionDeniedByRules {
pub kind: PermissionDeniedByRulesKind,
pub rules: Vec<PermissionRule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser {
pub kind: PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUserKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionDeniedInteractivelyByUser {
#[serde(skip_serializing_if = "Option::is_none")]
pub feedback: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub force_reject: Option<bool>,
pub kind: PermissionDeniedInteractivelyByUserKind,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionDeniedByContentExclusionPolicy {
pub kind: PermissionDeniedByContentExclusionPolicyKind,
pub message: String,
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionDeniedByPermissionRequestHook {
#[serde(skip_serializing_if = "Option::is_none")]
pub interrupt: Option<bool>,
pub kind: PermissionDeniedByPermissionRequestHookKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionCompletedData {
pub request_id: RequestId,
pub result: PermissionResult,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserInputRequestedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_freeform: Option<bool>,
#[serde(default)]
pub choices: Vec<String>,
pub question: String,
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserInputCompletedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub answer: Option<String>,
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub was_freeform: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ElicitationRequestedSchema {
pub properties: HashMap<String, serde_json::Value>,
#[serde(default)]
pub required: Vec<String>,
pub r#type: ElicitationRequestedSchemaType,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ElicitationRequestedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub elicitation_source: Option<String>,
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mode: Option<ElicitationRequestedMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub requested_schema: Option<ElicitationRequestedSchema>,
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_call_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ElicitationCompletedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub action: Option<ElicitationCompletedAction>,
#[serde(default)]
pub content: HashMap<String, serde_json::Value>,
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SamplingRequestedData {
pub mcp_request_id: serde_json::Value,
pub request_id: RequestId,
pub server_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SamplingCompletedData {
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpOauthRequiredStaticClientConfig {
pub client_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub grant_type: Option<McpOauthRequiredStaticClientConfigGrantType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub public_client: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpOauthRequiredData {
pub request_id: RequestId,
pub server_name: String,
pub server_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub static_client_config: Option<McpOauthRequiredStaticClientConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpOauthCompletedData {
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExternalToolRequestedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<serde_json::Value>,
pub request_id: RequestId,
pub session_id: SessionId,
pub tool_call_id: String,
pub tool_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub traceparent: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracestate: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExternalToolCompletedData {
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandQueuedData {
pub command: String,
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandExecuteData {
pub args: String,
pub command: String,
pub command_name: String,
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandCompletedData {
pub request_id: RequestId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AutoModeSwitchRequestedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub retry_after_seconds: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AutoModeSwitchCompletedData {
pub request_id: RequestId,
pub response: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandsChangedCommand {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandsChangedData {
pub commands: Vec<CommandsChangedCommand>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CapabilitiesChangedUI {
#[serde(skip_serializing_if = "Option::is_none")]
pub elicitation: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CapabilitiesChangedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub ui: Option<CapabilitiesChangedUI>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExitPlanModeRequestedData {
pub actions: Vec<String>,
pub plan_content: String,
pub recommended_action: String,
pub request_id: RequestId,
pub summary: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExitPlanModeCompletedData {
#[serde(skip_serializing_if = "Option::is_none")]
pub approved: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_approve_edits: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub feedback: Option<String>,
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected_action: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionToolsUpdatedData {
pub model: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionBackgroundTasksChangedData {}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SkillsLoadedSkill {
pub description: String,
pub enabled: bool,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
pub source: String,
pub user_invocable: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionSkillsLoadedData {
pub skills: Vec<SkillsLoadedSkill>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomAgentsUpdatedAgent {
pub description: String,
pub display_name: String,
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
pub name: String,
pub source: String,
pub tools: Vec<String>,
pub user_invocable: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionCustomAgentsUpdatedData {
pub agents: Vec<CustomAgentsUpdatedAgent>,
pub errors: Vec<String>,
pub warnings: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct McpServersLoadedServer {
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
pub status: McpServersLoadedServerStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionMcpServersLoadedData {
pub servers: Vec<McpServersLoadedServer>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionMcpServerStatusChangedData {
pub server_name: String,
pub status: McpServerStatusChangedStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExtensionsLoadedExtension {
pub id: String,
pub name: String,
pub source: ExtensionsLoadedExtensionSource,
pub status: ExtensionsLoadedExtensionStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionExtensionsLoadedData {
pub extensions: Vec<ExtensionsLoadedExtension>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkingDirectoryContextHostType {
#[serde(rename = "github")]
Github,
#[serde(rename = "ado")]
Ado,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PlanChangedOperation {
#[serde(rename = "create")]
Create,
#[serde(rename = "update")]
Update,
#[serde(rename = "delete")]
Delete,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkspaceFileChangedOperation {
#[serde(rename = "create")]
Create,
#[serde(rename = "update")]
Update,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HandoffSourceType {
#[serde(rename = "remote")]
Remote,
#[serde(rename = "local")]
Local,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ShutdownType {
#[serde(rename = "routine")]
Routine,
#[serde(rename = "error")]
Error,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserMessageAgentMode {
#[serde(rename = "interactive")]
Interactive,
#[serde(rename = "plan")]
Plan,
#[serde(rename = "autopilot")]
Autopilot,
#[serde(rename = "shell")]
Shell,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AssistantMessageToolRequestType {
#[serde(rename = "function")]
Function,
#[serde(rename = "custom")]
Custom,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelCallFailureSource {
#[serde(rename = "top_level")]
TopLevel,
#[serde(rename = "subagent")]
Subagent,
#[serde(rename = "mcp_sampling")]
McpSampling,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SystemMessageRole {
#[serde(rename = "system")]
System,
#[serde(rename = "developer")]
Developer,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestShellKind {
#[serde(rename = "shell")]
Shell,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestWriteKind {
#[serde(rename = "write")]
Write,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestReadKind {
#[serde(rename = "read")]
Read,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestMcpKind {
#[serde(rename = "mcp")]
Mcp,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestUrlKind {
#[serde(rename = "url")]
Url,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestMemoryAction {
#[serde(rename = "store")]
Store,
#[serde(rename = "vote")]
Vote,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestMemoryDirection {
#[serde(rename = "upvote")]
Upvote,
#[serde(rename = "downvote")]
Downvote,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestMemoryKind {
#[serde(rename = "memory")]
Memory,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestCustomToolKind {
#[serde(rename = "custom-tool")]
CustomTool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestHookKind {
#[serde(rename = "hook")]
Hook,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PermissionRequest {
Shell(PermissionRequestShell),
Write(PermissionRequestWrite),
Read(PermissionRequestRead),
Mcp(PermissionRequestMcp),
Url(PermissionRequestUrl),
Memory(PermissionRequestMemory),
CustomTool(PermissionRequestCustomTool),
Hook(PermissionRequestHook),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestCommandsKind {
#[serde(rename = "commands")]
Commands,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestWriteKind {
#[serde(rename = "write")]
Write,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestReadKind {
#[serde(rename = "read")]
Read,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestMcpKind {
#[serde(rename = "mcp")]
Mcp,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestUrlKind {
#[serde(rename = "url")]
Url,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestMemoryAction {
#[serde(rename = "store")]
Store,
#[serde(rename = "vote")]
Vote,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestMemoryDirection {
#[serde(rename = "upvote")]
Upvote,
#[serde(rename = "downvote")]
Downvote,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestMemoryKind {
#[serde(rename = "memory")]
Memory,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestCustomToolKind {
#[serde(rename = "custom-tool")]
CustomTool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestPathAccessKind {
#[serde(rename = "read")]
Read,
#[serde(rename = "shell")]
Shell,
#[serde(rename = "write")]
Write,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestPathKind {
#[serde(rename = "path")]
Path,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestHookKind {
#[serde(rename = "hook")]
Hook,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PermissionPromptRequest {
Commands(PermissionPromptRequestCommands),
Write(PermissionPromptRequestWrite),
Read(PermissionPromptRequestRead),
Mcp(PermissionPromptRequestMcp),
Url(PermissionPromptRequestUrl),
Memory(PermissionPromptRequestMemory),
CustomTool(PermissionPromptRequestCustomTool),
Path(PermissionPromptRequestPath),
Hook(PermissionPromptRequestHook),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionApprovedKind {
#[serde(rename = "approved")]
Approved,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserToolSessionApprovalCommandsKind {
#[serde(rename = "commands")]
Commands,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserToolSessionApprovalReadKind {
#[serde(rename = "read")]
Read,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserToolSessionApprovalWriteKind {
#[serde(rename = "write")]
Write,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserToolSessionApprovalMcpKind {
#[serde(rename = "mcp")]
Mcp,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserToolSessionApprovalMemoryKind {
#[serde(rename = "memory")]
Memory,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserToolSessionApprovalCustomToolKind {
#[serde(rename = "custom-tool")]
CustomTool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum UserToolSessionApproval {
Commands(UserToolSessionApprovalCommands),
Read(UserToolSessionApprovalRead),
Write(UserToolSessionApprovalWrite),
Mcp(UserToolSessionApprovalMcp),
Memory(UserToolSessionApprovalMemory),
CustomTool(UserToolSessionApprovalCustomTool),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionApprovedForSessionKind {
#[serde(rename = "approved-for-session")]
ApprovedForSession,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionApprovedForLocationKind {
#[serde(rename = "approved-for-location")]
ApprovedForLocation,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionCancelledKind {
#[serde(rename = "cancelled")]
Cancelled,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionDeniedByRulesKind {
#[serde(rename = "denied-by-rules")]
DeniedByRules,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUserKind {
#[serde(rename = "denied-no-approval-rule-and-could-not-request-from-user")]
DeniedNoApprovalRuleAndCouldNotRequestFromUser,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionDeniedInteractivelyByUserKind {
#[serde(rename = "denied-interactively-by-user")]
DeniedInteractivelyByUser,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionDeniedByContentExclusionPolicyKind {
#[serde(rename = "denied-by-content-exclusion-policy")]
DeniedByContentExclusionPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionDeniedByPermissionRequestHookKind {
#[serde(rename = "denied-by-permission-request-hook")]
DeniedByPermissionRequestHook,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PermissionResult {
Approved(PermissionApproved),
ApprovedForSession(PermissionApprovedForSession),
ApprovedForLocation(PermissionApprovedForLocation),
Cancelled(PermissionCancelled),
DeniedByRules(PermissionDeniedByRules),
DeniedNoApprovalRuleAndCouldNotRequestFromUser(
PermissionDeniedNoApprovalRuleAndCouldNotRequestFromUser,
),
DeniedInteractivelyByUser(PermissionDeniedInteractivelyByUser),
DeniedByContentExclusionPolicy(PermissionDeniedByContentExclusionPolicy),
DeniedByPermissionRequestHook(PermissionDeniedByPermissionRequestHook),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ElicitationRequestedMode {
#[serde(rename = "form")]
Form,
#[serde(rename = "url")]
Url,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ElicitationRequestedSchemaType {
#[serde(rename = "object")]
Object,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ElicitationCompletedAction {
#[serde(rename = "accept")]
Accept,
#[serde(rename = "decline")]
Decline,
#[serde(rename = "cancel")]
Cancel,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpOauthRequiredStaticClientConfigGrantType {
#[serde(rename = "client_credentials")]
ClientCredentials,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServersLoadedServerStatus {
#[serde(rename = "connected")]
Connected,
#[serde(rename = "failed")]
Failed,
#[serde(rename = "needs-auth")]
NeedsAuth,
#[serde(rename = "pending")]
Pending,
#[serde(rename = "disabled")]
Disabled,
#[serde(rename = "not_configured")]
NotConfigured,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerStatusChangedStatus {
#[serde(rename = "connected")]
Connected,
#[serde(rename = "failed")]
Failed,
#[serde(rename = "needs-auth")]
NeedsAuth,
#[serde(rename = "pending")]
Pending,
#[serde(rename = "disabled")]
Disabled,
#[serde(rename = "not_configured")]
NotConfigured,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtensionsLoadedExtensionSource {
#[serde(rename = "project")]
Project,
#[serde(rename = "user")]
User,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtensionsLoadedExtensionStatus {
#[serde(rename = "running")]
Running,
#[serde(rename = "disabled")]
Disabled,
#[serde(rename = "failed")]
Failed,
#[serde(rename = "starting")]
Starting,
#[serde(other)]
Unknown,
}