Skip to content

Commit 7ea0bdf

Browse files
committed
chore: show hint about spacebar/enter use for the wizard at the correct place
1 parent c2b16cc commit 7ea0bdf

1 file changed

Lines changed: 38 additions & 12 deletions

File tree

src/setup/mod.rs

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ pub async fn run_setup_top(base: BaseArgs, args: SetupArgs) -> Result<()> {
378378
match args.command {
379379
Some(SetupSubcommand::Skills(setup)) => run_setup(base, setup).await,
380380
Some(SetupSubcommand::Instrument(instrument)) => {
381-
run_instrument_setup(base, instrument).await
381+
run_instrument_setup(base, instrument, false).await
382382
}
383383
Some(SetupSubcommand::Mcp(mcp)) => run_mcp_setup(base, mcp),
384384
Some(SetupSubcommand::Doctor(doctor)) => run_doctor(base, doctor),
@@ -462,10 +462,6 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
462462
} else {
463463
eprintln!(" {}", style("Skipped").dim());
464464
}
465-
eprintln!(
466-
" {}",
467-
style("(Un)select option with Space, confirm selection with Enter.").dim()
468-
);
469465
} else if let Some(ref project) = project {
470466
if find_git_root().is_some() {
471467
let _ = maybe_init(&org, project)?;
@@ -476,6 +472,7 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
476472
if !quiet {
477473
print_wizard_step(3, "Agents");
478474
}
475+
let mut multiselect_hint_shown = false;
479476
let (wants_skills, wants_mcp) = if flag_no_mcp_skill {
480477
if !quiet {
481478
eprintln!(
@@ -504,6 +501,13 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
504501
}
505502
(flag_skills, flag_mcp)
506503
} else {
504+
if !quiet {
505+
eprintln!(
506+
" {}",
507+
style("(Un)select option with Space, confirm selection with Enter.").dim()
508+
);
509+
multiselect_hint_shown = true;
510+
}
507511
let choices = ["Skills", "MCP"];
508512
let defaults = [true, true];
509513
let selected = MultiSelect::with_theme(&ColorfulTheme::default())
@@ -656,6 +660,7 @@ async fn run_setup_wizard(mut base: BaseArgs, flags: WizardFlags) -> Result<()>
656660
interactive: false,
657661
yolo,
658662
},
663+
!multiselect_hint_shown,
659664
)
660665
.await?;
661666
} else if !quiet {
@@ -955,7 +960,11 @@ fn should_prompt_setup_action(base: &BaseArgs, args: &AgentsSetupArgs) -> bool {
955960
&& args.workers == crate::sync::default_workers()
956961
}
957962

958-
async fn run_instrument_setup(base: BaseArgs, args: InstrumentSetupArgs) -> Result<()> {
963+
async fn run_instrument_setup(
964+
base: BaseArgs,
965+
args: InstrumentSetupArgs,
966+
print_hint: bool,
967+
) -> Result<()> {
959968
let home = home_dir().ok_or_else(|| anyhow!("failed to resolve HOME/USERPROFILE"))?;
960969
let root = find_git_root().ok_or_else(|| {
961970
anyhow!(
@@ -981,11 +990,18 @@ async fn run_instrument_setup(base: BaseArgs, args: InstrumentSetupArgs) -> Resu
981990
);
982991
}
983992

984-
let selected_workflows = resolve_instrument_workflow_selection(&args)?;
993+
let mut hint_pending = print_hint && !base.quiet;
994+
let selected_workflows = resolve_instrument_workflow_selection(&args, &mut hint_pending)?;
985995

986996
let selected_languages: Vec<LanguageArg> = if !args.languages.is_empty() {
987997
args.languages.clone()
988998
} else if ui::is_interactive() && !args.yes {
999+
if hint_pending {
1000+
eprintln!(
1001+
" {}",
1002+
style("(Un)select option with Space, confirm selection with Enter.").dim()
1003+
);
1004+
}
9891005
let detected_langs = detect_languages_from_dir(&std::env::current_dir()?);
9901006
let Some(langs) = prompt_instrument_language_selection(&detected_langs)? else {
9911007
bail!("instrument setup cancelled by user");
@@ -1173,7 +1189,10 @@ async fn run_instrument_setup(base: BaseArgs, args: InstrumentSetupArgs) -> Resu
11731189
Ok(())
11741190
}
11751191

1176-
fn resolve_instrument_workflow_selection(args: &InstrumentSetupArgs) -> Result<Vec<WorkflowArg>> {
1192+
fn resolve_instrument_workflow_selection(
1193+
args: &InstrumentSetupArgs,
1194+
hint_pending: &mut bool,
1195+
) -> Result<Vec<WorkflowArg>> {
11771196
if !args.workflows.is_empty() {
11781197
let mut selected = resolve_workflow_selection(&args.workflows);
11791198
if !selected.contains(&WorkflowArg::Instrument) {
@@ -1185,6 +1204,13 @@ fn resolve_instrument_workflow_selection(args: &InstrumentSetupArgs) -> Result<V
11851204
}
11861205

11871206
if ui::is_interactive() && !args.yes {
1207+
if *hint_pending {
1208+
eprintln!(
1209+
" {}",
1210+
style("(Un)select option with Space, confirm selection with Enter.").dim()
1211+
);
1212+
*hint_pending = false;
1213+
}
11881214
let Some(selected) = prompt_instrument_workflow_selection()? else {
11891215
bail!("instrument setup cancelled by user");
11901216
};
@@ -3268,8 +3294,8 @@ mod tests {
32683294
yolo: false,
32693295
};
32703296

3271-
let selected =
3272-
resolve_instrument_workflow_selection(&args).expect("resolve instrument workflows");
3297+
let selected = resolve_instrument_workflow_selection(&args, &mut false)
3298+
.expect("resolve instrument workflows");
32733299
assert_eq!(
32743300
selected,
32753301
vec![WorkflowArg::Instrument, WorkflowArg::Evaluate]
@@ -3291,8 +3317,8 @@ mod tests {
32913317
yolo: false,
32923318
};
32933319

3294-
let selected =
3295-
resolve_instrument_workflow_selection(&args).expect("resolve instrument workflows");
3320+
let selected = resolve_instrument_workflow_selection(&args, &mut false)
3321+
.expect("resolve instrument workflows");
32963322
assert_eq!(selected, vec![WorkflowArg::Instrument]);
32973323
}
32983324

0 commit comments

Comments
 (0)