Change summary
crates/agent_ui/src/acp/thread_view.rs | 12 ++++++++++--
crates/agent_ui/src/agent_diff.rs | 13 +++++++++++--
2 files changed, 21 insertions(+), 4 deletions(-)
Detailed changes
@@ -5600,13 +5600,21 @@ impl AcpThreadView {
) -> impl IntoElement {
let editor_bg_color = cx.theme().colors().editor_background;
+ // Sort edited files alphabetically for consistency with Git diff view
+ let mut sorted_buffers: Vec<_> = changed_buffers.iter().collect();
+ sorted_buffers.sort_by(|(buffer_a, _), (buffer_b, _)| {
+ let path_a = buffer_a.read(cx).file().map(|f| f.path().clone());
+ let path_b = buffer_b.read(cx).file().map(|f| f.path().clone());
+ path_a.cmp(&path_b)
+ });
+
v_flex()
.id("edited_files_list")
.max_h_40()
.overflow_y_scroll()
.children(
- changed_buffers
- .iter()
+ sorted_buffers
+ .into_iter()
.enumerate()
.flat_map(|(index, (buffer, diff))| {
let file = buffer.read(cx).file()?;
@@ -131,6 +131,15 @@ impl AgentDiffPane {
.action_log()
.read(cx)
.changed_buffers(cx);
+
+ // Sort edited files alphabetically for consistency with Git diff view
+ let mut sorted_buffers: Vec<_> = changed_buffers.iter().collect();
+ sorted_buffers.sort_by(|(buffer_a, _), (buffer_b, _)| {
+ let path_a = buffer_a.read(cx).file().map(|f| f.path().clone());
+ let path_b = buffer_b.read(cx).file().map(|f| f.path().clone());
+ path_a.cmp(&path_b)
+ });
+
let mut paths_to_delete = self
.multibuffer
.read(cx)
@@ -138,7 +147,7 @@ impl AgentDiffPane {
.cloned()
.collect::<HashSet<_>>();
- for (buffer, diff_handle) in changed_buffers {
+ for (buffer, diff_handle) in sorted_buffers {
if buffer.read(cx).file().is_none() {
continue;
}
@@ -168,7 +177,7 @@ impl AgentDiffPane {
multibuffer_context_lines(cx),
cx,
);
- multibuffer.add_diff(diff_handle, cx);
+ multibuffer.add_diff(diff_handle.clone(), cx);
(was_empty, is_excerpt_newly_added)
});