Skip to main content

seshat_storage/
lib.rs

1//! # Seshat Storage
2//!
3//! SQLite storage layer for Seshat. Owns ALL database interaction — no other
4//! crate touches SQL directly.
5//!
6//! Responsibilities:
7//! - Database lifecycle (`Database::open`, migrations, WAL mode)
8//! - Repository traits and SQLite implementations for nodes, edges, files_ir,
9//!   and branches
10//! - FTS5 full-text search
11//! - Automatic database backups
12//! - Schema migrations via `refinery` (`embed_migrations!`)
13//!
14//! Connection management: single writer (`Arc<Mutex<Connection>>`) with
15//! pooled read-only connections for concurrent queries (SQLite WAL mode).
16
17pub mod backup;
18pub mod db;
19pub mod error;
20pub mod ir_serialization;
21pub mod repository;
22
23pub use backup::backup_if_needed;
24pub use db::{Database, StaleIrWipeReport, wipe_stale_ir_cache};
25pub use error::StorageError;
26pub use ir_serialization::{IR_SCHEMA_VERSION, deserialize_ir, serialize_ir};
27pub use repository::{
28    BranchMetadataRepository, BranchRepository, Decision, DecisionNature, DecisionRepository,
29    DecisionState, DecisionWeight, EdgeRepository, EmbeddingInput, EmbeddingRepository,
30    EmbeddingRow, ExampleEvidence, FileIRRepository, NodeRepository, PackageMetadataRepository,
31    PackageMetadataRow, RepoMetadataRepository, SqliteBranchMetadataRepository,
32    SqliteBranchRepository, SqliteDecisionRepository, SqliteEdgeRepository,
33    SqliteEmbeddingRepository, SqliteFileIRRepository, SqliteNodeRepository,
34    SqlitePackageMetadataRepository, SqliteRepoMetadataRepository, SqliteSubmoduleRepository,
35    SqliteSymbolIndexRepository, SubmoduleInput, SubmoduleRepository, SubmoduleRow,
36    SymbolDefinitionRow, SymbolImportRow, SymbolIndexRepository, SymbolKind, bytes_to_f32s,
37    extract_definitions, extract_imports, f32s_to_bytes,
38};