mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-02 08:15:56 +01:00
sessions: centralize context key definitions into common/contextkeys.ts (#306439)
Move RawContextKey definitions for active session state (provider ID, type, background provider, git repository, chat session provider ID) from sessionsManagementService.ts and copilotChatSessionsActions.ts into the shared sessions/common/contextkeys.ts module. Replace hardcoded context key strings with .key property access in all consumers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -6,6 +6,17 @@
|
||||
import { localize } from '../../nls.js';
|
||||
import { RawContextKey } from '../../platform/contextkey/common/contextkey.js';
|
||||
|
||||
//#region < --- Active Session --- >
|
||||
|
||||
export const IsNewChatSessionContext = new RawContextKey<boolean>('isNewChatSession', true);
|
||||
export const ActiveSessionProviderIdContext = new RawContextKey<string>('activeSessionProviderId', '', localize('activeSessionProviderId', "The provider ID of the active session"));
|
||||
export const ActiveSessionTypeContext = new RawContextKey<string>('activeSessionType', '', localize('activeSessionType', "The session type of the active session"));
|
||||
export const IsActiveSessionBackgroundProviderContext = new RawContextKey<boolean>('isActiveSessionBackgroundProvider', false, localize('isActiveSessionBackgroundProvider', "Whether the active session uses the background agent provider"));
|
||||
export const ActiveSessionHasGitRepositoryContext = new RawContextKey<boolean>('activeSessionHasGitRepository', false, localize('activeSessionHasGitRepository', "Whether the active session has an associated git repository"));
|
||||
export const ChatSessionProviderIdContext = new RawContextKey<string>('chatSessionProviderId', '', localize('chatSessionProviderId', "The provider ID of a session in context menu overlays"));
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region < --- Chat Bar --- >
|
||||
|
||||
export const ActiveChatBarContext = new RawContextKey<string>('activeChatBar', '', localize('activeChatBar', "The identifier of the active chat bar panel"));
|
||||
|
||||
@@ -16,7 +16,8 @@ import { IWorkbenchContribution, registerWorkbenchContribution2, WorkbenchPhase
|
||||
import { IViewContainersRegistry, IViewsRegistry, ViewContainerLocation, Extensions as ViewExtensions, WindowVisibility } from '../../../../workbench/common/views.js';
|
||||
import { Registry } from '../../../../platform/registry/common/platform.js';
|
||||
import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js';
|
||||
import { IsActiveSessionBackgroundProviderContext, ISessionsManagementService, IsNewChatSessionContext } from '../../sessions/browser/sessionsManagementService.js';
|
||||
import { ISessionsManagementService } from '../../sessions/browser/sessionsManagementService.js';
|
||||
import { IsActiveSessionBackgroundProviderContext, IsNewChatSessionContext, SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
|
||||
import { Menus } from '../../../browser/menus.js';
|
||||
import { BranchChatSessionAction } from './branchChatSessionAction.js';
|
||||
import { RunScriptContribution } from './runScriptAction.js';
|
||||
@@ -38,7 +39,6 @@ import { registerIcon } from '../../../../platform/theme/common/iconRegistry.js'
|
||||
import { ChatViewPane } from '../../../../workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js';
|
||||
import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js';
|
||||
import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
|
||||
import { SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
|
||||
import { CopilotCLISessionType } from '../../sessions/browser/sessionTypes.js';
|
||||
|
||||
export class OpenSessionWorktreeInVSCodeAction extends Action2 {
|
||||
|
||||
@@ -27,12 +27,12 @@ import { IQuickInputService, IQuickPickItem, IQuickPickSeparator } from '../../.
|
||||
import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';
|
||||
import { IWorkbenchContribution } from '../../../../workbench/common/contributions.js';
|
||||
import { SessionsCategories } from '../../../common/categories.js';
|
||||
import { IsActiveSessionBackgroundProviderContext, ISessionsManagementService } from '../../sessions/browser/sessionsManagementService.js';
|
||||
import { ISessionsManagementService } from '../../sessions/browser/sessionsManagementService.js';
|
||||
import { IsActiveSessionBackgroundProviderContext, SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
|
||||
import { ISession } from '../../sessions/common/sessionData.js';
|
||||
import { Menus } from '../../../browser/menus.js';
|
||||
import { INonSessionTaskEntry, ISessionsConfigurationService, ISessionTaskWithTarget, ITaskEntry, TaskStorageTarget } from './sessionsConfigurationService.js';
|
||||
import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js';
|
||||
import { SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
|
||||
import { IRunScriptCustomTaskWidgetResult, RunScriptCustomTaskWidget } from './runScriptCustomTaskWidget.js';
|
||||
import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js';
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ import { IModelPickerDelegate } from '../../../../workbench/contrib/chat/browser
|
||||
import { IChatInputPickerOptions } from '../../../../workbench/contrib/chat/browser/widget/input/chatInputPickerActionItem.js';
|
||||
import { EnhancedModelPickerActionItem } from '../../../../workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js';
|
||||
import { HoverPosition } from '../../../../base/browser/ui/hover/hoverWidget.js';
|
||||
import { IContextKeyService, ContextKeyExpr, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';
|
||||
import { IContextKeyService, ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';
|
||||
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
|
||||
import { Menus } from '../../../browser/menus.js';
|
||||
import { ISessionsManagementService } from '../../sessions/browser/sessionsManagementService.js';
|
||||
@@ -30,16 +30,16 @@ import { ISession } from '../../sessions/common/sessionData.js';
|
||||
import { IAgentSessionsService } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessionsService.js';
|
||||
import { CopilotCLISession, COPILOT_PROVIDER_ID } from './copilotChatSessionsProvider.js';
|
||||
import { COPILOT_CLI_SESSION_TYPE, COPILOT_CLOUD_SESSION_TYPE } from '../../sessions/browser/sessionTypes.js';
|
||||
import { ActiveSessionHasGitRepositoryContext, ActiveSessionProviderIdContext, ActiveSessionTypeContext, ChatSessionProviderIdContext } from '../../../common/contextkeys.js';
|
||||
import { IsolationPicker } from './isolationPicker.js';
|
||||
import { BranchPicker } from './branchPicker.js';
|
||||
import { ModePicker } from './modePicker.js';
|
||||
import { CloudModelPicker } from './modelPicker.js';
|
||||
import { NewChatPermissionPicker } from '../../chat/browser/newChatPermissionPicker.js';
|
||||
|
||||
const ActiveSessionHasGitRepositoryContext = new RawContextKey<boolean>('activeSessionHasGitRepository', false);
|
||||
const IsActiveSessionCopilotCLI = ContextKeyExpr.equals('activeSessionType', COPILOT_CLI_SESSION_TYPE);
|
||||
const IsActiveSessionCopilotCloud = ContextKeyExpr.equals('activeSessionType', COPILOT_CLOUD_SESSION_TYPE);
|
||||
const IsActiveCopilotChatSessionProvider = ContextKeyExpr.equals('activeSessionProviderId', COPILOT_PROVIDER_ID);
|
||||
const IsActiveSessionCopilotCLI = ContextKeyExpr.equals(ActiveSessionTypeContext.key, COPILOT_CLI_SESSION_TYPE);
|
||||
const IsActiveSessionCopilotCloud = ContextKeyExpr.equals(ActiveSessionTypeContext.key, COPILOT_CLOUD_SESSION_TYPE);
|
||||
const IsActiveCopilotChatSessionProvider = ContextKeyExpr.equals(ActiveSessionProviderIdContext.key, COPILOT_PROVIDER_ID);
|
||||
const IsActiveSessionCopilotChatCLI = ContextKeyExpr.and(IsActiveSessionCopilotCLI, IsActiveCopilotChatSessionProvider);
|
||||
const IsActiveSessionCopilotChatCloud = ContextKeyExpr.and(IsActiveSessionCopilotCloud, IsActiveCopilotChatSessionProvider);
|
||||
|
||||
@@ -366,7 +366,7 @@ class CopilotSessionContextMenuBridge extends Disposable implements IWorkbenchCo
|
||||
});
|
||||
}));
|
||||
|
||||
const providerWhen = ContextKeyExpr.equals('chatSessionProviderId', COPILOT_PROVIDER_ID);
|
||||
const providerWhen = ContextKeyExpr.equals(ChatSessionProviderIdContext.key, COPILOT_PROVIDER_ID);
|
||||
this._register(MenuRegistry.appendMenuItem(SessionItemContextMenuId, {
|
||||
command: { ...item.command, id: wrapperId },
|
||||
group: item.group,
|
||||
|
||||
@@ -7,9 +7,8 @@ import { Emitter, Event } from '../../../../base/common/event.js';
|
||||
import { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';
|
||||
import { IObservable, IReader, autorun, observableFromEvent, observableValue } from '../../../../base/common/observable.js';
|
||||
import { URI } from '../../../../base/common/uri.js';
|
||||
import { localize } from '../../../../nls.js';
|
||||
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
|
||||
import { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';
|
||||
import { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
|
||||
import { ILogService } from '../../../../platform/log/common/log.js';
|
||||
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
|
||||
import { COPILOT_CLI_SESSION_TYPE } from './sessionTypes.js';
|
||||
@@ -19,26 +18,7 @@ import { SessionsGroupModel } from './sessionsGroupModel.js';
|
||||
import { ISession, ISessionWorkspace, ISessionData, IChat, SessionStatus } from '../common/sessionData.js';
|
||||
import { ChatViewPaneTarget, IChatWidgetService } from '../../../../workbench/contrib/chat/browser/chat.js';
|
||||
import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uriIdentity.js';
|
||||
|
||||
/**
|
||||
* Configuration properties available on new/pending sessions.
|
||||
* Not part of the public {@link ISession} contract but present on
|
||||
* concrete session implementations (CopilotCLISession, RemoteNewSession, AgentHostNewSession).
|
||||
*/
|
||||
|
||||
export const IsNewChatSessionContext = new RawContextKey<boolean>('isNewChatSession', true);
|
||||
|
||||
/**
|
||||
* The provider ID of the active session (e.g., 'default-copilot', 'agenthost-hostA').
|
||||
*/
|
||||
export const ActiveSessionProviderIdContext = new RawContextKey<string>('activeSessionProviderId', '', localize('activeSessionProviderId', "The provider ID of the active session"));
|
||||
|
||||
/**
|
||||
* The session type of the active session (e.g., 'copilotcli', 'cloud').
|
||||
*/
|
||||
export const ActiveSessionTypeContext = new RawContextKey<string>('activeSessionType', '', localize('activeSessionType', "The session type of the active session"));
|
||||
|
||||
export const IsActiveSessionBackgroundProviderContext = new RawContextKey<boolean>('isActiveSessionBackgroundProvider', false, localize('isActiveSessionBackgroundProvider', "Whether the active session uses the background agent provider"));
|
||||
import { ActiveSessionProviderIdContext, ActiveSessionTypeContext, IsActiveSessionBackgroundProviderContext, IsNewChatSessionContext } from '../../../common/contextkeys.js';
|
||||
|
||||
//#region Active Session Service
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ import { ISessionsManagementService, IsNewChatSessionContext } from './sessionsM
|
||||
import { autorun, observableSignalFromEvent } from '../../../../base/common/observable.js';
|
||||
import { ThemeIcon } from '../../../../base/common/themables.js';
|
||||
import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js';
|
||||
import { SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
|
||||
import { ChatSessionProviderIdContext, SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js';
|
||||
import { ISessionsProvidersService } from './sessionsProvidersService.js';
|
||||
import { SessionStatus } from '../common/sessionData.js';
|
||||
import { SHOW_SESSIONS_PICKER_COMMAND_ID } from './sessionsActions.js';
|
||||
@@ -269,7 +269,7 @@ export class SessionsTitleBarWidget extends BaseActionViewItem {
|
||||
[IsSessionArchivedContext.key, sessionData.isArchived.get()],
|
||||
[IsSessionReadContext.key, sessionData.isRead.get()],
|
||||
['chatSessionType', sessionData.sessionType],
|
||||
['chatSessionProviderId', sessionData.providerId],
|
||||
[ChatSessionProviderIdContext.key, sessionData.providerId],
|
||||
];
|
||||
|
||||
const menu = this.menuService.createMenu(SessionItemContextMenuId, this.contextKeyService.createOverlay(contextOverlay));
|
||||
|
||||
@@ -23,6 +23,7 @@ import { localize } from '../../../../../nls.js';
|
||||
import { MenuId, IMenuService } from '../../../../../platform/actions/common/actions.js';
|
||||
import { MenuWorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js';
|
||||
import { IContextKeyService, RawContextKey } from '../../../../../platform/contextkey/common/contextkey.js';
|
||||
import { ChatSessionProviderIdContext } from '../../../../common/contextkeys.js';
|
||||
import { IContextMenuService } from '../../../../../platform/contextview/browser/contextView.js';
|
||||
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
|
||||
import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';
|
||||
@@ -966,7 +967,7 @@ export class SessionsList extends Disposable implements ISessionsList {
|
||||
[IsSessionArchivedContext.key, element.isArchived.get()],
|
||||
[IsSessionReadContext.key, element.isRead.get()],
|
||||
['chatSessionType', element.sessionType],
|
||||
['chatSessionProviderId', element.providerId],
|
||||
[ChatSessionProviderIdContext.key, element.providerId],
|
||||
];
|
||||
|
||||
const menu = this.menuService.createMenu(SessionItemContextMenuId, this.contextKeyService.createOverlay(contextOverlay));
|
||||
|
||||
@@ -19,12 +19,12 @@ import { IChatWidgetService } from '../../../../../workbench/contrib/chat/browse
|
||||
import { AUX_WINDOW_GROUP } from '../../../../../workbench/services/editor/common/editorService.js';
|
||||
import { SessionsCategories } from '../../../../common/categories.js';
|
||||
import { SessionItemToolbarMenuId, SessionItemContextMenuId, SessionSectionToolbarMenuId, SessionSectionTypeContext, IsSessionPinnedContext, IsSessionArchivedContext, IsSessionReadContext, SessionsGrouping, SessionsSorting, ISessionSection } from './sessionsList.js';
|
||||
import { ISessionsManagementService, IsNewChatSessionContext } from '../sessionsManagementService.js';
|
||||
import { ISessionsManagementService } from '../sessionsManagementService.js';
|
||||
import { IsNewChatSessionContext, SessionsWelcomeVisibleContext } from '../../../../common/contextkeys.js';
|
||||
import { ISession, SessionStatus } from '../../common/sessionData.js';
|
||||
import { IsWorkspaceGroupCappedContext, SessionsViewFilterOptionsSubMenu, SessionsViewFilterSubMenu, SessionsViewGroupingContext, SessionsViewId, SessionsView, SessionsViewSortingContext } from './sessionsView.js';
|
||||
import { SessionsViewId as NewChatViewId, NewChatViewPane } from '../../../chat/browser/newChatViewPane.js';
|
||||
import { Menus } from '../../../../browser/menus.js';
|
||||
import { SessionsWelcomeVisibleContext } from '../../../../common/contextkeys.js';
|
||||
|
||||
// Constants
|
||||
|
||||
|
||||
Reference in New Issue
Block a user