From eeb23ebcf41e9ef8308eeb3eb7ce972ae498f241 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Tue, 20 Jan 2026 16:29:30 +0100 Subject: [PATCH] agent sessions - focus chat if session opened from stacked view (#289120) --- .../chat/browser/agentSessions/agentSessionsControl.ts | 6 ++++-- .../chat/browser/widgetHosts/viewPane/chatViewPane.ts | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.ts index da55fc44340..943aa770a5c 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.ts +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.ts @@ -29,7 +29,7 @@ import { IStyleOverride } from '../../../../../platform/theme/browser/defaultSty import { IAgentSessionsControl } from './agentSessions.js'; import { HoverPosition } from '../../../../../base/browser/ui/hover/hoverWidget.js'; import { URI } from '../../../../../base/common/uri.js'; -import { openSession } from './agentSessionsOpener.js'; +import { ISessionOpenOptions, openSession } from './agentSessionsOpener.js'; import { IEditorService } from '../../../../services/editor/common/editorService.js'; import { ChatEditorInput } from '../widgetHosts/editor/chatEditorInput.js'; import { IMouseEvent } from '../../../../../base/browser/mouseEvent.js'; @@ -43,6 +43,7 @@ export interface IAgentSessionsControlOptions extends IAgentSessionsSorterOption getHoverPosition(): HoverPosition; trackActiveEditorSession(): boolean; + overrideSessionOpenOptions?(openEvent: IOpenEvent): ISessionOpenOptions; notifySessionOpened?(resource: URI, widget: IChatWidget): void; } @@ -220,7 +221,8 @@ export class AgentSessionsControl extends Disposable implements IAgentSessionsCo source: this.options.source }); - const widget = await this.instantiationService.invokeFunction(openSession, element, e); + const options = this.options.overrideSessionOpenOptions?.(e) ?? e; + const widget = await this.instantiationService.invokeFunction(openSession, element, options); if (widget) { this.options.notifySessionOpened?.(element.resource, widget); } diff --git a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.ts b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.ts index 7ad78b3c131..2036f2ffddc 100644 --- a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.ts +++ b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.ts @@ -408,6 +408,12 @@ export class ChatViewPane extends ViewPane implements IViewWelcomeDelegate { trackActiveEditorSession: () => { return !this._widget || this._widget.isEmpty(); // only track and reveal if chat widget is empty }, + overrideSessionOpenOptions: openEvent => { + if (this.sessionsViewerOrientation === AgentSessionsViewerOrientation.Stacked && !openEvent.sideBySide) { + return { ...openEvent, editorOptions: { ...openEvent.editorOptions, preserveFocus: false /* focus the chat widget when opening from stacked sessions viewer since this closes the stacked viewer */ } }; + } + return openEvent; + }, overrideCompare(sessionA: IAgentSession, sessionB: IAgentSession): number | undefined { // When limited where only few sessions show, sort unread sessions to the top