use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum PermissionMode {
Ask,
AutoApproveCommands,
FullAccess,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionOptionsSnapshot {
pub permission_mode: PermissionMode,
pub mode: String,
#[serde(default)]
pub available_modes: Vec<AgentModeInfo>,
pub reasoning_effort: String,
pub supported_efforts: Vec<String>,
pub speed: Option<String>,
#[serde(default)]
pub fast_mode_supported: bool,
#[serde(default)]
pub fast_mode_enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fast_mode_label: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgentModeInfo {
pub name: String,
pub display_name: String,
pub description: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SessionOptionsSelectParams {
pub permission_mode: Option<PermissionMode>,
pub mode: Option<String>,
pub reasoning_effort: Option<String>,
pub fast_mode: Option<bool>,
pub full_access_confirmed: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ThemePreferenceSelectParams {
pub theme: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionSummary {
pub session_id: String,
pub title: Option<String>,
pub workspace: String,
pub completed: bool,
pub resumable: bool,
#[serde(default)]
pub size_bytes: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub updated_at: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionHistoryMessage {
#[serde(default)]
pub hidden: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub archive_index: Option<usize>,
pub role: String,
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionLoadResult {
pub session: SessionSummary,
pub messages: Vec<SessionHistoryMessage>,
#[serde(default)]
pub history_start_index: usize,
#[serde(default)]
pub history_has_earlier: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub review_items: Vec<vtcode_exec_events::ThreadItem>,
#[serde(default)]
pub review_history_incomplete: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub activity_items: Vec<vtcode_exec_events::ThreadItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub activity_output_cursors: Vec<SessionOutputCursor>,
#[serde(default)]
pub activity_history_incomplete: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionHistoryParams {
pub session_id: String,
pub request_id: String,
pub before_index: usize,
pub limit: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionHistoryPage {
pub session_id: String,
pub request_id: String,
pub start_index: usize,
pub messages: Vec<SessionHistoryMessage>,
pub has_earlier: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionOutputCursor {
pub item_id: String,
pub next_offset: u64,
pub total_bytes: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionOutputReadParams {
pub session_id: String,
pub request_id: String,
pub item_id: String,
pub offset: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionOutputPage {
pub session_id: String,
pub request_id: String,
pub item_id: String,
pub offset: u64,
pub next_offset: u64,
pub total_bytes: u64,
pub text: String,
pub has_more: bool,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionCreateParams {
pub title: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionIdParams {
pub session_id: String,
}
pub const MAX_SESSION_HISTORY_PAGE_MESSAGES: usize = 160;
pub const MAX_SESSION_OUTPUT_PAGE_BYTES: usize = 32 * 1024;
pub const RESTORED_OUTPUT_TRUNCATION_SUFFIX: &str = "\n[Output truncated in restored history.]";