opencode_ralph_loop_cli/
cli.rs1use std::path::PathBuf;
2
3use clap::{Parser, Subcommand, ValueEnum};
4use clap_complete::Shell;
5
6#[derive(Parser)]
7#[command(
8 name = "opencode-ralph-loop-cli",
9 version,
10 about = "Scaffolder CLI for OpenCode Ralph Loop plugin",
11 long_about = None,
12)]
13pub struct Cli {
14 #[command(subcommand)]
15 pub command: Commands,
16
17 #[arg(long, global = true)]
19 pub verbose: bool,
20
21 #[arg(long, global = true)]
23 pub quiet: bool,
24
25 #[arg(long = "no-color", global = true, env = "NO_COLOR")]
27 pub no_color: bool,
28
29 #[arg(
31 long,
32 global = true,
33 value_name = "FORMAT",
34 default_value = "text",
35 env = "OPENCODE_RALPH_LOOP_CLI_OUTPUT"
36 )]
37 pub output: OutputFormat,
38
39 #[arg(
41 long,
42 global = true,
43 value_name = "FILE",
44 env = "OPENCODE_RALPH_LOOP_CLI_CONFIG"
45 )]
46 pub config: Option<std::path::PathBuf>,
47
48 #[arg(long = "json-schema", global = true)]
50 pub json_schema: bool,
51}
52
53#[derive(Subcommand)]
54pub enum Commands {
55 Init(InitArgs),
57 Check(CheckArgs),
59 Uninstall(UninstallArgs),
61 List,
63 Doctor,
65 Completions {
67 shell: Shell,
69 },
70}
71
72#[derive(clap::Args, Debug)]
73pub struct InitArgs {
74 #[arg(long, default_value = ".")]
76 pub path: PathBuf,
77
78 #[arg(long, env = "OPENCODE_RALPH_LOOP_CLI_FORCE")]
80 pub force: bool,
81
82 #[arg(long = "dry-run")]
84 pub dry_run: bool,
85
86 #[arg(
88 long = "plugin-version",
89 env = "OPENCODE_RALPH_LOOP_CLI_PLUGIN_VERSION"
90 )]
91 pub plugin_version: Option<String>,
92
93 #[arg(long = "no-package-json")]
95 pub no_package_json: bool,
96
97 #[arg(long = "no-gitignore")]
99 pub no_gitignore: bool,
100
101 #[arg(long = "no-manifest")]
103 pub no_manifest: bool,
104
105 #[arg(long = "install-hint")]
107 pub install_hint: bool,
108}
109
110#[derive(clap::Args, Debug)]
111pub struct CheckArgs {
112 #[arg(long, default_value = ".")]
114 pub path: PathBuf,
115
116 #[arg(long)]
118 pub strict: bool,
119
120 #[arg(long = "exit-zero")]
122 pub exit_zero: bool,
123}
124
125#[derive(clap::Args, Debug)]
126pub struct UninstallArgs {
127 #[arg(long, default_value = ".")]
129 pub path: PathBuf,
130
131 #[arg(long = "dry-run")]
133 pub dry_run: bool,
134
135 #[arg(long, env = "OPENCODE_RALPH_LOOP_CLI_FORCE")]
137 pub force: bool,
138
139 #[arg(long = "keep-state")]
141 pub keep_state: bool,
142
143 #[arg(long = "keep-node-modules")]
145 pub keep_node_modules: bool,
146}
147
148#[derive(ValueEnum, Clone, Default, Debug, PartialEq)]
149pub enum OutputFormat {
150 #[default]
151 Text,
152 Json,
153 Ndjson,
154 Quiet,
155}