From d62c416cfdf99ba407cd66b18abe35dd09ec4af9 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 12 May 2026 23:34:57 +0200 Subject: [PATCH] fix(coding-agent): allow tool expansion during extension confirms closes #4429 --- packages/coding-agent/CHANGELOG.md | 1 + .../src/modes/interactive/components/extension-selector.ts | 7 ++++++- .../coding-agent/src/modes/interactive/interactive-mode.ts | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 703c3d59a..7b86ee147 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -8,6 +8,7 @@ ### Fixed +- Fixed tool output expansion while extension confirmation dialogs are focused ([#4429](https://github.com/earendil-works/pi/issues/4429)). - Fixed auto-retry for Anthropic streams that end before `message_stop` ([#4433](https://github.com/earendil-works/pi/issues/4433)). - Fixed theme sharing across package scopes so extensions do not crash with `Theme not initialized` ([#4333](https://github.com/earendil-works/pi/issues/4333)). - Fixed keybinding hints to show Option instead of Alt on macOS ([#4289](https://github.com/earendil-works/pi/issues/4289)). diff --git a/packages/coding-agent/src/modes/interactive/components/extension-selector.ts b/packages/coding-agent/src/modes/interactive/components/extension-selector.ts index c2fa547e7..8b59c2f21 100644 --- a/packages/coding-agent/src/modes/interactive/components/extension-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/extension-selector.ts @@ -12,6 +12,7 @@ import { keyHint, rawKeyHint } from "./keybinding-hints.js"; export interface ExtensionSelectorOptions { tui?: TUI; timeout?: number; + onToggleToolsExpanded?: () => void; } export class ExtensionSelectorComponent extends Container { @@ -23,6 +24,7 @@ export class ExtensionSelectorComponent extends Container { private titleText: Text; private baseTitle: string; private countdown: CountdownTimer | undefined; + private onToggleToolsExpanded: (() => void) | undefined; constructor( title: string, @@ -36,6 +38,7 @@ export class ExtensionSelectorComponent extends Container { this.options = options; this.onSelectCallback = onSelect; this.onCancelCallback = onCancel; + this.onToggleToolsExpanded = opts?.onToggleToolsExpanded; this.baseTitle = title; this.addChild(new DynamicBorder()); @@ -87,7 +90,9 @@ export class ExtensionSelectorComponent extends Container { handleInput(keyData: string): void { const kb = getKeybindings(); - if (kb.matches(keyData, "tui.select.up") || keyData === "k") { + if (kb.matches(keyData, "app.tools.expand")) { + this.onToggleToolsExpanded?.(); + } else if (kb.matches(keyData, "tui.select.up") || keyData === "k") { this.selectedIndex = Math.max(0, this.selectedIndex - 1); this.updateList(); } else if (kb.matches(keyData, "tui.select.down") || keyData === "j") { diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index 006ee7c54..ee3da0e5c 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -2024,7 +2024,7 @@ export class InteractiveMode { this.hideExtensionSelector(); resolve(undefined); }, - { tui: this.ui, timeout: opts?.timeout }, + { tui: this.ui, timeout: opts?.timeout, onToggleToolsExpanded: () => this.toggleToolOutputExpansion() }, ); this.editorContainer.clear();