use serde::{Deserialize, Serialize};
use serde_json::Value;
pub const SESSION_APPEND_PATH: &str = "/internal/v1/context/sessions/append";
pub const SESSION_READ_PATH: &str = "/internal/v1/context/sessions/read";
pub const SESSION_LIST_PATH: &str = "/internal/v1/context/sessions/list";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct AppendSessionRequest {
pub agent_id: String,
pub session_id: String,
pub header: Value,
pub expected_seq: u64,
pub events: Vec<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ReadSessionRequest {
pub agent_id: String,
pub session_id: String,
#[serde(default)]
pub from_seq: u64,
#[serde(default)]
pub limit: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ListSessionsRequest {
pub agent_id: String,
#[serde(default)]
pub after: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionLogPage {
pub header: Value,
pub next_seq: u64,
pub events: Vec<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionLogDirectory {
pub sessions: Vec<SessionLogSnapshot>,
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionLogSnapshot {
pub header: Value,
pub next_seq: u64,
}