mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-21 00:21:27 +00:00
65 lines
2.6 KiB
Rust
65 lines
2.6 KiB
Rust
use anyhow::Result;
|
|
|
|
use crate::args::GlobalArgs;
|
|
use crate::cli_config;
|
|
|
|
pub async fn execute(mut args: fabro_agent::cli::AgentArgs, globals: &GlobalArgs) -> Result<()> {
|
|
let cli_config = cli_config::load_cli_config(None)?;
|
|
#[cfg(feature = "sleep_inhibitor")]
|
|
let _sleep_guard = fabro_beastie::guard(cli_config.prevent_idle_sleep_enabled());
|
|
let exec_defaults = cli_config.exec.as_ref();
|
|
args.apply_cli_defaults(
|
|
exec_defaults.and_then(|a| a.provider.as_deref()),
|
|
exec_defaults.and_then(|a| a.model.as_deref()),
|
|
exec_defaults.and_then(|a| a.permissions),
|
|
exec_defaults.and_then(|a| a.output_format),
|
|
);
|
|
#[cfg(feature = "server")]
|
|
let resolved = cli_config::resolve_mode(
|
|
globals.mode.clone(),
|
|
globals.server_url.as_deref(),
|
|
&cli_config,
|
|
);
|
|
let mcp_servers: Vec<fabro_mcp::config::McpServerConfig> = cli_config
|
|
.mcp_servers
|
|
.into_iter()
|
|
.map(|(name, entry): (String, fabro_config::mcp::McpServerEntry)| entry.into_config(name))
|
|
.collect();
|
|
#[cfg(feature = "server")]
|
|
{
|
|
match resolved.mode {
|
|
cli_config::ExecutionMode::Server => {
|
|
tracing::info!(mode = "server", "Agent session starting");
|
|
let http_client = cli_config::build_server_client(resolved.tls.as_ref())?;
|
|
let provider_name = args
|
|
.provider
|
|
.clone()
|
|
.unwrap_or_else(|| "anthropic".to_string());
|
|
let adapter = std::sync::Arc::new(fabro_llm::providers::FabroServerAdapter::new(
|
|
http_client,
|
|
&resolved.server_base_url,
|
|
&provider_name,
|
|
));
|
|
let mut client =
|
|
fabro_llm::client::Client::new(std::collections::HashMap::new(), None, vec![]);
|
|
client
|
|
.register_provider(adapter)
|
|
.await
|
|
.map_err(|e| anyhow::anyhow!("Failed to register fabro server adapter: {e}"))?;
|
|
fabro_agent::cli::run_with_args_and_client(args, Some(client), mcp_servers).await?
|
|
}
|
|
cli_config::ExecutionMode::Standalone => {
|
|
tracing::info!(mode = "standalone", "Agent session starting");
|
|
fabro_agent::cli::run_with_args(args, mcp_servers).await?
|
|
}
|
|
}
|
|
}
|
|
#[cfg(not(feature = "server"))]
|
|
{
|
|
let _ = globals;
|
|
tracing::info!(mode = "standalone", "Agent session starting");
|
|
fabro_agent::cli::run_with_args(args, mcp_servers).await?
|
|
}
|
|
|
|
Ok(())
|
|
}
|