mj_controller/
database.rs1pub use mj_core::storage::*;
2use std::collections::{BTreeMap, BTreeSet, HashSet};
5use std::fs;
6use std::path::{Path, PathBuf};
7use std::sync::atomic::{AtomicU64, Ordering};
8use std::sync::mpsc::{Receiver, SyncSender, sync_channel};
9use std::sync::{Arc, Mutex, OnceLock, PoisonError};
10use std::thread::{self, JoinHandle};
11use std::time::Duration;
12
13use anyhow::{Context, Result, bail, ensure};
14use chrono::Utc;
15use rusqlite::types::Type;
16use rusqlite::{Connection, OptionalExtension, Transaction, params};
17
18use mj_core::config::data_dir;
19use mj_core::state::{
20 CheckpointMetadata, HostContainerSize, ManagedWorktree, MaterializedExecutionState,
21 MaterializedQueuedPrompt, MaterializedSession, MaterializedSessionSummary, MaterializedTurn,
22 MaterializedTurnOutcome, ProjectionWindow, SessionRecord, SessionResourceAllocation,
23 SessionState, State, TargetLocator, TranscriptBody, TranscriptItem,
24 validate_relay_event_digest, validate_relay_event_frontier,
25};
26use mj_core::subagent::SubagentRecord;
27
28use crate::targets::{AdditionalMount, MountAccess};
29use mj_core::workspace::{
30 DEFAULT_WORKSPACE_ID, DetachedDraft, PaneSize, PaneSizes, WorkspaceRecord, new_workspace_id,
31 normalize_workspace_name,
32};
33
34const SCHEMA_VERSION: i64 = 37;
35
36mod session_move;
37pub use session_move::*;
38
39mod schema;
40mod usage;
41pub use usage::*;
42mod events;
43pub use events::*;
44
45pub use schema::database_path;
46#[cfg(test)]
47use schema::forget_verified_schema;
48use schema::{open, open_reader};
49
50mod writer;
51pub use writer::*;
52mod workspaces;
53pub use workspaces::*;
54mod client_state;
55pub use client_state::*;
56mod state_io;
57pub use state_io::*;
58mod sessions;
59pub use sessions::*;
60mod materialized;
61pub use materialized::*;
62mod mounts;
63pub use mounts::*;
64mod reviews;
65pub use reviews::*;
66mod prompts;
67pub use prompts::*;
68mod values;
69use values::*;
70mod profile_cache;
71pub use profile_cache::*;
72
73#[cfg(test)]
74mod tests;