use serde::{Deserialize, Serialize};
use crate::ids::{AgentId, OrgId, TeamId};
use crate::value::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryItem {
pub id: String,
pub kind: MemoryKind,
pub namespace: MemoryNamespace,
pub payload: Value,
pub timestamp_ms: i64,
#[serde(default)]
pub tags: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryChunk {
pub source_id: String,
pub text: String,
pub score: f32,
pub estimated_tokens: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MemoryKind {
Episodic,
Semantic,
Working,
Scratchpad,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MemoryNamespace {
Agent(AgentId),
Team(TeamId),
Org(OrgId),
}