@@ -274,7 +274,6 @@ pub struct AcpThreadView {
edits_expanded: bool,
plan_expanded: bool,
editor_expanded: bool,
- terminal_expanded: bool,
editing_message: Option<usize>,
prompt_capabilities: Rc<Cell<PromptCapabilities>>,
is_loading_contents: bool,
@@ -386,7 +385,6 @@ impl AcpThreadView {
edits_expanded: false,
plan_expanded: false,
editor_expanded: false,
- terminal_expanded: true,
history_store,
hovered_recent_history_item: None,
prompt_capabilities,
@@ -1722,10 +1720,9 @@ impl AcpThreadView {
matches!(tool_call.kind, acp::ToolKind::Edit) || tool_call.diffs().next().is_some();
let use_card_layout = needs_confirmation || is_edit;
- let is_collapsible = !tool_call.content.is_empty() && !use_card_layout;
+ let is_collapsible = !tool_call.content.is_empty() && !needs_confirmation;
- let is_open =
- needs_confirmation || is_edit || self.expanded_tool_calls.contains(&tool_call.id);
+ let is_open = needs_confirmation || self.expanded_tool_calls.contains(&tool_call.id);
let gradient_overlay = |color: Hsla| {
div()
@@ -2195,6 +2192,8 @@ impl AcpThreadView {
.map(|path| format!("{}", path.display()))
.unwrap_or_else(|| "current directory".to_string());
+ let is_expanded = self.expanded_tool_calls.contains(&tool_call.id);
+
let header = h_flex()
.id(SharedString::from(format!(
"terminal-tool-header-{}",
@@ -2328,21 +2327,27 @@ impl AcpThreadView {
"terminal-tool-disclosure-{}",
terminal.entity_id()
)),
- self.terminal_expanded,
+ is_expanded,
)
.opened_icon(IconName::ChevronUp)
.closed_icon(IconName::ChevronDown)
- .on_click(cx.listener(move |this, _event, _window, _cx| {
- this.terminal_expanded = !this.terminal_expanded;
- })),
- );
+ .on_click(cx.listener({
+ let id = tool_call.id.clone();
+ move |this, _event, _window, _cx| {
+ if is_expanded {
+ this.expanded_tool_calls.remove(&id);
+ } else {
+ this.expanded_tool_calls.insert(id.clone());
+ }
+ }})),
+ );
let terminal_view = self
.entry_view_state
.read(cx)
.entry(entry_ix)
.and_then(|entry| entry.terminal(terminal));
- let show_output = self.terminal_expanded && terminal_view.is_some();
+ let show_output = is_expanded && terminal_view.is_some();
v_flex()
.mb_2()