Skip to content

Commit 56e3219

Browse files
authored
chat - better flow from status when signed out (#242548) (#242551)
1 parent f64aa51 commit 56e3219

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

src/vs/workbench/contrib/chat/browser/chatSetup.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { defaultButtonStyles } from '../../../../platform/theme/browser/defaultS
3535
import { IWorkbenchContribution } from '../../../common/contributions.js';
3636
import { IViewDescriptorService, ViewContainerLocation } from '../../../common/views.js';
3737
import { IActivityService, ProgressBadge } from '../../../services/activity/common/activity.js';
38-
import { AuthenticationSession, IAuthenticationExtensionsService, IAuthenticationService } from '../../../services/authentication/common/authentication.js';
38+
import { AuthenticationSession, IAuthenticationService } from '../../../services/authentication/common/authentication.js';
3939
import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js';
4040
import { IViewsService } from '../../../services/views/common/viewsService.js';
4141
import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
@@ -325,7 +325,6 @@ class ChatSetupController extends Disposable {
325325
private readonly requests: ChatSetupRequests,
326326
@ITelemetryService private readonly telemetryService: ITelemetryService,
327327
@IAuthenticationService private readonly authenticationService: IAuthenticationService,
328-
@IAuthenticationExtensionsService private readonly authenticationExtensionsService: IAuthenticationExtensionsService,
329328
@IViewsService private readonly viewsService: IViewsService,
330329
@IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
331330
@IProductService private readonly productService: IProductService,
@@ -431,12 +430,7 @@ class ChatSetupController extends Disposable {
431430
try {
432431
showCopilotView(this.viewsService, this.layoutService);
433432

434-
session = await this.authenticationService.createSession(providerId, defaultChat.providerScopes[0]);
435-
436-
this.authenticationExtensionsService.updateAccountPreference(defaultChat.extensionId, providerId, session.account);
437-
this.authenticationExtensionsService.updateAccountPreference(defaultChat.chatExtensionId, providerId, session.account);
438-
439-
entitlements = await this.requests.forceResolveEntitlement(session);
433+
({ session, entitlements } = await this.requests.signIn());
440434
} catch (e) {
441435
this.logService.error(`[chat setup] signIn: error ${e}`);
442436
}

src/vs/workbench/contrib/chat/browser/chatStatus.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import { IStatusbarEntry, IStatusbarEntryAccessor, IStatusbarService, ShowToolti
1515
import { ChatContextKeys } from '../common/chatContextKeys.js';
1616
import { quotaToButtonMessage, OPEN_CHAT_QUOTA_EXCEEDED_DIALOG, CHAT_SETUP_ACTION_LABEL, TOGGLE_CHAT_ACTION_ID, CHAT_OPEN_ACTION_ID } from './actions/chatActions.js';
1717
import { $, addDisposableListener, append, clearNode, EventHelper, EventLike, EventType } from '../../../../base/browser/dom.js';
18-
import { ChatEntitlement, IChatEntitlementService } from '../common/chatEntitlementService.js';
18+
import { ChatEntitlement, ChatEntitlementService, IChatEntitlementService } from '../common/chatEntitlementService.js';
1919
import { CancellationToken } from '../../../../base/common/cancellation.js';
2020
import { KeybindingLabel } from '../../../../base/browser/ui/keybindingLabel/keybindingLabel.js';
2121
import { defaultCheckboxStyles, defaultKeybindingLabelStyles } from '../../../../platform/theme/browser/defaultStyles.js';
2222
import { Checkbox } from '../../../../base/browser/ui/toggle/toggle.js';
2323
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
2424
import { Command } from '../../../../editor/common/languages.js';
25-
import { ICommandService } from '../../../../platform/commands/common/commands.js';
25+
import { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';
2626
import { Lazy } from '../../../../base/common/lazy.js';
2727
import { contrastBorder, inputValidationErrorBorder, inputValidationInfoBorder, inputValidationWarningBorder, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js';
2828
import { IHoverService } from '../../../../platform/hover/browser/hover.js';
@@ -98,13 +98,15 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
9898

9999
private static readonly SETTING = 'chat.experimental.statusIndicator.enabled';
100100

101+
private static readonly SIGN_IN_COMMAND_ID = 'workbench.action.chat.signIn';
102+
101103
private entry: IStatusbarEntryAccessor | undefined = undefined;
102104

103105
private dashboard = new Lazy<ChatStatusDashboard>(() => this.instantiationService.createInstance(ChatStatusDashboard));
104106

105107
constructor(
106108
@IStatusbarService private readonly statusbarService: IStatusbarService,
107-
@IChatEntitlementService private readonly chatEntitlementService: IChatEntitlementService,
109+
@IChatEntitlementService private readonly chatEntitlementService: ChatEntitlementService,
108110
@IContextKeyService private readonly contextKeyService: IContextKeyService,
109111
@IConfigurationService private readonly configurationService: IConfigurationService,
110112
@IProductService private readonly productService: IProductService,
@@ -114,6 +116,7 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
114116

115117
this.create();
116118
this.registerListeners();
119+
this.registerCommands();
117120
}
118121

119122
private async create(): Promise<void> {
@@ -148,6 +151,12 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
148151
this._register(this.chatEntitlementService.onDidChangeEntitlement(() => this.entry?.update(this.getEntryProps())));
149152
}
150153

154+
private registerCommands(): void {
155+
CommandsRegistry.registerCommand(ChatStatusBarEntry.SIGN_IN_COMMAND_ID, () => {
156+
this.chatEntitlementService.requests?.value.signIn();
157+
});
158+
}
159+
151160
private getEntryProps(): IStatusbarEntry {
152161
let text = '$(copilot)';
153162
let ariaLabel = localize('chatStatus', "Copilot Status");
@@ -185,10 +194,13 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
185194

186195
// Signed out
187196
else if (this.chatEntitlementService.entitlement === ChatEntitlement.Unknown) {
188-
text = '$(copilot-not-connected)';
197+
text = '$(copilot-not-connected) Sign In to Use Copilot';
189198
ariaLabel = localize('signInToUseCopilot', "Sign in to Use Copilot...");
190-
tooltip = localize('signInToUseCopilot', "Sign in to Use Copilot...");
191-
command = TOGGLE_CHAT_ACTION_ID;
199+
tooltip = {
200+
element: token => this.dashboard.value.show(token)
201+
};
202+
command = ChatStatusBarEntry.SIGN_IN_COMMAND_ID;
203+
kind = 'prominent';
192204
}
193205

194206
// Any other User

src/vs/workbench/contrib/chat/common/chatEntitlementService.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { asText, IRequestService } from '../../../../platform/request/common/req
2222
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
2323
import { ITelemetryService, TelemetryLevel } from '../../../../platform/telemetry/common/telemetry.js';
2424
import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js';
25-
import { AuthenticationSession, IAuthenticationService } from '../../../services/authentication/common/authentication.js';
25+
import { AuthenticationSession, IAuthenticationExtensionsService, IAuthenticationService } from '../../../services/authentication/common/authentication.js';
2626
import { IWorkbenchExtensionEnablementService } from '../../../services/extensionManagement/common/extensionManagement.js';
2727
import { IExtension, IExtensionsWorkbenchService } from '../../extensions/common/extensions.js';
2828
import { ChatContextKeys } from './chatContextKeys.js';
@@ -81,6 +81,7 @@ export interface IChatEntitlementService {
8181

8282
const defaultChat = {
8383
extensionId: product.defaultChatAgent?.extensionId ?? '',
84+
chatExtensionId: product.defaultChatAgent?.chatExtensionId ?? '',
8485
upgradePlanUrl: product.defaultChatAgent?.upgradePlanUrl ?? '',
8586
providerId: product.defaultChatAgent?.providerId ?? '',
8687
enterpriseProviderId: product.defaultChatAgent?.enterpriseProviderId ?? '',
@@ -325,7 +326,8 @@ export class ChatSetupRequests extends Disposable {
325326
@IRequestService private readonly requestService: IRequestService,
326327
@IDialogService private readonly dialogService: IDialogService,
327328
@IOpenerService private readonly openerService: IOpenerService,
328-
@IConfigurationService private readonly configurationService: IConfigurationService
329+
@IConfigurationService private readonly configurationService: IConfigurationService,
330+
@IAuthenticationExtensionsService private readonly authenticationExtensionsService: IAuthenticationExtensionsService,
329331
) {
330332
super();
331333

@@ -667,6 +669,18 @@ export class ChatSetupRequests extends Disposable {
667669
});
668670
}
669671

672+
async signIn() {
673+
const providerId = ChatSetupRequests.providerId(this.configurationService);
674+
const session = await this.authenticationService.createSession(providerId, defaultChat.providerScopes[0]);
675+
676+
this.authenticationExtensionsService.updateAccountPreference(defaultChat.extensionId, providerId, session.account);
677+
this.authenticationExtensionsService.updateAccountPreference(defaultChat.chatExtensionId, providerId, session.account);
678+
679+
const entitlements = await this.forceResolveEntitlement(session);
680+
681+
return { session, entitlements };
682+
}
683+
670684
override dispose(): void {
671685
this.pendingResolveCts.dispose(true);
672686

0 commit comments

Comments
 (0)