Skip to main content

nomad_cli/
cli.rs

1use clap::{Parser, Subcommand, Args};
2use clap_complete::Shell;
3
4#[derive(Parser)]
5#[command(name = "nom", version, about = "Nomad headless browser CLI")]
6pub struct Cli {
7    /// Generate shell completions
8    #[arg(long, value_enum)]
9    pub completions: Option<Shell>,
10    #[command(subcommand)]
11    pub command: Option<Command>,
12}
13
14#[derive(Subcommand)]
15pub enum Command {
16    /// Fetch a URL and print formatted output
17    Browse(BrowseArgs),
18    /// Manage the background daemon process
19    Daemon(DaemonArgs),
20    /// Quick daemon health check
21    Health(HealthArgs),
22    /// List output formats
23    Format(FormatArgs),
24}
25
26#[derive(Args)]
27pub struct BrowseArgs {
28    /// URL to fetch
29    pub url: String,
30    /// Output format: raw|json|markdown|agent|summary|minimal|section|a11y|tree|reader|form (or 0-10)
31    #[arg(short, long, default_value = "summary")]
32    pub format: String,
33    /// Output to file instead of stdout
34    #[arg(short, long)]
35    pub output: Option<String>,
36    /// Daemon port (auto-detected if not set)
37    #[arg(long, default_value = "8000")]
38    pub port: u16,
39    /// Force oneshot mode (don't try daemon)
40    #[arg(long)]
41    pub oneshot: bool,
42    /// JS timeout in ms (oneshot only)
43    #[arg(long)]
44    pub js_timeout: Option<u32>,
45}
46
47#[derive(Args)]
48pub struct DaemonArgs {
49    #[command(subcommand)]
50    pub action: DaemonAction,
51}
52
53#[derive(Subcommand)]
54pub enum DaemonAction {
55    /// Start the background daemon
56    Start {
57        /// HTTP API port
58        #[arg(long, default_value = "8000")]
59        port: u16,
60        /// Page cache capacity
61        #[arg(long, default_value = "1")]
62        cache_cap: usize,
63        /// Max concurrent HTML parses
64        #[arg(long, default_value = "2")]
65        parse_concurrency: usize,
66    },
67    /// Stop the daemon
68    Stop,
69    /// Show daemon status
70    Status,
71    /// Restart the daemon
72    Restart {
73        /// HTTP API port
74        #[arg(long, default_value = "8000")]
75        port: u16,
76    },
77}
78
79#[derive(Args)]
80pub struct HealthArgs {
81    /// Daemon port
82    #[arg(long, default_value = "8000")]
83    pub port: u16,
84    /// JSON output
85    #[arg(long)]
86    pub json: bool,
87}
88
89#[derive(Args)]
90pub struct FormatArgs {
91    /// Show detailed info for a specific format (0-10 or name)
92    pub format: Option<String>,
93}