use serde::{Deserialize, Serialize};
pub const STARTUP_INTERACTION_PENDING_ERROR: i32 = -32001;
pub const SESSION_START_TURN_ID: &str = "session-start";
pub const MAX_QUEUE_STATUS_PREVIEWS: usize = 5;
pub const MAX_QUEUE_PREVIEW_CHARS: usize = 50;
pub const MAX_QUEUE_ENTRY_ID_LEN: usize = 64;
#[must_use]
pub fn queue_preview_label(text: &str) -> String {
let mut preview = String::new();
for (index, ch) in text.chars().enumerate() {
if index >= MAX_QUEUE_PREVIEW_CHARS {
preview.push('\u{2026}');
return preview;
}
preview.push(ch);
}
preview
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnSubmitParams {
pub session_id: String,
pub prompt: String,
#[serde(default)]
pub attachments: Vec<TurnAttachment>,
#[serde(default)]
pub batchable: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnAttachment {
pub path: String,
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnAccepted {
pub session_id: String,
pub turn_id: String,
#[serde(default)]
pub queued: bool,
#[serde(default)]
pub queue_depth: usize,
#[serde(default)]
pub dropped: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnCancelParams {
pub session_id: String,
pub turn_id: String,
#[serde(default)]
pub clear_queue: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnUndoParams {
pub session_id: String,
pub turn_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnUndoFile {
pub path: String,
pub kind: vtcode_exec_events::PatchChangeKind,
#[serde(default)]
pub additions: u64,
#[serde(default)]
pub deletions: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnUndoResult {
pub session_id: String,
pub turn_id: String,
pub undone: bool,
#[serde(default)]
pub files: Vec<TurnUndoFile>,
#[serde(default)]
pub reason: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnQueueTakeLatestParams {
pub session_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnQueueTakeLatestResult {
pub session_id: String,
#[serde(default)]
pub text: Option<String>,
#[serde(default)]
pub queue_depth: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnQueueStatus {
pub session_id: String,
pub queue_depth: usize,
#[serde(default)]
pub previews: Vec<String>,
#[serde(default)]
pub entry_ids: Vec<String>,
#[serde(default)]
pub queued_for_secs: Vec<u64>,
#[serde(default)]
pub dropped_total: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnQueueRemoveParams {
pub session_id: String,
pub entry_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TurnQueueRemoveResult {
pub session_id: String,
pub removed: bool,
pub queue_depth: usize,
}