From 0dcd3596beb59bb44d1daa98a24aed0a18991dbb Mon Sep 17 00:00:00 2001 From: Osvaldo Ortega Date: Fri, 27 Mar 2026 17:02:23 -0700 Subject: [PATCH] Refactor chat input and session actions to use ISCMService for repository checks --- .../chat/browser/actions/chatContinueInAction.ts | 15 +++++---------- .../chat/browser/widget/input/chatInputPart.ts | 6 ++++-- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts b/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts index 9050dba31f4..f9c66a77a85 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts @@ -39,9 +39,8 @@ import { ChatSendResult, IChatService } from '../../common/chatService/chatServi import { ResolvedChatSessionsExtensionPoint, IChatSessionsService } from '../../common/chatSessionsService.js'; import { ChatAgentLocation } from '../../common/constants.js'; import { PROMPT_LANGUAGE_ID } from '../../common/promptSyntax/promptTypes.js'; -import { Iterable } from '../../../../../base/common/iterator.js'; import { AgentSessionProviders, getAgentSessionProvider, getAgentSessionProviderIcon, getAgentSessionProviderName } from '../agentSessions/agentSessions.js'; -import { IGitService } from '../../../git/common/gitService.js'; +import { ISCMService } from '../../../scm/common/scm.js'; import { IAgentSessionsService } from '../agentSessions/agentSessionsService.js'; import { IChatWidget, IChatWidgetService, isIChatViewViewContext } from '../chat.js'; import { ctxHasEditorModification } from '../chatEditing/chatEditingEditorContextKeys.js'; @@ -166,11 +165,10 @@ export class ChatContinueInSessionActionItem extends ActionWidgetDropdownActionV @IInstantiationService instantiationService: IInstantiationService, @IOpenerService openerService: IOpenerService, @ITelemetryService telemetryService: ITelemetryService, - @IGitService gitService: IGitService, - @IChatWidgetService chatWidgetService: IChatWidgetService, + @ISCMService scmService: ISCMService, ) { super(action, { - actionProvider: ChatContinueInSessionActionItem.actionProvider(chatSessionsService, instantiationService, gitService, chatWidgetService, location), + actionProvider: ChatContinueInSessionActionItem.actionProvider(chatSessionsService, instantiationService, scmService, location), actionBarActions: ChatContinueInSessionActionItem.getActionBarActions(openerService), reporter: { id: 'ChatContinueInSession', name: 'ChatContinueInSession', includeOptions: true }, }, actionWidgetService, keybindingService, contextKeyService, telemetryService); @@ -190,15 +188,12 @@ export class ChatContinueInSessionActionItem extends ActionWidgetDropdownActionV }]; } - private static actionProvider(chatSessionsService: IChatSessionsService, instantiationService: IInstantiationService, gitService: IGitService, chatWidgetService: IChatWidgetService, location: ActionLocation): IActionWidgetDropdownActionProvider { + private static actionProvider(chatSessionsService: IChatSessionsService, instantiationService: IInstantiationService, scmService: ISCMService, location: ActionLocation): IActionWidgetDropdownActionProvider { return { getActions: () => { const actions: IActionWidgetDropdownAction[] = []; const contributions = chatSessionsService.getAllChatSessionContributions(); - const widget = chatWidgetService.lastFocusedWidget; - const hasGitRepo = widget?.viewModel?.model.repoData - ? true - : !Iterable.isEmpty(gitService.repositories); + const hasGitRepo = scmService.repositoryCount > 0; // Continue in Background const backgroundContrib = contributions.find(contrib => contrib.type === AgentSessionProviders.Background); diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts index 26d6091321b..b081ce68a57 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts @@ -69,6 +69,7 @@ import { IStorageService, StorageScope, StorageTarget } from '../../../../../../ import { IThemeService } from '../../../../../../platform/theme/common/themeService.js'; import { ISharedWebContentExtractorService } from '../../../../../../platform/webContentExtractor/common/webContentExtractor.js'; import { IWorkspaceContextService, WorkbenchState } from '../../../../../../platform/workspace/common/workspace.js'; +import { ISCMService } from '../../../../scm/common/scm.js'; import { IWorkbenchLayoutService, Position } from '../../../../../services/layout/browser/layoutService.js'; import { IViewDescriptorService, ViewContainerLocation } from '../../../../../common/views.js'; import { ResourceLabels } from '../../../../../browser/labels.js'; @@ -545,6 +546,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge @IChatContextService private readonly chatContextService: IChatContextService, @IAgentSessionsService private readonly agentSessionsService: IAgentSessionsService, @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, + @ISCMService private readonly scmService: ISCMService, @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, @IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService, @IChatAttachmentWidgetRegistry private readonly _chatAttachmentWidgetRegistry: IChatAttachmentWidgetRegistry, @@ -2289,7 +2291,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge this.refreshChatSessionPickers(); }, hasGitRepository: () => { - return !!this._widget?.viewModel?.model.repoData; + return this.scmService.repositoryCount > 0; }, }; const isWelcomeViewMode = !!this.options.sessionTypePickerDelegate?.setActiveSessionProvider; @@ -2391,7 +2393,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge this.refreshChatSessionPickers(); }, hasGitRepository: () => { - return !!this._widget?.viewModel?.model.repoData; + return this.scmService.repositoryCount > 0; }, }; const isWelcomeViewMode = !!this.options.sessionTypePickerDelegate?.setActiveSessionProvider;