#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ScopedMemoryConsolidationRequest {
pub tenant_scope: MemoryTenantScope,
pub org_unit: Option<String>,
pub subject: Option<String>,
pub project_id: String,
pub session_id: String,
}
fn consolidation_chunk_has_exact_ownership(
chunk: &MemoryChunk,
request: &ScopedMemoryConsolidationRequest,
) -> bool {
chunk.subject == request.subject
&& crate::types::owner_org_unit_id_from_metadata(chunk.metadata.as_ref())
== request.org_unit
}
fn memory_chunk_visible_to_access_filter(
chunk: &MemoryChunk,
access_filter: Option<&crate::types::MemoryAccessFilter>,
) -> bool {
if access_filter.is_none()
&& crate::types::MemorySourceAccessTarget::from_chunk(chunk).is_none()
&& !crate::knowledge_scope::metadata_has_knowledge_scope(chunk.metadata.as_ref())
{
return true;
}
access_filter
.map(|filter| filter.allows_chunk(chunk))
.unwrap_or(false)
}
pub async fn create_memory_manager(app_data_dir: &Path) -> MemoryResult<MemoryManager> {
let db_path = app_data_dir.join("tandem_memory.db");
MemoryManager::new(&db_path).await
}