Skip to main content

cli/
main.rs

1//! Command-line inspection surface for NVA pet-resort agent and tool contracts.
2//!
3//! The CLI is a read-only runtime surface. It prints deterministic JSON for the
4//! baseline agent catalog and external tool candidates so operators can inspect
5//! workflow contracts without starting the HTTP API, running workers, or touching
6//! live provider systems.
7
8use app::{agents, tools};
9use clap::{Parser, Subcommand};
10
11#[derive(Debug, Parser)]
12#[command(name = "pet-resort")]
13#[command(about = "Pet resort agent-foundation design CLI")]
14struct Cli {
15    #[command(subcommand)]
16    command: Command,
17}
18
19#[derive(Debug, Subcommand)]
20enum Command {
21    /// Print baseline agent specs as deterministic JSON for operator inspection.
22    Agents,
23    /// Print external tool candidates as deterministic JSON without probing live systems.
24    Tools,
25}
26
27fn main() -> anyhow::Result<()> {
28    let cli = Cli::parse();
29    match cli.command {
30        Command::Agents => println!(
31            "{}",
32            serde_json::to_string_pretty(&agents::baseline_agent_specs())?
33        ),
34        Command::Tools => {
35            let tools = vec![
36                tools::ExternalToolCandidate::GingrPortal,
37                tools::ExternalToolCandidate::PaymentProvider,
38                tools::ExternalToolCandidate::SmsProvider,
39                tools::ExternalToolCandidate::EmailProvider,
40                tools::ExternalToolCandidate::FileStorage,
41                tools::ExternalToolCandidate::OcrOrDocumentAi,
42                tools::ExternalToolCandidate::CameraOrWebcamProvider,
43                tools::ExternalToolCandidate::HermesKanban,
44                tools::ExternalToolCandidate::HermesCronOrWebhook,
45                tools::ExternalToolCandidate::Postgres,
46            ];
47            println!("{}", serde_json::to_string_pretty(&tools)?);
48        }
49    }
50    Ok(())
51}