Skip to main content

horus_cli/frontend/
mod.rs

1//! Horus terminal frontend.
2
3use horus::Result;
4use horus_gateway::client::{GatewayEvents, GatewaySender};
5use horus_gateway::wire::{ReadyPayload, SessionReadyPayload};
6
7mod catalog;
8mod cloudflare_setup;
9mod dashboard;
10mod gateway;
11mod gateway_actions;
12mod headless;
13mod reinitialize;
14mod setup;
15mod terminal;
16mod theme;
17mod tui;
18
19pub use headless::run as run_headless;
20pub use tui::terminal_text;
21
22pub use cloudflare_setup::{CloudflareInit, run as run_cloudflare_setup};
23pub use dashboard::{run as run_gateway_dashboard, run_provider as run_gateway_provider};
24pub use reinitialize::confirm as confirm_gateway_reinitialize;
25
26pub async fn run(
27    sender: GatewaySender,
28    events: GatewayEvents,
29    gateway: &mut ReadyPayload,
30    session: &mut SessionReadyPayload,
31    local_gateway: bool,
32    gateway_endpoint: String,
33) -> Result<(FrontendExit, GatewaySender, GatewayEvents)> {
34    let workspace = session.workspace.path.clone();
35    let catalog = catalog::UiCatalog::build(&session.contributions, &gateway.models, &workspace)?;
36    tui::runtime::run(
37        sender,
38        events,
39        gateway,
40        session,
41        catalog,
42        local_gateway,
43        gateway_endpoint,
44    )
45    .await
46}
47
48/// Why a frontend returned control to its launcher.
49pub enum FrontendExit {
50    Exit,
51    Discard,
52    New,
53    Resume(String),
54    Reload,
55    Reconnect,
56}