1pub mod entities;
9pub mod import;
10pub mod memory;
11pub mod requests;
12pub mod responses;
13pub mod sources;
14
15pub use entities::{
17 Entity, EntityDetail, EntitySearchResult, EntitySuggestion, Observation, Relation,
18 RelationWithEntity,
19};
20pub use memory::{
21 AgentActivityRow, AgentConnection, DomainInfo, HomeStats, IndexedFileInfo, MemoryItem,
22 MemoryStats, MemoryVersionItem, Profile, RejectionRecord, SearchResult, SessionSnapshot,
23 SnapshotCapture, SnapshotCaptureWithContent, Space, TopMemory, TypeBreakdown,
24};
25pub use sources::{MemoryType, RawDocument, SourceType, StabilityTier, SyncStatus};
26
27pub fn version() -> &'static str {
29 env!("CARGO_PKG_VERSION")
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn version_is_set() {
38 assert!(!version().is_empty());
39 }
40
41 #[test]
42 fn memory_type_roundtrip() {
43 for variant in [
44 MemoryType::Identity,
45 MemoryType::Preference,
46 MemoryType::Decision,
47 MemoryType::Fact,
48 MemoryType::Goal,
49 ] {
50 let s = variant.to_string();
51 let parsed: MemoryType = s.parse().unwrap();
52 assert_eq!(parsed, variant);
53 }
54 }
55
56 #[test]
57 fn search_result_serializes() {
58 let sr = SearchResult {
59 id: "1".into(),
60 content: "test".into(),
61 source: "memory".into(),
62 source_id: "mem_abc".into(),
63 title: "Test".into(),
64 url: None,
65 chunk_index: 0,
66 last_modified: 1000,
67 score: 0.9,
68 chunk_type: None,
69 language: None,
70 semantic_unit: None,
71 memory_type: Some("fact".into()),
72 domain: None,
73 source_agent: None,
74 confidence: Some(0.8),
75 confirmed: Some(true),
76 stability: None,
77 supersedes: None,
78 summary: None,
79 entity_id: None,
80 entity_name: None,
81 quality: None,
82 is_archived: false,
83 is_recap: false,
84 structured_fields: None,
85 retrieval_cue: None,
86 source_text: None,
87 raw_score: 0.0,
88 };
89 let json = serde_json::to_string(&sr).unwrap();
90 assert!(json.contains("mem_abc"));
91 assert!(!json.contains("entity_id"));
93 }
94
95 #[test]
96 fn raw_document_default() {
97 let doc = RawDocument::default();
98 assert_eq!(doc.enrichment_status, "raw");
99 assert_eq!(doc.supersede_mode, "hide");
100 assert!(!doc.pending_revision);
101 assert!(!doc.is_recap);
102 }
103
104 #[test]
105 fn stability_tier_mapping() {
106 use sources::stability_tier;
107 assert_eq!(stability_tier(Some("identity")), StabilityTier::Protected);
108 assert_eq!(stability_tier(Some("preference")), StabilityTier::Protected);
109 assert_eq!(stability_tier(Some("fact")), StabilityTier::Standard);
110 assert_eq!(stability_tier(Some("decision")), StabilityTier::Standard);
111 assert_eq!(stability_tier(Some("goal")), StabilityTier::Ephemeral);
112 assert_eq!(stability_tier(None), StabilityTier::Ephemeral);
113 }
114}