From 683373f359067ddbdc3a63cf10c123cefe70ef22 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 22 Apr 2026 16:58:14 +0200 Subject: [PATCH] remove agent app support in linux (#311910) --- src/vs/code/electron-main/app.ts | 2 +- .../launch/electron-main/launchMainService.ts | 4 ++-- .../browser/agentSessions/agentSessionsBanner.ts | 7 ++++--- .../contrib/chat/browser/chatTipCatalog.ts | 13 ++++++------- src/vs/workbench/contrib/chat/common/constants.ts | 14 +++++++++++++- .../agentSessions/agentSessionsActions.ts | 11 ++++------- 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index 3eb46b8d0f2..10e90c56693 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -1397,7 +1397,7 @@ export class CodeApplication extends Disposable { } // Handle agents window first based on context - if ((process as INodeProcess).isEmbeddedApp || (args['agents'] && this.productService.quality !== 'stable')) { + if ((process as INodeProcess).isEmbeddedApp || (!isLinux && args['agents'] && this.productService.quality !== 'stable')) { return windowsMainService.openAgentsWindow({ context, cli: args, diff --git a/src/vs/platform/launch/electron-main/launchMainService.ts b/src/vs/platform/launch/electron-main/launchMainService.ts index 7815fdff844..1faa200f8ce 100644 --- a/src/vs/platform/launch/electron-main/launchMainService.ts +++ b/src/vs/platform/launch/electron-main/launchMainService.ts @@ -6,7 +6,7 @@ import { app } from 'electron'; import { coalesce } from '../../../base/common/arrays.js'; import { Emitter, Event } from '../../../base/common/event.js'; -import { IProcessEnvironment, isMacintosh } from '../../../base/common/platform.js'; +import { IProcessEnvironment, isLinux, isMacintosh } from '../../../base/common/platform.js'; import { URI } from '../../../base/common/uri.js'; import { whenDeleted } from '../../../base/node/pfs.js'; import { IConfigurationService } from '../../configuration/common/configuration.js'; @@ -164,7 +164,7 @@ export class LaunchMainService implements ILaunchMainService { } // Agents window - else if (args['agents'] && this.productService.quality !== 'stable') { + else if (!isLinux && args['agents'] && this.productService.quality !== 'stable') { usedWindows = await this.windowsMainService.openAgentsWindow(baseConfig); } diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsBanner.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsBanner.ts index 5d2389a684a..606100bff38 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsBanner.ts +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsBanner.ts @@ -10,7 +10,8 @@ import { ICommandService, CommandsRegistry } from '../../../../../platform/comma import { IProductService } from '../../../../../platform/product/common/productService.js'; import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; -const OPEN_AGENTS_WINDOW_COMMAND = 'workbench.action.openAgentsWindow'; +import { OPEN_AGENTS_WINDOW_COMMAND_ID } from '../../common/constants.js'; + type AgentsBannerClickedEvent = { source: string; @@ -36,7 +37,7 @@ export interface IAgentsBannerResult { */ export function canShowAgentsBanner(productService: IProductService): boolean { return productService.quality !== 'stable' - && !!CommandsRegistry.getCommand(OPEN_AGENTS_WINDOW_COMMAND); + && !!CommandsRegistry.getCommand(OPEN_AGENTS_WINDOW_COMMAND_ID); } export interface IAgentsBannerOptions { @@ -71,7 +72,7 @@ export function createAgentsBanner( disposables.add(addDisposableListener(button, 'click', () => { options.onButtonClick?.(); telemetryService.publicLog2('agentsBanner.clicked', { source: options.source, action: 'openAgentsWindow' }); - commandService.executeCommand(OPEN_AGENTS_WINDOW_COMMAND, { forceNewWindow: true }); + commandService.executeCommand(OPEN_AGENTS_WINDOW_COMMAND_ID, { forceNewWindow: true }); })); const element = $(`.${options.cssClass}`, {}, button); diff --git a/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts b/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts index 1018e5dbfec..cd1de3b9f4a 100644 --- a/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts +++ b/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts @@ -8,9 +8,8 @@ import { localize } from '../../../../nls.js'; import { ContextKeyExpr, ContextKeyExpression } from '../../../../platform/contextkey/common/contextkey.js'; import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js'; import { MenuRegistry } from '../../../../platform/actions/common/actions.js'; -import { ProductQualityContext } from '../../../../platform/contextkey/common/contextkeys.js'; +import { OPEN_AGENTS_WINDOW_COMMAND_ID, OPEN_AGENTS_WINDOW_PRECONDITION, ChatConfiguration, ChatModeKind } from '../common/constants.js'; import { ChatContextKeys } from '../common/actions/chatContextKeys.js'; -import { ChatConfiguration, ChatModeKind } from '../common/constants.js'; import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; import { localChatSessionType } from '../common/chatSessionsService.js'; import { ITipExclusionConfig } from './chatTipEligibilityTracker.js'; @@ -419,17 +418,17 @@ export const TIP_CATALOG: readonly ITipDefinition[] = [ return new MarkdownString( localize( 'tip.openAgentsWindow', - "Try the [Agents Application](command:workbench.action.openAgentsWindow \"Open Agents Application\") to run multiple agents simultaneously and manage your coding sessions." + "Try the [Agents Application](command:{0} \"Open Agents Application\") to run multiple agents simultaneously and manage your coding sessions.", + OPEN_AGENTS_WINDOW_COMMAND_ID ) ); }, when: ContextKeyExpr.and( - ProductQualityContext.notEqualsTo('stable'), - IsSessionsWindowContext.negate(), + OPEN_AGENTS_WINDOW_PRECONDITION, ChatContextKeys.chatModeKind.isEqualTo(ChatModeKind.Agent), ), - excludeWhenCommandsExecuted: ['workbench.action.openAgentsWindow'], - dismissWhenCommandsClicked: ['workbench.action.openAgentsWindow'], + excludeWhenCommandsExecuted: [OPEN_AGENTS_WINDOW_COMMAND_ID], + dismissWhenCommandsClicked: [OPEN_AGENTS_WINDOW_COMMAND_ID], }, { id: 'tip.copilotCli', diff --git a/src/vs/workbench/contrib/chat/common/constants.ts b/src/vs/workbench/contrib/chat/common/constants.ts index f26809501a5..5ecba74e011 100644 --- a/src/vs/workbench/contrib/chat/common/constants.ts +++ b/src/vs/workbench/contrib/chat/common/constants.ts @@ -6,7 +6,10 @@ import { Schemas } from '../../../../base/common/network.js'; import { IChatSessionsService } from './chatSessionsService.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; -import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { ContextKeyExpr, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js'; +import { IsDevelopmentContext, IsLinuxContext } from '../../../../platform/contextkey/common/contextkeys.js'; +import { ChatEntitlementContextKeys } from '../../../services/chat/common/chatEntitlementService.js'; +import { IsSessionsWindowContext } from '../../../common/contextkeys.js'; export enum ChatConfiguration { AIDisabled = 'chat.disableAIFeatures', @@ -192,6 +195,15 @@ export function isSupportedChatFileScheme(accessor: ServicesAccessor, scheme: st } export const MANAGE_CHAT_COMMAND_ID = 'workbench.action.chat.manage'; + +export const OPEN_AGENTS_WINDOW_COMMAND_ID = 'workbench.action.openAgentsWindow'; +export const OPEN_AGENTS_WINDOW_PRECONDITION = ContextKeyExpr.and( + ContextKeyExpr.or(IsLinuxContext.negate(), IsDevelopmentContext), + ChatEntitlementContextKeys.Setup.hidden.negate(), + ChatEntitlementContextKeys.Setup.disabledInWorkspace.negate(), + IsSessionsWindowContext.negate(), +); + export const ChatEditorTitleMaxLength = 30; export const CHAT_TERMINAL_OUTPUT_MAX_PREVIEW_LINES = 1000; diff --git a/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts b/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts index 5dbfa3278e5..f4a0786c4cf 100644 --- a/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts +++ b/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts @@ -5,28 +5,25 @@ import { ServicesAccessor } from '../../../../../editor/browser/editorExtensions.js'; import { localize2 } from '../../../../../nls.js'; import { Action2, MenuId } from '../../../../../platform/actions/common/actions.js'; -import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js'; import { INativeHostService } from '../../../../../platform/native/common/native.js'; -import { ChatEntitlementContextKeys } from '../../../../services/chat/common/chatEntitlementService.js'; import { CHAT_CATEGORY } from '../../browser/actions/chatActions.js'; -import { IsSessionsWindowContext } from '../../../../common/contextkeys.js'; import { isMacintosh, isWindows } from '../../../../../base/common/platform.js'; import { IWorkbenchEnvironmentService } from '../../../../services/environment/common/environmentService.js'; -import { ProductQualityContext } from '../../../../../platform/contextkey/common/contextkeys.js'; +import { OPEN_AGENTS_WINDOW_COMMAND_ID, OPEN_AGENTS_WINDOW_PRECONDITION } from '../../common/constants.js'; export class OpenAgentsWindowAction extends Action2 { constructor() { super({ - id: 'workbench.action.openAgentsWindow', + id: OPEN_AGENTS_WINDOW_COMMAND_ID, title: localize2('openAgentsWindow', "Open Agents Application"), category: CHAT_CATEGORY, - precondition: ContextKeyExpr.and(ProductQualityContext.notEqualsTo('stable'), ChatEntitlementContextKeys.Setup.hidden.negate(), ChatEntitlementContextKeys.Setup.disabledInWorkspace.negate(), IsSessionsWindowContext.negate()), + precondition: OPEN_AGENTS_WINDOW_PRECONDITION, f1: true, menu: [{ id: MenuId.ChatTitleBarMenu, group: 'c_sessions', order: 1, - when: ContextKeyExpr.and(ProductQualityContext.notEqualsTo('stable'), ChatEntitlementContextKeys.Setup.hidden.negate(), ChatEntitlementContextKeys.Setup.disabledInWorkspace.negate(), IsSessionsWindowContext.negate()) + when: OPEN_AGENTS_WINDOW_PRECONDITION, }] }); }