From ca62c4477532c0ff82556cfe50b28bb663b6b343 Mon Sep 17 00:00:00 2001 From: Esteban Beltran Date: Mon, 2 Feb 2026 19:25:00 +0100 Subject: [PATCH] feat: add setToolsExpanded and getToolsExpanded to ExtensionsUIContext --- packages/coding-agent/src/core/extensions/runner.ts | 2 ++ packages/coding-agent/src/core/extensions/types.ts | 6 ++++++ .../src/modes/interactive/interactive-mode.ts | 10 ++++++++-- packages/coding-agent/src/modes/rpc/rpc-mode.ts | 9 +++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/src/core/extensions/runner.ts b/packages/coding-agent/src/core/extensions/runner.ts index bcdd9fa5..2378251a 100644 --- a/packages/coding-agent/src/core/extensions/runner.ts +++ b/packages/coding-agent/src/core/extensions/runner.ts @@ -146,6 +146,8 @@ const noOpUIContext: ExtensionUIContext = { getAllThemes: () => [], getTheme: () => undefined, setTheme: (_theme: string | Theme) => ({ success: false, error: "UI not available" }), + getToolsExpanded: () => false, + setToolsExpanded: () => {}, }; export class ExtensionRunner { diff --git a/packages/coding-agent/src/core/extensions/types.ts b/packages/coding-agent/src/core/extensions/types.ts index 1136609a..b805c8be 100644 --- a/packages/coding-agent/src/core/extensions/types.ts +++ b/packages/coding-agent/src/core/extensions/types.ts @@ -218,6 +218,12 @@ export interface ExtensionUIContext { /** Set the current theme by name or Theme object. */ setTheme(theme: string | Theme): { success: boolean; error?: string }; + + /** Get current tool output expansion state. */ + getToolsExpanded(): boolean; + + /** Set tool output expansion state. */ + setToolsExpanded(expanded: boolean): void; } // ============================================================================ diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index 300a7516..ea701714 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -1396,6 +1396,8 @@ export class InteractiveMode { } return result; }, + getToolsExpanded: () => this.toolOutputExpanded, + setToolsExpanded: (expanded) => this.setToolsExpanded(expanded), }; } @@ -2658,10 +2660,14 @@ export class InteractiveMode { } private toggleToolOutputExpansion(): void { - this.toolOutputExpanded = !this.toolOutputExpanded; + this.setToolsExpanded(!this.toolOutputExpanded); + } + + private setToolsExpanded(expanded: boolean): void { + this.toolOutputExpanded = expanded; for (const child of this.chatContainer.children) { if (isExpandable(child)) { - child.setExpanded(this.toolOutputExpanded); + child.setExpanded(expanded); } } this.ui.requestRender(); diff --git a/packages/coding-agent/src/modes/rpc/rpc-mode.ts b/packages/coding-agent/src/modes/rpc/rpc-mode.ts index 91b1a16d..770dba1f 100644 --- a/packages/coding-agent/src/modes/rpc/rpc-mode.ts +++ b/packages/coding-agent/src/modes/rpc/rpc-mode.ts @@ -252,6 +252,15 @@ export async function runRpcMode(session: AgentSession): Promise { // Theme switching not supported in RPC mode return { success: false, error: "Theme switching not supported in RPC mode" }; }, + + getToolsExpanded() { + // Tool expansion not supported in RPC mode - no TUI + return false; + }, + + setToolsExpanded(_expanded: boolean) { + // Tool expansion not supported in RPC mode - no TUI + }, }); // Set up extensions with RPC-based UI context