//! Subcommand handlers for the `mcptest` binary.
//!
//! Each module owns one subcommand's logic. The `cli.rs` parser stays small
//! by importing each entry point from here and routing match arms through
//! one-line dispatch calls. See AGENTS.md "Coding conventions" for the 400
//! line per-module cap that drove this split.

pub mod auth_preflight;
pub mod auth_probe;
pub mod cache;
pub mod compliance;
// `pub(crate)` so the run's compliance lane
// (`cli::handlers::run_live_lanes`) can call `run_suite_live` directly,
// not just the `compliance run` command in the sibling module.
pub(crate) mod compliance_suite;
pub mod discover;
pub mod distill;
pub mod doctor;
pub mod eval;
pub mod eval_cache;
pub mod eval_grade;
pub mod eval_live;
pub mod exec;
pub mod generate;
pub mod generate_coverage;
pub mod generate_suite;
pub mod init;
pub mod inspect;
pub mod introspect;
pub mod invariants;
pub mod lint;
pub mod login;
pub(crate) mod login_device;
pub mod matchers;
pub mod migrate;
pub mod migrate_cassette;
pub mod migration_check;
pub mod mock;
pub mod mock_presets;
pub mod model_compat;
pub mod model_compat_live;
pub mod prompt;
pub mod propose;
pub mod schema;
pub mod schema_lint;
pub mod scorer_run;
pub mod skill;
pub mod tools_call;
pub mod validate;

pub use auth_preflight::auth_preflight_checks;
pub use cache::{run_cache, CacheRunArgs, CacheSubcommand};
pub use compliance::{run_compliance, ComplianceOutputFormat, ComplianceRunCliArgs};
pub use discover::{run_discover, run_discover_url};
pub use distill::{run_distill, DistillRunArgs};
pub use doctor::{render_discovery_inventory, run_doctor_url, DoctorAuth};
pub use eval::run_eval;
pub use exec::{run_exec, ExecRunArgs};
pub use generate::{run_stubs as run_generate_stubs, GenerateStubsArgs};
pub use generate_coverage::{
    run_conformance as run_generate_conformance, run_eval as run_generate_eval,
    run_redteam as run_generate_redteam, GenerateConformanceArgs, GenerateEvalArgs,
    GenerateRedteamArgs,
};
pub use generate_suite::{run_suite as run_generate_suite, GenerateSuiteArgs};
pub use init::{run_init, DiscoveredTarget, InitAuth, UrlTarget};
pub use inspect::{run_inspect, InspectArgs, InspectTarget};
pub use introspect::{
    run_capabilities as run_introspect_capabilities, run_prompts as run_introspect_prompts,
    run_resources as run_introspect_resources, run_tools as run_introspect_tools, IntrospectArgs,
    IntrospectFormat,
};
pub use invariants::{run_invariants, InvariantsOutputFormat, InvariantsRunCliArgs};
pub use lint::{run_lint, Finding, FindingKind, LintArgs, LintFormat};
pub use login::{run_login, LoginRunArgs};
pub use migrate::{run_migrate, MigrateArgs, MigrateKind, Rewrite};
pub use migration_check::{run_migration_check, MigrationCheckFormat};
pub use mock::{run as run_mock, MockRunArgs};
pub use model_compat::{
    run_capture as run_model_compat_capture, run_diff as run_model_compat_diff,
    run_run as run_model_compat_run, CaptureRunArgs as ModelCompatCaptureRunArgs,
    DiffOutputFormat as ModelCompatDiffFormat, DiffRunArgs as ModelCompatDiffRunArgs,
    RunArgs as ModelCompatRunRunArgs,
};
pub use prompt::{run_prompt, PromptRunArgs};
pub use propose::{run_propose, ProposeRunArgs};
pub use schema::run_schema;
pub use schema_lint::{run_schema_lint, SchemaLintArgs, SchemaLintFormat};
pub use scorer_run::{has_scorers, render as render_scorers, run_scorers};
pub use skill::{run_skill, SkillAgent, SkillRunArgs};
pub use tools_call::{run as run_tools_call, ThenStep, ToolsCallArgs};
pub use validate::run_validate;
