#![forbid(unsafe_code)]
pub mod agent_os;
pub(crate) mod command_line;
pub mod config;
pub mod cron;
pub mod error;
pub mod fs;
pub mod language_execution;
pub mod net;
mod output_replay;
pub mod process;
pub mod sidecar;
pub mod software;
pub mod software_registry;
pub mod stream;
pub mod transport;
#[cfg(feature = "service-internals")]
#[doc(hidden)]
pub mod service_internals {
pub async fn create_with_initial_software(
options: crate::AgentOsConfig,
sources: Vec<crate::PackageSource>,
) -> Result<(crate::AgentOs, Vec<crate::InstalledSoftware>), crate::ClientError> {
let vm = crate::AgentOs::create(options).await?;
let mut installed = Vec::with_capacity(sources.len());
for source in sources {
match vm.install_software(source).await {
Ok(package) => installed.push(package),
Err(error) => {
return match vm.shutdown().await {
Ok(()) => Err(error),
Err(cleanup_error) => Err(crate::ClientError::Sidecar(format!(
"initial software installation failed: {error}; VM cleanup also failed: {cleanup_error}"
))),
};
}
}
}
Ok((vm, installed))
}
pub async fn shutdown_package_session(
session: &crate::AgentOsPackageSession,
) -> Result<(), crate::ClientError> {
session.shutdown_worker().await
}
pub async fn vm_config_equivalent(
vm: &crate::AgentOs,
before: &crate::AgentOsConfig,
after: &crate::AgentOsConfig,
before_restart_identity: Vec<String>,
after_restart_identity: Vec<String>,
) -> Result<bool, crate::ClientError> {
vm.vm_config_equivalent(
before,
after,
before_restart_identity,
after_restart_identity,
)
.await
}
}
#[cfg(feature = "sidecar-internals")]
#[doc(hidden)]
pub mod sidecar_internals {
pub fn package_acquisition_timeout_ms(resolver: &crate::PackageResolver) -> u64 {
resolver.acquisition_timeout_ms()
}
}
pub const CLOSED_SHELL_EXIT_CODE_RETENTION_LIMIT: usize = 2048;
pub const SHELL_DISPOSE_TIMEOUT_MS: u64 = 5_000;
pub const VM_READY_TIMEOUT_MS: u64 = 10_000;
pub const CRON_JOB_LIMIT: usize = 1024;
pub use agent_os::{AgentOs, PackageDescriptor, SoftwareInfo};
pub use error::{ClientError, ClientResult, ResourceLimitDetails};
pub use language_execution::{
CodeEvaluationResult, CodeExecutionResult, ContextDescriptor, ExecutionPtyOptions,
InlineExecutionOptions, JavaScriptExecutionOptions, JavaScriptModuleFormat,
LanguageExecutionOptions, LanguageSpawnOptions, ProcessDescriptor, TypeScriptDiagnostic,
};
#[cfg(feature = "sidecar-internals")]
pub use sidecar::configure_shared_sidecar_package_cache;
#[cfg(any(feature = "service-internals", feature = "sidecar-internals"))]
pub use sidecar::AgentOsPackageSession;
pub use sidecar::{
AgentOsSidecar, AgentOsSidecarDescription, AgentOsSidecarPlacement, SidecarState,
};
pub use stream::{ByteStream, Subscription};
pub use config::{
node_modules_mount, AgentOsConfig, AgentOsConfigBuilder, AgentOsLimits, AgentOsPackageLimits,
AgentOsSidecarConfig, ExecutionLimits, FsPermissionRule, FsPermissions, HostFunction,
HostFunctionCallback, HostFunctionCollection, HostFunctionCollections, HostFunctionLimits,
HttpLimits, JsRuntimeLimits, MountConfig, MountPlugin, OverlayMountConfig, PackageRef,
PatternPermissionRule, PatternPermissions, PermissionMode, Permissions, PluginLimits,
PythonLimits, ResourceLimits, RootFilesystemConfig, RootFilesystemKind, RootFilesystemMode,
RootLowerInput, RulePermissions, ScheduleCallback, ScheduleDriver, ScheduleEntry,
ScheduleHandle, SidecarJsBridgeCall, SidecarJsBridgeCallback, SidecarSqliteCallback,
SoftwareInput, SoftwareKind, TimerScheduleDriver, TlsLimits, VmGroupConfig,
VmSqliteCallbackRequest, VmSqliteCallbackResponse, VmSqliteDescriptor, VmSqliteQueryResult,
VmSqliteStatement, VmSqliteValue, VmUserAccountConfig, VmUserConfig, WasmLimits,
VM_SQLITE_CALLBACK_NAMESPACE,
};
pub use process::{
ExecOptions, ExecResult, ProcessExit, ProcessInfo, ProcessOutput, ProcessOutputEvent,
ProcessOutputReplay, ProcessStatus, ProcessStream, ProcessTreeNode, SpawnHandle, SpawnOptions,
SpawnStdio, SpawnedProcessInfo, StdinInput, TimingMitigation,
};
pub use net::{HttpRequest, HttpResponse, HttpStreamChunk, HttpStreamHead};
pub use software::{
configure_process_package_cache, process_package_cache_stats, validate_package_source,
InstalledSoftware, PackageManifestInfo, PackageResolver, PackageResolverOptions, PackageSource,
ProcessPackageCacheOptions, ProcessPackageCacheStats, VerifiedPackage,
DEFAULT_MAX_PACKAGE_BYTES,
};
pub use software_registry::{
default_registry_version, resolve_registry_software, ResolvedRegistrySoftware,
SoftwareRegistryOptions, SoftwareSource, DEFAULT_SOFTWARE_REGISTRY_URL,
SOFTWARE_REGISTRY_URL_ENV,
};
pub use fs::{
BatchReadResult, BatchWriteEntry, BatchWriteResult, DirEntry, DirEntryType,
DynamicMountDescriptor, FileContent, FilesystemEntry, FilesystemEntryEncoding,
FilesystemSnapshotEntries, FilesystemSnapshotExport, MkdirOptions, MountInfo,
ReaddirRecursiveOptions, RemoveOptions, RootSnapshotExport, SnapshotExportKind,
VirtualDirEntry, VirtualFileSystem, VirtualStat,
};
pub use shell::{
ConnectTerminalOptions, OpenShellOptions, ShellData, ShellExit, ShellHandle, TerminalInfo,
TerminalOutputEvent, TerminalSnapshot,
};
pub use cron::{
CronAction, CronActionInfo, CronEvent, CronJobHandle, CronJobInfo, CronJobOptions, CronManager,
CronOverlap,
};
pub mod shell;