#![deny(clippy::print_stdout, clippy::print_stderr)]
pub mod identity;
pub mod prelude;
pub use microvms_domain::{constants, cost, duration, error, hooks, region, sizing};
pub use microvms_app::{defaults, sandbox};
pub use microvms_edges::{env, provision, secret_input};
pub use protocol;
pub use error::{Error, ErrorKind, WireKind};
pub use hooks::{BuildHookTimeout, RunHookTimeout};
pub use region::Region;
pub use sizing::SizeClass;
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(doctest)]
#[doc = include_str!("../README.md")]
struct ReadmeExample;
#[cfg(doctest)]
struct EdgesHelpersStayPrivate;
pub mod adapters {
pub use microvms_app::adapters::*;
pub use microvms_edges::adapters::SystemAdapters;
}
pub mod clock {
pub use microvms_app::clock::*;
pub use microvms_edges::clock::{SystemClock, TokioClock};
}
pub mod entropy {
pub use microvms_app::entropy::*;
pub use microvms_edges::entropy::OsEntropy;
}
pub mod names {
pub use microvms_app::names::*;
pub use microvms_edges::names::{FileNameStore, state_root};
}
pub mod preflight {
pub use microvms_app::preflight::*;
use crate::control::ControlPlane;
use crate::prelude::ControlPlaneExt as _;
use crate::region::Region;
pub async fn preflight(region: Option<Region>) -> PreflightReport {
let resolved = match region {
Some(region) => Ok(region),
None => Region::from_env(&crate::env::process),
};
preflight_with(resolved, ControlPlane::new).await
}
}
pub mod agents {
pub use microvms_app::agents::*;
use crate::error::Error;
pub mod bedrock {
pub use microvms_app::agents::bedrock::*;
pub use microvms_edges::agents::bedrock::*;
}
pub fn prompt_request(
spec: &AgentSpec,
task: &str,
options: &PromptOptions,
) -> Result<crate::protocol::exec::StartRequest, Error> {
prompt_request_with(spec, task, options, crate::session::mint_exec_id)
}
}
pub mod control {
pub use microvms_app::control::*;
pub use microvms_edges::clock::SystemClock;
pub use microvms_edges::control::SignedBuildServices;
pub mod context {
pub use microvms_app::control::context::*;
pub use microvms_edges::control::context::from_dir;
}
pub mod project {
pub use microvms_app::control::project::*;
pub use microvms_edges::control::project::read_project_files;
}
pub use project::read_project_files;
pub mod services {
pub use microvms_app::control::services::*;
pub use microvms_edges::control::services::SignedBuildServices;
}
pub mod transport {
pub use microvms_app::control::transport::*;
pub use microvms_edges::control::transport::SignedTransport;
}
pub mod token {
pub use microvms_app::control::token::*;
use microvms_edges::entropy::OsEntropy;
pub fn create_token(scope: &str) -> String {
create_token_with(scope, &OsEntropy).expect("the OS random pool is available")
}
pub fn run_token(scope: &str) -> String {
run_token_with(scope, &OsEntropy).expect("the OS random pool is available")
}
}
}
pub mod session {
pub use microvms_app::session::*;
pub use microvms_edges::clock::TokioClock;
pub use microvms_edges::session::*;
pub mod http {
pub use microvms_app::session::http::*;
pub use microvms_edges::session::http::ReqwestBackend;
}
pub mod proxy {
pub use microvms_app::session::proxy::*;
pub use microvms_edges::clock::TokioClock;
}
pub mod exec {
pub use microvms_app::session::exec::*;
pub use super::mint_exec_id;
}
pub fn mint_exec_id() -> String {
use microvms_app::clock::Clock as _;
exec_id_at(TokioClock::new().unix_now())
}
}
pub mod workspace {
pub use microvms_app::workspace::*;
pub use microvms_edges::workspace::*;
}
#[cfg(feature = "test-support")]
pub mod testing {
pub use microvms_app::testing::*;
}
#[cfg(test)]
mod tests {
use std::collections::HashSet;
#[test]
fn the_os_pool_tokens_never_repeat() {
let minted: HashSet<String> = (0..200)
.flat_map(|_| {
[
crate::control::token::create_token("img"),
crate::control::token::run_token("img"),
]
})
.collect();
assert_eq!(minted.len(), 400);
}
#[test]
fn production_exec_ids_are_distinct() {
let minted: HashSet<String> = (0..200).map(|_| crate::session::mint_exec_id()).collect();
assert_eq!(minted.len(), 200);
}
}
pub mod history;
pub mod ledger;