use serde_json::{json, Value};
use crate::error::Result;
use crate::http::HttpClient;
pub struct Sessions<'a> {
http: &'a HttpClient,
memory_id: String,
}
impl<'a> Sessions<'a> {
pub(crate) fn new(http: &'a HttpClient, memory_id: String) -> Self {
Self { http, memory_id }
}
pub async fn bootstrap(&self, session_id: &str, opts: Option<&Value>) -> Result<Value> {
let path = format!(
"/memories/{}/sessions/{}/bootstrap",
self.memory_id, session_id
);
self.http._get(&path, opts).await
}
pub async fn state(&self, session_id: &str) -> Result<Value> {
let path = format!("/memories/{}/sessions/{}/state", self.memory_id, session_id);
self.http._get(&path, None).await
}
pub async fn diff_states(&self, old_hash: &str, new_hash: &str) -> Result<Value> {
let body = json!({ "old_hash": old_hash, "new_hash": new_hash });
let path = format!("/memories/{}/states/diff", self.memory_id);
self.http._post(&path, Some(&body)).await
}
pub async fn recent_tools(&self, session_id: &str, opts: Option<&Value>) -> Result<Value> {
let path = format!(
"/memories/{}/sessions/{}/tools",
self.memory_id, session_id
);
self.http._get(&path, opts).await
}
pub async fn failed_tools(&self, session_id: &str, opts: Option<&Value>) -> Result<Value> {
let path = format!(
"/memories/{}/sessions/{}/tools/failed",
self.memory_id, session_id
);
self.http._get(&path, opts).await
}
pub async fn tool_summary(&self, session_id: &str, opts: Option<&Value>) -> Result<Value> {
let path = format!(
"/memories/{}/sessions/{}/tools/summary",
self.memory_id, session_id
);
self.http._get(&path, opts).await
}
pub async fn tool_chain(
&self,
session_id: &str,
task_id: &str,
opts: Option<&Value>,
) -> Result<Value> {
let path = format!(
"/memories/{}/sessions/{}/tools/chain/{}",
self.memory_id, session_id, task_id
);
self.http._get(&path, opts).await
}
pub async fn active_goals(&self, session_id: &str) -> Result<Value> {
let path = format!("/memories/{}/sessions/{}/goals", self.memory_id, session_id);
self.http._get(&path, None).await
}
pub async fn context(&self, session_id: &str, opts: Option<&Value>) -> Result<Value> {
let path = format!(
"/memories/{}/sessions/{}/context",
self.memory_id, session_id
);
self.http._get(&path, opts).await
}
pub async fn consolidate(&self, session_id: &str, opts: Option<Value>) -> Result<Value> {
let body = opts.unwrap_or_else(|| json!({}));
let path = format!(
"/memories/{}/sessions/{}/consolidate",
self.memory_id, session_id
);
self.http._post(&path, Some(&body)).await
}
}