mod commands;
use anyhow::Result;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "pforge")]
#[command(version)]
#[command(about = "Declarative MCP server framework", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
New {
name: String,
#[arg(short, long)]
path: Option<String>,
},
Build {
#[arg(short, long)]
release: bool,
},
Serve {
#[arg(short, long, default_value = "pforge.yaml")]
config: String,
},
Dev {
#[arg(short, long, default_value = "pforge.yaml")]
config: String,
#[arg(short, long, default_value_t = true)]
watch: bool,
},
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::New { name, path } => {
commands::new::execute(&name, path.as_deref())?;
}
Commands::Build { release } => {
commands::build::execute(release)?;
}
Commands::Serve { config } => {
commands::serve::execute(&config).await?;
}
Commands::Dev { config, watch } => {
commands::dev::execute(&config, watch).await?;
}
}
Ok(())
}