From ff7ef7951eb47fb6fef2eee20bcbf50fa770e322 Mon Sep 17 00:00:00 2001 From: reidliu41 Date: Sun, 31 May 2026 19:15:35 +0800 Subject: [PATCH] fix(tui): suppress inline skill completions in slash command args Prevent inline skill slash completions from opening while editing arguments for an existing slash command. This keeps `/attach /path/to/image.png` usable without showing skill entries after the path slash, while preserving inline skill completions in normal message text. Adds a regression test for `/attach /`. --- crates/tui/src/tui/slash_menu.rs | 4 ++++ crates/tui/src/tui/ui/tests.rs | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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 a666712a8..233bbafd1 100644 --- a/crates/tui/src/tui/ui/tests.rs +++ b/crates/tui/src/tui/ui/tests.rs @@ -3323,6 +3323,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();