use std::path::Path;
use super::args::{Command, MembersCommand};
use super::handlers::{CommandContext, dependency, mcp, project, query, system};
use crate::members::MembersOperation;
use crate::report::Reporter;
pub(super) fn run_command_in_dir(
command: Command,
cwd: &Path,
cache_root: &Path,
reporter: &Reporter,
) -> anyhow::Result<()> {
let context = CommandContext {
cwd,
cache_root,
reporter,
};
match command {
Command::Add {
url,
global,
dev,
tag,
branch,
version,
revision,
adapter,
component,
sync_on_launch,
no_sync_on_launch,
accept_all_dependencies,
dry_run,
} => dependency::handle_add(
&context,
dependency::AddCommand {
url,
global,
dev,
tag,
branch,
version,
revision,
adapter,
component,
sync_on_launch,
no_sync_on_launch,
accept_all_dependencies,
dry_run,
},
),
Command::Remove {
package,
global,
dry_run,
} => dependency::handle_remove(&context, package, global, dry_run),
Command::Members { command } => match command {
MembersCommand::List { package } => dependency::handle_members_list(&context, package),
MembersCommand::Enable {
package,
members,
allow_high_sensitivity,
dry_run,
} => dependency::handle_members_update(
&context,
dependency::MembersUpdateCommand {
package,
members,
operation: MembersOperation::Enable,
allow_high_sensitivity,
dry_run,
},
),
MembersCommand::Disable {
package,
members,
allow_high_sensitivity,
dry_run,
} => dependency::handle_members_update(
&context,
dependency::MembersUpdateCommand {
package,
members,
operation: MembersOperation::Disable,
allow_high_sensitivity,
dry_run,
},
),
MembersCommand::Set {
package,
members,
allow_high_sensitivity,
dry_run,
} => dependency::handle_members_update(
&context,
dependency::MembersUpdateCommand {
package,
members,
operation: MembersOperation::Set,
allow_high_sensitivity,
dry_run,
},
),
},
Command::List { json } => query::handle_list(&context, json),
Command::Info {
package,
tag,
branch,
json,
} => query::handle_info(&context, package, tag, branch, json),
Command::Review {
package,
tag,
branch,
provider,
model,
} => query::handle_review(
&context,
query::ReviewCommand {
package,
tag,
branch,
provider,
model,
},
),
Command::Outdated { json } => query::handle_outdated(&context, json),
Command::Update {
allow_high_sensitivity,
dry_run,
} => dependency::handle_update(&context, allow_high_sensitivity, dry_run),
Command::Upgrade { check } => system::handle_upgrade(&context, check),
Command::Relay {
packages,
repo_path,
via,
watch,
dry_run,
create_missing,
} => project::handle_relay(
&context,
project::RelayCommand {
packages,
repo_path,
via,
watch,
dry_run,
create_missing,
},
),
Command::Init { dry_run } => project::handle_init(&context, dry_run),
Command::Sync {
locked,
frozen,
allow_high_sensitivity,
force,
adapter,
sync_on_launch,
no_sync_on_launch,
dry_run,
} => project::handle_sync(
&context,
project::SyncCommand {
locked,
frozen,
allow_high_sensitivity,
force,
adapter,
sync_on_launch,
no_sync_on_launch,
dry_run,
},
),
Command::Clean { all, dry_run } => system::handle_clean(&context, all, dry_run),
Command::Completion { shell } => system::handle_completion(shell),
Command::Doctor {
apply,
yes,
check,
force,
json,
} => query::handle_doctor(
&context,
query::DoctorCommand {
apply,
yes,
check,
force,
json,
},
),
Command::Mcp { command } => match command {
crate::cli::args::McpCommand::Serve => mcp::handle_mcp_serve(&context),
crate::cli::args::McpCommand::Status { json } => mcp::handle_mcp_status(&context, json),
},
}
}