use clap::{Parser, Subcommand, ValueEnum};
use url::Url;
#[derive(Parser, Debug)]
#[command(name = "stillo", version, about = "AI-native terminal browser")]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Command>,
pub url: Option<Url>,
#[arg(long, default_value = "markdown", global = true)]
pub format: OutputFormat,
#[arg(long, default_value = "30", global = true)]
pub timeout: u64,
#[arg(long, global = true)]
pub delegate: Option<DelegateTarget>,
#[arg(long, global = true)]
pub no_delegate: bool,
#[arg(short, long, global = true)]
pub verbose: bool,
}
#[derive(Subcommand, Debug)]
pub enum Command {
Dump {
url: Url,
#[arg(long)]
format: Option<OutputFormat>,
#[arg(long)]
delegate: Option<DelegateTarget>,
#[arg(long)]
no_delegate: bool,
},
Browse { url: Url },
Qa { question: String, url: Url },
Summarize { url: Url },
Extract {
fields: String,
url: Url,
#[arg(long)]
format: Option<OutputFormat>,
},
Mcp,
}
#[derive(ValueEnum, Clone, Debug, Default)]
pub enum OutputFormat {
#[default]
Markdown,
Plain,
Json,
}
#[derive(ValueEnum, Clone, Debug)]
pub enum DelegateTarget {
Auto,
Cdp,
Playwright,
Jina,
Firecrawl,
}