Skip to main content

agent_sim/
internal_cli.rs

1use clap::{Parser, Subcommand};
2use std::ffi::{OsStr, OsString};
3
4#[derive(Debug, Parser)]
5#[command(name = "agent-sim", hide = true)]
6struct InternalCli {
7    #[command(subcommand)]
8    command: InternalCommand,
9}
10
11#[derive(Debug, Subcommand)]
12pub enum InternalCommand {
13    InstanceDaemon {
14        #[arg(long)]
15        instance: String,
16        #[arg(long)]
17        load_spec_path: String,
18    },
19    BootstrapInstance {
20        #[arg(long)]
21        instance: String,
22        #[arg(long)]
23        load_spec_path: String,
24    },
25    EnvDaemon {
26        #[arg(long)]
27        env_spec_path: String,
28    },
29}
30
31pub fn parse_from_env_if_internal() -> Option<InternalCommand> {
32    let raw_args = std::env::args_os().collect::<Vec<_>>();
33    if raw_args
34        .get(1)
35        .is_none_or(|arg| arg != OsStr::new("__internal"))
36    {
37        return None;
38    }
39
40    let args = std::iter::once(raw_args[0].clone())
41        .chain(raw_args.into_iter().skip(2))
42        .collect::<Vec<OsString>>();
43    Some(InternalCli::parse_from(args).command)
44}