@codingame/monaco-vscode-workbench-service-override 37.3.3 → 37.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -10
- package/session.js +11 -0
- package/vscode/src/vs/platform/agentHost/common/meta/agentCheckoutOperationMeta.d.ts +18 -0
- package/vscode/src/vs/platform/agentHost/common/meta/agentCheckoutOperationMeta.js +27 -0
- package/vscode/src/vs/sessions/browser/layoutActions.d.ts +1 -0
- package/vscode/src/vs/sessions/browser/layoutActions.js +146 -0
- package/vscode/src/vs/sessions/browser/parts/chatCompositeBar.js +6 -6
- package/vscode/src/vs/sessions/browser/parts/chatGroupView.js +5 -5
- package/vscode/src/vs/sessions/browser/parts/menubar.contribution.js +8 -8
- package/vscode/src/vs/sessions/browser/parts/sessionHeader.js +1 -1
- package/vscode/src/vs/sessions/browser/parts/sessionReadOnlyBanner.js +1 -1
- package/vscode/src/vs/sessions/browser/parts/sessionRemoteConnection.js +20 -20
- package/vscode/src/vs/sessions/browser/sessionsSetUpService.js +7 -7
- package/vscode/src/vs/sessions/browser/sessionsSignInDialog.js +4 -4
- package/vscode/src/vs/sessions/contrib/accountMenu/browser/account.contribution.js +42 -42
- package/vscode/src/vs/sessions/contrib/accountMenu/browser/chatPetAchievementBadges.js +11 -11
- package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeView.contribution.js +18 -18
- package/vscode/src/vs/sessions/contrib/aiCustomizationTreeView/browser/aiCustomizationTreeViewViews.js +12 -12
- package/vscode/src/vs/sessions/contrib/applyCommitsToParentRepo/browser/applyChangesToParentRepo.d.ts +1 -0
- package/vscode/src/vs/sessions/contrib/applyCommitsToParentRepo/browser/applyChangesToParentRepo.js +149 -0
- package/vscode/src/vs/sessions/contrib/aquarium/browser/aquarium.contribution.js +12 -12
- package/vscode/src/vs/sessions/contrib/aquarium/browser/aquariumOverlay.js +10 -10
- package/vscode/src/vs/sessions/contrib/automations/browser/automationDialog.js +68 -68
- package/vscode/src/vs/sessions/contrib/automations/browser/automationDialogService.js +7 -7
- package/vscode/src/vs/sessions/contrib/automations/browser/automationRunner.js +4 -4
- package/vscode/src/vs/sessions/contrib/automations/browser/automationScheduler.js +2 -2
- package/vscode/src/vs/sessions/contrib/automations/browser/automationTools.js +38 -38
- package/vscode/src/vs/sessions/contrib/automations/browser/automations.contribution.js +2 -2
- package/vscode/src/vs/sessions/contrib/automations/browser/providerAutomationService.js +1 -1
- package/vscode/src/vs/sessions/contrib/changes/browser/changes.contribution.js +6 -6
- package/vscode/src/vs/sessions/contrib/changes/browser/changesActions.js +4 -4
- package/vscode/src/vs/sessions/contrib/changes/browser/changesViewActions.js +20 -20
- package/vscode/src/vs/sessions/contrib/changes/browser/changesetReviewActions.js +1 -1
- package/vscode/src/vs/sessions/contrib/changes/browser/sessionSyncChanges.js +9 -9
- package/vscode/src/vs/sessions/contrib/changes/browser/sessionsChangesAccessibilityHelp.js +17 -17
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionChatInputToolbarDebug.js +17 -17
- package/vscode/src/vs/sessions/contrib/chat/browser/taskCommand.d.ts +44 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/taskCommand.js +111 -0
- package/vscode/src/vs/sessions/contrib/chatDebug/browser/chatDebug.contribution.js +2 -2
- package/vscode/src/vs/sessions/contrib/codeReview/browser/codeReview.contributions.d.ts +1 -0
- package/vscode/src/vs/sessions/contrib/codeReview/browser/codeReview.contributions.js +75 -0
- package/vscode/src/vs/sessions/contrib/customViewTest/browser/customViewTest.contribution.js +7 -7
- package/vscode/src/vs/sessions/contrib/editor/browser/addTabActions.js +4 -4
- package/vscode/src/vs/sessions/contrib/editor/browser/editor.contribution.js +8 -8
- package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.contribution.js +1 -1
- package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditor.js +5 -5
- package/vscode/src/vs/sessions/contrib/editor/browser/emptyFileEditorInput.js +1 -1
- package/vscode/src/vs/sessions/contrib/files/browser/files.contribution.js +7 -7
- package/vscode/src/vs/sessions/contrib/files/browser/filesView.js +1 -1
- package/vscode/src/vs/sessions/contrib/layout/browser/baseSessionLayoutController.js +5 -5
- package/vscode/src/vs/sessions/contrib/layout/browser/sessions.layout.contribution.js +2 -2
- package/vscode/src/vs/sessions/contrib/layout/browser/singlePane/singlePaneExistingSessionStrategy.js +1 -1
- package/vscode/src/vs/sessions/contrib/onboardingTours/browser/newSessionViewV3Prompt.js +19 -19
- package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionTour.js +4 -4
- package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTour.js +6 -6
- package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewTourShared.js +2 -2
- package/vscode/src/vs/sessions/contrib/onboardingTours/browser/tours/newSessionViewV2Tour.js +4 -4
- package/vscode/src/vs/sessions/contrib/policyBlocked/browser/sessionsPolicyBlocked.js +24 -24
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostClaudePermissionModePicker.d.ts +26 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostClaudePermissionModePicker.js +98 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostCodexApprovalsPicker.d.ts +33 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostCodexApprovalsPicker.js +98 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostForkActions.d.ts +1 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostForkActions.js +72 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModeIcon.d.ts +2 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModeIcon.js +13 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModePicker.d.ts +122 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostModePicker.js +464 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerActionItem.d.ts +35 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerActionItem.js +90 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerDelegate.d.ts +84 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostPermissionPickerDelegate.js +328 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionBranchActions.d.ts +1 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionBranchActions.js +94 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionConfigPicker.d.ts +174 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionConfigPicker.js +1390 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentMergeActions.d.ts +1 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentMergeActions.js +468 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/exportDebugLogsAction.d.ts +7 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/exportDebugLogsAction.js +48 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/media/agentHostSessionConfigPicker.css +44 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileAgentHostModePicker.d.ts +30 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileAgentHostModePicker.js +78 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatInputConfigPicker.d.ts +1 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatInputConfigPicker.js +345 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatPhoneInputTarget.d.ts +11 -0
- package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/mobile/mobileChatPhoneInputTarget.js +26 -0
- package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/devContainerAgentHostService.js +6 -6
- package/vscode/src/vs/sessions/contrib/search/browser/search.contribution.js +3 -3
- package/vscode/src/vs/sessions/contrib/search/browser/searchEditorEmptyState.contribution.js +1 -1
- package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsIndicatorModel.js +4 -4
- package/vscode/src/vs/sessions/contrib/sessions/browser/blockedSessionsList.js +5 -5
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionDetailsAction.js +2 -2
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessions.contribution.js +8 -8
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsActions.js +58 -58
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.js +8 -8
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsWindowNotifier.js +5 -5
- package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationTemplates.js +10 -10
- package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsAccessibility.js +38 -38
- package/vscode/src/vs/sessions/contrib/sessions/browser/views/automationsView.js +118 -118
- package/vscode/src/vs/sessions/contrib/sessions/browser/views/sessionsViewActions.js +53 -53
- package/vscode/src/vs/sessions/contrib/terminal/browser/agentHostSessionTaskRunner.d.ts +42 -0
- package/vscode/src/vs/sessions/contrib/terminal/browser/agentHostSessionTaskRunner.js +139 -0
- package/vscode/src/vs/sessions/contrib/terminal/browser/sessionsTerminalContribution.d.ts +120 -0
- package/vscode/src/vs/sessions/contrib/terminal/browser/sessionsTerminalContribution.js +741 -0
- package/vscode/src/vs/sessions/services/sessions/browser/sessionsManagementService.js +2 -2
- package/vscode/src/vs/sessions/services/sessions/browser/sessionsService.js +2 -2
- package/vscode/src/vs/workbench/browser/layout.js +1 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
2
|
+
import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
|
|
3
|
+
import { IAgentHostConnectionsService } from "@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostConnectionsService.service";
|
|
4
|
+
import { IAgentHostEnablementService } from "@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostEnablementService.service";
|
|
5
|
+
import { SessionConfigPropertySchema } from "@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/state/protocol/commands";
|
|
6
|
+
import { ChatConfiguration, ChatPermissionLevel } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants";
|
|
7
|
+
import { IPermissionLevelMeta, IPermissionPickerDelegate } from "@codingame/monaco-vscode-katex-common/vscode/vs/sessions/contrib/providers/copilotChatSessions/browser/permissionPicker";
|
|
8
|
+
import { ISessionsProvidersService } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/browser/sessionsProvidersService.service";
|
|
9
|
+
import { IActiveSession } from "@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/common/sessionsManagement";
|
|
10
|
+
import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
|
|
11
|
+
import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
|
|
12
|
+
import { IChatPhoneInputPresenter } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/widget/input/chatPhoneInputPresenter.service";
|
|
13
|
+
import { isWellKnownAutoApproveSchema, isWellKnownModeSchema } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostModePickerPresentation";
|
|
14
|
+
export { isWellKnownAutoApproveSchema, isWellKnownModeSchema };
|
|
15
|
+
/**
|
|
16
|
+
* {@link IPermissionPickerDelegate} backed by the active session's AHP
|
|
17
|
+
* `autoApprove` config property.
|
|
18
|
+
*
|
|
19
|
+
* - `currentPermissionLevel` derives from the active session's
|
|
20
|
+
* `provider.getSessionConfig(...).values.autoApprove`, recomputed when the
|
|
21
|
+
* active session changes or when any agent-host provider fires
|
|
22
|
+
* `onDidChangeSessionConfig`.
|
|
23
|
+
* - `setPermissionLevel(level)` calls `provider.setSessionConfigValue(sessionId,
|
|
24
|
+
* 'autoApprove', level)` for the active session's provider.
|
|
25
|
+
* - `isApplicable` is `true` only when the active session's `autoApprove`
|
|
26
|
+
* schema matches the well-known shape, so the picker hides itself for
|
|
27
|
+
* non-conforming agents (which fall back to the generic per-property
|
|
28
|
+
* picker) and when no agent-host session is active.
|
|
29
|
+
*/
|
|
30
|
+
export declare class AgentHostPermissionPickerDelegate extends Disposable implements IPermissionPickerDelegate {
|
|
31
|
+
private readonly _session;
|
|
32
|
+
private readonly _sessionsProvidersService;
|
|
33
|
+
private readonly _configurationService;
|
|
34
|
+
private readonly _connectionsService;
|
|
35
|
+
private readonly _logService;
|
|
36
|
+
/** Fires every time any agent-host provider's session config changes. */
|
|
37
|
+
private readonly _configChangedSignal;
|
|
38
|
+
private readonly _providerSubscriptions;
|
|
39
|
+
private _sandboxConnection;
|
|
40
|
+
private readonly _hostOperatingSystem;
|
|
41
|
+
private _hostOperatingSystemRequest;
|
|
42
|
+
readonly currentPermissionLevel: IObservable<ChatPermissionLevel>;
|
|
43
|
+
readonly isApplicable: IObservable<boolean>;
|
|
44
|
+
readonly isModePickerCombined: IObservable<boolean>;
|
|
45
|
+
readonly isResolving: IObservable<boolean>;
|
|
46
|
+
readonly managedSandboxEnforced: IObservable<boolean>;
|
|
47
|
+
readonly managedSandboxAllowsBypass: IObservable<boolean>;
|
|
48
|
+
readonly sandboxEnabled: IObservable<boolean | undefined>;
|
|
49
|
+
readonly sandboxToggleSettingId: IObservable<string | undefined>;
|
|
50
|
+
readonly sandboxToggleConfigurationKeys: string[];
|
|
51
|
+
readonly getSandboxToggleProvider: () => string | undefined;
|
|
52
|
+
readonly isSandboxToggleApplicable: () => boolean;
|
|
53
|
+
readonly getSandboxToggleSettingId: () => string | undefined;
|
|
54
|
+
get availableLevels(): readonly ChatPermissionLevel[];
|
|
55
|
+
/** Agent-host sessions seed their default approval level from this setting. */
|
|
56
|
+
readonly defaultSettingKey = ChatConfiguration.DefaultConfiguration;
|
|
57
|
+
getPermissionLevelMeta(level: ChatPermissionLevel, meta: IPermissionLevelMeta): IPermissionLevelMeta;
|
|
58
|
+
constructor(_session: IObservable<IActiveSession | undefined>, _sessionsProvidersService: ISessionsProvidersService, _configurationService: IConfigurationService, agentHostEnablementService: IAgentHostEnablementService, phoneInputPresenter: IChatPhoneInputPresenter, _connectionsService: IAgentHostConnectionsService, _logService: ILogService);
|
|
59
|
+
private _resolveHostOperatingSystem;
|
|
60
|
+
getSandboxToggle(): import("@codingame/monaco-vscode-api/vscode/vs/platform/actionWidget/browser/actionList").IActionListItemInlineToggle | undefined;
|
|
61
|
+
setSandboxEnabled(enabled: boolean): void;
|
|
62
|
+
setPermissionLevel(level: ChatPermissionLevel): Promise<void>;
|
|
63
|
+
getPermissionLevelHover(level: ChatPermissionLevel, _meta: IPermissionLevelMeta): string;
|
|
64
|
+
private _readLevel;
|
|
65
|
+
private _readIsWellKnown;
|
|
66
|
+
private _getProvider;
|
|
67
|
+
private _watchProviders;
|
|
68
|
+
}
|
|
69
|
+
export declare function isWellKnownModeValue(schema: SessionConfigPropertySchema, value: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Returns `true` when a `permissionMode` session-config property uses the
|
|
72
|
+
* Claude SDK's well-known permission-mode value set and includes `default`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function isWellKnownClaudePermissionModeSchema(schema: SessionConfigPropertySchema): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Returns `true` when a `codex.permissionsPreset` session-config property uses
|
|
77
|
+
* the Codex permissions-preset value set and includes `default`.
|
|
78
|
+
*
|
|
79
|
+
* Codex collapses its three security axes (sandbox × approval policy ×
|
|
80
|
+
* approvals reviewer) into a single user-facing preset; this guard lets the
|
|
81
|
+
* dedicated {@link AgentHostCodexApprovalsPicker} claim the property while the
|
|
82
|
+
* generic per-property picker stands down.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isWellKnownCodexApprovalsSchema(schema: SessionConfigPropertySchema): boolean;
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
|
|
2
|
+
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
4
|
+
import { onUnexpectedError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
5
|
+
import { Disposable, DisposableMap, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
6
|
+
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
7
|
+
import { OperatingSystem } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
|
|
8
|
+
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
9
|
+
import { createAgentHostSandboxToggle } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/browser/agentHostSandboxToggle';
|
|
10
|
+
import { AgentHostSdkSandboxEnabledSettingId, AgentHostSdkSandboxWindowsEnabledSettingId, getAgentHostCopilotSandboxSettingId } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentService';
|
|
11
|
+
import { IAgentHostConnectionsService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostConnectionsService.service';
|
|
12
|
+
import { getAgentHostOperatingSystem } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostOperatingSystem';
|
|
13
|
+
import { IAgentHostEnablementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostEnablementService.service';
|
|
14
|
+
import { AgentHostCustomTerminalToolEnabledSettingId } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/copilotCliConfig';
|
|
15
|
+
import { SessionConfigKey } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/sessionConfigKeys';
|
|
16
|
+
import { narrowClaudePermissionMode } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/claudeSessionConfigKeys';
|
|
17
|
+
import { narrowCodexPermissionsPreset } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/codexSessionConfigKeys';
|
|
18
|
+
import { ChatPermissionLevel, ChatConfiguration, isChatPermissionLevel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
19
|
+
import { isAgentHostProvider } from '@codingame/monaco-vscode-api/vscode/vs/sessions/common/agentHostSessionsProvider';
|
|
20
|
+
import { ISessionsProvidersService } from '@codingame/monaco-vscode-api/vscode/vs/sessions/services/sessions/browser/sessionsProvidersService.service';
|
|
21
|
+
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
22
|
+
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
23
|
+
import { isAssistedPermissionsEnabled, isPermissionLevelVisible } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/agentHostConfigPolicy';
|
|
24
|
+
import { AgentSandboxSettingId, isAgentSandboxEnabledValue } from '@codingame/monaco-vscode-api/vscode/vs/platform/sandbox/common/settings';
|
|
25
|
+
import { CopilotCLISessionType } from '@codingame/monaco-vscode-api/vscode/vs/sessions/contrib/providers/agentHost/browser/baseAgentHostSessionsProvider';
|
|
26
|
+
import { IChatPhoneInputPresenter } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/widget/input/chatPhoneInputPresenter.service';
|
|
27
|
+
import { shouldCombineModeAndPermissions, isWellKnownAutoApproveSchema } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostModePickerPresentation';
|
|
28
|
+
export { isWellKnownAutoApproveSchema, isWellKnownModeSchema } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostModePickerPresentation';
|
|
29
|
+
import { observableSignal } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableSignal';
|
|
30
|
+
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
31
|
+
import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
|
|
32
|
+
import { observableSignalFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableSignalFromEvent';
|
|
33
|
+
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
34
|
+
|
|
35
|
+
const REQUIRED_PERMISSION_MODE_VALUE = "default";
|
|
36
|
+
const REQUIRED_CODEX_APPROVALS_VALUE = "default";
|
|
37
|
+
let AgentHostPermissionPickerDelegate = class AgentHostPermissionPickerDelegate extends Disposable {
|
|
38
|
+
get availableLevels() {
|
|
39
|
+
const session = this._session.get();
|
|
40
|
+
if (!session) {
|
|
41
|
+
return [ChatPermissionLevel.Default];
|
|
42
|
+
}
|
|
43
|
+
const provider = this._getProvider(session.providerId);
|
|
44
|
+
const schema = provider?.getSessionConfig(session.sessionId)?.schema.properties[SessionConfigKey.AutoApprove];
|
|
45
|
+
const values = schema?.type === "string" && Array.isArray(schema.enum) ? schema.enum : [];
|
|
46
|
+
const assistedPermissionsEnabled = isAssistedPermissionsEnabled(this._configurationService);
|
|
47
|
+
return [
|
|
48
|
+
ChatPermissionLevel.Default,
|
|
49
|
+
ChatPermissionLevel.Assisted,
|
|
50
|
+
ChatPermissionLevel.AutoApprove
|
|
51
|
+
].filter(
|
|
52
|
+
level => values.includes(level) && isPermissionLevelVisible(level, assistedPermissionsEnabled)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
getPermissionLevelMeta(level, meta) {
|
|
56
|
+
switch (level) {
|
|
57
|
+
case ChatPermissionLevel.Default:
|
|
58
|
+
return {
|
|
59
|
+
...meta,
|
|
60
|
+
label: ( localize(4199, "Manual permissions")),
|
|
61
|
+
detail: ( localize(4200, "Asks when approval settings don't apply")),
|
|
62
|
+
icon: Codicon.key
|
|
63
|
+
};
|
|
64
|
+
case ChatPermissionLevel.Assisted:
|
|
65
|
+
return {
|
|
66
|
+
...meta,
|
|
67
|
+
detail: ( localize(4201, "Evaluates risk before running tools"))
|
|
68
|
+
};
|
|
69
|
+
case ChatPermissionLevel.AutoApprove:
|
|
70
|
+
return {
|
|
71
|
+
...meta,
|
|
72
|
+
detail: ( localize(4202, "Runs tool calls without asking"))
|
|
73
|
+
};
|
|
74
|
+
case ChatPermissionLevel.Autopilot:
|
|
75
|
+
return meta;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
constructor(
|
|
79
|
+
_session,
|
|
80
|
+
_sessionsProvidersService,
|
|
81
|
+
_configurationService,
|
|
82
|
+
agentHostEnablementService,
|
|
83
|
+
phoneInputPresenter,
|
|
84
|
+
_connectionsService,
|
|
85
|
+
_logService
|
|
86
|
+
) {
|
|
87
|
+
super();
|
|
88
|
+
this._session = _session;
|
|
89
|
+
this._sessionsProvidersService = _sessionsProvidersService;
|
|
90
|
+
this._configurationService = _configurationService;
|
|
91
|
+
this._connectionsService = _connectionsService;
|
|
92
|
+
this._logService = _logService;
|
|
93
|
+
this._configChangedSignal = observableSignal("agentHostPermissionPicker.configChanged");
|
|
94
|
+
this._providerSubscriptions = this._register(( new DisposableMap()));
|
|
95
|
+
this._hostOperatingSystem = observableValue(this, undefined);
|
|
96
|
+
this.sandboxToggleConfigurationKeys = [
|
|
97
|
+
AgentHostCustomTerminalToolEnabledSettingId,
|
|
98
|
+
AgentHostSdkSandboxEnabledSettingId,
|
|
99
|
+
AgentHostSdkSandboxWindowsEnabledSettingId,
|
|
100
|
+
AgentSandboxSettingId.AgentSandboxEnabled,
|
|
101
|
+
AgentSandboxSettingId.AgentSandboxWindowsEnabled
|
|
102
|
+
];
|
|
103
|
+
this.getSandboxToggleProvider = () => this._session.get()?.sessionType;
|
|
104
|
+
this.isSandboxToggleApplicable = () => {
|
|
105
|
+
const session = this._session.get();
|
|
106
|
+
return session?.sessionType === CopilotCLISessionType.id && !!this._getProvider(session.providerId)?.getSessionConfig(session.sessionId)?.schema.properties[SessionConfigKey.SandboxEnabled];
|
|
107
|
+
};
|
|
108
|
+
this.getSandboxToggleSettingId = () => this.sandboxToggleSettingId.get();
|
|
109
|
+
this.defaultSettingKey = ChatConfiguration.DefaultConfiguration;
|
|
110
|
+
this.managedSandboxEnforced = agentHostEnablementService.managedSandboxEnforced;
|
|
111
|
+
this.managedSandboxAllowsBypass = agentHostEnablementService.managedSandboxAllowsBypass;
|
|
112
|
+
this._watchProviders(this._sessionsProvidersService.getProviders());
|
|
113
|
+
this._register(this._sessionsProvidersService.onDidChangeProviders(e => {
|
|
114
|
+
for (const provider of e.removed) {
|
|
115
|
+
this._providerSubscriptions.deleteAndDispose(provider.id);
|
|
116
|
+
}
|
|
117
|
+
this._watchProviders(e.added);
|
|
118
|
+
this._configChangedSignal.trigger(undefined);
|
|
119
|
+
}));
|
|
120
|
+
this._register(this._configurationService.onDidChangeConfiguration(e => {
|
|
121
|
+
if (e.affectsConfiguration(ChatConfiguration.ExperimentalModePermissionsPicker)) {
|
|
122
|
+
this._configChangedSignal.trigger(undefined);
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
this.currentPermissionLevel = derived(this, reader => this._readLevel(reader));
|
|
126
|
+
this.sandboxEnabled = derived(this, reader => {
|
|
127
|
+
this._configChangedSignal.read(reader);
|
|
128
|
+
const session = this._session.read(reader);
|
|
129
|
+
const value = session && this._getProvider(session.providerId)?.getSessionConfig(session.sessionId)?.values[SessionConfigKey.SandboxEnabled];
|
|
130
|
+
return value === "on" ? true : value === "off" ? false : undefined;
|
|
131
|
+
});
|
|
132
|
+
this.sandboxToggleSettingId = derived(this, reader => {
|
|
133
|
+
this._configChangedSignal.read(reader);
|
|
134
|
+
this._session.read(reader);
|
|
135
|
+
const os = this._hostOperatingSystem.read(reader);
|
|
136
|
+
return this.isSandboxToggleApplicable() && os !== undefined ? getAgentHostCopilotSandboxSettingId(os === OperatingSystem.Windows) : undefined;
|
|
137
|
+
});
|
|
138
|
+
this.isModePickerCombined = derived(this, reader => {
|
|
139
|
+
this._configChangedSignal.read(reader);
|
|
140
|
+
const session = this._session.read(reader);
|
|
141
|
+
const config = session ? this._getProvider(session.providerId)?.getSessionConfig(session.sessionId) : undefined;
|
|
142
|
+
return !phoneInputPresenter.enabled.read(reader) && shouldCombineModeAndPermissions(
|
|
143
|
+
this._configurationService.getValue(ChatConfiguration.ExperimentalModePermissionsPicker) === true,
|
|
144
|
+
session?.sessionType === CopilotCLISessionType.id,
|
|
145
|
+
config?.schema.properties[SessionConfigKey.Mode],
|
|
146
|
+
config?.schema.properties[SessionConfigKey.AutoApprove]
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
this.isApplicable = derived(
|
|
150
|
+
this,
|
|
151
|
+
reader => this._readIsWellKnown(reader) && !this.isModePickerCombined.read(reader)
|
|
152
|
+
);
|
|
153
|
+
this.isResolving = derived(this, reader => {
|
|
154
|
+
this._configChangedSignal.read(reader);
|
|
155
|
+
const session = this._session.read(reader);
|
|
156
|
+
if (!session) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
const provider = this._getProvider(session.providerId);
|
|
160
|
+
return provider?.isSessionConfigResolving(session.sessionId).read(reader) ?? false;
|
|
161
|
+
});
|
|
162
|
+
this._register(this._connectionsService.onDidChangeSessionResolution(async () => {
|
|
163
|
+
const connection = this._sandboxConnection;
|
|
164
|
+
const request = this._hostOperatingSystemRequest;
|
|
165
|
+
await request;
|
|
166
|
+
if (!this._store.isDisposed && connection && request && this._sandboxConnection === connection && this._hostOperatingSystemRequest === request && this._hostOperatingSystem.get() === undefined) {
|
|
167
|
+
this._hostOperatingSystemRequest = this._resolveHostOperatingSystem(connection);
|
|
168
|
+
}
|
|
169
|
+
}));
|
|
170
|
+
const connectionsChanged = observableSignalFromEvent(this, this._connectionsService.onDidChangeSessionResolution);
|
|
171
|
+
this._register(autorun(reader => {
|
|
172
|
+
connectionsChanged.read(reader);
|
|
173
|
+
this._configChangedSignal.read(reader);
|
|
174
|
+
const session = this._session.read(reader);
|
|
175
|
+
const connection = session && this.isSandboxToggleApplicable() ? this._connectionsService.resolveSessionResource(session.resource)?.connection : undefined;
|
|
176
|
+
if (connection === this._sandboxConnection) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
this._sandboxConnection = connection;
|
|
180
|
+
this._hostOperatingSystem.set(undefined, undefined);
|
|
181
|
+
this._hostOperatingSystemRequest = connection ? this._resolveHostOperatingSystem(connection) : undefined;
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
async _resolveHostOperatingSystem(connection) {
|
|
185
|
+
try {
|
|
186
|
+
const os = await getAgentHostOperatingSystem(connection);
|
|
187
|
+
if (!this._store.isDisposed && this._sandboxConnection === connection) {
|
|
188
|
+
this._hostOperatingSystem.set(os, undefined);
|
|
189
|
+
}
|
|
190
|
+
} catch (error) {
|
|
191
|
+
this._logService.error("Failed to resolve agent host OS for the sandbox picker", error);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
getSandboxToggle() {
|
|
195
|
+
if (!this.isSandboxToggleApplicable() || this.getSandboxToggleSettingId() === undefined) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
return createAgentHostSandboxToggle(() => {
|
|
199
|
+
const settingId = this.getSandboxToggleSettingId();
|
|
200
|
+
return {
|
|
201
|
+
provider: this.getSandboxToggleProvider(),
|
|
202
|
+
sessionEnabled: this.sandboxEnabled.get(),
|
|
203
|
+
globalEnabled: settingId !== undefined && isAgentSandboxEnabledValue(this._configurationService.getValue(settingId)),
|
|
204
|
+
managedEnabled: this.managedSandboxEnforced.get(),
|
|
205
|
+
allowsBypass: this.managedSandboxAllowsBypass.get()
|
|
206
|
+
};
|
|
207
|
+
}, enabled => this.setSandboxEnabled(enabled));
|
|
208
|
+
}
|
|
209
|
+
setSandboxEnabled(enabled) {
|
|
210
|
+
const session = this._session.get();
|
|
211
|
+
const provider = session && this._getProvider(session.providerId);
|
|
212
|
+
if (!session || !provider || !this.isSandboxToggleApplicable()) {
|
|
213
|
+
throw ( new Error("Sandbox configuration is unavailable for this session"));
|
|
214
|
+
}
|
|
215
|
+
const operation = provider.setSessionConfigValue(session.sessionId, SessionConfigKey.SandboxEnabled, enabled ? "on" : "off");
|
|
216
|
+
provider.trackSessionConfigOperation(session.sessionId, operation);
|
|
217
|
+
void operation.catch(onUnexpectedError);
|
|
218
|
+
}
|
|
219
|
+
async setPermissionLevel(level) {
|
|
220
|
+
if (!isPermissionLevelVisible(level, isAssistedPermissionsEnabled(this._configurationService))) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const session = this._session.get();
|
|
224
|
+
if (!session) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const provider = this._getProvider(session.providerId);
|
|
228
|
+
if (!provider) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (provider.isSessionConfigResolving(session.sessionId).get()) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (!this.availableLevels.includes(level)) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const operation = provider.setSessionConfigValue(session.sessionId, SessionConfigKey.AutoApprove, level);
|
|
238
|
+
provider.trackSessionConfigOperation(session.sessionId, operation);
|
|
239
|
+
await operation.catch(onUnexpectedError);
|
|
240
|
+
}
|
|
241
|
+
getPermissionLevelHover(level, _meta) {
|
|
242
|
+
switch (level) {
|
|
243
|
+
case ChatPermissionLevel.Default:
|
|
244
|
+
return localize(
|
|
245
|
+
4203,
|
|
246
|
+
"Copilot asks before running tools unless your configured settings allow the tool."
|
|
247
|
+
);
|
|
248
|
+
case ChatPermissionLevel.AutoApprove:
|
|
249
|
+
return localize(4204, "Copilot runs all tools without asking for approval.");
|
|
250
|
+
case ChatPermissionLevel.Assisted:
|
|
251
|
+
return localize(
|
|
252
|
+
4205,
|
|
253
|
+
"An LLM judge evaluates each tool call. Tools it doesn't approve require your approval."
|
|
254
|
+
);
|
|
255
|
+
case ChatPermissionLevel.Autopilot:
|
|
256
|
+
return localize(
|
|
257
|
+
4206,
|
|
258
|
+
"Copilot runs tools without asking for approval and continues until the task is done."
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
_readLevel(reader) {
|
|
263
|
+
this._configChangedSignal.read(reader);
|
|
264
|
+
const session = this._session.read(reader);
|
|
265
|
+
if (!session) {
|
|
266
|
+
return ChatPermissionLevel.Default;
|
|
267
|
+
}
|
|
268
|
+
const provider = this._getProvider(session.providerId);
|
|
269
|
+
if (!provider) {
|
|
270
|
+
return ChatPermissionLevel.Default;
|
|
271
|
+
}
|
|
272
|
+
const value = provider.getSessionConfig(session.sessionId)?.values[SessionConfigKey.AutoApprove];
|
|
273
|
+
if (value === ChatPermissionLevel.Autopilot) {
|
|
274
|
+
return ChatPermissionLevel.Default;
|
|
275
|
+
}
|
|
276
|
+
return isChatPermissionLevel(value) ? value : ChatPermissionLevel.Default;
|
|
277
|
+
}
|
|
278
|
+
_readIsWellKnown(reader) {
|
|
279
|
+
this._configChangedSignal.read(reader);
|
|
280
|
+
const session = this._session.read(reader);
|
|
281
|
+
if (!session) {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
const provider = this._getProvider(session.providerId);
|
|
285
|
+
if (!provider) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
const schema = provider.getSessionConfig(session.sessionId)?.schema.properties[SessionConfigKey.AutoApprove];
|
|
289
|
+
return !!schema && isWellKnownAutoApproveSchema(schema);
|
|
290
|
+
}
|
|
291
|
+
_getProvider(providerId) {
|
|
292
|
+
const provider = this._sessionsProvidersService.getProvider(providerId);
|
|
293
|
+
return provider && isAgentHostProvider(provider) ? provider : undefined;
|
|
294
|
+
}
|
|
295
|
+
_watchProviders(providers) {
|
|
296
|
+
for (const provider of providers) {
|
|
297
|
+
if (!isAgentHostProvider(provider) || ( this._providerSubscriptions.has(provider.id))) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const subscriptions = ( new DisposableStore());
|
|
301
|
+
subscriptions.add(provider.onDidChangeSessionConfig(() => {
|
|
302
|
+
this._configChangedSignal.trigger(undefined);
|
|
303
|
+
}));
|
|
304
|
+
this._providerSubscriptions.set(provider.id, subscriptions);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
AgentHostPermissionPickerDelegate = ( __decorate([( __param(1, ISessionsProvidersService)), ( __param(2, IConfigurationService)), ( __param(3, IAgentHostEnablementService)), ( __param(4, IChatPhoneInputPresenter)), ( __param(5, IAgentHostConnectionsService)), ( __param(6, ILogService))], AgentHostPermissionPickerDelegate));
|
|
309
|
+
function isWellKnownClaudePermissionModeSchema(schema) {
|
|
310
|
+
if (schema.type !== "string" || !Array.isArray(schema.enum) || schema.enum.length === 0) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
if (!schema.enum.includes(REQUIRED_PERMISSION_MODE_VALUE)) {
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
return schema.enum.every(value => narrowClaudePermissionMode(value) !== undefined);
|
|
317
|
+
}
|
|
318
|
+
function isWellKnownCodexApprovalsSchema(schema) {
|
|
319
|
+
if (schema.type !== "string" || !Array.isArray(schema.enum) || schema.enum.length === 0) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
if (!schema.enum.includes(REQUIRED_CODEX_APPROVALS_VALUE)) {
|
|
323
|
+
return false;
|
|
324
|
+
}
|
|
325
|
+
return schema.enum.every(value => narrowCodexPermissionsPreset(value) !== undefined);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export { AgentHostPermissionPickerDelegate, isWellKnownClaudePermissionModeSchema, isWellKnownCodexApprovalsSchema };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSessionBranchActions.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
|
|
2
|
+
import { localize2 } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
3
|
+
import { registerAction2, Action2 } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
4
|
+
import { IClipboardService } from '@codingame/monaco-vscode-api/vscode/vs/platform/clipboard/common/clipboardService.service';
|
|
5
|
+
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
6
|
+
import { IProductService } from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service';
|
|
7
|
+
import { IAgentHostConnectionsService } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/agentHostConnectionsService.service';
|
|
8
|
+
import { buildExternalOpenSessionLinkUri } from '@codingame/monaco-vscode-api/vscode/vs/platform/agentHost/common/openSessionLink';
|
|
9
|
+
import { ANY_AGENT_HOST_PROVIDER_RE } from '@codingame/monaco-vscode-api/vscode/vs/sessions/common/agentHostSessionsProvider';
|
|
10
|
+
import { SessionProviderIdContext } from '@codingame/monaco-vscode-api/vscode/vs/sessions/common/contextkeys';
|
|
11
|
+
import { COPY_AGENT_HOST_SESSION_LINK_COMMAND_ID, COPY_AGENT_HOST_CHAT_LINK_COMMAND_ID } from '@codingame/monaco-vscode-api/vscode/vs/sessions/common/sessionCommands';
|
|
12
|
+
import { Menus } from '@codingame/monaco-vscode-api/vscode/vs/sessions/browser/menus';
|
|
13
|
+
import { SessionItemContextMenuId, SessionItemHasBranchNameContext } from '@codingame/monaco-vscode-api/vscode/vs/sessions/contrib/sessions/browser/views/sessionsList';
|
|
14
|
+
|
|
15
|
+
function getSession(context) {
|
|
16
|
+
return Array.isArray(context) ? context[0] : context;
|
|
17
|
+
}
|
|
18
|
+
function buildExternalLink(accessor, session, chatId) {
|
|
19
|
+
const identity = accessor.get(IAgentHostConnectionsService).resolveSessionResourceIdentity(session.resource);
|
|
20
|
+
if (!identity) {
|
|
21
|
+
throw ( new Error(`Cannot resolve Agent Host session resource ${( session.resource.toString())}`));
|
|
22
|
+
}
|
|
23
|
+
return buildExternalOpenSessionLinkUri(accessor.get(IProductService).urlProtocol, identity.backendSession, chatId);
|
|
24
|
+
}
|
|
25
|
+
registerAction2(class CopyAgentHostSessionLinkAction extends Action2 {
|
|
26
|
+
constructor() {
|
|
27
|
+
super({
|
|
28
|
+
id: COPY_AGENT_HOST_SESSION_LINK_COMMAND_ID,
|
|
29
|
+
title: ( localize2(4207, "Copy Link")),
|
|
30
|
+
menu: [{
|
|
31
|
+
id: SessionItemContextMenuId,
|
|
32
|
+
group: "2_open",
|
|
33
|
+
order: 2,
|
|
34
|
+
when: ( ContextKeyExpr.regex(SessionProviderIdContext.key, ANY_AGENT_HOST_PROVIDER_RE))
|
|
35
|
+
}, {
|
|
36
|
+
id: Menus.SessionHeaderContext,
|
|
37
|
+
group: "2_edit",
|
|
38
|
+
order: 2,
|
|
39
|
+
when: ( ContextKeyExpr.regex(SessionProviderIdContext.key, ANY_AGENT_HOST_PROVIDER_RE))
|
|
40
|
+
}]
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async run(accessor, context) {
|
|
44
|
+
const session = getSession(context);
|
|
45
|
+
if (!session) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
await accessor.get(IClipboardService).writeText(buildExternalLink(accessor, session));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
registerAction2(class CopyAgentHostChatLinkAction extends Action2 {
|
|
52
|
+
constructor() {
|
|
53
|
+
super({
|
|
54
|
+
id: COPY_AGENT_HOST_CHAT_LINK_COMMAND_ID,
|
|
55
|
+
title: ( localize2(4208, "Copy Link")),
|
|
56
|
+
menu: [{
|
|
57
|
+
id: Menus.SessionChatItemContext,
|
|
58
|
+
group: "2_copy",
|
|
59
|
+
order: 1,
|
|
60
|
+
when: ( ContextKeyExpr.regex(SessionProviderIdContext.key, ANY_AGENT_HOST_PROVIDER_RE))
|
|
61
|
+
}]
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async run(accessor, context) {
|
|
65
|
+
if (!context) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await accessor.get(IClipboardService).writeText(
|
|
69
|
+
buildExternalLink(accessor, context.session, context.chat.resource.fragment || undefined)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
registerAction2(class CopySessionBranchNameAction extends Action2 {
|
|
74
|
+
constructor() {
|
|
75
|
+
super({
|
|
76
|
+
id: "sessionsViewPane.agentHost.copySessionBranchName",
|
|
77
|
+
title: ( localize2(4209, "Copy Branch Name")),
|
|
78
|
+
menu: [{
|
|
79
|
+
id: SessionItemContextMenuId,
|
|
80
|
+
group: "2_open",
|
|
81
|
+
order: 3,
|
|
82
|
+
when: ( ContextKeyExpr.and(( ContextKeyExpr.regex(SessionProviderIdContext.key, ANY_AGENT_HOST_PROVIDER_RE)), SessionItemHasBranchNameContext))
|
|
83
|
+
}]
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async run(accessor, context) {
|
|
87
|
+
const session = getSession(context);
|
|
88
|
+
const branchName = session?.workspace.get()?.folders[0]?.gitRepository?.branchName?.trim();
|
|
89
|
+
if (!branchName) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await accessor.get(IClipboardService).writeText(branchName);
|
|
93
|
+
}
|
|
94
|
+
});
|