1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6#[serde(rename_all = "snake_case")]
7pub enum MemoryType {
8 Context,
9 Task,
10 ToolOutput,
11 Session,
12 ReasoningTrace,
13 Message,
14 Summary,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct MemoryRecord {
19 pub id: Uuid,
20 pub agent_id: String,
21 pub content: String,
22 pub memory_type: MemoryType,
23 #[serde(default)]
24 pub tags: Vec<String>,
25 pub importance_score: f64,
26 pub is_promoted: bool,
27 pub created_at: DateTime<Utc>,
28 pub updated_at: DateTime<Utc>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct SearchHit {
33 pub id: Uuid,
34 pub content: String,
35 pub score: f64,
36 pub memory_type: MemoryType,
37 #[serde(default)]
38 pub tags: Vec<String>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct BranchInfo {
43 pub id: String,
44 pub name: String,
45 pub status: String,
46 pub parent_id: Option<String>,
47 pub created_at: DateTime<Utc>,
48 pub divergence_score: f64,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct SyncResult {
53 pub pushed: u32,
54 pub pulled: u32,
55 pub conflicts: u32,
56 pub synced_at: DateTime<Utc>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct DiffResult {
61 pub added: u32,
62 pub removed: u32,
63 pub modified: u32,
64 pub divergence_score: f64,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct MergeResult {
69 pub applied: u32,
70 pub conflicts: Vec<serde_json::Value>,
71 pub success: bool,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct RememberOptions {
76 pub memory_type: Option<MemoryType>,
77 pub tags: Option<Vec<String>>,
78 pub ttl_days: Option<u32>,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, Default)]
82pub struct SearchOptions {
83 pub top_k: Option<u32>,
84 pub semantic: Option<bool>,
85 pub alpha: Option<f64>,
86}