diff --git a/crates/tui/src/tui/slash_menu.rs b/crates/tui/src/tui/slash_menu.rs index 9f1aaa86c..05905f747 100644 --- a/crates/tui/src/tui/slash_menu.rs +++ b/crates/tui/src/tui/slash_menu.rs @@ -87,6 +87,10 @@ pub(crate) fn partial_inline_skill_mention_at_cursor( input: &str, cursor_chars: usize, ) -> Option<(usize, String)> { + if looks_like_slash_command_input(input) { + return None; + } + let chars: Vec = input.chars().collect(); if cursor_chars > chars.len() { return None; diff --git a/crates/tui/src/tui/ui/tests.rs b/crates/tui/src/tui/ui/tests.rs index 535f20e80..ca1ebebbf 100644 --- a/crates/tui/src/tui/ui/tests.rs +++ b/crates/tui/src/tui/ui/tests.rs @@ -3536,6 +3536,28 @@ fn inline_skill_slash_popup_filters_partial_without_leaking_to_command_position( ); } +#[test] +fn inline_skill_slash_popup_does_not_open_inside_command_arguments() { + let mut app = create_test_app(); + app.cached_skills = vec![ + ( + "config-doctor".to_string(), + "Diagnose configuration".to_string(), + ), + ("cargo-ci-fixer".to_string(), "Fix CI failures".to_string()), + ]; + app.input = "/attach /".to_string(); + app.cursor_position = app.input.chars().count(); + + let entries = visible_slash_menu_entries(&app, 128); + + assert!( + entries.is_empty(), + "command argument paths should not show inline skill entries: {:?}", + entries.iter().map(|entry| &entry.name).collect::>() + ); +} + #[test] fn apply_slash_menu_selection_splices_inline_skill_mention() { let mut app = create_test_app();