use clap::Args;
#[derive(Args, Debug)]
pub struct ServerArgs {
#[arg(value_name = "TAG")]
pub tag: Option<String>,
#[arg(long, default_value = "127.0.0.1")]
pub host: String,
#[arg(long, short, default_value = "8080")]
pub port: u16,
#[arg(long)]
pub sandbox: bool,
}
pub async fn execute(args: &ServerArgs, config: &octomind::Config) -> Result<(), anyhow::Error> {
use octomind::websocket::WebSocketServer;
let (resolved_config, role) =
octomind::agent::resolver::resolve_config_and_role(args.tag.as_deref(), config, None)
.await?;
let log_level = resolved_config.log_level.as_str();
if let Err(e) = octomind::logging::tracing_setup::init_tracing(
octomind::logging::tracing_setup::LoggingMode::WebSocket,
log_level,
) {
eprintln!("Warning: Failed to initialize tracing: {}", e);
}
super::common::startup_mcp_only(&role, &resolved_config, true).await?;
let server = WebSocketServer::new(&args.host, args.port, resolved_config, role)?;
server.start().await?;
Ok(())
}