use serde::{Deserialize, Serialize};
use serde_json::Value;
use tandem_types::HostRuntimeContext;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct WireModelSpec {
#[serde(rename = "providerID")]
pub provider_id: String,
#[serde(rename = "modelID")]
pub model_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct WireSession {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub slug: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(rename = "projectID", skip_serializing_if = "Option::is_none")]
pub project_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub directory: Option<String>,
#[serde(rename = "workspaceRoot", skip_serializing_if = "Option::is_none")]
pub workspace_root: Option<String>,
#[serde(
rename = "originWorkspaceRoot",
skip_serializing_if = "Option::is_none"
)]
pub origin_workspace_root: Option<String>,
#[serde(
rename = "attachedFromWorkspace",
skip_serializing_if = "Option::is_none"
)]
pub attached_from_workspace: Option<String>,
#[serde(
rename = "attachedToWorkspace",
skip_serializing_if = "Option::is_none"
)]
pub attached_to_workspace: Option<String>,
#[serde(rename = "attachTimestampMs", skip_serializing_if = "Option::is_none")]
pub attach_timestamp_ms: Option<u64>,
#[serde(rename = "attachReason", skip_serializing_if = "Option::is_none")]
pub attach_reason: Option<String>,
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub time: Option<WireSessionTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<WireModelSpec>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub environment: Option<HostRuntimeContext>,
#[serde(default)]
pub messages: Vec<WireSessionMessage>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WireSessionTime {
pub created: u64,
pub updated: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WireSessionMessage {
pub info: WireMessageInfo,
pub parts: Vec<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct WireMessageInfo {
pub id: String,
#[serde(rename = "sessionID")]
pub session_id: String,
pub role: String,
pub time: WireMessageTime,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub agent: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deleted: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reverted: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WireMessageTime {
pub created: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct WireMessagePart {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(rename = "sessionID", skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
#[serde(rename = "messageID", skip_serializing_if = "Option::is_none")]
pub message_id: Option<String>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub part_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}