#![deny(unsafe_code)]
pub mod admin;
pub mod checkpoint;
pub mod coordinator;
pub mod driver;
pub mod engine;
pub mod error;
pub mod external;
pub mod freshness;
pub mod fs;
pub mod lock;
pub mod mcp_client;
pub mod pipe;
pub mod recovery;
pub mod registry;
pub mod settings;
pub mod source;
pub mod workspace;
pub use admin::{DiskStatus, RepoStatus, SyncStatus, repos_status, sync_status};
pub use checkpoint::{CheckpointResult, finish_checkpoint, process_checkpoint};
pub use coordinator::{Coordinator, SyncInSummary, SyncOutSummary};
pub use driver::{AttachResult, attach_source, reconcile_changes};
pub use engine::{DocBytes, EngineClient, InProcessEngineClient};
pub use error::{Error, Result};
pub use external::ExternalSource;
pub use freshness::{
DiskDrift, SweepPlan, SweepResult, detect_disk_drift, freshness_sweep, rebuild_file_stats,
record_file_stat, sweep_plan,
};
pub use fs::{FileStat, FileSystem, MemFileSystem, RealFileSystem, is_ignored_dir};
pub use lock::{WatchLease, WriterLock, WriterLockOptions, pid_alive, with_writer_lock};
pub use mcp_client::{EngineSpec, McpEngineClient, ToolResult, parse_engine_spec};
pub use omgbase_store::{ChangesPage, CommitDigest, DeleteOutcome, DigestRevision, ObserveOutcome};
pub use recovery::{RecoveryResult, recover_repo};
pub use registry::{
AdapterRow, SourceRow, attach, create_source, delete_source, detach, ensure_adapter,
ensure_repo, list_adapters, list_sources, render_config_flags, source_by_name,
sources_for_repo,
};
pub use settings::{
Settings, deep_merge, repo_own_settings, resolve_settings, workspace_settings,
write_repo_settings, write_workspace_settings,
};
pub use source::{
Readiness, SourceCapabilities, SourceEntry, SourceIdentity, SourceItem, SyncSource, WatchEvent,
wait_ready,
};
pub use workspace::{RepoRow, RepoSelection, Workspace, select_repo};
pub const SPEC_VERSION: &str = "1.2";
pub const PROTOCOL_VERSION: u64 = 1;
#[must_use]
pub fn now_ts() -> String {
let ms = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map(|d| i64::try_from(d.as_millis()).unwrap_or(i64::MAX))
.unwrap_or(0);
omgbase_store::time::format_ms(ms)
}