diff --git a/crates/acp_thread/src/mention.rs b/crates/acp_thread/src/mention.rs index 2361f697b1..7a1b161c6c 100644 --- a/crates/acp_thread/src/mention.rs +++ b/crates/acp_thread/src/mention.rs @@ -135,10 +135,12 @@ impl MentionUri { name, line_range, } => { + let query = url::form_urlencoded::Serializer::new(String::new()) + .append_pair("symbol", name) + .finish(); format!( - "file://{}?symbol={}#L{}:{}", + "file://{}?{query}#L{}:{}", path.display(), - name, line_range.start + 1, line_range.end + 1, ) @@ -152,13 +154,22 @@ impl MentionUri { ) } MentionUri::Thread { name, id } => { - format!("zed:///agent/thread/{id}?name={name}") + let query = url::form_urlencoded::Serializer::new(String::new()) + .append_pair("name", name) + .finish(); + format!("zed:///agent/thread/{id}?{query}") } MentionUri::TextThread { path, name } => { - format!("zed:///agent/text-thread/{}?name={name}", path.display()) + let query = url::form_urlencoded::Serializer::new(String::new()) + .append_pair("name", name) + .finish(); + format!("zed:///agent/text-thread/{}?{query}", path.display()) } MentionUri::Rule { name, id } => { - format!("zed:///agent/rule/{id}?name={name}") + let query = url::form_urlencoded::Serializer::new(String::new()) + .append_pair("name", name) + .finish(); + format!("zed:///agent/rule/{id}?{query}") } } } diff --git a/crates/agent_ui/src/acp/completion_provider.rs b/crates/agent_ui/src/acp/completion_provider.rs index a922a87d50..a8566634f4 100644 --- a/crates/agent_ui/src/acp/completion_provider.rs +++ b/crates/agent_ui/src/acp/completion_provider.rs @@ -688,29 +688,13 @@ impl ContextPickerCompletionProvider { workspace: Entity, cx: &mut App, ) -> Option { - let path_prefix = workspace - .read(cx) - .project() - .read(cx) - .worktree_for_id(symbol.path.worktree_id, cx)? - .read(cx) - .root_name(); - - let (file_name, directory) = - crate::context_picker::file_context_picker::extract_file_name_and_directory( - &symbol.path.path, - path_prefix, - ); - let full_path = if let Some(directory) = directory { - format!("{}{}", directory, file_name) - } else { - file_name.to_string() - }; + let project = workspace.read(cx).project().clone(); let label = CodeLabel::plain(symbol.name.clone(), None); + let abs_path = project.read(cx).absolute_path(&symbol.path, cx)?; let uri = MentionUri::Symbol { - path: full_path.into(), + path: abs_path, name: symbol.name.clone(), line_range: symbol.range.start.0.row..symbol.range.end.0.row, };