Skip to content

Commit

Permalink
chat - setup tweaks (#238333)
Browse files Browse the repository at this point in the history
  • Loading branch information
bpasero authored Jan 21, 2025
1 parent dac52c9 commit ae56ecf
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@
import { IWorkbenchContribution } from '../../../../common/contributions.js';
import { Disposable } from '../../../../../base/common/lifecycle.js';
import { IProductService } from '../../../../../platform/product/common/productService.js';
import { ICommandService } from '../../../../../platform/commands/common/commands.js';
import { IExtensionService } from '../../../../services/extensions/common/extensions.js';
import { ExtensionIdentifier } from '../../../../../platform/extensions/common/extensions.js';
import { CHAT_OPEN_ACTION_ID } from './chatActions.js';
import { IExtensionManagementService, InstallOperation } from '../../../../../platform/extensionManagement/common/extensionManagement.js';
import { IStorageService, StorageScope, StorageTarget } from '../../../../../platform/storage/common/storage.js';
import { IDefaultChatAgent } from '../../../../../base/common/product.js';
import { IViewDescriptorService } from '../../../../common/views.js';
import { IWorkbenchLayoutService } from '../../../../services/layout/browser/layoutService.js';
import { ensureSideBarChatViewSize } from '../chat.js';
import { ensureSideBarChatViewSize, showCopilotView } from '../chat.js';
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
import { IViewsService } from '../../../../services/views/common/viewsService.js';


export class ChatGettingStartedContribution extends Disposable implements IWorkbenchContribution {
Expand All @@ -28,7 +27,7 @@ export class ChatGettingStartedContribution extends Disposable implements IWorkb
constructor(
@IProductService private readonly productService: IProductService,
@IExtensionService private readonly extensionService: IExtensionService,
@ICommandService private readonly commandService: ICommandService,
@IViewsService private readonly viewsService: IViewsService,
@IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService,
@IStorageService private readonly storageService: IStorageService,
@IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService,
Expand Down Expand Up @@ -75,8 +74,8 @@ export class ChatGettingStartedContribution extends Disposable implements IWorkb
// Enable chat command center if previously disabled
this.configurationService.updateValue('chat.commandCenter.enabled', true);

// Open and configure chat view
await this.commandService.executeCommand(CHAT_OPEN_ACTION_ID);
// Open Copilot view
showCopilotView(this.viewsService, this.layoutService);
ensureSideBarChatViewSize(this.viewDescriptorService, this.layoutService);

// Only do this once
Expand Down
23 changes: 23 additions & 0 deletions src/vs/workbench/contrib/chat/browser/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,29 @@ export async function showEditsView(viewsService: IViewsService): Promise<IChatW
return (await viewsService.openView<ChatViewPane>(EditsViewId))?.widget;
}

export function preferCopilotEditsView(viewsService: IViewsService): boolean {
if (viewsService.getFocusedView()?.id === ChatViewId || !!viewsService.getActiveViewWithId(ChatViewId)) {
return false;
}

return !!viewsService.getActiveViewWithId(EditsViewId);
}

export function showCopilotView(viewsService: IViewsService, layoutService: IWorkbenchLayoutService): Promise<IChatWidget | undefined> {

// Ensure main window is in front
if (layoutService.activeContainer !== layoutService.mainContainer) {
layoutService.mainContainer.focus();
}

// Bring up the correct view
if (preferCopilotEditsView(viewsService)) {
return showEditsView(viewsService);
} else {
return showChatView(viewsService);
}
}

export function ensureSideBarChatViewSize(viewDescriptorService: IViewDescriptorService, layoutService: IWorkbenchLayoutService): void {
const location = viewDescriptorService.getViewLocationById(ChatViewId);
if (location === ViewContainerLocation.Panel) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { coalesce, compareBy, delta } from '../../../../../base/common/arrays.js
import { AsyncIterableSource } from '../../../../../base/common/async.js';
import { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';
import { Codicon } from '../../../../../base/common/codicons.js';
import { BugIndicatingError } from '../../../../../base/common/errors.js';
import { BugIndicatingError, ErrorNoTelemetry } from '../../../../../base/common/errors.js';
import { Emitter, Event } from '../../../../../base/common/event.js';
import { Iterable } from '../../../../../base/common/iterator.js';
import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js';
Expand Down Expand Up @@ -285,7 +285,7 @@ export class ChatEditingService extends Disposable implements IChatEditingServic

const chatModel = this._chatService.getOrRestoreSession(session.chatSessionId);
if (!chatModel) {
throw new Error(`Edit session was created for a non-existing chat session: ${session.chatSessionId}`);
throw new ErrorNoTelemetry(`Edit session was created for a non-existing chat session: ${session.chatSessionId}`);
}

const observerDisposables = new DisposableStore();
Expand Down
27 changes: 4 additions & 23 deletions src/vs/workbench/contrib/chat/browser/chatSetup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.
import { IChatAgentService } from '../common/chatAgents.js';
import { ChatContextKeys } from '../common/chatContextKeys.js';
import { CHAT_CATEGORY } from './actions/chatActions.js';
import { ChatViewId, EditsViewId, ensureSideBarChatViewSize, IChatWidget, showChatView, showEditsView } from './chat.js';
import { ChatViewId, EditsViewId, ensureSideBarChatViewSize, preferCopilotEditsView, showCopilotView } from './chat.js';
import { CHAT_EDITING_SIDEBAR_PANEL_ID, CHAT_SIDEBAR_PANEL_ID } from './chatViewPane.js';
import { ChatViewsWelcomeExtensions, IChatViewsWelcomeContributionRegistry } from './viewsWelcome/chatViewsWelcome.js';
import { IChatQuotasService } from './chatQuotasService.js';
Expand Down Expand Up @@ -785,7 +785,7 @@ class ChatSetupController extends Disposable {

async setup(): Promise<void> {
const title = localize('setupChatProgress', "Getting Copilot ready...");
const badge = this.activityService.showViewContainerActivity(isCopilotEditsViewActive(this.viewsService) ? CHAT_EDITING_SIDEBAR_PANEL_ID : CHAT_SIDEBAR_PANEL_ID, {
const badge = this.activityService.showViewContainerActivity(preferCopilotEditsView(this.viewsService) ? CHAT_EDITING_SIDEBAR_PANEL_ID : CHAT_SIDEBAR_PANEL_ID, {
badge: new ProgressBadge(() => title),
});

Expand Down Expand Up @@ -866,7 +866,7 @@ class ChatSetupController extends Disposable {
if (!session) {
const { confirmed } = await this.dialogService.confirm({
type: Severity.Error,
message: localize('unknownSignInError', "Signing in to Copilot was unsuccessful. Would you like to try again?"),
message: localize('unknownSignInError', "Unable to sign in to {0}. Would you like to try again?", defaultChat.providerName),
primaryButton: localize('retry', "Retry")
});

Expand Down Expand Up @@ -934,7 +934,7 @@ class ChatSetupController extends Disposable {
isMachineScoped: false, // do not ask to sync
installEverywhere: true, // install in local and remote
installPreReleaseVersion: this.productService.quality !== 'stable'
}, isCopilotEditsViewActive(this.viewsService) ? EditsViewId : ChatViewId);
}, preferCopilotEditsView(this.viewsService) ? EditsViewId : ChatViewId);
} catch (e) {
this.logService.error(`[chat setup] install: error ${error}`);
error = e;
Expand Down Expand Up @@ -1223,25 +1223,6 @@ class ChatSetupContext extends Disposable {

//#endregion

function isCopilotEditsViewActive(viewsService: IViewsService): boolean {
return viewsService.getFocusedView()?.id === EditsViewId;
}

function showCopilotView(viewsService: IViewsService, layoutService: IWorkbenchLayoutService): Promise<IChatWidget | undefined> {

// Ensure main window is in front
if (layoutService.activeContainer !== layoutService.mainContainer) {
layoutService.mainContainer.focus();
}

// Bring up the correct view
if (isCopilotEditsViewActive(viewsService)) {
return showEditsView(viewsService);
} else {
return showChatView(viewsService);
}
}

function refreshTokens(commandService: ICommandService): void {
// ugly, but we need to signal to the extension that entitlements changed
commandService.executeCommand('github.copilot.signIn');
Expand Down

0 comments on commit ae56ecf

Please sign in to comment.