@@ -639,8 +639,7 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
639639 . ok_or_else ( || anyhow ! ( "setup cancelled" ) ) ?
640640 } ;
641641 let home = home_dir ( ) . ok_or_else ( || anyhow ! ( "failed to resolve HOME/USERPROFILE" ) ) ?;
642- let local_root = resolve_local_root_for_scope ( scope) ?;
643- let detected = detect_agents ( local_root. as_deref ( ) , & home) ;
642+ let detected = detect_agents ( ) ;
644643 let selected_agent =
645644 resolve_default_agent_selection ( flag_agent, & detected, "Select coding agent" , true ) ?;
646645 if verbose && flag_agent. is_some ( ) {
@@ -796,9 +795,7 @@ async fn run_default_setup(mut base: BaseArgs, args: SetupArgs) -> Result<()> {
796795 }
797796
798797 let scope = default_setup_scope ( & args. agents ) ;
799- let home = home_dir ( ) . ok_or_else ( || anyhow ! ( "failed to resolve HOME/USERPROFILE" ) ) ?;
800- let local_root = resolve_local_root_for_scope ( scope) ?;
801- let detected = detect_agents ( local_root. as_deref ( ) , & home) ;
798+ let detected = detect_agents ( ) ;
802799 let selected_agent = resolve_default_agent_selection (
803800 args. agents . agent ,
804801 & detected,
@@ -1114,7 +1111,7 @@ async fn execute_skills_setup(
11141111 quiet : bool ,
11151112) -> Result < SkillsSetupOutcome > {
11161113 let home = home_dir ( ) . ok_or_else ( || anyhow ! ( "failed to resolve HOME/USERPROFILE" ) ) ?;
1117- let selection = resolve_setup_selection ( args, & home ) ?;
1114+ let selection = resolve_setup_selection ( args) ?;
11181115 let scope = selection. scope ;
11191116 let local_root = selection. local_root ;
11201117 let detected = selection. detected ;
@@ -1242,11 +1239,11 @@ async fn run_instrument_setup(
12421239 "instrument setup requires running inside a git repository (could not find .git in parent chain)"
12431240 )
12441241 } ) ?;
1245- let mut detected = detect_agents ( Some ( & root ) , & home ) ;
1242+ let mut detected = detect_agents ( ) ;
12461243
12471244 let runnable_agents = detect_runnable_agents ( ) ;
12481245 let selected = if args. agent . is_none ( ) {
1249- resolve_unambiguous_instrument_agent ( & runnable_agents, & detected )
1246+ resolve_unambiguous_instrument_agent ( & runnable_agents)
12501247 } else {
12511248 None
12521249 } ;
@@ -2116,7 +2113,7 @@ fn execute_mcp_install(
21162113
21172114fn run_mcp_setup ( base : BaseArgs , args : AgentsMcpSetupArgs ) -> Result < ( ) > {
21182115 let home = home_dir ( ) . ok_or_else ( || anyhow ! ( "failed to resolve HOME/USERPROFILE" ) ) ?;
2119- let selection = resolve_mcp_selection ( & args, & home ) ?;
2116+ let selection = resolve_mcp_selection ( & args) ?;
21202117 let scope = selection. scope ;
21212118 let local_root = selection. local_root ;
21222119 let detected = selection. detected ;
@@ -2149,7 +2146,7 @@ fn run_mcp_setup(base: BaseArgs, args: AgentsMcpSetupArgs) -> Result<()> {
21492146 Ok ( ( ) )
21502147}
21512148
2152- fn resolve_setup_selection ( args : & AgentsSetupArgs , home : & Path ) -> Result < SetupSelection > {
2149+ fn resolve_setup_selection ( args : & AgentsSetupArgs ) -> Result < SetupSelection > {
21532150 let mut scope = initial_scope ( args. local , args. global , args. yes , YesScopeDefault :: Global ) ;
21542151 let interactive = ui:: is_interactive ( ) && !args. yes ;
21552152 let mut prompted_workflows: Option < Vec < WorkflowArg > > = if args. no_workflow {
@@ -2218,7 +2215,7 @@ fn resolve_setup_selection(args: &AgentsSetupArgs, home: &Path) -> Result<SetupS
22182215 ) ?,
22192216 } ;
22202217 let local_root = resolve_local_root_for_scope ( scope) ?;
2221- let detected = detect_agents ( local_root . as_deref ( ) , home ) ;
2218+ let detected = detect_agents ( ) ;
22222219 let selected_agent = resolve_default_agent_selection (
22232220 args. agent ,
22242221 & detected,
@@ -2244,7 +2241,7 @@ fn resolve_setup_selection(args: &AgentsSetupArgs, home: &Path) -> Result<SetupS
22442241 } )
22452242}
22462243
2247- fn resolve_mcp_selection ( args : & AgentsMcpSetupArgs , home : & Path ) -> Result < McpSelection > {
2244+ fn resolve_mcp_selection ( args : & AgentsMcpSetupArgs ) -> Result < McpSelection > {
22482245 let mut scope = initial_scope ( args. local , args. global , args. yes , YesScopeDefault :: Global ) ;
22492246 let interactive = ui:: is_interactive ( ) && !args. yes ;
22502247
@@ -2288,7 +2285,7 @@ fn resolve_mcp_selection(args: &AgentsMcpSetupArgs, home: &Path) -> Result<McpSe
22882285 ) ?,
22892286 } ;
22902287 let local_root = resolve_local_root_for_scope ( scope) ?;
2291- let detected = detect_agents ( local_root . as_deref ( ) , home ) ;
2288+ let detected = detect_agents ( ) ;
22922289 let selected_agent = resolve_default_agent_selection (
22932290 args. agent ,
22942291 & detected,
@@ -2309,7 +2306,7 @@ fn run_doctor(base: BaseArgs, args: AgentsDoctorArgs) -> Result<()> {
23092306 let ( scope, local_root) = resolve_doctor_scope ( & args) ?;
23102307 let home = home_dir ( ) . ok_or_else ( || anyhow ! ( "failed to resolve HOME/USERPROFILE" ) ) ?;
23112308 let docs_output_dir = setup_docs_output_dir ( scope, local_root. as_deref ( ) , & home) ?;
2312- let detected = detect_agents ( local_root . as_deref ( ) , & home ) ;
2309+ let detected = detect_agents ( ) ;
23132310
23142311 let warnings = Vec :: new ( ) ;
23152312 let agents = [ Agent :: Claude , Agent :: Codex , Agent :: Cursor , Agent :: Opencode ]
@@ -2612,16 +2609,6 @@ fn resolve_default_agent_selection(
26122609 bail ! ( "multiple coding agents available; pass --agent <AGENT> or re-run in an interactive terminal" ) ;
26132610}
26142611
2615- #[ allow( dead_code) ]
2616- fn map_instrument_agent_arg ( agent : InstrumentAgentArg ) -> Agent {
2617- match agent {
2618- InstrumentAgentArg :: Claude => Agent :: Claude ,
2619- InstrumentAgentArg :: Codex => Agent :: Codex ,
2620- InstrumentAgentArg :: Cursor => Agent :: Cursor ,
2621- InstrumentAgentArg :: Opencode => Agent :: Opencode ,
2622- }
2623- }
2624-
26252612fn map_instrument_agent_arg_to_agent_arg ( agent : InstrumentAgentArg ) -> AgentArg {
26262613 match agent {
26272614 InstrumentAgentArg :: Claude => AgentArg :: Claude ,
@@ -2695,7 +2682,7 @@ fn detect_runnable_agents() -> Vec<Agent> {
26952682 agents
26962683}
26972684
2698- fn detect_agents ( _local_root : Option < & Path > , _home : & Path ) -> Vec < DetectionSignal > {
2685+ fn detect_agents ( ) -> Vec < DetectionSignal > {
26992686 let mut signals = Vec :: new ( ) ;
27002687 for ( binary, agent) in [
27012688 ( "claude" , Agent :: Claude ) ,
@@ -2714,20 +2701,10 @@ fn detect_agents(_local_root: Option<&Path>, _home: &Path) -> Vec<DetectionSigna
27142701 signals
27152702}
27162703
2717- fn resolve_unambiguous_instrument_agent (
2718- runnable_agents : & [ Agent ] ,
2719- detected : & [ DetectionSignal ] ,
2720- ) -> Option < Agent > {
2721- let runnable_set: BTreeSet < Agent > = runnable_agents. iter ( ) . copied ( ) . collect ( ) ;
2722- if runnable_set. len ( ) == 1 {
2723- return runnable_set. into_iter ( ) . next ( ) ;
2724- }
2725-
2726- let detected_set: BTreeSet < Agent > = detected. iter ( ) . map ( |signal| signal. agent ) . collect ( ) ;
2727- if detected_set. len ( ) == 1 {
2728- return detected_set. into_iter ( ) . next ( ) ;
2704+ fn resolve_unambiguous_instrument_agent ( runnable_agents : & [ Agent ] ) -> Option < Agent > {
2705+ if runnable_agents. len ( ) == 1 {
2706+ return Some ( runnable_agents[ 0 ] ) ;
27292707 }
2730-
27312708 None
27322709}
27332710
@@ -3509,7 +3486,7 @@ mod tests {
35093486 yolo : false ,
35103487 } ;
35113488 let home = std:: env:: temp_dir ( ) ;
3512- let selection = resolve_setup_selection ( & args, & home ) . expect ( "resolve setup selection" ) ;
3489+ let selection = resolve_setup_selection ( & args) . expect ( "resolve setup selection" ) ;
35133490 assert ! ( selection. selected_workflows. is_empty( ) ) ;
35143491 }
35153492
@@ -3528,7 +3505,7 @@ mod tests {
35283505 yolo : false ,
35293506 } ;
35303507 let home = std:: env:: temp_dir ( ) ;
3531- let selection = resolve_setup_selection ( & args, & home ) . expect ( "resolve setup selection" ) ;
3508+ let selection = resolve_setup_selection ( & args) . expect ( "resolve setup selection" ) ;
35323509 assert ! ( selection. selected_workflows. is_empty( ) ) ;
35333510 }
35343511
@@ -4067,39 +4044,16 @@ mod tests {
40674044 }
40684045
40694046 #[ test]
4070- fn instrument_agent_resolution_prefers_single_runnable_agent ( ) {
4071- let detected = vec ! [
4072- DetectionSignal {
4073- agent: Agent :: Claude ,
4074- on_path: false ,
4075- reason: "config" . to_string( ) ,
4076- } ,
4077- DetectionSignal {
4078- agent: Agent :: Codex ,
4079- on_path: false ,
4080- reason: "binary" . to_string( ) ,
4081- } ,
4082- DetectionSignal {
4083- agent: Agent :: Opencode ,
4084- on_path: false ,
4085- reason: "config" . to_string( ) ,
4086- } ,
4087- ] ;
4088-
4089- let resolved = resolve_unambiguous_instrument_agent ( & [ Agent :: Codex ] , & detected) ;
4047+ fn instrument_agent_resolution_selects_single_runnable_agent ( ) {
4048+ let resolved = resolve_unambiguous_instrument_agent ( & [ Agent :: Codex ] ) ;
40904049 assert_eq ! ( resolved, Some ( Agent :: Codex ) ) ;
40914050 }
40924051
40934052 #[ test]
4094- fn instrument_agent_resolution_falls_back_to_single_detected_agent ( ) {
4095- let detected = vec ! [ DetectionSignal {
4096- agent: Agent :: Codex ,
4097- on_path: false ,
4098- reason: "config" . to_string( ) ,
4099- } ] ;
4100-
4101- let resolved = resolve_unambiguous_instrument_agent ( & [ ] , & detected) ;
4102- assert_eq ! ( resolved, Some ( Agent :: Codex ) ) ;
4053+ fn instrument_agent_resolution_returns_none_for_multiple_runnable_agents ( ) {
4054+ let resolved =
4055+ resolve_unambiguous_instrument_agent ( & [ Agent :: Codex , Agent :: Claude , Agent :: Opencode ] ) ;
4056+ assert_eq ! ( resolved, None ) ;
41034057 }
41044058
41054059 #[ test]
0 commit comments