vtcode-memory 0.181.3

Unified per-session state store: append-only ThreadEvent log plus derived views, retention, and cross-session query.
Documentation
//! Tests for the unified session store.

pub(super) use std::fs;
pub(super) use std::sync::Arc;

pub(super) use tempfile::TempDir;
pub(super) use vtcode_exec_events::{
    AgentMessageItem, ItemCompletedEvent, ThreadCompletedEvent, ThreadCompletionSubtype, ThreadEvent, ThreadItem,
    ThreadItemDetails, ThreadStartedEvent, TurnCompletedEvent, TurnStartedEvent, Usage, VersionedThreadEvent,
};

pub(super) use crate::event_log::{DEFAULT_MAX_EVENTS, SessionEventLog};
pub(super) use crate::migration::migrate_legacy;
pub(super) use crate::query::{live_sessions, query_facts, recent_sessions};
pub(super) use crate::{
    EvictionSummaryHook, SessionStoreError,
    mailbox::{
        InboxDrain, MailKind, MailMessage, MailOption, MailQuestion, NewMail, ack_mail, drain_inbox, find_mail,
        read_mail, send_mail,
    },
    open, open_exclusive, open_with_eviction_summary,
    retention::apply_retention,
    sessions_root,
};

fn sample_turn() -> Vec<ThreadEvent> {
    vec![
        ThreadEvent::ThreadStarted(ThreadStartedEvent { thread_id: "thread".to_string() }),
        ThreadEvent::TurnStarted(TurnStartedEvent::default()),
        ThreadEvent::TurnCompleted(TurnCompletedEvent {
            completed_at: None,
            usage: Usage::default(),
            in_progress_exec_sessions: Vec::new(),
        }),
        ThreadEvent::ThreadCompleted(Box::new(ThreadCompletedEvent {
            thread_id: "thread".to_string(),
            completed_at: None,
            session_id: "session".to_string(),
            subtype: ThreadCompletionSubtype::Success,
            outcome_code: "completed".to_string(),
            result: None,
            stop_reason: None,
            usage: Usage::default(),
            total_cost_usd: None,
            num_turns: 1,
        })),
    ]
}

fn sample_zero_turn_completion() -> Vec<ThreadEvent> {
    vec![
        ThreadEvent::ThreadStarted(ThreadStartedEvent { thread_id: "empty".to_string() }),
        ThreadEvent::ThreadCompleted(Box::new(ThreadCompletedEvent {
            thread_id: "empty".to_string(),
            completed_at: None,
            session_id: "session".to_string(),
            subtype: ThreadCompletionSubtype::Cancelled,
            outcome_code: "exit".to_string(),
            result: None,
            stop_reason: None,
            usage: Usage::default(),
            total_cost_usd: None,
            num_turns: 0,
        })),
    ]
}

mod mailbox;
mod manifest_scan;
mod retention;
mod session_store;