use std::collections::HashMap;
use std::collections::HashSet;
use std::io;
use std::io::Read;
use std::path::Path;
use std::process::Child;
use std::process::Command;
use std::process::Stdio;
use std::sync::Arc;
use std::sync::Mutex;
use std::sync::atomic::AtomicBool;
use std::sync::atomic::Ordering;
use std::sync::mpsc;
use std::sync::mpsc::Receiver as StdReceiver;
use std::sync::mpsc::RecvTimeoutError;
use std::sync::mpsc::Sender as StdSender;
use std::thread;
use std::thread::JoinHandle;
use std::time::Instant;
use chrono::Local;
use super::cache_size_index;
use super::constants::STOP_POLL;
use super::history;
use super::paths;
use super::read_write;
use super::run::LintCommand;
use super::run::LintCommandStatus;
use super::run::LintRun;
use super::run::LintRunOrigin;
use super::run::LintRunStatus;
use super::status;
use super::status::CachedLintStatus;
use super::status::LintStatus;
use super::trigger::LintEventKind;
use super::trigger::LintTriggerEvent;
use super::trigger::LintTriggerKind;
use crate::cache_paths;
use crate::channel::Sender;
use crate::config::CargoPortConfig;
use crate::config::DiscoveryLint;
use crate::config::LintCommandConfig;
use crate::config::LintConfig;
use crate::constants::CARGO_TOML;
use crate::constants::LINTS_HISTORY_JSONL;
use crate::constants::LINTS_LATEST_JSON;
use crate::project;
use crate::project::AbsolutePath;
use crate::scan::BackgroundMsg;
mod command;
mod handle;
mod request;
mod supervisor;
use command::RunCommandsConfig;
use command::publish_status;
use command::run_commands_for_project;
use handle::ChildSlot;
pub use handle::RuntimeHandle;
use handle::SupervisorMsg;
pub use request::RegisterProjectRequest;
pub use request::project_is_eligible;
use supervisor::project_still_runnable;
pub(crate) use supervisor::read_status_from_disk;
pub use supervisor::spawn;