use schemars::JsonSchema;
use serde::Deserialize;
#[derive(Clone, Copy, Debug, Deserialize, JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum EmailModeParam {
Raw,
Handle,
Anonymized,
Hash,
}
impl EmailModeParam {
pub const fn as_cli(self) -> &'static str {
match self {
Self::Raw => "raw",
Self::Handle => "handle",
Self::Anonymized => "anonymized",
Self::Hash => "hash",
}
}
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct AnalyzeParams {
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub issue_types: Option<Vec<String>>,
pub boundary_violations: Option<bool>,
pub baseline: Option<String>,
pub save_baseline: Option<String>,
pub fail_on_regression: Option<bool>,
pub tolerance: Option<String>,
pub regression_baseline: Option<String>,
pub save_regression_baseline: Option<String>,
pub group_by: Option<String>,
pub file: Option<Vec<String>>,
pub include_entry_exports: Option<bool>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Deserialize, JsonSchema)]
pub struct CheckChangedParams {
pub root: Option<String>,
pub since: String,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub baseline: Option<String>,
pub save_baseline: Option<String>,
pub fail_on_regression: Option<bool>,
pub tolerance: Option<String>,
pub regression_baseline: Option<String>,
pub save_regression_baseline: Option<String>,
pub include_entry_exports: Option<bool>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct SecurityCandidatesParams {
pub root: Option<String>,
pub config: Option<String>,
pub workspace: Option<String>,
pub changed_since: Option<String>,
pub changed_workspaces: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct FindDupesParams {
pub root: Option<String>,
pub config: Option<String>,
pub workspace: Option<String>,
pub mode: Option<String>,
pub min_tokens: Option<u32>,
pub min_lines: Option<u32>,
#[schemars(range(min = 2))]
pub min_occurrences: Option<u32>,
pub threshold: Option<f64>,
pub skip_local: Option<bool>,
pub cross_language: Option<bool>,
pub ignore_imports: Option<bool>,
pub explain_skipped: Option<bool>,
pub top: Option<usize>,
pub baseline: Option<String>,
pub save_baseline: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
pub changed_since: Option<String>,
pub group_by: Option<String>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct FixParams {
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub no_create_config: Option<bool>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct ProjectInfoParams {
pub root: Option<String>,
pub config: Option<String>,
pub entry_points: Option<bool>,
pub files: Option<bool>,
pub plugins: Option<bool>,
pub boundaries: Option<bool>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Deserialize, JsonSchema)]
pub struct TraceExportParams {
#[schemars(length(min = 1))]
pub file: String,
#[schemars(length(min = 1))]
pub export_name: String,
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Deserialize, JsonSchema)]
pub struct TraceFileParams {
#[schemars(length(min = 1))]
pub file: String,
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Deserialize, JsonSchema)]
pub struct TraceDependencyParams {
#[schemars(length(min = 1))]
pub package_name: String,
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct TraceCloneParams {
#[serde(default)]
pub file: Option<String>,
#[serde(default)]
pub line: Option<usize>,
#[serde(default)]
pub fingerprint: Option<String>,
pub root: Option<String>,
pub config: Option<String>,
pub workspace: Option<String>,
pub mode: Option<String>,
pub min_tokens: Option<u32>,
pub min_lines: Option<u32>,
#[schemars(range(min = 2))]
pub min_occurrences: Option<u32>,
pub threshold: Option<f64>,
pub skip_local: Option<bool>,
pub cross_language: Option<bool>,
pub ignore_imports: Option<bool>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct HealthParams {
pub root: Option<String>,
pub config: Option<String>,
pub max_cyclomatic: Option<u16>,
pub max_cognitive: Option<u16>,
pub max_crap: Option<f64>,
pub top: Option<usize>,
pub sort: Option<String>,
pub changed_since: Option<String>,
pub complexity: Option<bool>,
pub file_scores: Option<bool>,
pub hotspots: Option<bool>,
pub ownership: Option<bool>,
pub ownership_email_mode: Option<EmailModeParam>,
pub targets: Option<bool>,
pub coverage_gaps: Option<bool>,
pub score: Option<bool>,
pub min_score: Option<f64>,
pub min_severity: Option<String>,
pub since: Option<String>,
pub min_commits: Option<u32>,
pub workspace: Option<String>,
pub production: Option<bool>,
pub save_snapshot: Option<String>,
pub baseline: Option<String>,
pub save_baseline: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
pub trend: Option<bool>,
pub effort: Option<String>,
pub summary: Option<bool>,
pub coverage: Option<String>,
pub coverage_root: Option<String>,
pub runtime_coverage: Option<String>,
pub min_invocations_hot: Option<u64>,
pub min_observation_volume: Option<u32>,
pub low_traffic_threshold: Option<f64>,
pub group_by: Option<String>,
}
#[derive(Deserialize, JsonSchema)]
pub struct CheckRuntimeCoverageParams {
pub coverage: String,
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
pub min_invocations_hot: Option<u64>,
pub min_observation_volume: Option<u32>,
pub low_traffic_threshold: Option<f64>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
pub max_crap: Option<f64>,
pub top: Option<usize>,
pub group_by: Option<String>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct AuditParams {
pub root: Option<String>,
pub config: Option<String>,
pub base: Option<String>,
pub production: Option<bool>,
pub production_dead_code: Option<bool>,
pub production_health: Option<bool>,
pub production_dupes: Option<bool>,
pub workspace: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
pub group_by: Option<String>,
pub gate: Option<String>,
pub dead_code_baseline: Option<String>,
pub health_baseline: Option<String>,
pub dupes_baseline: Option<String>,
pub explain_skipped: Option<bool>,
pub max_crap: Option<f64>,
pub coverage: Option<String>,
pub coverage_root: Option<String>,
pub include_entry_exports: Option<bool>,
pub runtime_coverage: Option<String>,
pub min_invocations_hot: Option<u64>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct ExplainParams {
pub issue_type: String,
}
#[derive(Debug, Default, serde::Deserialize, schemars::JsonSchema)]
pub struct ListBoundariesParams {
pub root: Option<String>,
pub config: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}
#[derive(Debug, Default, Deserialize, JsonSchema)]
pub struct ImpactParams {
pub root: Option<String>,
}
#[derive(Default, Deserialize, JsonSchema)]
pub struct FeatureFlagsParams {
pub root: Option<String>,
pub config: Option<String>,
pub production: Option<bool>,
pub workspace: Option<String>,
#[expect(
dead_code,
reason = "exposed via JSON Schema for agent discovery; CLI filter pending"
)]
pub flag_type: Option<String>,
#[expect(
dead_code,
reason = "exposed via JSON Schema for agent discovery; CLI filter pending"
)]
pub confidence: Option<String>,
pub no_cache: Option<bool>,
pub threads: Option<usize>,
}