From 73cdc5ffe61e29e3ef1c4f20810e0e52f8cfc219 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 15 Jan 2026 12:17:45 +0000 Subject: [PATCH 1/3] Initial plan From 56f0a3cd5e83b35d91d8416f6227793685e3a625 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 15 Jan 2026 12:31:47 +0000 Subject: [PATCH 2/3] Close inline chat sessions when AI features are disabled Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> --- .../browser/inlineChatSessionServiceImpl.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts index 797c4ef4566..fd4a25dd7eb 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts @@ -51,8 +51,22 @@ export class InlineChatSessionServiceImpl implements IInlineChatSessionService { readonly onDidChangeSessions: Event = this._onDidChangeSessions.event; constructor( - @IChatService private readonly _chatService: IChatService - ) { } + @IChatService private readonly _chatService: IChatService, + @IChatAgentService chatAgentService: IChatAgentService, + ) { + // Listen for agent changes and dispose all sessions when there is no agent + const agentObs = observableFromEvent(this, chatAgentService.onDidChangeAgents, () => chatAgentService.getDefaultAgent(ChatAgentLocation.EditorInline)); + this._store.add(autorun(r => { + const agent = agentObs.read(r); + if (!agent) { + // No agent available, dispose all sessions + // Copy to array to avoid modifying the map while iterating + for (const session of [...this._sessions.values()]) { + session.dispose(); + } + } + })); + } dispose() { this._store.dispose(); From 08c081fe5af388a9efe9b699764c01d665f5ad82 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 23 Jan 2026 16:47:31 +0000 Subject: [PATCH 3/3] Use dispose() utility from lifecycle.ts to dispose sessions Co-authored-by: jrieken <1794099+jrieken@users.noreply.github.com> --- .../inlineChat/browser/inlineChatSessionServiceImpl.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts index fd4a25dd7eb..185b56de369 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Emitter, Event } from '../../../../base/common/event.js'; -import { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; +import { Disposable, dispose, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; import { ResourceMap } from '../../../../base/common/map.js'; import { autorun, observableFromEvent } from '../../../../base/common/observable.js'; import { isEqual } from '../../../../base/common/resources.js'; @@ -60,10 +60,8 @@ export class InlineChatSessionServiceImpl implements IInlineChatSessionService { const agent = agentObs.read(r); if (!agent) { // No agent available, dispose all sessions - // Copy to array to avoid modifying the map while iterating - for (const session of [...this._sessions.values()]) { - session.dispose(); - } + dispose(this._sessions.values()); + this._sessions.clear(); } })); }