use std::future::Future;
use std::path::PathBuf;
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use std::time::{Duration, Instant};
use anyhow::{Context, Result, bail};
use mj_core::clock::epoch_seconds;
use mj_core::config::Config;
use mj_core::credentials::{
CredentialSyncCause, CredentialSyncHandle, CredentialSyncReason, CredentialSyncSignal,
CredentialSyncTarget,
};
use mj_core::state::{
ManagedSessionSnapshot, MaterializedSession, SessionRecord, SessionResourceAllocation,
SessionState, State,
};
use crate::controller::Controller;
use crate::quota::{QuotaManager, QuotaRefreshOutcome, QuotaRefreshRequest};
use crate::recovery::{RecoveryCoordinator, RecoveryResult};
use crate::session_manager::{
ManagedSessionView, RelaySessionTarget, RemoteSessionRequest, SessionManagerControl,
SessionManagerShutdown, SessionManagerUpdate, SessionManagerUpdates, ViewError,
spawn_remote_session_manager,
};
use crate::targets::{
CancellableProcessExecutor, CommandExecutor, CommandOutput, CommandSpec,
DeploymentCapacityKind, DeploymentCapacityTarget, DeploymentCapacityUsage, ImageRefresh,
SessionResourceProbe, SessionResourceUsage,
};
use crate::worker_client::CredentialSyncCoordinator;
use crate::daemon;
use mj_core::state::short_id;
use mj_core::subagent::SubagentRecord;
#[cfg(test)]
mod runtime_feed_tests;
pub const QUOTA_REFRESH_INTERVAL: Duration = Duration::from_secs(10 * 60);
pub const QUOTA_STALE_AFTER: Duration = Duration::from_secs(2 * QUOTA_REFRESH_INTERVAL.as_secs());
pub const IMAGE_REFRESH_INTERVAL: Duration = Duration::from_secs(60 * 60);
const IMAGE_REFRESH_DELAY: Duration = Duration::from_secs(30);
pub const RESOURCE_POLL_INTERVAL: Duration = Duration::from_secs(60);
const RESOURCE_POLL_TIMEOUT: Duration = Duration::from_secs(15);
pub const CAPACITY_POLL_INTERVAL: Duration = Duration::from_secs(30);
mod feed;
pub use feed::*;
mod types;
pub use types::*;
mod quota;
pub use quota::*;
mod worker_targets;
pub use worker_targets::*;
mod credential_sync;
pub use credential_sync::*;
mod resources;
pub use resources::*;
mod capacity;
pub use capacity::*;
mod runtime_feed;
pub use runtime_feed::*;
mod remote;
pub use remote::*;
mod lifecycle;
pub use lifecycle::*;
#[cfg(test)]
mod tests;