@codingame/monaco-vscode-workbench-service-override 37.3.2 → 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
|
@@ -67,16 +67,16 @@ import { observableSignalFromEvent } from '@codingame/monaco-vscode-api/vscode/v
|
|
|
67
67
|
const $ = $$1;
|
|
68
68
|
const INTERVALS = [{
|
|
69
69
|
value: "manual",
|
|
70
|
-
label: ( localize(
|
|
70
|
+
label: ( localize(3295, "Manual"))
|
|
71
71
|
}, {
|
|
72
72
|
value: "hourly",
|
|
73
|
-
label: ( localize(
|
|
73
|
+
label: ( localize(3296, "Hourly"))
|
|
74
74
|
}, {
|
|
75
75
|
value: "daily",
|
|
76
|
-
label: ( localize(
|
|
76
|
+
label: ( localize(3297, "Daily"))
|
|
77
77
|
}, {
|
|
78
78
|
value: "weekly",
|
|
79
|
-
label: ( localize(
|
|
79
|
+
label: ( localize(3298, "Weekly"))
|
|
80
80
|
}];
|
|
81
81
|
function isAutomationDialogPopupTarget(relatedTarget) {
|
|
82
82
|
return isMobilePickerSheetTarget(relatedTarget) || !!relatedTarget.closest(
|
|
@@ -102,7 +102,7 @@ async function canSelectAutomationWorkspace(
|
|
|
102
102
|
return !!(await workspaceTrustRequestService.requestResourcesTrust({
|
|
103
103
|
uri: folderUri,
|
|
104
104
|
message: ( localize(
|
|
105
|
-
|
|
105
|
+
3299,
|
|
106
106
|
"An agent session will be able to read files, run commands, and make changes in this folder."
|
|
107
107
|
))
|
|
108
108
|
}));
|
|
@@ -528,8 +528,8 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
528
528
|
void this.reloadRepository(this.isolationModel.folderUri);
|
|
529
529
|
},
|
|
530
530
|
isolation: {
|
|
531
|
-
label: ( localize(
|
|
532
|
-
ariaLabel: ( localize(
|
|
531
|
+
label: ( localize(3300, "New Worktree")),
|
|
532
|
+
ariaLabel: ( localize(3301, "Worktree isolation")),
|
|
533
533
|
onToggle: checked => {
|
|
534
534
|
this.isolationModel.selectIsolationMode(checked ? "worktree" : "workspace");
|
|
535
535
|
this.renderBranchControl();
|
|
@@ -637,23 +637,23 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
637
637
|
const displayBranch = this.isolationModel.displayBranch;
|
|
638
638
|
if (!this.isolationModel.folderUri) {
|
|
639
639
|
return {
|
|
640
|
-
label: ( localize(
|
|
641
|
-
reason: ( localize(
|
|
640
|
+
label: ( localize(3302, "—")),
|
|
641
|
+
reason: ( localize(3303, "Select a folder to determine its Git branch.")),
|
|
642
642
|
missing: true
|
|
643
643
|
};
|
|
644
644
|
}
|
|
645
645
|
if (!this.worktreeCapabilityResolved) {
|
|
646
646
|
return {
|
|
647
|
-
label: displayBranch ?? ( localize(
|
|
648
|
-
reason: ( localize(
|
|
647
|
+
label: displayBranch ?? ( localize(3302, "—")),
|
|
648
|
+
reason: ( localize(3304, "Session capabilities are loading.")),
|
|
649
649
|
missing: !displayBranch
|
|
650
650
|
};
|
|
651
651
|
}
|
|
652
652
|
if (!this.isolationModel.supportsWorktreeConfiguration) {
|
|
653
653
|
return {
|
|
654
|
-
label: displayBranch ?? ( localize(
|
|
654
|
+
label: displayBranch ?? ( localize(3302, "—")),
|
|
655
655
|
reason: ( localize(
|
|
656
|
-
|
|
656
|
+
3305,
|
|
657
657
|
"The selected session type does not support Worktree branch configuration."
|
|
658
658
|
)),
|
|
659
659
|
missing: !displayBranch
|
|
@@ -661,15 +661,15 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
661
661
|
}
|
|
662
662
|
if (this.branchLoadState === "error") {
|
|
663
663
|
return {
|
|
664
|
-
label: displayBranch ?? ( localize(
|
|
665
|
-
reason: ( localize(
|
|
664
|
+
label: displayBranch ?? ( localize(3306, "Unable to load branches")),
|
|
665
|
+
reason: ( localize(3307, "Open the branch picker to retry loading local branches.")),
|
|
666
666
|
missing: !displayBranch
|
|
667
667
|
};
|
|
668
668
|
}
|
|
669
669
|
if (this.isolationModel.isolationMode !== "worktree") {
|
|
670
670
|
return {
|
|
671
|
-
label: displayBranch ?? this.detachedCommit ?? ( localize(
|
|
672
|
-
reason: ( localize(
|
|
671
|
+
label: displayBranch ?? this.detachedCommit ?? ( localize(3302, "—")),
|
|
672
|
+
reason: ( localize(3308, "Select Worktree to choose a branch.")),
|
|
673
673
|
missing: !displayBranch && !this.detachedCommit
|
|
674
674
|
};
|
|
675
675
|
}
|
|
@@ -677,32 +677,32 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
677
677
|
case "loadingRepository":
|
|
678
678
|
case "loadingBranches":
|
|
679
679
|
return {
|
|
680
|
-
label: displayBranch ?? ( localize(
|
|
681
|
-
reason: ( localize(
|
|
680
|
+
label: displayBranch ?? ( localize(3309, "Loading branches…")),
|
|
681
|
+
reason: ( localize(3310, "Local branches are loading.")),
|
|
682
682
|
missing: !displayBranch
|
|
683
683
|
};
|
|
684
684
|
case "noRepository":
|
|
685
685
|
return {
|
|
686
|
-
label: displayBranch ?? ( localize(
|
|
687
|
-
reason: ( localize(
|
|
686
|
+
label: displayBranch ?? ( localize(3311, "no git repo")),
|
|
687
|
+
reason: ( localize(3312, "No Git repository was found for the selected folder.")),
|
|
688
688
|
missing: !displayBranch
|
|
689
689
|
};
|
|
690
690
|
case "empty":
|
|
691
691
|
return {
|
|
692
|
-
label: displayBranch ?? ( localize(
|
|
693
|
-
reason: ( localize(
|
|
692
|
+
label: displayBranch ?? ( localize(3313, "No local branches")),
|
|
693
|
+
reason: ( localize(3314, "No local branches were found in this repository.")),
|
|
694
694
|
missing: !displayBranch
|
|
695
695
|
};
|
|
696
696
|
case "ready":
|
|
697
697
|
return {
|
|
698
|
-
label: displayBranch ?? ( localize(
|
|
699
|
-
reason: ( localize(
|
|
698
|
+
label: displayBranch ?? ( localize(3315, "Select branch")),
|
|
699
|
+
reason: ( localize(3316, "Choose the local branch to use as the Worktree base.")),
|
|
700
700
|
missing: !displayBranch
|
|
701
701
|
};
|
|
702
702
|
case "noFolder":
|
|
703
703
|
return {
|
|
704
|
-
label: ( localize(
|
|
705
|
-
reason: ( localize(
|
|
704
|
+
label: ( localize(3302, "—")),
|
|
705
|
+
reason: ( localize(3303, "Select a folder to determine its Git branch.")),
|
|
706
706
|
missing: true
|
|
707
707
|
};
|
|
708
708
|
}
|
|
@@ -715,13 +715,13 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
715
715
|
}
|
|
716
716
|
getWorktreeUnavailableReason() {
|
|
717
717
|
if (!this.isolationModel.folderUri) {
|
|
718
|
-
return localize(
|
|
718
|
+
return localize(3317, "Select a folder to use Worktree isolation.");
|
|
719
719
|
}
|
|
720
720
|
if (!this.worktreeCapabilityResolved) {
|
|
721
|
-
return localize(
|
|
721
|
+
return localize(3304, "Session capabilities are loading.");
|
|
722
722
|
}
|
|
723
723
|
if (!this.isolationModel.supportsWorktreeConfiguration) {
|
|
724
|
-
return localize(
|
|
724
|
+
return localize(3318, "Not supported by the selected session type");
|
|
725
725
|
}
|
|
726
726
|
if (this.isolationModel.selectedBranch) {
|
|
727
727
|
return undefined;
|
|
@@ -729,17 +729,17 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
729
729
|
switch (this.branchLoadState) {
|
|
730
730
|
case "loadingRepository":
|
|
731
731
|
case "loadingBranches":
|
|
732
|
-
return localize(
|
|
732
|
+
return localize(3310, "Local branches are loading.");
|
|
733
733
|
case "noRepository":
|
|
734
|
-
return localize(
|
|
734
|
+
return localize(3312, "No Git repository was found for the selected folder.");
|
|
735
735
|
case "error":
|
|
736
|
-
return localize(
|
|
736
|
+
return localize(3307, "Open the branch picker to retry loading local branches.");
|
|
737
737
|
case "empty":
|
|
738
|
-
return localize(
|
|
738
|
+
return localize(3314, "No local branches were found in this repository.");
|
|
739
739
|
case "ready":
|
|
740
|
-
return this.branches.length > 0 ? undefined : ( localize(
|
|
740
|
+
return this.branches.length > 0 ? undefined : ( localize(3314, "No local branches were found in this repository."));
|
|
741
741
|
case "noFolder":
|
|
742
|
-
return localize(
|
|
742
|
+
return localize(3317, "Select a folder to use Worktree isolation.");
|
|
743
743
|
}
|
|
744
744
|
}
|
|
745
745
|
cancelBranchRequest() {
|
|
@@ -794,7 +794,7 @@ let AutomationIsolationGroupActionViewItem = class AutomationIsolationGroupActio
|
|
|
794
794
|
this.detachedCommit = undefined;
|
|
795
795
|
this.isolationModel.setHeadBranch(head.name);
|
|
796
796
|
} else if (head?.commit) {
|
|
797
|
-
this.detachedCommit = ( localize(
|
|
797
|
+
this.detachedCommit = ( localize(3319, "({0})", head.commit.slice(0, 7)));
|
|
798
798
|
this.isolationModel.setHeadBranch(undefined);
|
|
799
799
|
} else {
|
|
800
800
|
this.detachedCommit = undefined;
|
|
@@ -846,7 +846,7 @@ registerAction2(class OpenAutomationsHarnessChipAction extends Action2 {
|
|
|
846
846
|
constructor() {
|
|
847
847
|
super({
|
|
848
848
|
id: AUTOMATIONS_HARNESS_CHIP_ACTION_ID,
|
|
849
|
-
title: ( localize2(
|
|
849
|
+
title: ( localize2(3320, "Automations Harness Chip")),
|
|
850
850
|
f1: false,
|
|
851
851
|
precondition: ChatContextKeys.enabled,
|
|
852
852
|
menu: [{
|
|
@@ -863,7 +863,7 @@ registerAction2(class OpenAutomationsWorkspacePickerAction extends Action2 {
|
|
|
863
863
|
constructor() {
|
|
864
864
|
super({
|
|
865
865
|
id: AUTOMATIONS_WORKSPACE_PICKER_ACTION_ID,
|
|
866
|
-
title: ( localize2(
|
|
866
|
+
title: ( localize2(3321, "Automations Workspace Picker")),
|
|
867
867
|
f1: false,
|
|
868
868
|
precondition: ChatContextKeys.enabled,
|
|
869
869
|
menu: [{
|
|
@@ -880,7 +880,7 @@ registerAction2(class OpenAutomationsIsolationGroupAction extends Action2 {
|
|
|
880
880
|
constructor() {
|
|
881
881
|
super({
|
|
882
882
|
id: AUTOMATIONS_ISOLATION_GROUP_ACTION_ID,
|
|
883
|
-
title: ( localize2(
|
|
883
|
+
title: ( localize2(3322, "Automations Isolation Group")),
|
|
884
884
|
f1: false,
|
|
885
885
|
precondition: ChatContextKeys.enabled,
|
|
886
886
|
menu: [{
|
|
@@ -913,12 +913,12 @@ function renderForm(
|
|
|
913
913
|
) {
|
|
914
914
|
const formContent = append(form, $(".automation-form-content"));
|
|
915
915
|
const nameRow = append(formContent, $(".automation-form-row"));
|
|
916
|
-
append(nameRow, $("span.automation-form-label", undefined, ( localize(
|
|
916
|
+
append(nameRow, $("span.automation-form-label", undefined, ( localize(3323, "Name"))));
|
|
917
917
|
const nameInputContainer = append(nameRow, $(".automation-form-input-host"));
|
|
918
918
|
const nameInput = disposables.add(( new InputBox(nameInputContainer, contextViewService, {
|
|
919
919
|
inputBoxStyles: defaultInputBoxStyles,
|
|
920
|
-
placeholder: ( localize(
|
|
921
|
-
ariaLabel: ( localize(
|
|
920
|
+
placeholder: ( localize(3324, "e.g. Morning standup notes")),
|
|
921
|
+
ariaLabel: ( localize(3323, "Name"))
|
|
922
922
|
})));
|
|
923
923
|
nameInput.value = state.name;
|
|
924
924
|
disposables.add(nameInput.onDidChange(value => {
|
|
@@ -928,7 +928,7 @@ function renderForm(
|
|
|
928
928
|
const scheduleRow = append(formContent, $(".automation-form-row.automation-form-schedule-row"));
|
|
929
929
|
const useCustomDrawn = !hasNativeContextMenu(configurationService);
|
|
930
930
|
const intervalGroup = append(scheduleRow, $(".automation-form-schedule-group"));
|
|
931
|
-
append(intervalGroup, $("span.automation-form-label", undefined, ( localize(
|
|
931
|
+
append(intervalGroup, $("span.automation-form-label", undefined, ( localize(3325, "Schedule"))));
|
|
932
932
|
const intervalOptions = INTERVALS.map(item => ({
|
|
933
933
|
text: item.label
|
|
934
934
|
}));
|
|
@@ -939,7 +939,7 @@ function renderForm(
|
|
|
939
939
|
contextViewService,
|
|
940
940
|
defaultSelectBoxStyles,
|
|
941
941
|
{
|
|
942
|
-
ariaLabel: ( localize(
|
|
942
|
+
ariaLabel: ( localize(3325, "Schedule")),
|
|
943
943
|
useCustomDrawn
|
|
944
944
|
}
|
|
945
945
|
)));
|
|
@@ -949,7 +949,7 @@ function renderForm(
|
|
|
949
949
|
scheduleRow,
|
|
950
950
|
$(".automation-form-schedule-group.automation-form-time-group")
|
|
951
951
|
);
|
|
952
|
-
append(timeGroup, $("span.automation-form-label", undefined, ( localize(
|
|
952
|
+
append(timeGroup, $("span.automation-form-label", undefined, ( localize(3326, "Time"))));
|
|
953
953
|
const timeOptions = buildTimeOptions();
|
|
954
954
|
const initialTimeIndex = nearestTimeOptionIndex(state.hour, state.minute);
|
|
955
955
|
state.hour = timeOptions[initialTimeIndex].hour;
|
|
@@ -957,7 +957,7 @@ function renderForm(
|
|
|
957
957
|
const timeSelect = disposables.add(( new SelectBox(timeOptions.map(opt => ({
|
|
958
958
|
text: opt.label
|
|
959
959
|
})), initialTimeIndex, contextViewService, defaultSelectBoxStyles, {
|
|
960
|
-
ariaLabel: ( localize(
|
|
960
|
+
ariaLabel: ( localize(3326, "Time")),
|
|
961
961
|
useCustomDrawn
|
|
962
962
|
})));
|
|
963
963
|
const timeSelectContainer = append(timeGroup, $(
|
|
@@ -973,7 +973,7 @@ function renderForm(
|
|
|
973
973
|
scheduleRow,
|
|
974
974
|
$(".automation-form-schedule-group.automation-form-day-group")
|
|
975
975
|
);
|
|
976
|
-
append(dayGroup, $("span.automation-form-label", undefined, ( localize(
|
|
976
|
+
append(dayGroup, $("span.automation-form-label", undefined, ( localize(3327, "Day of week"))));
|
|
977
977
|
const dayOptions = DAYS_OF_WEEK.map(d => ({
|
|
978
978
|
text: d
|
|
979
979
|
}));
|
|
@@ -983,7 +983,7 @@ function renderForm(
|
|
|
983
983
|
contextViewService,
|
|
984
984
|
defaultSelectBoxStyles,
|
|
985
985
|
{
|
|
986
|
-
ariaLabel: ( localize(
|
|
986
|
+
ariaLabel: ( localize(3327, "Day of week")),
|
|
987
987
|
useCustomDrawn
|
|
988
988
|
}
|
|
989
989
|
)));
|
|
@@ -1138,14 +1138,14 @@ function renderForm(
|
|
|
1138
1138
|
const targetRow = append(sessionSection, $(".automation-form-row.automation-target-row"));
|
|
1139
1139
|
const targetLabel = append(targetRow, $("span.automation-form-label", {
|
|
1140
1140
|
id: "automation-target-label"
|
|
1141
|
-
}, ( localize(
|
|
1141
|
+
}, ( localize(3328, "Target"))));
|
|
1142
1142
|
const targetContainer = append(targetRow, $(".automation-target-toolbar", {
|
|
1143
1143
|
role: "group",
|
|
1144
1144
|
"aria-labelledby": targetLabel.id
|
|
1145
1145
|
}));
|
|
1146
1146
|
const promptSection = append(sessionSection, $(".automation-prompt-section"));
|
|
1147
1147
|
const promptRow = append(promptSection, $(".automation-form-row"));
|
|
1148
|
-
append(promptRow, $("span.automation-form-label", undefined, ( localize(
|
|
1148
|
+
append(promptRow, $("span.automation-form-label", undefined, ( localize(3329, "Prompt"))));
|
|
1149
1149
|
const promptHost = append(promptRow, $(".automation-form-prompt-host.interactive-session"));
|
|
1150
1150
|
const editorOverflowWidgetsDomNode = layoutService.getContainer(getWindow(promptHost)).appendChild($(".chat-editor-overflow.automation-dialog-editor-overflow.monaco-editor"));
|
|
1151
1151
|
disposables.add(toDisposable(() => editorOverflowWidgetsDomNode.remove()));
|
|
@@ -1185,7 +1185,7 @@ function renderForm(
|
|
|
1185
1185
|
targetContainer,
|
|
1186
1186
|
Menus.AutomationsDialogTargetToolbar,
|
|
1187
1187
|
{
|
|
1188
|
-
ariaLabel: ( localize(
|
|
1188
|
+
ariaLabel: ( localize(3330, "Automation target options")),
|
|
1189
1189
|
telemetrySource: "automations.dialog",
|
|
1190
1190
|
hiddenItemStrategy: HiddenItemStrategy.NoHide,
|
|
1191
1191
|
responsiveBehavior: {
|
|
@@ -1280,7 +1280,7 @@ function renderForm(
|
|
|
1280
1280
|
));
|
|
1281
1281
|
chatInput.render(promptHost, initialPrompt, stubWidget);
|
|
1282
1282
|
chatInput.inputEditor.updateOptions({
|
|
1283
|
-
placeholder: ( localize(
|
|
1283
|
+
placeholder: ( localize(3331, "Describe what you want to automate"))
|
|
1284
1284
|
});
|
|
1285
1285
|
disposables.add(
|
|
1286
1286
|
scopedInstantiationService.createInstance(AutomationInputCompletions, chatInput.inputEditor)
|
|
@@ -1288,7 +1288,7 @@ function renderForm(
|
|
|
1288
1288
|
const sessionConfigurationRow = append(promptSection, $(".automation-form-row"));
|
|
1289
1289
|
const sessionConfigurationLabel = append(sessionConfigurationRow, $("span.automation-form-label", {
|
|
1290
1290
|
id: "automation-session-configuration-label"
|
|
1291
|
-
}, ( localize(
|
|
1291
|
+
}, ( localize(3332, "Session configuration"))));
|
|
1292
1292
|
const sessionConfiguration = append(sessionConfigurationRow, $(".automation-session-configuration", {
|
|
1293
1293
|
role: "group",
|
|
1294
1294
|
"aria-labelledby": sessionConfigurationLabel.id
|
|
@@ -1302,11 +1302,11 @@ function renderForm(
|
|
|
1302
1302
|
sessionConfigContainer,
|
|
1303
1303
|
scopedInstantiationService,
|
|
1304
1304
|
compactModelPicker,
|
|
1305
|
-
( localize(
|
|
1305
|
+
( localize(3333, "Session configuration options"))
|
|
1306
1306
|
));
|
|
1307
1307
|
const sessionControlsContainer = append(sessionConfiguration, $(".automation-session-controls"));
|
|
1308
1308
|
const sessionControlsToolbar = disposables.add(
|
|
1309
|
-
createNewSessionControlToolbar(sessionControlsContainer, scopedInstantiationService, ( localize(
|
|
1309
|
+
createNewSessionControlToolbar(sessionControlsContainer, scopedInstantiationService, ( localize(3334, "Session controls")))
|
|
1310
1310
|
);
|
|
1311
1311
|
const sessionConfigLayout = disposables.add(( new ChatInputPickerResponsiveLayout("AutomationDialog.sessionConfig", sessionConfigContainer, {
|
|
1312
1312
|
getItems: () => getAutomationToolbarResponsiveItems(sessionConfigToolbar, {
|
|
@@ -1346,7 +1346,7 @@ function renderForm(
|
|
|
1346
1346
|
container.setAttribute("aria-hidden", String(controlsUnavailable));
|
|
1347
1347
|
container.setAttribute("aria-busy", String(pending));
|
|
1348
1348
|
}
|
|
1349
|
-
sessionConfigurationUnavailable.textContent = pending ? ( localize(
|
|
1349
|
+
sessionConfigurationUnavailable.textContent = pending ? ( localize(3335, "Loading session configuration…")) : hasTarget && controlsUnavailable ? ( localize(3336, "Session configuration unavailable")) : "";
|
|
1350
1350
|
}));
|
|
1351
1351
|
disposables.add(chatInput.inputEditor.onDidChangeModelContent(() => {
|
|
1352
1352
|
revalidate();
|
|
@@ -1375,7 +1375,7 @@ function renderForm(
|
|
|
1375
1375
|
);
|
|
1376
1376
|
disposables.add(resizeObserver.observe(promptHost));
|
|
1377
1377
|
const enabledRow = append(formContent, $(".automation-form-row.automation-form-checkbox-row"));
|
|
1378
|
-
const enabledLabelText = ( localize(
|
|
1378
|
+
const enabledLabelText = ( localize(3337, "Enabled (the scheduler runs this automation when due)"));
|
|
1379
1379
|
const enabledCheckbox = disposables.add(( new Checkbox(enabledLabelText, state.enabled, defaultCheckboxStyles)));
|
|
1380
1380
|
append(enabledRow, enabledCheckbox.domNode);
|
|
1381
1381
|
const enabledLabel = append(
|
|
@@ -1413,7 +1413,7 @@ function renderForm(
|
|
|
1413
1413
|
form.classList.toggle("saving", saving);
|
|
1414
1414
|
if (saving) {
|
|
1415
1415
|
show(saveStatus);
|
|
1416
|
-
saveStatus.textContent = ( localize(
|
|
1416
|
+
saveStatus.textContent = ( localize(3338, "Saving automation…"));
|
|
1417
1417
|
} else {
|
|
1418
1418
|
hide(saveStatus);
|
|
1419
1419
|
saveStatus.textContent = "";
|
|
@@ -1476,11 +1476,11 @@ function nearestTimeOptionIndex(hour, minute) {
|
|
|
1476
1476
|
return carriedHour * 4 + slot;
|
|
1477
1477
|
}
|
|
1478
1478
|
function updateSaveButtonState(saveButton, state, validation, form, getPrompt, getBranch) {
|
|
1479
|
-
validation.nameError = state.name.trim() === "" ? ( localize(
|
|
1480
|
-
validation.promptError = getPrompt().trim() === "" ? ( localize(
|
|
1481
|
-
validation.folderError = !state.folderUri && !state.isQuickChat ? ( localize(
|
|
1482
|
-
validation.sessionTypeError = !state.sessionTypeId || (state.isQuickChat && !state.providerId) ? ( localize(
|
|
1483
|
-
validation.branchError = !state.isQuickChat && state.isolationMode === "worktree" && !getBranch() ? ( localize(
|
|
1479
|
+
validation.nameError = state.name.trim() === "" ? ( localize(3339, "Name is required.")) : undefined;
|
|
1480
|
+
validation.promptError = getPrompt().trim() === "" ? ( localize(3340, "Prompt is required.")) : undefined;
|
|
1481
|
+
validation.folderError = !state.folderUri && !state.isQuickChat ? ( localize(3341, "Workspace folder is required.")) : undefined;
|
|
1482
|
+
validation.sessionTypeError = !state.sessionTypeId || (state.isQuickChat && !state.providerId) ? ( localize(3342, "Session type is required.")) : undefined;
|
|
1483
|
+
validation.branchError = !state.isQuickChat && state.isolationMode === "worktree" && !getBranch() ? ( localize(3343, "A branch is required for Worktree isolation.")) : undefined;
|
|
1484
1484
|
const valid = !validation.nameError && !validation.promptError && !validation.folderError && !validation.sessionTypeError && !validation.branchError;
|
|
1485
1485
|
if (saveButton) {
|
|
1486
1486
|
saveButton.enabled = valid;
|
|
@@ -1509,8 +1509,8 @@ class AutomationsWorkspacePicker extends WorkspacePicker {
|
|
|
1509
1509
|
const items = super._buildItems();
|
|
1510
1510
|
const noWorkspace = {
|
|
1511
1511
|
kind: ActionListItemKind.Action,
|
|
1512
|
-
label: ( localize(
|
|
1513
|
-
description: ( localize(
|
|
1512
|
+
label: ( localize(3344, "No workspace")),
|
|
1513
|
+
description: ( localize(3345, "Run without a backing workspace")),
|
|
1514
1514
|
group: {
|
|
1515
1515
|
title: "",
|
|
1516
1516
|
icon: Codicon.commentDiscussion
|
|
@@ -1540,9 +1540,9 @@ class AutomationsWorkspacePicker extends WorkspacePicker {
|
|
|
1540
1540
|
clearNode(trigger);
|
|
1541
1541
|
const workspace = this.selectedResolved?.workspace;
|
|
1542
1542
|
const noWorkspace = this.targetModel?.isQuickChat === true;
|
|
1543
|
-
const label = noWorkspace ? ( localize(
|
|
1543
|
+
const label = noWorkspace ? ( localize(3344, "No workspace")) : workspace?.label ?? ( localize(3346, "Select workspace"));
|
|
1544
1544
|
const icon = noWorkspace ? Codicon.commentDiscussion : workspace?.icon ?? Codicon.project;
|
|
1545
|
-
trigger.setAttribute("aria-label", workspace || noWorkspace ? ( localize(
|
|
1545
|
+
trigger.setAttribute("aria-label", workspace || noWorkspace ? ( localize(3347, "Automation target, {0}", label)) : ( localize(3348, "Pick a workspace for this automation")));
|
|
1546
1546
|
const renderedIcon = append(trigger, renderIcon(icon));
|
|
1547
1547
|
renderedIcon.setAttribute("aria-hidden", "true");
|
|
1548
1548
|
append(trigger, $("span.sessions-chat-dropdown-label", undefined, label));
|
|
@@ -127,12 +127,12 @@ let AutomationDialogService = class AutomationDialogService {
|
|
|
127
127
|
let saveInProgress = false;
|
|
128
128
|
const saveCancellation = disposables.add(( new MutableDisposable()));
|
|
129
129
|
const completion = ( new DeferredPromise());
|
|
130
|
-
const title = isEdit ? ( localize(
|
|
131
|
-
const saveButtonLabel = isEdit ? ( localize(
|
|
132
|
-
const cancelButtonLabel = ( localize(
|
|
133
|
-
const savingButtonLabel = ( localize(
|
|
130
|
+
const title = isEdit ? ( localize(3349, "Edit automation")) : ( localize(3350, "New automation"));
|
|
131
|
+
const saveButtonLabel = isEdit ? ( localize(3351, "Save")) : ( localize(3352, "Create"));
|
|
132
|
+
const cancelButtonLabel = ( localize(3353, "Cancel"));
|
|
133
|
+
const savingButtonLabel = ( localize(3354, "Saving…"));
|
|
134
134
|
const captureErrorMessage = ( localize(
|
|
135
|
-
|
|
135
|
+
3355,
|
|
136
136
|
"The automation wasn't saved because its session configuration couldn't be captured. Check the provider connection and try again."
|
|
137
137
|
));
|
|
138
138
|
const buildResult = sessionConfigurationCapture => {
|
|
@@ -302,8 +302,8 @@ let AutomationDialogService = class AutomationDialogService {
|
|
|
302
302
|
titlebar.setAttribute("aria-hidden", "true");
|
|
303
303
|
titlebar.textContent = title;
|
|
304
304
|
const description = append(container, $(".automation-description"));
|
|
305
|
-
description.textContent = isEdit ? ( localize(
|
|
306
|
-
|
|
305
|
+
description.textContent = isEdit ? ( localize(3356, "Update the schedule, prompt, or run target for this automation.")) : ( localize(
|
|
306
|
+
3357,
|
|
307
307
|
"Define a prompt that will run on a schedule against the selected target."
|
|
308
308
|
));
|
|
309
309
|
const formPane = append(container, $(".automation-form-pane"));
|
|
@@ -90,7 +90,7 @@ let AutomationRunner = class AutomationRunner {
|
|
|
90
90
|
);
|
|
91
91
|
if (trigger === "manual") {
|
|
92
92
|
this.notificationService.info(( localize(
|
|
93
|
-
|
|
93
|
+
3358,
|
|
94
94
|
"Automation '{0}' cannot start until its agent becomes available.",
|
|
95
95
|
automation.name
|
|
96
96
|
)));
|
|
@@ -232,7 +232,7 @@ let AutomationRunner = class AutomationRunner {
|
|
|
232
232
|
return;
|
|
233
233
|
}
|
|
234
234
|
if (terminalStatus === SessionStatus.Error) {
|
|
235
|
-
throw ( new Error(( localize(
|
|
235
|
+
throw ( new Error(( localize(3359, "Agent session failed."))));
|
|
236
236
|
}
|
|
237
237
|
await this.automationService.updateRun(runId, {
|
|
238
238
|
status: "completed",
|
|
@@ -250,7 +250,7 @@ let AutomationRunner = class AutomationRunner {
|
|
|
250
250
|
this.logService.error(`[AutomationRunner] run for ${automation.id} failed`, err);
|
|
251
251
|
try {
|
|
252
252
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
253
|
-
this.notificationService.error(( localize(
|
|
253
|
+
this.notificationService.error(( localize(3360, "Automation '{0}' failed: {1}", automation.name, errorMessage)));
|
|
254
254
|
let failedRun;
|
|
255
255
|
if (runId) {
|
|
256
256
|
failedRun = await this.automationService.updateRun(runId, {
|
|
@@ -278,7 +278,7 @@ let AutomationRunner = class AutomationRunner {
|
|
|
278
278
|
await this.automationService.updateRun(runId, {
|
|
279
279
|
status: "failed",
|
|
280
280
|
completedAt: ( new Date()).toISOString(),
|
|
281
|
-
errorMessage: ( localize(
|
|
281
|
+
errorMessage: ( localize(3361, "Cancelled"))
|
|
282
282
|
});
|
|
283
283
|
}
|
|
284
284
|
} catch (err) {
|
|
@@ -17,7 +17,7 @@ import { AutomationLeaderElection } from './automationLeaderElection.js';
|
|
|
17
17
|
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
18
18
|
|
|
19
19
|
const DEFAULT_SCHEDULER_TICK_MS = 60_000;
|
|
20
|
-
const CRASH_RECOVERY_REASON = ( localize(
|
|
20
|
+
const CRASH_RECOVERY_REASON = ( localize(3362, "Interrupted by app shutdown"));
|
|
21
21
|
class AutomationSchedulerCore extends Disposable {
|
|
22
22
|
constructor(automationService, runner, storageService, logService, options = {}) {
|
|
23
23
|
super();
|
|
@@ -126,7 +126,7 @@ class AutomationSchedulerCore extends Disposable {
|
|
|
126
126
|
if (active) {
|
|
127
127
|
const updated = await this.automationService.updateRun(active.id, {
|
|
128
128
|
status: "failed",
|
|
129
|
-
errorMessage: ( localize(
|
|
129
|
+
errorMessage: ( localize(3363, "Timed out after {0} minute(s).", Math.round(timeoutMs / 60_000))),
|
|
130
130
|
completedAt: this._now().toISOString()
|
|
131
131
|
});
|
|
132
132
|
if (updated) {
|