remem-ai 0.6.79

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use crate::memory::lesson::LessonMemory;
use crate::memory::{Memory, MemoryStalenessLabel};
use crate::workstream::WorkStream;
use std::collections::HashMap;
use std::fmt;

use super::host::HostKind;
use super::ownership::{OwnerCounts, OwnerTrace};

#[derive(Debug, Clone)]
pub(super) struct ContextRequest {
    pub cwd: String,
    pub project: String,
    pub session_id: Option<String>,
    pub hook_source: Option<String>,
    pub current_branch: Option<String>,
    pub host: HostKind,
    pub use_colors: bool,
}

#[derive(Debug, Clone)]
pub(super) struct SessionSummaryBrief {
    pub id: i64,
    pub request: String,
    pub completed: Option<String>,
    pub created_at_epoch: i64,
}

#[derive(Debug, Clone)]
pub(super) enum ContextPreselectionItem {
    Memory(Memory),
    Summary(SessionSummaryBrief),
}

#[derive(Debug, Clone)]
pub(super) struct ContextPreselectionDrop {
    pub item: ContextPreselectionItem,
    pub reason: &'static str,
}

#[derive(Debug, Clone)]
pub(super) struct LoadedContext {
    pub render_reference_epoch: i64,
    pub memories: Vec<Memory>,
    pub staleness_labels: HashMap<i64, MemoryStalenessLabel>,
    pub lessons: Vec<LessonMemory>,
    pub summaries: Vec<SessionSummaryBrief>,
    pub workstreams: Vec<WorkStream>,
    /// Canonical rows fetched for this snapshot but removed by its selectors.
    /// Bundle audit consumes these identities without re-querying mutable data.
    pub preselection_drops: Vec<ContextPreselectionDrop>,
    /// Rows rejected before implicit-query construction. Keeping them on the
    /// same snapshot preserves a redacted poisoning audit without allowing
    /// their content to steer retrieval.
    pub poisoning_drops: super::poisoning::PoisoningDrops,
    pub relevance_query: Option<String>,
    pub memory_abstained: bool,
    pub errors: Vec<ContextLoadError>,
    pub owner_traces: Vec<OwnerTrace>,
    pub owner_counts: OwnerCounts,
    pub diagnostics: ContextDiagnostics,
    /// Measurable sub-phases inside `load_context_data`.
    pub load_phase_timings: Vec<crate::perf::PhaseTiming>,
    /// Shared rerank stage outcome for the SessionStart implicit query
    /// (GH-851); `None` in fixtures and execution policies that disable rerank.
    pub rerank: Option<crate::retrieval::rerank::RerankExplain>,
    /// G3: CurrentTruth projection at `render_reference_epoch` for Core
    /// activation and the audited shadow comparison.
    pub current_truth_projection: Option<crate::truth::CurrentTruthProjection>,
}

#[derive(Debug, Clone)]
pub(super) struct ContextLoadError {
    pub section: &'static str,
    pub message: String,
}

impl ContextLoadError {
    pub(super) fn new(section: &'static str, error: impl fmt::Display) -> Self {
        Self {
            section,
            message: error.to_string(),
        }
    }
}

#[derive(Debug, Clone, Default)]
pub(super) struct ContextDiagnostics {
    pub candidate_pool_total: usize,
    pub current_rows: usize,
    pub selected_ids: Vec<i64>,
    pub hidden_duplicate_groups: Vec<HiddenDuplicateGroup>,
    pub preference_selected_ids: Vec<i64>,
    pub preference_hidden_duplicate_groups: Vec<HiddenDuplicateGroup>,
    pub preference_state_key_groups: Vec<StateKeyDiagnosticGroup>,
    pub state_key_groups: Vec<StateKeyDiagnosticGroup>,
    pub exclusions: Vec<ContextExclusion>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(super) struct HiddenDuplicateGroup {
    pub cluster_key: String,
    pub chosen_id: i64,
    pub hidden_ids: Vec<i64>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(super) struct ContextExclusion {
    pub id: i64,
    pub reason: &'static str,
    pub status: String,
    pub title: String,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(super) struct StateKeyDiagnosticGroup {
    pub owner_scope: String,
    pub owner_key: String,
    pub memory_type: String,
    pub state_key: String,
    pub current_id: Option<i64>,
    pub active_ids: Vec<i64>,
    pub reason: &'static str,
}