Skip to main content

agent_context_contract/
session_log.rs

1//! Durable native session logs: immutable header, contiguous events, bounded cursor reads.
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4pub const SESSION_APPEND_PATH: &str = "/internal/v1/context/sessions/append";
5pub const SESSION_READ_PATH: &str = "/internal/v1/context/sessions/read";
6pub const SESSION_LIST_PATH: &str = "/internal/v1/context/sessions/list";
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase", deny_unknown_fields)]
9pub struct AppendSessionRequest {
10    pub agent_id: String,
11    pub session_id: String,
12    pub header: Value,
13    pub expected_seq: u64,
14    pub events: Vec<Value>,
15}
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase", deny_unknown_fields)]
18pub struct ReadSessionRequest {
19    pub agent_id: String,
20    pub session_id: String,
21    #[serde(default)]
22    pub from_seq: u64,
23    #[serde(default)]
24    pub limit: Option<u32>,
25}
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase", deny_unknown_fields)]
28pub struct ListSessionsRequest {
29    pub agent_id: String,
30    #[serde(default)]
31    pub after: String,
32}
33#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub struct SessionLogPage {
36    pub header: Value,
37    pub next_seq: u64,
38    pub events: Vec<Value>,
39}
40#[derive(Debug, Clone, Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct SessionLogDirectory {
43    pub sessions: Vec<SessionLogSnapshot>,
44    pub next_cursor: Option<String>,
45}
46#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(rename_all = "camelCase")]
48pub struct SessionLogSnapshot {
49    pub header: Value,
50    pub next_seq: u64,
51}