From 6e260c361956ef0efbf334b8cfb69dccc8822f7a Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 7 Apr 2026 08:13:43 +0900 Subject: [PATCH] fix: agents app not closing for update on macOS --- .../contrib/accountMenu/browser/account.contribution.ts | 2 +- .../workbench/services/host/browser/browserHostService.ts | 4 ++++ src/vs/workbench/services/host/browser/host.ts | 7 +++++++ .../services/host/electron-browser/nativeHostService.ts | 4 ++++ src/vs/workbench/test/browser/workbenchTestServices.ts | 1 + 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts b/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts index 17db345a8771b..0bb49b413ad72 100644 --- a/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts +++ b/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts @@ -128,7 +128,7 @@ async function runSessionsUpdateAction( scheme: productService.urlProtocol, query: 'windowId=_blank', }), { openExternal: true }); - await hostService.close(); + await hostService.shutdown(); } return; diff --git a/src/vs/workbench/services/host/browser/browserHostService.ts b/src/vs/workbench/services/host/browser/browserHostService.ts index 6038ad8ac9411..621349135a899 100644 --- a/src/vs/workbench/services/host/browser/browserHostService.ts +++ b/src/vs/workbench/services/host/browser/browserHostService.ts @@ -636,6 +636,10 @@ export class BrowserHostService extends Disposable implements IHostService { mainWindow.close(); } + async shutdown(): Promise { + return this.close(); + } + async withExpectedShutdown(expectedShutdownTask: () => Promise): Promise { const previousShutdownReason = this.shutdownReason; try { diff --git a/src/vs/workbench/services/host/browser/host.ts b/src/vs/workbench/services/host/browser/host.ts index c7d300bf3c7ea..a43eb767fbf44 100644 --- a/src/vs/workbench/services/host/browser/host.ts +++ b/src/vs/workbench/services/host/browser/host.ts @@ -141,6 +141,13 @@ export interface IHostService { */ close(): Promise; + /** + * Quit the entire application. Unlike {@link close}, this will + * terminate the process even on macOS where closing the last + * window normally keeps the app running. + */ + shutdown(): Promise; + /** * Execute an asynchronous `expectedShutdownTask`. While this task is * in progress, attempts to quit the application will not be vetoed with a dialog. diff --git a/src/vs/workbench/services/host/electron-browser/nativeHostService.ts b/src/vs/workbench/services/host/electron-browser/nativeHostService.ts index 3838e3bb4e530..86a3d521e1bef 100644 --- a/src/vs/workbench/services/host/electron-browser/nativeHostService.ts +++ b/src/vs/workbench/services/host/electron-browser/nativeHostService.ts @@ -214,6 +214,10 @@ class WorkbenchHostService extends Disposable implements IHostService { return this.nativeHostService.closeWindow(); } + shutdown(): Promise { + return this.nativeHostService.quit(); + } + async withExpectedShutdown(expectedShutdownTask: () => Promise): Promise { return await expectedShutdownTask(); } diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 927d7f7aaffe1..82c4f026ba080 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -1360,6 +1360,7 @@ export class TestHostService implements IHostService { async restart(): Promise { } async reload(): Promise { } async close(): Promise { } + async shutdown(): Promise { } async withExpectedShutdown(expectedShutdownTask: () => Promise): Promise { return await expectedShutdownTask(); }