@codingame/monaco-vscode-chat-service-override 28.4.0 → 29.0.0
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/index.js +18 -12
- package/package.json +5 -5
- package/vscode/src/vs/platform/agentHost/common/agentService.d.ts +300 -0
- package/vscode/src/vs/platform/agentHost/common/agentService.js +31 -0
- package/vscode/src/vs/platform/agentHost/common/agentService.service.d.ts +84 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/action-origin.generated.d.ts +16 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/actions.d.ts +488 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/commands.d.ts +424 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/errors.d.ts +50 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/messages.d.ts +202 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/notifications.d.ts +114 -0
- package/vscode/src/vs/platform/agentHost/common/state/protocol/state.d.ts +723 -0
- package/vscode/src/vs/platform/agentHost/common/state/sessionActions.d.ts +33 -0
- package/vscode/src/vs/platform/agentHost/common/state/sessionProtocol.d.ts +40 -0
- package/vscode/src/vs/platform/agentHost/common/state/sessionState.d.ts +22 -0
- package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +13 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +29 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +59 -59
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +76 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +162 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +167 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +52 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.d.ts +82 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.js +195 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +97 -88
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +78 -35
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +7 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +174 -170
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +7 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +118 -52
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +13 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +0 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +5 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +9 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +23 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +341 -196
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +79 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.d.ts +5 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.js +22 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +15 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +85 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +668 -214
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.js +18 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +306 -39
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +84 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +651 -81
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +6 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +31 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +9 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +11 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +7 -142
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.d.ts +43 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.js +63 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.js +44 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +25 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +297 -123
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +153 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +17 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +111 -171
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +5 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +277 -186
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +31 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.d.ts +3 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.js +4 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +18 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +112 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +16 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +41 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +7 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +35 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.d.ts +1 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +8 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +13 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +29 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +14 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +79 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +125 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +11 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +113 -82
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +18 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +54 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +8 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +103 -28
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +48 -37
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +28 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +62 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +21 -37
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +17 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +43 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.d.ts +59 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +194 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +9 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +8 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +81 -50
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +32 -32
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +23 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +9 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +29 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +19 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +2 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +105 -172
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +80 -65
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +56 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.js +70 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.js +40 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.d.ts +31 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.js +53 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +33 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +21 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +362 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.d.ts +15 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +90 -43
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.d.ts +35 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +146 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +26 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +10 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +33 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +200 -55
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +7 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +90 -45
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +21 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +22 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +28 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +20 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +68 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +57 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +21 -5
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +171 -57
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +7 -5
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +206 -35
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +4 -3
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +7 -1
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +11 -3
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +44 -22
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +450 -301
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/marketplaceReference.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/marketplaceReference.js +165 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +34 -20
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +209 -144
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/workspacePluginSettingsService.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/workspacePluginSettingsService.js +205 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalCustomizations.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalCustomizations.js +47 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalSkill.d.ts +30 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +191 -159
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +6 -7
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +210 -233
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +19 -26
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +183 -193
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatArtifactsService.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatArtifactsService.js +75 -0
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +8 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +97 -35
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +2 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatHistoryService.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatHistoryService.js +67 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +62 -23
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +8 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +23 -9
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +50 -9
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +21 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.d.ts +20 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +124 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +20 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +10 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +46 -31
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.d.ts +18 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +74 -37
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +24 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +3 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +5 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +1 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +66 -64
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +5 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +32 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +390 -114
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +21 -11
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +70 -51
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +61 -51
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +94 -76
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +19 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +112 -21
- package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.d.ts +0 -53
- package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.js +0 -219
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.d.ts +0 -89
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +0 -251
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +0 -123
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +0 -278
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +0 -76
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +0 -299
- package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.d.ts +0 -67
- package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.js +0 -263
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +0 -85
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +0 -397
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +0 -56
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +0 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.d.ts +0 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.js +0 -30
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +0 -40
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +0 -28
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +0 -190
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +0 -11
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +0 -16
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +0 -20
|
@@ -3,13 +3,16 @@ import { registerCss } from '@codingame/monaco-vscode-api/css';
|
|
|
3
3
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
4
4
|
import * as aiCustomizationManagement from './media/aiCustomizationManagement.css';
|
|
5
5
|
import { $ as $$1, append, Dimension, addDisposableListener } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
|
|
6
|
+
import { RunOnceScheduler } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
6
7
|
import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
8
|
+
import { VSBuffer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
|
|
9
|
+
import { onUnexpectedError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
7
10
|
import { DisposableStore, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
8
|
-
import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
9
11
|
import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
10
12
|
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
11
13
|
import { SplitView, Sizing } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/splitview/splitview';
|
|
12
14
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
15
|
+
import { generateUuid } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uuid';
|
|
13
16
|
import { StorageScope, StorageTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
|
|
14
17
|
import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service';
|
|
15
18
|
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
@@ -21,7 +24,7 @@ import { WorkbenchList } from '@codingame/monaco-vscode-api/vscode/vs/platform/l
|
|
|
21
24
|
import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
|
|
22
25
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
23
26
|
import { IOpenerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service';
|
|
24
|
-
import { basename, isEqual } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
27
|
+
import { basename, isEqualOrParent, isEqual, dirname } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
25
28
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
26
29
|
import { registerColor } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colorUtils';
|
|
27
30
|
import '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/baseColors';
|
|
@@ -38,39 +41,49 @@ import { PANEL_BORDER } from '@codingame/monaco-vscode-api/vscode/vs/workbench/c
|
|
|
38
41
|
import { AICustomizationListWidget } from './aiCustomizationListWidget.js';
|
|
39
42
|
import { McpListWidget } from './mcpListWidget.js';
|
|
40
43
|
import { PluginListWidget } from './pluginListWidget.js';
|
|
41
|
-
import { AI_CUSTOMIZATION_MANAGEMENT_EDITOR_ID, CONTEXT_AI_CUSTOMIZATION_MANAGEMENT_EDITOR, CONTEXT_AI_CUSTOMIZATION_MANAGEMENT_SECTION, AI_CUSTOMIZATION_MANAGEMENT_SELECTED_SECTION_KEY, AI_CUSTOMIZATION_MANAGEMENT_SIDEBAR_WIDTH_KEY, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_WIDTH, CONTENT_MIN_WIDTH } from '
|
|
44
|
+
import { AI_CUSTOMIZATION_MANAGEMENT_EDITOR_ID, CONTEXT_AI_CUSTOMIZATION_MANAGEMENT_EDITOR, CONTEXT_AI_CUSTOMIZATION_MANAGEMENT_SECTION, AI_CUSTOMIZATION_MANAGEMENT_SELECTED_SECTION_KEY, AI_CUSTOMIZATION_MANAGEMENT_SIDEBAR_WIDTH_KEY, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_WIDTH, CONTENT_MIN_WIDTH } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement';
|
|
42
45
|
import { pluginIcon, hookIcon, promptIcon, instructionsIcon, skillIcon, agentIcon } from './aiCustomizationIcons.js';
|
|
43
46
|
import { ChatModelsWidget } from '../chatManagement/chatModelsWidget.js';
|
|
44
47
|
import { PromptsType, Target } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
45
48
|
import { PromptsStorage } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
|
|
46
49
|
import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
|
|
50
|
+
import { AGENT_MD_FILENAME } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
47
51
|
import { NEW_SKILL_COMMAND_ID, NEW_AGENT_COMMAND_ID, NEW_INSTRUCTIONS_COMMAND_ID, NEW_PROMPT_COMMAND_ID } from '@codingame/monaco-vscode-xterm-addons-common/vscode/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions';
|
|
48
52
|
import { showConfigureHooksQuickPick } from '../promptSyntax/hookActions.js';
|
|
49
53
|
import { resolveWorkspaceTargetDirectory, resolveUserTargetDirectory } from './customizationCreatorService.js';
|
|
50
54
|
import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
|
|
51
55
|
import { IAICustomizationWorkspaceService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.service';
|
|
52
56
|
import { CodeEditorWidget } from '@codingame/monaco-vscode-api/vscode/vs/editor/browser/widget/codeEditor/codeEditorWidget';
|
|
57
|
+
import { createTextBufferFactoryFromSnapshot } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/model/textModel';
|
|
58
|
+
import { IModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/model.service';
|
|
53
59
|
import { ITextModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/resolverService.service';
|
|
54
60
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
55
61
|
import { getSimpleEditorOptions } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/codeEditor/browser/simpleEditorOptions';
|
|
56
62
|
import { IWorkingCopyService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/workingCopy/common/workingCopyService.service';
|
|
57
|
-
import { ITextFileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/textfile/common/textfiles.service';
|
|
58
63
|
import { IFileDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
59
64
|
import { IHoverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service';
|
|
65
|
+
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
|
|
66
|
+
import { INotificationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/notification/common/notification.service';
|
|
67
|
+
import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
|
|
68
|
+
import { IContextMenuService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextview/browser/contextView.service';
|
|
69
|
+
import { Action } from '@codingame/monaco-vscode-api/vscode/vs/base/common/actions';
|
|
60
70
|
import { McpServerEditorInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/browser/mcpServerEditorInput';
|
|
61
71
|
import { McpServerEditor } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/browser/mcpServerEditor';
|
|
62
72
|
import { getDefaultHoverDelegate } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/hover/hoverDelegateFactory';
|
|
63
73
|
import { AgentPluginEditor } from '../agentPluginEditor/agentPluginEditor.js';
|
|
64
74
|
import { AgentPluginEditorInput } from '../agentPluginEditor/agentPluginEditorInput.js';
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
75
|
+
import { CustomizationHarness, matchesWorkspaceSubpath } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/customizationHarnessService';
|
|
76
|
+
import { ICustomizationHarnessService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/customizationHarnessService.service';
|
|
77
|
+
import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
78
|
+
import { AICustomizationManagementSection, BUILTIN_STORAGE } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService';
|
|
67
79
|
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
80
|
+
import { Orientation } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/sash/sash';
|
|
68
81
|
|
|
69
82
|
var AICustomizationManagementEditor_1;
|
|
70
83
|
registerCss(aiCustomizationManagement);
|
|
71
84
|
const $ = $$1;
|
|
72
85
|
const aiCustomizationManagementSashBorder = registerColor("aiCustomizationManagement.sashBorder", PANEL_BORDER, ( localize(
|
|
73
|
-
|
|
86
|
+
5361,
|
|
74
87
|
"The color of the Chat Customization Management editor splitview sash border."
|
|
75
88
|
)));
|
|
76
89
|
class SectionItemDelegate {
|
|
@@ -89,16 +102,25 @@ class SectionItemRenderer {
|
|
|
89
102
|
container.classList.add("section-list-item");
|
|
90
103
|
const icon = append(container, $(".section-icon"));
|
|
91
104
|
const label = append(container, $(".section-label"));
|
|
105
|
+
const count = append(container, $(".section-count"));
|
|
92
106
|
return {
|
|
93
107
|
container,
|
|
94
108
|
icon,
|
|
95
|
-
label
|
|
109
|
+
label,
|
|
110
|
+
count
|
|
96
111
|
};
|
|
97
112
|
}
|
|
98
113
|
renderElement(element, index, templateData) {
|
|
99
114
|
templateData.icon.className = "section-icon";
|
|
100
115
|
templateData.icon.classList.add(...ThemeIcon.asClassNameArray(element.icon));
|
|
101
116
|
templateData.label.textContent = element.label;
|
|
117
|
+
if (element.count > 0) {
|
|
118
|
+
templateData.count.textContent = String(element.count);
|
|
119
|
+
templateData.count.style.display = "";
|
|
120
|
+
} else {
|
|
121
|
+
templateData.count.textContent = "";
|
|
122
|
+
templateData.count.style.display = "none";
|
|
123
|
+
}
|
|
102
124
|
}
|
|
103
125
|
disposeTemplate() {}
|
|
104
126
|
}
|
|
@@ -123,9 +145,14 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
123
145
|
textModelService,
|
|
124
146
|
configurationService,
|
|
125
147
|
workingCopyService,
|
|
126
|
-
textFileService,
|
|
127
148
|
fileDialogService,
|
|
128
|
-
hoverService
|
|
149
|
+
hoverService,
|
|
150
|
+
modelService,
|
|
151
|
+
quickInputService,
|
|
152
|
+
contextMenuService,
|
|
153
|
+
fileService,
|
|
154
|
+
notificationService,
|
|
155
|
+
harnessService
|
|
129
156
|
) {
|
|
130
157
|
super(
|
|
131
158
|
AICustomizationManagementEditor_1.ID,
|
|
@@ -143,16 +170,25 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
143
170
|
this.textModelService = textModelService;
|
|
144
171
|
this.configurationService = configurationService;
|
|
145
172
|
this.workingCopyService = workingCopyService;
|
|
146
|
-
this.textFileService = textFileService;
|
|
147
173
|
this.fileDialogService = fileDialogService;
|
|
148
174
|
this.hoverService = hoverService;
|
|
175
|
+
this.modelService = modelService;
|
|
176
|
+
this.quickInputService = quickInputService;
|
|
177
|
+
this.contextMenuService = contextMenuService;
|
|
178
|
+
this.fileService = fileService;
|
|
179
|
+
this.notificationService = notificationService;
|
|
180
|
+
this.harnessService = harnessService;
|
|
181
|
+
this.editorActionButtonInProgress = false;
|
|
149
182
|
this.editorModelChangeDisposables = this._register(( new DisposableStore()));
|
|
183
|
+
this.builtinEditingSessions = ( new Map());
|
|
150
184
|
this.viewMode = "list";
|
|
151
185
|
this.mcpDetailDisposables = this._register(( new DisposableStore()));
|
|
152
186
|
this.pluginDetailDisposables = this._register(( new DisposableStore()));
|
|
153
187
|
this.sections = [];
|
|
188
|
+
this.allSections = [];
|
|
154
189
|
this.selectedSection = AICustomizationManagementSection.Agents;
|
|
155
190
|
this.editorDisposables = this._register(( new DisposableStore()));
|
|
191
|
+
this.promptsSectionCountScheduler = this._register(( new RunOnceScheduler(() => this._doRefreshAllPromptsSectionCounts(), 100)));
|
|
156
192
|
this._editorContentChanged = false;
|
|
157
193
|
this.inEditorContextKey = CONTEXT_AI_CUSTOMIZATION_MANAGEMENT_EDITOR.bindTo(contextKeyService);
|
|
158
194
|
this.sectionContextKey = CONTEXT_AI_CUSTOMIZATION_MANAGEMENT_SECTION.bindTo(contextKeyService);
|
|
@@ -166,49 +202,52 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
166
202
|
this.currentModelRef?.dispose();
|
|
167
203
|
this.currentModelRef = undefined;
|
|
168
204
|
}));
|
|
205
|
+
this._register(toDisposable(() => this.disposeBuiltinEditingSessions()));
|
|
169
206
|
const sectionInfo = {
|
|
170
207
|
[AICustomizationManagementSection.Agents]: {
|
|
171
|
-
label: ( localize(
|
|
208
|
+
label: ( localize(5362, "Agents")),
|
|
172
209
|
icon: agentIcon
|
|
173
210
|
},
|
|
174
211
|
[AICustomizationManagementSection.Skills]: {
|
|
175
|
-
label: ( localize(
|
|
212
|
+
label: ( localize(5363, "Skills")),
|
|
176
213
|
icon: skillIcon
|
|
177
214
|
},
|
|
178
215
|
[AICustomizationManagementSection.Instructions]: {
|
|
179
|
-
label: ( localize(
|
|
216
|
+
label: ( localize(5364, "Instructions")),
|
|
180
217
|
icon: instructionsIcon
|
|
181
218
|
},
|
|
182
219
|
[AICustomizationManagementSection.Prompts]: {
|
|
183
|
-
label: ( localize(
|
|
220
|
+
label: ( localize(5365, "Prompts")),
|
|
184
221
|
icon: promptIcon
|
|
185
222
|
},
|
|
186
223
|
[AICustomizationManagementSection.Hooks]: {
|
|
187
|
-
label: ( localize(
|
|
224
|
+
label: ( localize(5366, "Hooks")),
|
|
188
225
|
icon: hookIcon
|
|
189
226
|
},
|
|
190
227
|
[AICustomizationManagementSection.McpServers]: {
|
|
191
|
-
label: ( localize(
|
|
228
|
+
label: ( localize(5367, "MCP Servers")),
|
|
192
229
|
icon: Codicon.server
|
|
193
230
|
},
|
|
194
231
|
[AICustomizationManagementSection.Plugins]: {
|
|
195
|
-
label: ( localize(
|
|
232
|
+
label: ( localize(5368, "Plugins")),
|
|
196
233
|
icon: pluginIcon
|
|
197
234
|
},
|
|
198
235
|
[AICustomizationManagementSection.Models]: {
|
|
199
|
-
label: ( localize(
|
|
236
|
+
label: ( localize(5369, "Models")),
|
|
200
237
|
icon: Codicon.vm
|
|
201
238
|
}
|
|
202
239
|
};
|
|
203
240
|
for (const id of this.workspaceService.managementSections) {
|
|
204
241
|
const info = sectionInfo[id];
|
|
205
242
|
if (info) {
|
|
206
|
-
this.
|
|
243
|
+
this.allSections.push({
|
|
207
244
|
id,
|
|
208
|
-
...info
|
|
245
|
+
...info,
|
|
246
|
+
count: 0
|
|
209
247
|
});
|
|
210
248
|
}
|
|
211
249
|
}
|
|
250
|
+
this.rebuildVisibleSections();
|
|
212
251
|
const savedSection = this.storageService.get(AI_CUSTOMIZATION_MANAGEMENT_SELECTED_SECTION_KEY, StorageScope.PROFILE);
|
|
213
252
|
if (savedSection && ( this.sections.some(s => s.id === savedSection))) {
|
|
214
253
|
this.selectedSection = savedSection;
|
|
@@ -298,8 +337,36 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
298
337
|
this.splitView.resizeView(1, totalWidth - SIDEBAR_DEFAULT_WIDTH);
|
|
299
338
|
}));
|
|
300
339
|
}
|
|
340
|
+
get isHarnessSelectorEnabled() {
|
|
341
|
+
return this.configurationService.getValue(ChatConfiguration.ChatCustomizationHarnessSelectorEnabled) !== false;
|
|
342
|
+
}
|
|
343
|
+
rebuildVisibleSections() {
|
|
344
|
+
let hidden;
|
|
345
|
+
if (this.isHarnessSelectorEnabled) {
|
|
346
|
+
const activeId = this.harnessService.activeHarness.get();
|
|
347
|
+
const descriptor = this.harnessService.availableHarnesses.get().find(h => h.id === activeId);
|
|
348
|
+
hidden = ( new Set(descriptor?.hiddenSections ?? []));
|
|
349
|
+
} else {
|
|
350
|
+
hidden = ( new Set());
|
|
351
|
+
}
|
|
352
|
+
this.sections.length = 0;
|
|
353
|
+
for (const s of this.allSections) {
|
|
354
|
+
if (!( hidden.has(s.id))) {
|
|
355
|
+
this.sections.push(s);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (this.sectionsList) {
|
|
359
|
+
this.sectionsList.splice(0, this.sectionsList.length, this.sections);
|
|
360
|
+
}
|
|
361
|
+
if (!( this.sections.some(s => s.id === this.selectedSection)) && this.sections.length > 0) {
|
|
362
|
+
this.selectSection(this.sections[0].id);
|
|
363
|
+
} else {
|
|
364
|
+
this.ensureSectionsListReflectsActiveSection();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
301
367
|
createSidebar() {
|
|
302
368
|
const sidebarContent = append(this.sidebarContainer, $(".sidebar-content"));
|
|
369
|
+
this.createHarnessDropdown(sidebarContent);
|
|
303
370
|
const sectionsListContainer = append(sidebarContent, $(".sidebar-sections-list"));
|
|
304
371
|
this.sectionsList = this.editorDisposables.add(this.instantiationService.createInstance(
|
|
305
372
|
WorkbenchList,
|
|
@@ -313,7 +380,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
313
380
|
horizontalScrolling: false,
|
|
314
381
|
accessibilityProvider: {
|
|
315
382
|
getAriaLabel: item => item.label,
|
|
316
|
-
getWidgetAriaLabel: () => ( localize(
|
|
383
|
+
getWidgetAriaLabel: () => ( localize(5370, "Chat Customization Sections"))
|
|
317
384
|
},
|
|
318
385
|
openOnSingleClick: true,
|
|
319
386
|
identityProvider: {
|
|
@@ -322,28 +389,100 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
322
389
|
}
|
|
323
390
|
));
|
|
324
391
|
this.sectionsList.splice(0, this.sectionsList.length, this.sections);
|
|
325
|
-
|
|
326
|
-
if (selectedIndex >= 0) {
|
|
327
|
-
this.sectionsList.setSelection([selectedIndex]);
|
|
328
|
-
}
|
|
392
|
+
this.ensureSectionsListReflectsActiveSection();
|
|
329
393
|
this.editorDisposables.add(this.sectionsList.onDidChangeSelection(e => {
|
|
330
|
-
if (e.elements.length
|
|
331
|
-
this.
|
|
394
|
+
if (e.elements.length === 0) {
|
|
395
|
+
this.ensureSectionsListReflectsActiveSection();
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
this.selectSection(e.elements[0].id);
|
|
399
|
+
}));
|
|
400
|
+
this.editorDisposables.add(autorun(reader => {
|
|
401
|
+
const available = this.harnessService.availableHarnesses.read(reader);
|
|
402
|
+
const activeId = this.harnessService.activeHarness.read(reader);
|
|
403
|
+
if (!( available.some(h => h.id === activeId)) && available.length > 0) {
|
|
404
|
+
this.harnessService.setActiveHarness(available[0].id);
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
this.rebuildVisibleSections();
|
|
408
|
+
this.updateHarnessDropdown();
|
|
409
|
+
this.refreshAllPromptsSectionCounts();
|
|
410
|
+
}));
|
|
411
|
+
if (!this.isHarnessSelectorEnabled) {
|
|
412
|
+
this.harnessService.setActiveHarness(CustomizationHarness.VSCode);
|
|
413
|
+
}
|
|
414
|
+
this.editorDisposables.add(this.configurationService.onDidChangeConfiguration(e => {
|
|
415
|
+
if (e.affectsConfiguration(ChatConfiguration.ChatCustomizationHarnessSelectorEnabled)) {
|
|
416
|
+
if (!this.isHarnessSelectorEnabled) {
|
|
417
|
+
this.harnessService.setActiveHarness(CustomizationHarness.VSCode);
|
|
418
|
+
}
|
|
332
419
|
}
|
|
333
420
|
}));
|
|
334
421
|
if (this.workspaceService.isSessionsWindow) {
|
|
335
422
|
this.createFolderPicker(sidebarContent);
|
|
336
423
|
}
|
|
337
424
|
}
|
|
425
|
+
createHarnessDropdown(sidebarContent) {
|
|
426
|
+
if (!this.isHarnessSelectorEnabled) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
const container = this.harnessDropdownContainer = append(sidebarContent, $(".sidebar-harness-dropdown"));
|
|
430
|
+
this.harnessDropdownButton = append(container, $("button.harness-dropdown-button"));
|
|
431
|
+
this.harnessDropdownButton.setAttribute("aria-label", ( localize(5371, "Select customization target")));
|
|
432
|
+
this.harnessDropdownButton.setAttribute("aria-haspopup", "listbox");
|
|
433
|
+
this.harnessDropdownIcon = append(this.harnessDropdownButton, $("span.harness-dropdown-icon"));
|
|
434
|
+
this.harnessDropdownLabel = append(this.harnessDropdownButton, $("span.harness-dropdown-label"));
|
|
435
|
+
append(
|
|
436
|
+
this.harnessDropdownButton,
|
|
437
|
+
$("span.harness-dropdown-chevron.codicon.codicon-chevron-down")
|
|
438
|
+
);
|
|
439
|
+
this.updateHarnessDropdown();
|
|
440
|
+
this.editorDisposables.add(addDisposableListener(this.harnessDropdownButton, "click", () => {
|
|
441
|
+
this.showHarnessMenu();
|
|
442
|
+
}));
|
|
443
|
+
}
|
|
444
|
+
updateHarnessDropdown() {
|
|
445
|
+
if (!this.harnessDropdownContainer || !this.harnessDropdownIcon || !this.harnessDropdownLabel) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
const harnesses = this.harnessService.availableHarnesses.get();
|
|
449
|
+
this.harnessDropdownContainer.style.display = harnesses.length <= 1 ? "none" : "";
|
|
450
|
+
const activeId = this.harnessService.activeHarness.get();
|
|
451
|
+
const descriptor = harnesses.find(h => h.id === activeId);
|
|
452
|
+
if (descriptor) {
|
|
453
|
+
this.harnessDropdownIcon.className = "harness-dropdown-icon";
|
|
454
|
+
this.harnessDropdownIcon.classList.add(...ThemeIcon.asClassNameArray(descriptor.icon));
|
|
455
|
+
this.harnessDropdownLabel.textContent = descriptor.label;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
showHarnessMenu() {
|
|
459
|
+
if (!this.harnessDropdownButton) {
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
const harnesses = this.harnessService.availableHarnesses.get();
|
|
463
|
+
const activeId = this.harnessService.activeHarness.get();
|
|
464
|
+
const actions = ( harnesses.map(h => {
|
|
465
|
+
const action = ( new Action(h.id, h.label, ThemeIcon.asClassName(h.icon), true, () => {
|
|
466
|
+
this.harnessService.setActiveHarness(h.id);
|
|
467
|
+
}));
|
|
468
|
+
action.checked = h.id === activeId;
|
|
469
|
+
return action;
|
|
470
|
+
}));
|
|
471
|
+
this.contextMenuService.showContextMenu({
|
|
472
|
+
getAnchor: () => this.harnessDropdownButton,
|
|
473
|
+
getActions: () => actions,
|
|
474
|
+
getCheckedActionsRepresentation: () => "radio"
|
|
475
|
+
});
|
|
476
|
+
}
|
|
338
477
|
createFolderPicker(sidebarContent) {
|
|
339
478
|
const footer = this.folderPickerContainer = append(sidebarContent, $(".sidebar-folder-picker"));
|
|
340
479
|
const button = append(footer, $("button.folder-picker-button"));
|
|
341
|
-
button.setAttribute("aria-label", ( localize(
|
|
480
|
+
button.setAttribute("aria-label", ( localize(5372, "Browse folder")));
|
|
342
481
|
const folderIcon = append(button, $(`.codicon.codicon-${Codicon.folder.id}`));
|
|
343
482
|
folderIcon.classList.add("folder-picker-icon");
|
|
344
483
|
this.folderPickerLabel = append(button, $("span.folder-picker-label"));
|
|
345
484
|
this.folderPickerClearButton = append(footer, $("button.folder-picker-clear"));
|
|
346
|
-
this.folderPickerClearButton.setAttribute("aria-label", ( localize(
|
|
485
|
+
this.folderPickerClearButton.setAttribute("aria-label", ( localize(5373, "Reset to session folder")));
|
|
347
486
|
append(this.folderPickerClearButton, $(`.codicon.codicon-${Codicon.close.id}`));
|
|
348
487
|
this.editorDisposables.add(addDisposableListener(button, "click", () => {
|
|
349
488
|
this.browseForFolder();
|
|
@@ -365,7 +504,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
365
504
|
}
|
|
366
505
|
updateFolderPickerLabel(root, hasOverride) {
|
|
367
506
|
if (this.folderPickerLabel) {
|
|
368
|
-
this.folderPickerLabel.textContent = root ? basename(root) : ( localize(
|
|
507
|
+
this.folderPickerLabel.textContent = root ? basename(root) : ( localize(5374, "No folder"));
|
|
369
508
|
}
|
|
370
509
|
if (this.folderPickerClearButton) {
|
|
371
510
|
this.folderPickerClearButton.style.display = hasOverride ? "" : "none";
|
|
@@ -376,7 +515,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
376
515
|
canSelectFolders: true,
|
|
377
516
|
canSelectFiles: false,
|
|
378
517
|
canSelectMany: false,
|
|
379
|
-
title: ( localize(
|
|
518
|
+
title: ( localize(5375, "Select Folder to Explore")),
|
|
380
519
|
defaultUri: this.workspaceService.getActiveProjectRoot()
|
|
381
520
|
});
|
|
382
521
|
if (result?.[0]) {
|
|
@@ -389,9 +528,21 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
389
528
|
this.listWidget = this.editorDisposables.add(this.instantiationService.createInstance(AICustomizationListWidget));
|
|
390
529
|
this.promptsContentContainer.appendChild(this.listWidget.element);
|
|
391
530
|
this.editorDisposables.add(this.listWidget.onDidSelectItem(item => {
|
|
531
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.itemSelected", {
|
|
532
|
+
section: this.selectedSection,
|
|
533
|
+
promptType: item.promptType,
|
|
534
|
+
storage: item.storage
|
|
535
|
+
});
|
|
392
536
|
const isWorkspaceFile = item.storage === PromptsStorage.local;
|
|
393
|
-
const isReadOnly = item.storage === PromptsStorage.extension || item.storage === PromptsStorage.plugin;
|
|
394
|
-
this.showEmbeddedEditor(
|
|
537
|
+
const isReadOnly = item.storage === PromptsStorage.extension || item.storage === PromptsStorage.plugin || item.storage === BUILTIN_STORAGE;
|
|
538
|
+
this.showEmbeddedEditor(
|
|
539
|
+
item.uri,
|
|
540
|
+
item.name,
|
|
541
|
+
item.promptType,
|
|
542
|
+
item.storage,
|
|
543
|
+
isWorkspaceFile,
|
|
544
|
+
isReadOnly
|
|
545
|
+
);
|
|
395
546
|
}));
|
|
396
547
|
this.editorDisposables.add(this.listWidget.onDidRequestCreate(promptType => {
|
|
397
548
|
this.createNewItemWithAI(promptType);
|
|
@@ -399,10 +550,11 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
399
550
|
this.editorDisposables.add(this.listWidget.onDidRequestCreateManual((
|
|
400
551
|
{
|
|
401
552
|
type,
|
|
402
|
-
target
|
|
553
|
+
target,
|
|
554
|
+
rootFileName
|
|
403
555
|
}
|
|
404
556
|
) => {
|
|
405
|
-
this.createNewItemManual(type, target);
|
|
557
|
+
this.createNewItemManual(type, target, rootFileName);
|
|
406
558
|
}));
|
|
407
559
|
const hasSections = ( new Set(this.workspaceService.managementSections));
|
|
408
560
|
if (( hasSections.has(AICustomizationManagementSection.Models))) {
|
|
@@ -412,11 +564,11 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
412
564
|
this.modelsFooterElement = append(this.modelsContentContainer, $(".section-footer"));
|
|
413
565
|
const modelsDescription = append(this.modelsFooterElement, $("p.section-footer-description"));
|
|
414
566
|
modelsDescription.textContent = ( localize(
|
|
415
|
-
|
|
567
|
+
5376,
|
|
416
568
|
"Browse and manage language models from different providers. Select models for use in chat, code completion, and other AI features."
|
|
417
569
|
));
|
|
418
570
|
const modelsLink = append(this.modelsFooterElement, $("a.section-footer-link"));
|
|
419
|
-
modelsLink.textContent = ( localize(
|
|
571
|
+
modelsLink.textContent = ( localize(5377, "Learn more about language models"));
|
|
420
572
|
modelsLink.href = "https://code.visualstudio.com/docs/copilot/customization/language-models";
|
|
421
573
|
this.editorDisposables.add(addDisposableListener(modelsLink, "click", e => {
|
|
422
574
|
e.preventDefault();
|
|
@@ -432,6 +584,9 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
432
584
|
this.editorDisposables.add(this.mcpListWidget.onDidSelectServer(server => {
|
|
433
585
|
this.showEmbeddedMcpDetail(server);
|
|
434
586
|
}));
|
|
587
|
+
this.editorDisposables.add(this.mcpListWidget.onDidRequestShowPlugin(item => {
|
|
588
|
+
this.showPluginDetail(item);
|
|
589
|
+
}));
|
|
435
590
|
}
|
|
436
591
|
if (( hasSections.has(AICustomizationManagementSection.Plugins))) {
|
|
437
592
|
this.pluginContentContainer = append(contentInner, $(".plugin-content-container"));
|
|
@@ -440,12 +595,49 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
440
595
|
this.pluginDetailContainer = append(contentInner, $(".plugin-detail-container"));
|
|
441
596
|
this.createEmbeddedPluginDetail();
|
|
442
597
|
this.editorDisposables.add(this.pluginListWidget.onDidSelectPlugin(item => {
|
|
598
|
+
this.pluginDetailReturnSection = undefined;
|
|
443
599
|
this.showEmbeddedPluginDetail(item);
|
|
444
600
|
}));
|
|
445
601
|
}
|
|
446
602
|
this.editorContentContainer = append(contentInner, $(".editor-content-container"));
|
|
447
603
|
this.createEmbeddedEditor();
|
|
448
604
|
this.updateContentVisibility();
|
|
605
|
+
this.editorDisposables.add(this.listWidget.onDidChangeItemCount(count => {
|
|
606
|
+
if (this.isPromptsSection(this.selectedSection)) {
|
|
607
|
+
this.updateSectionCount(this.selectedSection, count);
|
|
608
|
+
}
|
|
609
|
+
}));
|
|
610
|
+
if (this.mcpListWidget) {
|
|
611
|
+
this.editorDisposables.add(this.mcpListWidget.onDidChangeItemCount(count => {
|
|
612
|
+
this.updateSectionCount(AICustomizationManagementSection.McpServers, count);
|
|
613
|
+
}));
|
|
614
|
+
this.mcpListWidget.fireItemCount();
|
|
615
|
+
}
|
|
616
|
+
if (this.pluginListWidget) {
|
|
617
|
+
this.editorDisposables.add(this.pluginListWidget.onDidChangeItemCount(count => {
|
|
618
|
+
this.updateSectionCount(AICustomizationManagementSection.Plugins, count);
|
|
619
|
+
}));
|
|
620
|
+
this.pluginListWidget.fireItemCount();
|
|
621
|
+
}
|
|
622
|
+
if (this.modelsWidget) {
|
|
623
|
+
this.editorDisposables.add(this.modelsWidget.onDidChangeItemCount(count => {
|
|
624
|
+
this.updateSectionCount(AICustomizationManagementSection.Models, count);
|
|
625
|
+
}));
|
|
626
|
+
this.modelsWidget.fireItemCount();
|
|
627
|
+
}
|
|
628
|
+
this.editorDisposables.add(
|
|
629
|
+
this.promptsService.onDidChangeCustomAgents(() => this.refreshAllPromptsSectionCounts())
|
|
630
|
+
);
|
|
631
|
+
this.editorDisposables.add(
|
|
632
|
+
this.promptsService.onDidChangeSkills(() => this.refreshAllPromptsSectionCounts())
|
|
633
|
+
);
|
|
634
|
+
this.editorDisposables.add(
|
|
635
|
+
this.promptsService.onDidChangeInstructions(() => this.refreshAllPromptsSectionCounts())
|
|
636
|
+
);
|
|
637
|
+
this.editorDisposables.add(
|
|
638
|
+
this.promptsService.onDidChangeSlashCommands(() => this.refreshAllPromptsSectionCounts())
|
|
639
|
+
);
|
|
640
|
+
this.refreshAllPromptsSectionCounts();
|
|
449
641
|
if (this.isPromptsSection(this.selectedSection)) {
|
|
450
642
|
void this.listWidget.setSection(this.selectedSection);
|
|
451
643
|
}
|
|
@@ -453,10 +645,35 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
453
645
|
isPromptsSection(section) {
|
|
454
646
|
return section === AICustomizationManagementSection.Agents || section === AICustomizationManagementSection.Skills || section === AICustomizationManagementSection.Instructions || section === AICustomizationManagementSection.Prompts || section === AICustomizationManagementSection.Hooks;
|
|
455
647
|
}
|
|
648
|
+
updateSectionCount(sectionId, count) {
|
|
649
|
+
const section = this.sections.find(s => s.id === sectionId);
|
|
650
|
+
if (!section || section.count === count) {
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
653
|
+
section.count = count;
|
|
654
|
+
this.sectionsList.splice(0, this.sectionsList.length, this.sections);
|
|
655
|
+
this.ensureSectionsListReflectsActiveSection();
|
|
656
|
+
}
|
|
657
|
+
refreshAllPromptsSectionCounts() {
|
|
658
|
+
this.promptsSectionCountScheduler.schedule();
|
|
659
|
+
}
|
|
660
|
+
_doRefreshAllPromptsSectionCounts() {
|
|
661
|
+
for (const section of this.sections) {
|
|
662
|
+
if (this.isPromptsSection(section.id)) {
|
|
663
|
+
this.listWidget.computeItemCountForSection(section.id).then(count => {
|
|
664
|
+
this.updateSectionCount(section.id, count);
|
|
665
|
+
}, onUnexpectedError);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
}
|
|
456
669
|
selectSection(section) {
|
|
457
670
|
if (this.selectedSection === section) {
|
|
671
|
+
this.ensureSectionsListReflectsActiveSection(section);
|
|
458
672
|
return;
|
|
459
673
|
}
|
|
674
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.sectionChanged", {
|
|
675
|
+
section
|
|
676
|
+
});
|
|
460
677
|
if (this.viewMode === "editor") {
|
|
461
678
|
this.goBackToList();
|
|
462
679
|
}
|
|
@@ -478,6 +695,24 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
478
695
|
if (this.isPromptsSection(section)) {
|
|
479
696
|
void this.listWidget.setSection(section);
|
|
480
697
|
}
|
|
698
|
+
this.ensureSectionsListReflectsActiveSection(section);
|
|
699
|
+
}
|
|
700
|
+
ensureSectionsListReflectsActiveSection(section = this.selectedSection) {
|
|
701
|
+
if (!this.sectionsList) {
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
704
|
+
const index = this.sections.findIndex(s => s.id === section);
|
|
705
|
+
if (index < 0) {
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
const selection = this.sectionsList.getSelection();
|
|
709
|
+
if (selection.length !== 1 || selection[0] !== index) {
|
|
710
|
+
this.sectionsList.setSelection([index]);
|
|
711
|
+
}
|
|
712
|
+
const focus = this.sectionsList.getFocus();
|
|
713
|
+
if (focus.length !== 1 || focus[0] !== index) {
|
|
714
|
+
this.sectionsList.setFocus([index]);
|
|
715
|
+
}
|
|
481
716
|
}
|
|
482
717
|
updateContentVisibility() {
|
|
483
718
|
const isEditorMode = this.viewMode === "editor";
|
|
@@ -488,7 +723,9 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
488
723
|
const isModelsSection = this.selectedSection === AICustomizationManagementSection.Models;
|
|
489
724
|
const isMcpSection = this.selectedSection === AICustomizationManagementSection.McpServers;
|
|
490
725
|
const isPluginsSection = this.selectedSection === AICustomizationManagementSection.Plugins;
|
|
491
|
-
this.promptsContentContainer
|
|
726
|
+
if (this.promptsContentContainer) {
|
|
727
|
+
this.promptsContentContainer.style.display = !isEditorMode && !isDetailMode && isPromptsSection ? "" : "none";
|
|
728
|
+
}
|
|
492
729
|
if (this.modelsContentContainer) {
|
|
493
730
|
this.modelsContentContainer.style.display = !isEditorMode && !isDetailMode && isModelsSection ? "" : "none";
|
|
494
731
|
}
|
|
@@ -515,17 +752,46 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
515
752
|
}
|
|
516
753
|
}
|
|
517
754
|
async createNewItemWithAI(type) {
|
|
755
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.createItem", {
|
|
756
|
+
section: this.selectedSection,
|
|
757
|
+
promptType: type,
|
|
758
|
+
creationMode: "ai",
|
|
759
|
+
target: "workspace"
|
|
760
|
+
});
|
|
518
761
|
if (this.input) {
|
|
519
762
|
this.group.closeEditor(this.input);
|
|
520
763
|
}
|
|
521
764
|
await this.workspaceService.generateCustomization(type);
|
|
522
765
|
}
|
|
523
|
-
async createNewItemManual(type, target) {
|
|
766
|
+
async createNewItemManual(type, target, rootFileName) {
|
|
767
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.createItem", {
|
|
768
|
+
section: this.selectedSection,
|
|
769
|
+
promptType: type,
|
|
770
|
+
creationMode: "manual",
|
|
771
|
+
target: target === "workspace-root" ? "workspace" : target
|
|
772
|
+
});
|
|
773
|
+
if (target === "workspace-root") {
|
|
774
|
+
const projectRoot = this.workspaceService.getActiveProjectRoot();
|
|
775
|
+
if (!projectRoot) {
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
778
|
+
const override = this.harnessService.getActiveDescriptor().sectionOverrides?.get(this.selectedSection);
|
|
779
|
+
const fileName = rootFileName ?? override?.rootFile ?? AGENT_MD_FILENAME;
|
|
780
|
+
const fileUri = URI.joinPath(projectRoot, fileName);
|
|
781
|
+
if (await this.fileService.exists(fileUri)) {
|
|
782
|
+
await this.showEmbeddedEditor(fileUri, fileName, PromptsType.instructions, PromptsStorage.local, true);
|
|
783
|
+
} else {
|
|
784
|
+
await this.fileService.createFile(fileUri);
|
|
785
|
+
await this.showEmbeddedEditor(fileUri, fileName, PromptsType.instructions, PromptsStorage.local, true);
|
|
786
|
+
}
|
|
787
|
+
void this.listWidget.refresh();
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
524
790
|
if (type === PromptsType.hook) {
|
|
525
791
|
if (this.workspaceService.isSessionsWindow) {
|
|
526
792
|
await this.instantiationService.invokeFunction(showConfigureHooksQuickPick, {
|
|
527
793
|
openEditor: async resource => {
|
|
528
|
-
await this.showEmbeddedEditor(resource, basename(resource), true);
|
|
794
|
+
await this.showEmbeddedEditor(resource, basename(resource), PromptsType.hook, PromptsStorage.local, true);
|
|
529
795
|
return;
|
|
530
796
|
},
|
|
531
797
|
target: Target.GitHubCopilot
|
|
@@ -533,20 +799,31 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
533
799
|
} else {
|
|
534
800
|
await this.instantiationService.invokeFunction(showConfigureHooksQuickPick, {
|
|
535
801
|
openEditor: async resource => {
|
|
536
|
-
await this.showEmbeddedEditor(resource, basename(resource), true);
|
|
802
|
+
await this.showEmbeddedEditor(resource, basename(resource), PromptsType.hook, PromptsStorage.local, true);
|
|
537
803
|
return;
|
|
538
804
|
}
|
|
539
805
|
});
|
|
540
806
|
}
|
|
541
807
|
return;
|
|
542
808
|
}
|
|
543
|
-
const targetDir =
|
|
809
|
+
const targetDir = await this.resolveTargetDirectoryWithPicker(type, target);
|
|
810
|
+
if (targetDir === null) {
|
|
811
|
+
return;
|
|
812
|
+
}
|
|
813
|
+
const override = this.harnessService.getActiveDescriptor().sectionOverrides?.get(this.selectedSection);
|
|
544
814
|
const options = {
|
|
545
815
|
targetFolder: targetDir,
|
|
546
816
|
targetStorage: target === "user" ? PromptsStorage.user : PromptsStorage.local,
|
|
817
|
+
fileExtension: override?.fileExtension,
|
|
547
818
|
openFile: async uri => {
|
|
548
819
|
const isWorkspace = target === "workspace";
|
|
549
|
-
await this.showEmbeddedEditor(
|
|
820
|
+
await this.showEmbeddedEditor(
|
|
821
|
+
uri,
|
|
822
|
+
basename(uri),
|
|
823
|
+
type,
|
|
824
|
+
target === "user" ? PromptsStorage.user : PromptsStorage.local,
|
|
825
|
+
isWorkspace
|
|
826
|
+
);
|
|
550
827
|
return this.embeddedEditor;
|
|
551
828
|
}
|
|
552
829
|
};
|
|
@@ -570,6 +847,55 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
570
847
|
await this.commandService.executeCommand(commandId, options);
|
|
571
848
|
void this.listWidget.refresh();
|
|
572
849
|
}
|
|
850
|
+
async resolveTargetDirectoryWithPicker(type, target) {
|
|
851
|
+
const allFolders = await this.promptsService.getSourceFolders(type);
|
|
852
|
+
const projectRoot = this.workspaceService.getActiveProjectRoot();
|
|
853
|
+
const descriptor = this.harnessService.getActiveDescriptor();
|
|
854
|
+
const subpaths = descriptor.workspaceSubpaths;
|
|
855
|
+
let matchingFolders;
|
|
856
|
+
if (target === "workspace") {
|
|
857
|
+
matchingFolders = projectRoot ? allFolders.filter(f => {
|
|
858
|
+
if (!isEqualOrParent(f.uri, projectRoot)) {
|
|
859
|
+
return false;
|
|
860
|
+
}
|
|
861
|
+
if (subpaths) {
|
|
862
|
+
return matchesWorkspaceSubpath(f.uri.path, subpaths);
|
|
863
|
+
}
|
|
864
|
+
return true;
|
|
865
|
+
}) : [];
|
|
866
|
+
} else {
|
|
867
|
+
matchingFolders = projectRoot ? allFolders.filter(f => !isEqualOrParent(f.uri, projectRoot)) : allFolders;
|
|
868
|
+
const filter = this.harnessService.getStorageSourceFilter(type);
|
|
869
|
+
if (filter.includedUserFileRoots) {
|
|
870
|
+
const roots = filter.includedUserFileRoots;
|
|
871
|
+
matchingFolders = matchingFolders.filter(f => ( roots.some(root => isEqualOrParent(f.uri, root))));
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
const seen = ( new Set());
|
|
875
|
+
matchingFolders = matchingFolders.filter(f => {
|
|
876
|
+
const key = ( f.uri.toString());
|
|
877
|
+
if (( seen.has(key))) {
|
|
878
|
+
return false;
|
|
879
|
+
}
|
|
880
|
+
seen.add(key);
|
|
881
|
+
return true;
|
|
882
|
+
});
|
|
883
|
+
if (matchingFolders.length === 0) {
|
|
884
|
+
return undefined;
|
|
885
|
+
}
|
|
886
|
+
if (matchingFolders.length === 1) {
|
|
887
|
+
return matchingFolders[0].uri;
|
|
888
|
+
}
|
|
889
|
+
const items = ( matchingFolders.map(folder => ({
|
|
890
|
+
label: this.promptsService.getPromptLocationLabel(folder),
|
|
891
|
+
description: folder.uri.fsPath,
|
|
892
|
+
uri: folder.uri
|
|
893
|
+
})));
|
|
894
|
+
const picked = await this.quickInputService.pick(items, {
|
|
895
|
+
placeHolder: ( localize(5378, "Select a directory for the new customization file"))
|
|
896
|
+
});
|
|
897
|
+
return picked?.uri ?? null;
|
|
898
|
+
}
|
|
573
899
|
updateStyles() {
|
|
574
900
|
const borderColor = this.theme.getColor(aiCustomizationManagementSashBorder);
|
|
575
901
|
if (borderColor) {
|
|
@@ -582,6 +908,9 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
582
908
|
this.workspaceService.clearOverrideProjectRoot();
|
|
583
909
|
this.inEditorContextKey.set(true);
|
|
584
910
|
this.sectionContextKey.set(this.selectedSection);
|
|
911
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.opened", {
|
|
912
|
+
section: this.selectedSection
|
|
913
|
+
});
|
|
585
914
|
await super.setInput(input, options, context, token);
|
|
586
915
|
if (this.dimension) {
|
|
587
916
|
this.layout(this.dimension);
|
|
@@ -599,6 +928,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
599
928
|
this.goBackFromPluginDetail();
|
|
600
929
|
}
|
|
601
930
|
this.workspaceService.clearOverrideProjectRoot();
|
|
931
|
+
this.disposeBuiltinEditingSessions();
|
|
602
932
|
super.clearInput();
|
|
603
933
|
}
|
|
604
934
|
layout(dimension) {
|
|
@@ -648,8 +978,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
648
978
|
if (this.isPromptsSection(sectionId)) {
|
|
649
979
|
void this.listWidget.setSection(sectionId);
|
|
650
980
|
}
|
|
651
|
-
this.
|
|
652
|
-
this.sectionsList.setSelection([index]);
|
|
981
|
+
this.ensureSectionsListReflectsActiveSection(sectionId);
|
|
653
982
|
}
|
|
654
983
|
}
|
|
655
984
|
refreshList() {
|
|
@@ -663,12 +992,18 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
663
992
|
return;
|
|
664
993
|
}
|
|
665
994
|
const editorHeader = append(this.editorContentContainer, $(".editor-header"));
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
995
|
+
this.editorActionButton = append(editorHeader, $("button.editor-back-button"));
|
|
996
|
+
this.editorActionButton.setAttribute("aria-label", ( localize(5379, "Back to list")));
|
|
997
|
+
this.editorActionButtonIcon = append(
|
|
998
|
+
this.editorActionButton,
|
|
999
|
+
$(`.codicon.codicon-${Codicon.arrowLeft.id}.editor-action-button-icon`)
|
|
1000
|
+
);
|
|
1001
|
+
this.editorActionButtonIcon.setAttribute("aria-hidden", "true");
|
|
1002
|
+
this.editorDisposables.add(addDisposableListener(this.editorActionButton, "click", () => {
|
|
1003
|
+
void this.handleEditorActionButton().catch(error => {
|
|
1004
|
+
console.error("Failed to handle editor back action:", error);
|
|
1005
|
+
this.notificationService.error(( localize(5380, "Failed to finish the prompt action.")));
|
|
1006
|
+
});
|
|
672
1007
|
}));
|
|
673
1008
|
const itemInfo = append(editorHeader, $(".editor-item-info"));
|
|
674
1009
|
this.editorItemNameElement = append(itemInfo, $(".editor-item-name"));
|
|
@@ -703,16 +1038,50 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
703
1038
|
})
|
|
704
1039
|
);
|
|
705
1040
|
}
|
|
706
|
-
async showEmbeddedEditor(
|
|
1041
|
+
async showEmbeddedEditor(
|
|
1042
|
+
uri,
|
|
1043
|
+
displayName,
|
|
1044
|
+
promptType,
|
|
1045
|
+
storage,
|
|
1046
|
+
isWorkspaceFile = false,
|
|
1047
|
+
isReadOnly = false
|
|
1048
|
+
) {
|
|
707
1049
|
this.currentModelRef?.dispose();
|
|
708
1050
|
this.currentModelRef = undefined;
|
|
1051
|
+
this.editorModelChangeDisposables.clear();
|
|
709
1052
|
this.currentEditingUri = uri;
|
|
710
1053
|
this.currentEditingProjectRoot = isWorkspaceFile ? this.workspaceService.getActiveProjectRoot() : undefined;
|
|
1054
|
+
this.currentEditingStorage = storage;
|
|
1055
|
+
this.currentEditingPromptType = promptType;
|
|
711
1056
|
this.viewMode = "editor";
|
|
712
1057
|
this.editorItemNameElement.textContent = displayName;
|
|
713
1058
|
this.editorItemPathElement.textContent = basename(uri);
|
|
1059
|
+
this._editorContentChanged = false;
|
|
1060
|
+
this.resetEditorSaveIndicator();
|
|
1061
|
+
this.updateEditorActionButton();
|
|
714
1062
|
this.updateContentVisibility();
|
|
715
1063
|
try {
|
|
1064
|
+
if (storage === BUILTIN_STORAGE && (promptType === PromptsType.prompt || promptType === PromptsType.skill)) {
|
|
1065
|
+
const session = await this.getOrCreateBuiltinEditingSession(uri);
|
|
1066
|
+
if (!isEqual(this.currentEditingUri, uri)) {
|
|
1067
|
+
return;
|
|
1068
|
+
}
|
|
1069
|
+
this.embeddedEditor.setModel(session.model);
|
|
1070
|
+
this.embeddedEditor.updateOptions({
|
|
1071
|
+
readOnly: false
|
|
1072
|
+
});
|
|
1073
|
+
this._editorContentChanged = session.model.getValue() !== session.originalContent;
|
|
1074
|
+
this.updateEditorActionButton();
|
|
1075
|
+
if (this.dimension) {
|
|
1076
|
+
this.layout(this.dimension);
|
|
1077
|
+
}
|
|
1078
|
+
this.embeddedEditor.focus();
|
|
1079
|
+
this.editorModelChangeDisposables.add(session.model.onDidChangeContent(() => {
|
|
1080
|
+
this._editorContentChanged = session.model.getValue() !== session.originalContent;
|
|
1081
|
+
this.updateEditorActionButton();
|
|
1082
|
+
}));
|
|
1083
|
+
return;
|
|
1084
|
+
}
|
|
716
1085
|
const ref = await this.textModelService.createModelReference(uri);
|
|
717
1086
|
if (!isEqual(this.currentEditingUri, uri)) {
|
|
718
1087
|
ref.dispose();
|
|
@@ -727,30 +1096,17 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
727
1096
|
this.layout(this.dimension);
|
|
728
1097
|
}
|
|
729
1098
|
this.embeddedEditor.focus();
|
|
730
|
-
this.
|
|
731
|
-
this._editorContentChanged = false;
|
|
732
|
-
const saveDelayer = this.editorModelChangeDisposables.add(( new Delayer(500)));
|
|
1099
|
+
this._editorContentChanged = this.workingCopyService.isDirty(uri);
|
|
733
1100
|
this.editorModelChangeDisposables.add(ref.object.textEditorModel.onDidChangeContent(() => {
|
|
734
1101
|
this._editorContentChanged = true;
|
|
735
|
-
this.
|
|
736
|
-
this.editorSaveIndicator.classList.add(...ThemeIcon.asClassNameArray(Codicon.loading), "codicon-modifier-spin");
|
|
737
|
-
this.editorSaveIndicator.title = ( localize(5311, "Saving..."));
|
|
738
|
-
saveDelayer.trigger(async () => {
|
|
739
|
-
try {
|
|
740
|
-
await this.textFileService.save(uri);
|
|
741
|
-
} catch (error) {
|
|
742
|
-
console.error("Failed to save AI customization file:", error);
|
|
743
|
-
this.editorSaveIndicator.className = "editor-save-indicator visible error";
|
|
744
|
-
this.editorSaveIndicator.classList.add(...ThemeIcon.asClassNameArray(Codicon.error));
|
|
745
|
-
this.editorSaveIndicator.title = ( localize(5312, "Save Failed"));
|
|
746
|
-
}
|
|
747
|
-
});
|
|
1102
|
+
this.resetEditorSaveIndicator();
|
|
748
1103
|
}));
|
|
749
1104
|
this.editorModelChangeDisposables.add(this.workingCopyService.onDidSave(e => {
|
|
750
1105
|
if (isEqual(e.workingCopy.resource, uri)) {
|
|
1106
|
+
this._editorContentChanged = this.workingCopyService.isDirty(uri);
|
|
751
1107
|
this.editorSaveIndicator.className = "editor-save-indicator visible saved";
|
|
752
1108
|
this.editorSaveIndicator.classList.add(...ThemeIcon.asClassNameArray(Codicon.check));
|
|
753
|
-
this.editorSaveIndicator.title = ( localize(
|
|
1109
|
+
this.editorSaveIndicator.title = ( localize(5381, "Saved"));
|
|
754
1110
|
}
|
|
755
1111
|
}));
|
|
756
1112
|
} catch (error) {
|
|
@@ -762,17 +1118,27 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
762
1118
|
}
|
|
763
1119
|
goBackToList() {
|
|
764
1120
|
const fileUri = this.currentEditingUri;
|
|
765
|
-
const
|
|
766
|
-
if (
|
|
767
|
-
this.
|
|
1121
|
+
const backgroundSaveRequest = this.createExistingCustomizationSaveRequest();
|
|
1122
|
+
if (backgroundSaveRequest) {
|
|
1123
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.saveItem", {
|
|
1124
|
+
promptType: this.currentEditingPromptType ?? "",
|
|
1125
|
+
storage: String(this.currentEditingStorage ?? ""),
|
|
1126
|
+
saveTarget: "existing"
|
|
1127
|
+
});
|
|
1128
|
+
}
|
|
1129
|
+
if (fileUri && this.currentEditingStorage === BUILTIN_STORAGE) {
|
|
1130
|
+
this.disposeBuiltinEditingSession(fileUri);
|
|
768
1131
|
}
|
|
769
1132
|
this.currentModelRef?.dispose();
|
|
770
1133
|
this.currentModelRef = undefined;
|
|
771
1134
|
this.currentEditingUri = undefined;
|
|
772
1135
|
this.currentEditingProjectRoot = undefined;
|
|
1136
|
+
this.currentEditingStorage = undefined;
|
|
1137
|
+
this.currentEditingPromptType = undefined;
|
|
1138
|
+
this._editorContentChanged = false;
|
|
773
1139
|
this.editorModelChangeDisposables.clear();
|
|
774
|
-
this.
|
|
775
|
-
this.
|
|
1140
|
+
this.resetEditorSaveIndicator();
|
|
1141
|
+
this.updateEditorActionButton();
|
|
776
1142
|
this.embeddedEditor?.setModel(null);
|
|
777
1143
|
this.viewMode = "list";
|
|
778
1144
|
this.updateContentVisibility();
|
|
@@ -781,6 +1147,196 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
781
1147
|
this.layout(this.dimension);
|
|
782
1148
|
}
|
|
783
1149
|
this.listWidget?.focusSearch();
|
|
1150
|
+
if (backgroundSaveRequest) {
|
|
1151
|
+
const saveRequest = backgroundSaveRequest;
|
|
1152
|
+
void this.saveExistingCustomization(saveRequest).catch(error => {
|
|
1153
|
+
console.error("Failed to save customization changes on exit:", error);
|
|
1154
|
+
this.notificationService.warn(( localize(5382, "Could not save changes to {0}.", basename(saveRequest.fileUri))));
|
|
1155
|
+
});
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
async getOrCreateBuiltinEditingSession(uri) {
|
|
1159
|
+
const key = ( uri.toString());
|
|
1160
|
+
const existing = this.builtinEditingSessions.get(key);
|
|
1161
|
+
if (existing && !existing.model.isDisposed()) {
|
|
1162
|
+
return existing;
|
|
1163
|
+
}
|
|
1164
|
+
const ref = await this.textModelService.createModelReference(uri);
|
|
1165
|
+
try {
|
|
1166
|
+
const session = {
|
|
1167
|
+
model: this.modelService.createModel(
|
|
1168
|
+
createTextBufferFactoryFromSnapshot(ref.object.textEditorModel.createSnapshot()),
|
|
1169
|
+
{
|
|
1170
|
+
languageId: ref.object.textEditorModel.getLanguageId(),
|
|
1171
|
+
onDidChange: Event.None
|
|
1172
|
+
},
|
|
1173
|
+
( URI.from({
|
|
1174
|
+
scheme: "ai-customization-builtin",
|
|
1175
|
+
path: uri.path,
|
|
1176
|
+
query: generateUuid()
|
|
1177
|
+
})),
|
|
1178
|
+
false
|
|
1179
|
+
),
|
|
1180
|
+
originalContent: ref.object.textEditorModel.getValue()
|
|
1181
|
+
};
|
|
1182
|
+
this.builtinEditingSessions.set(key, session);
|
|
1183
|
+
return session;
|
|
1184
|
+
} finally {
|
|
1185
|
+
ref.dispose();
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
createBuiltinPromptSaveRequest(target) {
|
|
1189
|
+
const sourceUri = this.currentEditingUri;
|
|
1190
|
+
const promptType = this.currentEditingPromptType;
|
|
1191
|
+
if (!sourceUri || this.currentEditingStorage !== BUILTIN_STORAGE || (promptType !== PromptsType.prompt && promptType !== PromptsType.skill) || !target.folder || target.target === "cancel") {
|
|
1192
|
+
return;
|
|
1193
|
+
}
|
|
1194
|
+
const session = this.builtinEditingSessions.get(( sourceUri.toString()));
|
|
1195
|
+
if (!session || !this._editorContentChanged) {
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1198
|
+
return {
|
|
1199
|
+
target: target.target,
|
|
1200
|
+
folder: target.folder,
|
|
1201
|
+
sourceUri,
|
|
1202
|
+
content: session.model.getValue(),
|
|
1203
|
+
promptType,
|
|
1204
|
+
projectRoot: target.target === "workspace" ? this.workspaceService.getActiveProjectRoot() : undefined
|
|
1205
|
+
};
|
|
1206
|
+
}
|
|
1207
|
+
createExistingCustomizationSaveRequest() {
|
|
1208
|
+
if (!this._editorContentChanged || this.currentEditingStorage === BUILTIN_STORAGE || !this.currentEditingUri) {
|
|
1209
|
+
return undefined;
|
|
1210
|
+
}
|
|
1211
|
+
const model = this.currentModelRef?.object.textEditorModel;
|
|
1212
|
+
if (!model) {
|
|
1213
|
+
return undefined;
|
|
1214
|
+
}
|
|
1215
|
+
return {
|
|
1216
|
+
fileUri: this.currentEditingUri,
|
|
1217
|
+
content: model.getValue(),
|
|
1218
|
+
projectRoot: this.currentEditingProjectRoot
|
|
1219
|
+
};
|
|
1220
|
+
}
|
|
1221
|
+
async saveBuiltinPromptCopy(request) {
|
|
1222
|
+
let targetUri;
|
|
1223
|
+
if (request.promptType === PromptsType.skill) {
|
|
1224
|
+
const skillFolderName = basename(dirname(request.sourceUri));
|
|
1225
|
+
targetUri = URI.joinPath(request.folder, skillFolderName, basename(request.sourceUri));
|
|
1226
|
+
} else {
|
|
1227
|
+
targetUri = URI.joinPath(request.folder, basename(request.sourceUri));
|
|
1228
|
+
}
|
|
1229
|
+
await this.fileService.createFolder(dirname(targetUri));
|
|
1230
|
+
await this.fileService.writeFile(targetUri, VSBuffer.fromString(request.content));
|
|
1231
|
+
if (request.target === "workspace" && request.projectRoot) {
|
|
1232
|
+
await this.workspaceService.commitFiles(request.projectRoot, [targetUri]);
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
async saveExistingCustomization(request) {
|
|
1236
|
+
await this.fileService.writeFile(request.fileUri, VSBuffer.fromString(request.content));
|
|
1237
|
+
if (request.projectRoot) {
|
|
1238
|
+
await this.workspaceService.commitFiles(request.projectRoot, [request.fileUri]);
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
async pickBuiltinPromptSaveTarget() {
|
|
1242
|
+
const items = [];
|
|
1243
|
+
const promptType = this.currentEditingPromptType ?? PromptsType.prompt;
|
|
1244
|
+
const workspaceFolder = resolveWorkspaceTargetDirectory(this.workspaceService, promptType);
|
|
1245
|
+
if (workspaceFolder) {
|
|
1246
|
+
items.push({
|
|
1247
|
+
label: ( localize(5383, "Workspace")),
|
|
1248
|
+
description: workspaceFolder.fsPath,
|
|
1249
|
+
target: "workspace",
|
|
1250
|
+
folder: workspaceFolder
|
|
1251
|
+
});
|
|
1252
|
+
}
|
|
1253
|
+
const userFolder = await resolveUserTargetDirectory(this.promptsService, promptType);
|
|
1254
|
+
if (userFolder) {
|
|
1255
|
+
items.push({
|
|
1256
|
+
label: ( localize(5384, "User")),
|
|
1257
|
+
description: userFolder.fsPath,
|
|
1258
|
+
target: "user",
|
|
1259
|
+
folder: userFolder
|
|
1260
|
+
});
|
|
1261
|
+
}
|
|
1262
|
+
items.push({
|
|
1263
|
+
label: ( localize(5385, "Cancel")),
|
|
1264
|
+
target: "cancel"
|
|
1265
|
+
});
|
|
1266
|
+
return this.quickInputService.pick(items, {
|
|
1267
|
+
canPickMany: false,
|
|
1268
|
+
placeHolder: ( localize(5386, "Select Workspace, User, or Cancel")),
|
|
1269
|
+
matchOnDescription: true
|
|
1270
|
+
});
|
|
1271
|
+
}
|
|
1272
|
+
async handleEditorActionButton() {
|
|
1273
|
+
if (this.editorActionButtonInProgress) {
|
|
1274
|
+
return;
|
|
1275
|
+
}
|
|
1276
|
+
this.editorActionButtonInProgress = true;
|
|
1277
|
+
this.updateEditorActionButton();
|
|
1278
|
+
let backgroundSaveRequest;
|
|
1279
|
+
try {
|
|
1280
|
+
if (this.shouldShowBuiltinSaveAction()) {
|
|
1281
|
+
const selection = await this.pickBuiltinPromptSaveTarget();
|
|
1282
|
+
if (!selection || selection.target === "cancel") {
|
|
1283
|
+
return;
|
|
1284
|
+
}
|
|
1285
|
+
backgroundSaveRequest = this.createBuiltinPromptSaveRequest(selection);
|
|
1286
|
+
if (backgroundSaveRequest) {
|
|
1287
|
+
this.telemetryService.publicLog2("chatCustomizationEditor.saveItem", {
|
|
1288
|
+
promptType: this.currentEditingPromptType ?? "",
|
|
1289
|
+
storage: String(this.currentEditingStorage ?? ""),
|
|
1290
|
+
saveTarget: selection.target
|
|
1291
|
+
});
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
this.goBackToList();
|
|
1295
|
+
if (backgroundSaveRequest) {
|
|
1296
|
+
const saveRequest = backgroundSaveRequest;
|
|
1297
|
+
void this.saveBuiltinPromptCopy(saveRequest).then(() => {
|
|
1298
|
+
void this.listWidget?.refresh();
|
|
1299
|
+
}, error => {
|
|
1300
|
+
console.error("Failed to save built-in override:", error);
|
|
1301
|
+
this.notificationService.warn(saveRequest.target === "workspace" ? ( localize(5387, "Could not save the override to the workspace.")) : ( localize(5388, "Could not save the override to your user folder.")));
|
|
1302
|
+
});
|
|
1303
|
+
}
|
|
1304
|
+
} finally {
|
|
1305
|
+
this.editorActionButtonInProgress = false;
|
|
1306
|
+
this.updateEditorActionButton();
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
updateEditorActionButton() {
|
|
1310
|
+
if (!this.editorActionButton || !this.editorActionButtonIcon) {
|
|
1311
|
+
return;
|
|
1312
|
+
}
|
|
1313
|
+
const shouldShowBuiltinSaveAction = this.shouldShowBuiltinSaveAction();
|
|
1314
|
+
this.editorActionButtonIcon.className = `codicon codicon-${shouldShowBuiltinSaveAction ? Codicon.save.id : Codicon.arrowLeft.id} editor-action-button-icon`;
|
|
1315
|
+
this.editorActionButton.disabled = this.editorActionButtonInProgress;
|
|
1316
|
+
this.editorActionButton.setAttribute("aria-label", shouldShowBuiltinSaveAction ? ( localize(5389, "Save override")) : ( localize(5379, "Back to list")));
|
|
1317
|
+
this.editorActionButton.title = shouldShowBuiltinSaveAction ? ( localize(5390, "Save override (choose Workspace, User, or Cancel)")) : ( localize(5379, "Back to list"));
|
|
1318
|
+
}
|
|
1319
|
+
shouldShowBuiltinSaveAction() {
|
|
1320
|
+
return this._editorContentChanged && this.currentEditingStorage === BUILTIN_STORAGE && (this.currentEditingPromptType === PromptsType.prompt || this.currentEditingPromptType === PromptsType.skill);
|
|
1321
|
+
}
|
|
1322
|
+
resetEditorSaveIndicator() {
|
|
1323
|
+
this.editorSaveIndicator.className = "editor-save-indicator";
|
|
1324
|
+
this.editorSaveIndicator.title = "";
|
|
1325
|
+
}
|
|
1326
|
+
disposeBuiltinEditingSessions() {
|
|
1327
|
+
for (const session of ( this.builtinEditingSessions.values())) {
|
|
1328
|
+
session.model.dispose();
|
|
1329
|
+
}
|
|
1330
|
+
this.builtinEditingSessions.clear();
|
|
1331
|
+
}
|
|
1332
|
+
disposeBuiltinEditingSession(uri) {
|
|
1333
|
+
const key = ( uri.toString());
|
|
1334
|
+
const session = this.builtinEditingSessions.get(key);
|
|
1335
|
+
if (!session) {
|
|
1336
|
+
return;
|
|
1337
|
+
}
|
|
1338
|
+
session.model.dispose();
|
|
1339
|
+
this.builtinEditingSessions.delete(key);
|
|
784
1340
|
}
|
|
785
1341
|
createEmbeddedMcpDetail() {
|
|
786
1342
|
if (!this.mcpDetailContainer) {
|
|
@@ -788,7 +1344,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
788
1344
|
}
|
|
789
1345
|
const detailHeader = append(this.mcpDetailContainer, $(".editor-header"));
|
|
790
1346
|
const backButton = append(detailHeader, $("button.editor-back-button"));
|
|
791
|
-
backButton.setAttribute("aria-label", ( localize(
|
|
1347
|
+
backButton.setAttribute("aria-label", ( localize(5391, "Back to MCP servers")));
|
|
792
1348
|
const backIconEl = append(backButton, $(`.codicon.codicon-${Codicon.arrowLeft.id}`));
|
|
793
1349
|
backIconEl.setAttribute("aria-hidden", "true");
|
|
794
1350
|
this.editorDisposables.add(addDisposableListener(backButton, "click", () => {
|
|
@@ -833,7 +1389,7 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
833
1389
|
}
|
|
834
1390
|
const detailHeader = append(this.pluginDetailContainer, $(".editor-header"));
|
|
835
1391
|
const backButton = append(detailHeader, $("button.editor-back-button"));
|
|
836
|
-
backButton.setAttribute("aria-label", ( localize(
|
|
1392
|
+
backButton.setAttribute("aria-label", ( localize(5392, "Back to plugins")));
|
|
837
1393
|
const backIconEl = append(backButton, $(`.codicon.codicon-${Codicon.arrowLeft.id}`));
|
|
838
1394
|
backIconEl.setAttribute("aria-hidden", "true");
|
|
839
1395
|
this.editorDisposables.add(addDisposableListener(backButton, "click", () => {
|
|
@@ -862,17 +1418,31 @@ let AICustomizationManagementEditor = class AICustomizationManagementEditor exte
|
|
|
862
1418
|
this.layout(this.dimension);
|
|
863
1419
|
}
|
|
864
1420
|
}
|
|
1421
|
+
async showPluginDetail(item) {
|
|
1422
|
+
if (this.selectedSection !== AICustomizationManagementSection.Plugins) {
|
|
1423
|
+
this.pluginDetailReturnSection = this.selectedSection;
|
|
1424
|
+
}
|
|
1425
|
+
await this.showEmbeddedPluginDetail(item);
|
|
1426
|
+
}
|
|
865
1427
|
goBackFromPluginDetail() {
|
|
866
1428
|
this.pluginDetailDisposables.clear();
|
|
867
1429
|
this.embeddedPluginEditor?.clearInput();
|
|
868
|
-
|
|
869
|
-
this.
|
|
1430
|
+
const returnSection = this.pluginDetailReturnSection;
|
|
1431
|
+
this.pluginDetailReturnSection = undefined;
|
|
1432
|
+
if (returnSection) {
|
|
1433
|
+
this.viewMode = "list";
|
|
1434
|
+
this.updateContentVisibility();
|
|
1435
|
+
this.selectSection(returnSection);
|
|
1436
|
+
} else {
|
|
1437
|
+
this.viewMode = "list";
|
|
1438
|
+
this.updateContentVisibility();
|
|
1439
|
+
this.pluginListWidget?.focusSearch();
|
|
1440
|
+
}
|
|
870
1441
|
if (this.dimension) {
|
|
871
1442
|
this.layout(this.dimension);
|
|
872
1443
|
}
|
|
873
|
-
this.pluginListWidget?.focusSearch();
|
|
874
1444
|
}
|
|
875
1445
|
};
|
|
876
|
-
AICustomizationManagementEditor = AICustomizationManagementEditor_1 = ( __decorate([( __param(1, ITelemetryService)), ( __param(2, IThemeService)), ( __param(3, IStorageService)), ( __param(4, IInstantiationService)), ( __param(5, IContextKeyService)), ( __param(6, IOpenerService)), ( __param(7, ICommandService)), ( __param(8, IAICustomizationWorkspaceService)), ( __param(9, IPromptsService)), ( __param(10, ITextModelService)), ( __param(11, IConfigurationService)), ( __param(12, IWorkingCopyService)), ( __param(13,
|
|
1446
|
+
AICustomizationManagementEditor = AICustomizationManagementEditor_1 = ( __decorate([( __param(1, ITelemetryService)), ( __param(2, IThemeService)), ( __param(3, IStorageService)), ( __param(4, IInstantiationService)), ( __param(5, IContextKeyService)), ( __param(6, IOpenerService)), ( __param(7, ICommandService)), ( __param(8, IAICustomizationWorkspaceService)), ( __param(9, IPromptsService)), ( __param(10, ITextModelService)), ( __param(11, IConfigurationService)), ( __param(12, IWorkingCopyService)), ( __param(13, IFileDialogService)), ( __param(14, IHoverService)), ( __param(15, IModelService)), ( __param(16, IQuickInputService)), ( __param(17, IContextMenuService)), ( __param(18, IFileService)), ( __param(19, INotificationService)), ( __param(20, ICustomizationHarnessService))], AICustomizationManagementEditor));
|
|
877
1447
|
|
|
878
1448
|
export { AICustomizationManagementEditor, aiCustomizationManagementSashBorder };
|