Skip to content

Commit a240f2a

Browse files
sessions: use generic sign out confirmation copy (#307727)
* sessions: use generic sign out confirmation copy (#307465) Allow the shared account sign-out action to accept dialog copy overrides so the Agents app can show a generic confirmation instead of listing extension usage. Adds a focused test for the override path while preserving the default workbench confirmation behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: scope sign out confirmation to Agents app (#307465) Keep the Agents-specific sign-out confirmation flow inside the sessions account menu instead of extending the shared authentication sign-out action. This restores the core workbench auth dialog behavior and limits the copy change to the sessions app surface. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 28880a6 commit a240f2a

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import '../../../browser/media/sidebarActionButton.css';
77
import './media/accountWidget.css';
88
import './media/accountTitleBarWidget.css';
99
import '../../../../workbench/contrib/chat/browser/chatStatus/media/chatStatus.css';
10+
import Severity from '../../../../base/common/severity.js';
1011
import { Disposable, DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js';
1112
import { localize, localize2 } from '../../../../nls.js';
1213
import { Action2, MenuRegistry, registerAction2, IMenuService, MenuId } from '../../../../platform/actions/common/actions.js';
@@ -39,6 +40,9 @@ import { ThemeIcon } from '../../../../base/common/themables.js';
3940
import { getAccountTitleBarBadgeKey, getAccountTitleBarState } from './accountTitleBarState.js';
4041
import { SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
4142
import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js';
43+
import { IAuthenticationAccessService } from '../../../../workbench/services/authentication/browser/authenticationAccessService.js';
44+
import { IAuthenticationUsageService } from '../../../../workbench/services/authentication/browser/authenticationUsageService.js';
45+
import { IAuthenticationService } from '../../../../workbench/services/authentication/common/authentication.js';
4246

4347
// --- Account Menu Items --- //
4448
const AccountMenu = new MenuId('SessionsAccountMenu');
@@ -181,7 +185,33 @@ registerAction2(class extends Action2 {
181185
}
182186
async run(accessor: ServicesAccessor): Promise<void> {
183187
const defaultAccountService = accessor.get(IDefaultAccountService);
184-
await defaultAccountService.signOut();
188+
const dialogService = accessor.get(IDialogService);
189+
const authenticationService = accessor.get(IAuthenticationService);
190+
const authenticationUsageService = accessor.get(IAuthenticationUsageService);
191+
const authenticationAccessService = accessor.get(IAuthenticationAccessService);
192+
const defaultAccount = await defaultAccountService.getDefaultAccount();
193+
if (!defaultAccount) {
194+
return;
195+
}
196+
197+
const providerId = defaultAccount.authenticationProvider.id;
198+
const accountLabel = defaultAccount.accountName;
199+
const { confirmed } = await dialogService.confirm({
200+
type: Severity.Info,
201+
message: localize('agenticSignOutMessage', "Sign out of the Agents app?"),
202+
detail: localize('agenticSignOutDetail', "This will sign out '{0}' from the Agents app.", accountLabel),
203+
primaryButton: localize({ key: 'agenticSignOutButton', comment: ['&& denotes a mnemonic'] }, "&&Sign Out")
204+
});
205+
206+
if (!confirmed) {
207+
return;
208+
}
209+
210+
const allSessions = await authenticationService.getSessions(providerId);
211+
const sessions = allSessions.filter(session => session.account.label === accountLabel);
212+
await Promise.all(sessions.map(session => authenticationService.removeSession(providerId, session.id)));
213+
authenticationUsageService.removeAccountUsage(providerId, accountLabel);
214+
authenticationAccessService.removeAllowedExtensions(providerId, accountLabel);
185215
}
186216
});
187217

0 commit comments

Comments
 (0)