From c5bfa93bfbb6bfc2bf45fcfaea3ee31d70c0a3f3 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Mon, 16 Feb 2026 17:03:22 +0100 Subject: [PATCH] acp: Allow permissions on existing terminal tool calls (#49270) It is possible, when the agent is streaming the tool call, that we will get a permission request on an existing terminal and we need to render that. When Zed controls the terminal this won't happen, but when we are just rendering the output, it can happen and we need to show it. Release Notes: - agent: Fix permission options not rendering on terminal commands --- .../src/acp/thread_view/active_thread.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/agent_ui/src/acp/thread_view/active_thread.rs b/crates/agent_ui/src/acp/thread_view/active_thread.rs index 1e8c7d35a3cb9214f557399a34244b7f2bf665c5..264897b31887e5b19ec182be453c23d8b7e7802e 100644 --- a/crates/agent_ui/src/acp/thread_view/active_thread.rs +++ b/crates/agent_ui/src/acp/thread_view/active_thread.rs @@ -4479,6 +4479,12 @@ impl AcpThreadView { ToolCallStatus::Rejected | ToolCallStatus::Canceled | ToolCallStatus::Failed ); + let confirmation_options = match &tool_call.status { + ToolCallStatus::WaitingForConfirmation { options, .. } => Some(options), + _ => None, + }; + let needs_confirmation = confirmation_options.is_some(); + let output = terminal_data.output(); let command_finished = output.is_some(); let truncated_output = @@ -4547,7 +4553,7 @@ impl AcpThreadView { .color(Color::Muted), ), ) - .when(!command_finished, |header| { + .when(!command_finished && !needs_confirmation, |header| { header .gap_1p5() .child( @@ -4725,6 +4731,14 @@ impl AcpThreadView { })), ) }) + .when_some(confirmation_options, |this, options| { + this.child(self.render_permission_buttons( + options, + entry_ix, + tool_call.id.clone(), + cx, + )) + }) .into_any() }