acp: Fix @mentions when remoting from Windows to Linux (#38882)

Closes #38620

`Url::from_file_path` and `Url::from_directory_path` assume the path
style of the target they were compiled for, so we can't use them in
general. So, switch from `file://` to encoding the absolute path (for
mentions that have one) as a query parameter, which works no matter the
platforms. We'll still parse the old `file://` mention URIs for
compatibility with thread history.

Release Notes:

- windows: Fixed a crash when using `@mentions` in agent threads when
remoting from Windows to Linux or WSL.
This commit is contained in:
Cole Miller
2025-09-25 16:23:45 -04:00
committed by GitHub
parent 236006b6b3
commit ecc35fcd9a
3 changed files with 123 additions and 65 deletions
+9 -5
View File
@@ -1205,7 +1205,7 @@ mod tests {
use acp_thread::{AgentConnection, AgentModelGroupName, AgentModelInfo, MentionUri};
use fs::FakeFs;
use gpui::TestAppContext;
use indoc::indoc;
use indoc::formatdoc;
use language_model::fake_provider::FakeLanguageModel;
use serde_json::json;
use settings::SettingsStore;
@@ -1502,13 +1502,17 @@ mod tests {
summary_model.end_last_completion_stream();
send.await.unwrap();
let uri = MentionUri::File {
abs_path: path!("/a/b.md").into(),
}
.to_uri();
acp_thread.read_with(cx, |thread, cx| {
assert_eq!(
thread.to_markdown(cx),
indoc! {"
formatdoc! {"
## User
What does [@b.md](file:///a/b.md) mean?
What does [@b.md]({uri}) mean?
## Assistant
@@ -1544,10 +1548,10 @@ mod tests {
acp_thread.read_with(cx, |thread, cx| {
assert_eq!(
thread.to_markdown(cx),
indoc! {"
formatdoc! {"
## User
What does [@b.md](file:///a/b.md) mean?
What does [@b.md]({uri}) mean?
## Assistant