Skip to main content

horto_os_ui_shared/remote/
mod.rs

1//! Remote apply path: PC shells out to OpenSSH and runs the CLI agent on a box.
2//!
3//! Default path never writes the box `authorized_keys`. Key install is explicit
4//! opt-in via [`RemoteOptions::install_ssh_key`].
5
6mod arch;
7mod askpass;
8mod bins;
9mod ecosystem;
10mod host;
11mod process;
12mod runner;
13mod ssh;
14mod surfaces;
15mod transfer;
16
17#[cfg(test)]
18use std::sync::Mutex;
19
20/// Serialize tests that mutate process-global env (`XDG_CONFIG_HOME` / `HOME`).
21#[cfg(test)]
22pub(crate) static ENV_LOCK: Mutex<()> = Mutex::new(());
23
24pub use arch::{box_arch_from_uname, BoxArch};
25pub use bins::{
26    asset_name, cache_bin_dir, default_cache_root, default_release_tag, ensure_local_bins,
27    release_download_url, release_tag_is_immutable, resolve_local_ecosystem_bins, LocalBins,
28    BOX_BIN_NAMES,
29};
30pub use ecosystem::{
31    install_ecosystem_after_embedded_apply, install_ecosystem_services,
32    remote_enable_ecosystem_script, unit_with_install_dir, EcosystemInstallChoice,
33    API_TOKEN_DROP_BASENAME, ENSURE_API_TOKEN_SCRIPT, MCP_UNIT, STATUS_API_UNIT,
34};
35pub use host::{parse_host_spec, HostSpec};
36pub use process::{CommandOutput, ProcessRunner, StdioMode, SystemProcessRunner};
37pub use runner::{
38    classify_ssh_failure, finish_save_api_token, normalize_cli_version, offer_save_api_token,
39    parse_api_token_drop, parse_remote_json, probe_remote_cli, pull_remote_api_token,
40    remote_box_snapshot, remote_cli_version_is_current, remote_doctor, remote_doctor_report_banner,
41    remote_ensure_ssh_key, remote_install_payload, remote_probe_arch, remote_progress_message,
42    remote_reboot, remote_reboot_with_sudo_password, remote_run_banner_detail, remote_run_cli,
43    remote_setup_run, remote_setup_status, remote_upload_cli, usable_api_token_hex,
44    wants_reboot_now, write_api_token_file, RemoteBoxCliStatus, RemoteBoxSnapshot, RemoteCliProbe,
45    RemoteOptions, RemoteOptionsInput, RemoteRunFlags, RemoteRunOutcome, RemoteRunRequest,
46    DEFAULT_GITHUB_REPO, DEFAULT_INSTALL_DIR, DEFAULT_REMOTE_AGENT_DIR, MIN_API_TOKEN_HEX_LEN,
47};
48pub use ssh::{remote_install_key_banner, SshEnv, SshSession};
49pub use surfaces::{
50    format_surfaces_report, http_get_label, local_api_token_path, probe_api_surface,
51    probe_cli_surface, probe_mcp_surface, probe_ssh_access, probe_ssh_surface, probe_surfaces,
52    read_local_api_token, ApiSurfaceProbe, CliSurfaceProbe, McpHostProbe, SshSurfaceProbe,
53    SurfaceProbeReport,
54};
55pub use transfer::{prefer_rsync, scp_files, transfer_files};