diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts b/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts index 1f5732b9cd628..2f6f56c84e2de 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.ts @@ -45,6 +45,7 @@ import { IWorkspaceContextService } from '../../../../../platform/workspace/comm import { IAgentSessionsService } from '../agentSessions/agentSessionsService.js'; import { IChatWidget, IChatWidgetService, isIChatViewViewContext } from '../chat.js'; import { ctxHasEditorModification } from '../chatEditing/chatEditingEditorContextKeys.js'; +import { ChatEntitlement, IChatEntitlementService } from '../../../../services/chat/common/chatEntitlementService.js'; import { CHAT_SETUP_ACTION_ID } from './chatActions.js'; import { PromptFileVariableKind, toPromptFileVariableEntry } from '../../common/attachments/chatVariableEntries.js'; @@ -391,6 +392,15 @@ export class CreateRemoteAgentJobAction { const agentSessionsService = accessor.get(IAgentSessionsService); const chatSessionsService = accessor.get(IChatSessionsService); const fileService = accessor.get(IFileService); + const chatEntitlementService = accessor.get(IChatEntitlementService); + + // If the user is not signed in, trigger the sign-in/setup flow before continuing + if (chatEntitlementService.entitlement === ChatEntitlement.Unknown && !chatEntitlementService.anonymous) { + const setupSucceeded = await commandService.executeCommand(CHAT_SETUP_ACTION_ID); + if (!setupSucceeded) { + return; + } + } const remoteJobCreatingKey = ChatContextKeys.remoteJobCreating.bindTo(contextKeyService); @@ -532,6 +542,15 @@ class CreateRemoteAgentJobFromEditorAction { const editorService = accessor.get(IEditorService); const activeEditor = editorService.activeTextEditorControl; const commandService = accessor.get(ICommandService); + const chatEntitlementService = accessor.get(IChatEntitlementService); + + // If the user is not signed in, trigger the sign-in/setup flow before continuing + if (chatEntitlementService.entitlement === ChatEntitlement.Unknown && !chatEntitlementService.anonymous) { + const setupSucceeded = await commandService.executeCommand(CHAT_SETUP_ACTION_ID); + if (!setupSucceeded) { + return; + } + } if (!activeEditor) { return; diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts index a35750ecd16a6..1d35a267a7d61 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.ts @@ -36,7 +36,8 @@ import { IChatWidget, IChatWidgetService } from '../chat.js'; import { getAgentSessionProvider, AgentSessionProviders } from '../agentSessions/agentSessions.js'; import { getEditingSessionContext } from '../chatEditing/chatEditingActions.js'; import { ctxHasEditorModification, ctxHasRequestInProgress, ctxIsGlobalEditingSession } from '../chatEditing/chatEditingEditorContextKeys.js'; -import { ACTION_ID_NEW_CHAT, CHAT_CATEGORY, clearChatSessionPreservingType, handleCurrentEditingSession, handleModeSwitch } from './chatActions.js'; +import { ChatEntitlement, IChatEntitlementService } from '../../../../services/chat/common/chatEntitlementService.js'; +import { ACTION_ID_NEW_CHAT, CHAT_CATEGORY, CHAT_SETUP_ACTION_ID, clearChatSessionPreservingType, handleCurrentEditingSession, handleModeSwitch } from './chatActions.js'; import { CreateRemoteAgentJobAction } from './chatContinueInAction.js'; import { CTX_HOVER_MODE } from '../../../inlineChat/common/inlineChat.js'; @@ -161,6 +162,16 @@ abstract class SubmitAction extends Action2 { private async handleDelegation(accessor: ServicesAccessor, widget: IChatWidget, delegationTarget: Exclude): Promise { const chatSessionsService = accessor.get(IChatSessionsService); + const chatEntitlementService = accessor.get(IChatEntitlementService); + const commandService = accessor.get(ICommandService); + + // If the user is not signed in, trigger the sign-in/setup flow before delegating + if (chatEntitlementService.entitlement === ChatEntitlement.Unknown && !chatEntitlementService.anonymous) { + const setupSucceeded = await commandService.executeCommand(CHAT_SETUP_ACTION_ID); + if (!setupSucceeded) { + return; + } + } // Find the contribution for the delegation target const contributions = chatSessionsService.getAllChatSessionContributions();