Skip to main content

auths_cli/
cli.rs

1use std::path::PathBuf;
2
3use clap::builder::styling::{AnsiColor, Effects, Styles};
4use clap::{Parser, Subcommand};
5
6use crate::commands::account::AccountCommand;
7use crate::commands::agent::AgentCommand;
8use crate::commands::anchor::AnchorCommand;
9use crate::commands::approval::ApprovalCommand;
10use crate::commands::artifact::ArtifactCommand;
11use crate::commands::audit::AuditCommand;
12use crate::commands::auth::AuthCommand;
13
14use crate::commands::commit::CommitCmd;
15use crate::commands::completions::CompletionsCommand;
16use crate::commands::compliance::ComplianceCommand;
17use crate::commands::config::ConfigCommand;
18use crate::commands::credential::CredentialCommand;
19use crate::commands::debug::DebugCmd;
20use crate::commands::demo::DemoCommand;
21use crate::commands::device::DeviceCommand;
22use crate::commands::device::pair::PairCommand;
23use crate::commands::did_webs::DidWebsCommand;
24use crate::commands::doctor::DoctorCommand;
25use crate::commands::emergency::EmergencyCommand;
26use crate::commands::error_lookup::ErrorLookupCommand;
27use crate::commands::id::IdCommand;
28use crate::commands::init::InitCommand;
29use crate::commands::ipex::IpexCommand;
30use crate::commands::kel::KelCommand;
31use crate::commands::keri_emit::KeriEmitCommand;
32use crate::commands::key::KeyCommand;
33use crate::commands::key_state::KeyStateCommand;
34use crate::commands::learn::LearnCommand;
35use crate::commands::log::LogCommand;
36use crate::commands::multi_sig::MultiSigCommand;
37use crate::commands::namespace::NamespaceCommand;
38use crate::commands::oobi::OobiCommand;
39use crate::commands::org::OrgCommand;
40use crate::commands::policy::PolicyCommand;
41use crate::commands::publish::PublishCommand;
42use crate::commands::reset::ResetCommand;
43use crate::commands::scim::ScimCommand;
44use crate::commands::sign::SignCommand;
45use crate::commands::status::StatusCommand;
46use crate::commands::tls_cert::TlsCertCommand;
47use crate::commands::treasury::TreasuryCommand;
48use crate::commands::trust::TrustCommand;
49use crate::commands::unified_verify::UnifiedVerifyCommand;
50use crate::commands::whoami::WhoamiCommand;
51use crate::commands::witness::WitnessCommand;
52
53fn cli_styles() -> Styles {
54    Styles::styled()
55        .header(AnsiColor::Blue.on_default() | Effects::BOLD)
56        .usage(AnsiColor::Blue.on_default() | Effects::BOLD)
57        .literal(AnsiColor::Cyan.on_default() | Effects::BOLD)
58        .placeholder(AnsiColor::Cyan.on_default())
59        .error(AnsiColor::Red.on_default() | Effects::BOLD)
60        .valid(AnsiColor::Green.on_default() | Effects::BOLD)
61        .invalid(AnsiColor::Yellow.on_default() | Effects::BOLD)
62}
63
64#[derive(Parser, Debug)]
65#[command(
66    name = "auths",
67    about = "\x1b[1;32mauths \u{2014} cryptographic identity for developers and agents\x1b[0m",
68    version,
69    styles = cli_styles(),
70    after_help = "Run 'auths <command> --help' for details on any command.\nRun 'auths --help-all' for all commands including advanced ones."
71)]
72pub struct AuthsCli {
73    #[command(subcommand)]
74    pub command: Option<RootCommand>,
75
76    #[clap(long, help = "Show all commands including advanced ones")]
77    pub help_all: bool,
78
79    #[clap(short = 'j', long, global = true, help = "Emit machine-readable JSON")]
80    pub json: bool,
81
82    #[clap(short, long, global = true, help = "Suppress non-essential output")]
83    pub quiet: bool,
84
85    #[clap(
86        long,
87        value_parser,
88        global = true,
89        help = "Override the local storage directory (default: ~/.auths)"
90    )]
91    pub repo: Option<PathBuf>,
92}
93
94#[derive(Subcommand, Debug)]
95#[command(rename_all = "lowercase")]
96pub enum RootCommand {
97    // ── Primary ──
98    Init(InitCommand),
99    Sign(SignCommand),
100    Verify(UnifiedVerifyCommand),
101    Status(StatusCommand),
102    Whoami(WhoamiCommand),
103
104    // ── Setup & Troubleshooting ──
105    Demo(DemoCommand),
106    Pair(PairCommand),
107    Trust(TrustCommand),
108    Doctor(DoctorCommand),
109    Tutorial(LearnCommand),
110
111    // ── Utilities ──
112    Config(ConfigCommand),
113    Completions(CompletionsCommand),
114
115    // ── Advanced (visible via --help-all) ──
116    #[command(hide = true)]
117    Publish(PublishCommand),
118    #[command(hide = true)]
119    Artifact(ArtifactCommand),
120    #[command(hide = true)]
121    Reset(ResetCommand),
122    #[command(hide = true)]
123    Error(ErrorLookupCommand),
124    #[command(hide = true)]
125    Id(IdCommand),
126    #[command(hide = true)]
127    Device(DeviceCommand),
128    #[command(hide = true)]
129    Key(KeyCommand),
130    Kel(KelCommand),
131    #[command(hide = true, name = "key-state")]
132    KeyState(KeyStateCommand),
133    #[command(hide = true, name = "did-webs")]
134    DidWebs(DidWebsCommand),
135    #[command(hide = true, name = "keri-emit")]
136    KeriEmit(KeriEmitCommand),
137    #[command(hide = true, name = "tls-cert")]
138    TlsCert(TlsCertCommand),
139    #[command(hide = true)]
140    Oobi(OobiCommand),
141    #[command(hide = true)]
142    Ipex(IpexCommand),
143    #[command(hide = true)]
144    Approval(ApprovalCommand),
145    #[command(hide = true)]
146    Policy(PolicyCommand),
147    #[command(hide = true)]
148    Namespace(NamespaceCommand),
149    #[command(hide = true)]
150    Org(OrgCommand),
151    #[command(hide = true)]
152    Compliance(ComplianceCommand),
153    #[command(hide = true)]
154    Credential(CredentialCommand),
155    #[command(hide = true)]
156    Audit(AuditCommand),
157    #[command(hide = true)]
158    Auth(AuthCommand),
159
160    // ── Internal (visible via --help-all) ──
161    #[command(hide = true)]
162    Emergency(EmergencyCommand),
163    #[command(hide = true)]
164    Agent(AgentCommand),
165    /// Aggregate treasury cap across a manager's sub-delegated agents.
166    Treasury(TreasuryCommand),
167    /// Verify witness-network anchor evidence (duplicity proofs) offline.
168    Anchor(AnchorCommand),
169    #[command(hide = true)]
170    Witness(WitnessCommand),
171    #[command(hide = true)]
172    Scim(ScimCommand),
173    #[command(hide = true)]
174    Commit(CommitCmd),
175    #[command(hide = true)]
176    Debug(DebugCmd),
177    #[command(hide = true)]
178    Log(LogCommand),
179    #[command(hide = true)]
180    Account(AccountCommand),
181    #[command(hide = true, name = "multi-sig")]
182    MultiSig(MultiSigCommand),
183}