1#![deny(unsafe_code)]
31
32pub mod admin;
33pub mod checkpoint;
34pub mod coordinator;
35pub mod driver;
36pub mod engine;
37pub mod error;
38pub mod external;
39pub mod freshness;
40pub mod fs;
41pub mod lock;
42pub mod mcp_client;
43pub mod pipe;
44pub mod recovery;
45pub mod registry;
46pub mod settings;
47pub mod source;
48pub mod workspace;
49
50pub use admin::{DiskStatus, RepoStatus, SyncStatus, repos_status, sync_status};
51pub use checkpoint::{CheckpointResult, finish_checkpoint, process_checkpoint};
52pub use coordinator::{Coordinator, SyncInSummary, SyncOutSummary};
53pub use driver::{AttachResult, attach_source, reconcile_changes};
54pub use engine::{DocBytes, EngineClient, InProcessEngineClient};
55pub use error::{Error, Result};
56pub use external::ExternalSource;
57pub use freshness::{
58 DiskDrift, SweepPlan, SweepResult, detect_disk_drift, freshness_sweep, rebuild_file_stats,
59 record_file_stat, sweep_plan,
60};
61pub use fs::{FileStat, FileSystem, MemFileSystem, RealFileSystem, is_ignored_dir};
62pub use lock::{WatchLease, WriterLock, WriterLockOptions, pid_alive, with_writer_lock};
63pub use mcp_client::{EngineSpec, McpEngineClient, ToolResult, parse_engine_spec};
64pub use omgbase_store::{ChangesPage, CommitDigest, DeleteOutcome, DigestRevision, ObserveOutcome};
65pub use recovery::{RecoveryResult, recover_repo};
66pub use registry::{
67 AdapterRow, SourceRow, attach, create_source, delete_source, detach, ensure_adapter,
68 ensure_repo, list_adapters, list_sources, render_config_flags, source_by_name,
69 sources_for_repo,
70};
71pub use settings::{
72 Settings, deep_merge, repo_own_settings, resolve_settings, workspace_settings,
73 write_repo_settings, write_workspace_settings,
74};
75pub use source::{
76 Readiness, SourceCapabilities, SourceEntry, SourceIdentity, SourceItem, SyncSource, WatchEvent,
77 wait_ready,
78};
79pub use workspace::{RepoRow, RepoSelection, Workspace, select_repo};
80
81pub const SPEC_VERSION: &str = "1.2";
83
84pub const PROTOCOL_VERSION: u64 = 1;
86
87#[must_use]
90pub fn now_ts() -> String {
91 let ms = std::time::SystemTime::now()
92 .duration_since(std::time::UNIX_EPOCH)
93 .map(|d| i64::try_from(d.as_millis()).unwrap_or(i64::MAX))
94 .unwrap_or(0);
95 omgbase_store::time::format_ms(ms)
96}