use clap::{Parser, Subcommand};
use std::path::PathBuf;
pub mod agent_replay;
pub mod build_pipeline;
pub mod dev_runtime;
pub mod patch_engine;
pub mod runtime_connection;
pub mod ws_server;
#[derive(Parser)]
#[command(name = "cvkg")]
#[command(about = "Cyber Viking GUI X CLI", long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
New {
name: String,
#[arg(long)]
template: Option<String>,
#[arg(long)]
git: bool,
},
Dev {
#[arg(long)]
target: Option<String>,
#[arg(long, default_value_t = 3000)]
port: u16,
#[arg(long)]
inspector: bool,
},
Build {
#[arg(long)]
target: String,
#[arg(long)]
release: bool,
#[arg(long)]
features: Vec<String>,
},
Serve {
#[arg(long, default_value_t = 8080)]
port: u16,
#[arg(long)]
open: bool,
#[arg(long)]
inspector: bool,
},
Check {
#[arg(long)]
all: bool,
#[arg(long)]
target: Option<String>,
},
Test {
#[arg(long)]
ui: bool,
#[arg(long)]
target: Option<String>,
},
Inspect {
#[arg(long)]
url: String,
#[arg(long, default_value_t = 8081)]
ws_port: u16,
},
Export {
#[arg(long)]
base_path: String,
#[arg(long)]
optimize: bool,
},
Add {
name: String,
#[arg(long)]
features: Vec<String>,
},
Theme {
#[arg(long)]
input: PathBuf,
#[arg(long)]
output: PathBuf,
},
}
fn main() {
let cli = Cli::parse();
match cli.command {
Commands::New { name, template: _, git: _ } => {
println!("Creating new CVKG project: {}", name);
}
Commands::Dev { target: _, port, inspector: _ } => {
println!("Starting development server on port {}", port);
let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port));
tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap()
.block_on(async {
if let Err(e) = ws_server::start_server(addr).await {
eprintln!("Failed to start dev server: {}", e);
}
});
}
Commands::Build { target, release: _, features: _ } => {
println!("Building for target: {}", target);
}
Commands::Serve { port, open: _, inspector: _ } => {
println!("Starting WebKit preview server on port {}", port);
}
Commands::Check { all: _, target: _ } => {
println!("Running checks");
}
Commands::Test { ui: _, target: _ } => {
println!("Running tests");
}
Commands::Inspect { url, ws_port } => {
println!("Launching inspector for {}:{}", url, ws_port);
}
Commands::Export { base_path, optimize: _ } => {
println!("Exporting WASM bundle to {}", base_path);
}
Commands::Add { name, features: _ } => {
println!("Adding component crate: {}", name);
}
Commands::Theme { input, output } => {
println!("Generating theme from {} to {}", input.display(), output.display());
}
}
}