From 215ac50bc8645f38db3d62c02dc21c7694c45b7d Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Sat, 20 Dec 2025 13:29:13 -0300 Subject: [PATCH] agent_ui: Fix markdown block for tool call input and output content (#45454) This PR fixes two issues with regards to markdown codeblocks rendered in tool call input and output content display: - the JSON code snippets weren't properly indented - codeblocks weren't being rendered in unique containers; e.g., if you hovered one scrollbar, all of them would also be hovered, even though horizontal scrolling itself worked properly Here's the end result: https://github.com/user-attachments/assets/3d6daf64-0f88-4a16-a5a0-94998c1ba7e2 Release Notes: - agent: Fix scrollbar and JSON indentation for tool call input/output content's markdown codeblocks. --- crates/acp_thread/src/acp_thread.rs | 5 ++++- crates/agent_ui/src/acp/thread_view.rs | 28 +++++++++++++++----------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/crates/acp_thread/src/acp_thread.rs b/crates/acp_thread/src/acp_thread.rs index a994cc8e57e4456ec57092b2257269b104af74c7..3fe833cbeade93ffba422198fa6bf21180b26efe 100644 --- a/crates/acp_thread/src/acp_thread.rs +++ b/crates/acp_thread/src/acp_thread.rs @@ -11,6 +11,7 @@ use language::language_settings::FormatOnSave; pub use mention::*; use project::lsp_store::{FormatTrigger, LspFormatTarget}; use serde::{Deserialize, Serialize}; +use serde_json::to_string_pretty; use settings::Settings as _; use task::{Shell, ShellBuilder}; pub use terminal::*; @@ -2422,8 +2423,10 @@ fn markdown_for_raw_output( ) })), value => Some(cx.new(|cx| { + let pretty_json = to_string_pretty(value).unwrap_or_else(|_| value.to_string()); + Markdown::new( - format!("```json\n{}\n```", value).into(), + format!("```json\n{}\n```", pretty_json).into(), Some(language_registry.clone()), None, cx, diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 32b2de2c0d850676bf7a6a80ee88950d62aa24e0..72d5536ce28641d6a7b830346542beece52bf6e0 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -2489,9 +2489,11 @@ impl AcpThreadView { .border_color(self.tool_card_border_color(cx)) .child(input_output_header("Raw Input:".into())) .children(tool_call.raw_input_markdown.clone().map(|input| { - self.render_markdown( - input, - default_markdown_style(false, false, window, cx), + div().id(("tool-call-raw-input-markdown", entry_ix)).child( + self.render_markdown( + input, + default_markdown_style(false, false, window, cx), + ), ) })) .child(input_output_header("Output:".into())), @@ -2499,15 +2501,17 @@ impl AcpThreadView { }) .children(tool_call.content.iter().enumerate().map( |(content_ix, content)| { - div().child(self.render_tool_call_content( - entry_ix, - content, - content_ix, - tool_call, - use_card_layout, - window, - cx, - )) + div().id(("tool-call-output", entry_ix)).child( + self.render_tool_call_content( + entry_ix, + content, + content_ix, + tool_call, + use_card_layout, + window, + cx, + ), + ) }, )) .into_any(),