@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
|
@@ -24,7 +24,7 @@ import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/fi
|
|
|
24
24
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
25
25
|
import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
|
|
26
26
|
import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
|
|
27
|
-
import { LEGACY_MODE_FILE_EXTENSION, AGENTS_SOURCE_FOLDER, CLAUDE_AGENTS_SOURCE_FOLDER, isInClaudeRulesFolder } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
27
|
+
import { LEGACY_MODE_FILE_EXTENSION, AGENTS_SOURCE_FOLDER, VALID_SKILL_NAME_REGEX, CLAUDE_AGENTS_SOURCE_FOLDER, isInClaudeRulesFolder } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
28
28
|
import { Lazy } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lazy';
|
|
29
29
|
import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
30
30
|
import { dirname } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
@@ -60,49 +60,62 @@ let PromptValidator = class PromptValidator {
|
|
|
60
60
|
await this.validateHeader(promptAST, promptType, target, report);
|
|
61
61
|
await this.validateBody(promptAST, target, report);
|
|
62
62
|
await this.validateFileName(promptAST, promptType, report);
|
|
63
|
-
await this.
|
|
63
|
+
await this.validateSkillAttributes(promptAST, promptType, report);
|
|
64
64
|
}
|
|
65
65
|
async validateFileName(promptAST, promptType, report) {
|
|
66
66
|
if (promptType === PromptsType.agent && promptAST.uri.path.endsWith(LEGACY_MODE_FILE_EXTENSION)) {
|
|
67
67
|
const location = this.promptsService.getAgentFileURIFromModeFile(promptAST.uri);
|
|
68
68
|
if (location && (await this.fileService.canCreateFile(location))) {
|
|
69
69
|
report(toMarker(( localize(
|
|
70
|
-
|
|
70
|
+
7410,
|
|
71
71
|
"Chat modes have been renamed to agents. Please move this file to {0}",
|
|
72
72
|
(location.toString())
|
|
73
73
|
)), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
|
|
74
74
|
} else {
|
|
75
75
|
report(toMarker(( localize(
|
|
76
|
-
|
|
76
|
+
7411,
|
|
77
77
|
"Chat modes have been renamed to agents. Please move the file to {0}",
|
|
78
78
|
AGENTS_SOURCE_FOLDER
|
|
79
79
|
)), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
async
|
|
83
|
+
async validateSkillAttributes(promptAST, promptType, report) {
|
|
84
84
|
if (promptType !== PromptsType.skill) {
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
87
87
|
const nameAttribute = promptAST.header?.attributes.find(attr => attr.key === PromptHeaderAttributes.name);
|
|
88
|
-
if (!nameAttribute
|
|
88
|
+
if (!nameAttribute) {
|
|
89
|
+
report(toMarker(( localize(7412, "Skill must provide a name.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Error));
|
|
89
90
|
return;
|
|
90
91
|
}
|
|
91
|
-
const
|
|
92
|
-
if (!
|
|
92
|
+
const descriptionAttribute = promptAST.header?.attributes.find(attr => attr.key === PromptHeaderAttributes.description);
|
|
93
|
+
if (!descriptionAttribute) {
|
|
94
|
+
report(toMarker(( localize(7413, "Skill must provide a description.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Error));
|
|
93
95
|
return;
|
|
94
96
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
97
|
+
if (nameAttribute.value.type === "scalar") {
|
|
98
|
+
const skillName = nameAttribute.value.value.trim();
|
|
99
|
+
if (skillName.length > 0) {
|
|
100
|
+
if (!VALID_SKILL_NAME_REGEX.test(skillName)) {
|
|
101
|
+
report(toMarker(( localize(
|
|
102
|
+
7414,
|
|
103
|
+
"Skill name may only contain lowercase letters, numbers, and hyphens."
|
|
104
|
+
)), nameAttribute.value.range, MarkerSeverity.Error));
|
|
105
|
+
}
|
|
106
|
+
const pathParts = promptAST.uri.path.split("/");
|
|
107
|
+
const skillIndex = pathParts.findIndex(part => part === "SKILL.md");
|
|
108
|
+
if (skillIndex > 0) {
|
|
109
|
+
const folderName = pathParts[skillIndex - 1];
|
|
110
|
+
if (folderName && skillName !== folderName) {
|
|
111
|
+
report(toMarker(( localize(
|
|
112
|
+
7415,
|
|
113
|
+
"The skill name '{0}' should match the folder name '{1}'.",
|
|
114
|
+
skillName,
|
|
115
|
+
folderName
|
|
116
|
+
)), nameAttribute.value.range, MarkerSeverity.Warning));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
106
119
|
}
|
|
107
120
|
}
|
|
108
121
|
}
|
|
@@ -115,7 +128,7 @@ let PromptValidator = class PromptValidator {
|
|
|
115
128
|
for (const ref of body.fileReferences) {
|
|
116
129
|
const resolved = body.resolveFilePath(ref.content);
|
|
117
130
|
if (!resolved) {
|
|
118
|
-
report(toMarker(( localize(
|
|
131
|
+
report(toMarker(( localize(7416, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
|
|
119
132
|
continue;
|
|
120
133
|
}
|
|
121
134
|
if (promptAST.uri.scheme === resolved.scheme) {
|
|
@@ -127,7 +140,7 @@ let PromptValidator = class PromptValidator {
|
|
|
127
140
|
}
|
|
128
141
|
} catch {}
|
|
129
142
|
const loc = this.labelService.getUriLabel(resolved);
|
|
130
|
-
report(toMarker(( localize(
|
|
143
|
+
report(toMarker(( localize(7417, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
|
|
131
144
|
})());
|
|
132
145
|
}
|
|
133
146
|
}
|
|
@@ -144,7 +157,7 @@ let PromptValidator = class PromptValidator {
|
|
|
144
157
|
if (currentNames.size === 1) {
|
|
145
158
|
const newName = Array.from(currentNames)[0];
|
|
146
159
|
report(toMarker(( localize(
|
|
147
|
-
|
|
160
|
+
7418,
|
|
148
161
|
"Tool or toolset '{0}' has been renamed, use '{1}' instead.",
|
|
149
162
|
variable.name,
|
|
150
163
|
newName
|
|
@@ -152,7 +165,7 @@ let PromptValidator = class PromptValidator {
|
|
|
152
165
|
} else {
|
|
153
166
|
const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
|
|
154
167
|
report(toMarker(( localize(
|
|
155
|
-
|
|
168
|
+
7419,
|
|
156
169
|
"Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
|
|
157
170
|
variable.name,
|
|
158
171
|
newNames
|
|
@@ -160,13 +173,13 @@ let PromptValidator = class PromptValidator {
|
|
|
160
173
|
}
|
|
161
174
|
}
|
|
162
175
|
} else {
|
|
163
|
-
report(toMarker(( localize(
|
|
176
|
+
report(toMarker(( localize(7420, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Warning));
|
|
164
177
|
}
|
|
165
178
|
} else if (headerToolsMap) {
|
|
166
179
|
const tool = this.languageModelToolsService.getToolByFullReferenceName(variable.name);
|
|
167
180
|
if (tool && headerToolsMap.get(tool) === false) {
|
|
168
181
|
report(toMarker(( localize(
|
|
169
|
-
|
|
182
|
+
7421,
|
|
170
183
|
"Tool or toolset '{0}' also needs to be enabled in the header.",
|
|
171
184
|
variable.name
|
|
172
185
|
)), variable.range, MarkerSeverity.Warning));
|
|
@@ -251,7 +264,7 @@ let PromptValidator = class PromptValidator {
|
|
|
251
264
|
switch (promptType) {
|
|
252
265
|
case PromptsType.prompt:
|
|
253
266
|
report(toMarker(( localize(
|
|
254
|
-
|
|
267
|
+
7422,
|
|
255
268
|
"Attribute '{0}' is not supported in prompt files. Supported: {1}.",
|
|
256
269
|
attribute.key,
|
|
257
270
|
supportedNames.value
|
|
@@ -260,7 +273,7 @@ let PromptValidator = class PromptValidator {
|
|
|
260
273
|
case PromptsType.agent:
|
|
261
274
|
if (target === Target.GitHubCopilot) {
|
|
262
275
|
report(toMarker(( localize(
|
|
263
|
-
|
|
276
|
+
7423,
|
|
264
277
|
"Attribute '{0}' is not supported in custom GitHub Copilot agent files. Supported: {1}.",
|
|
265
278
|
attribute.key,
|
|
266
279
|
supportedNames.value
|
|
@@ -269,13 +282,13 @@ let PromptValidator = class PromptValidator {
|
|
|
269
282
|
; else {
|
|
270
283
|
if (( validGithubCopilotAttributeNames.value.has(attribute.key))) {
|
|
271
284
|
report(toMarker(( localize(
|
|
272
|
-
|
|
285
|
+
7424,
|
|
273
286
|
"Attribute '{0}' is ignored when running locally in VS Code.",
|
|
274
287
|
attribute.key
|
|
275
288
|
)), attribute.range, MarkerSeverity.Info));
|
|
276
289
|
} else {
|
|
277
290
|
report(toMarker(( localize(
|
|
278
|
-
|
|
291
|
+
7425,
|
|
279
292
|
"Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.",
|
|
280
293
|
attribute.key,
|
|
281
294
|
supportedNames.value
|
|
@@ -286,14 +299,14 @@ let PromptValidator = class PromptValidator {
|
|
|
286
299
|
case PromptsType.instructions:
|
|
287
300
|
if (target === Target.Claude) {
|
|
288
301
|
report(toMarker(( localize(
|
|
289
|
-
|
|
302
|
+
7426,
|
|
290
303
|
"Attribute '{0}' is not supported in rules files. Supported: {1}.",
|
|
291
304
|
attribute.key,
|
|
292
305
|
supportedNames.value
|
|
293
306
|
)), attribute.range, MarkerSeverity.Warning));
|
|
294
307
|
} else {
|
|
295
308
|
report(toMarker(( localize(
|
|
296
|
-
|
|
309
|
+
7427,
|
|
297
310
|
"Attribute '{0}' is not supported in instructions files. Supported: {1}.",
|
|
298
311
|
attribute.key,
|
|
299
312
|
supportedNames.value
|
|
@@ -302,7 +315,7 @@ let PromptValidator = class PromptValidator {
|
|
|
302
315
|
break;
|
|
303
316
|
case PromptsType.skill:
|
|
304
317
|
report(toMarker(( localize(
|
|
305
|
-
|
|
318
|
+
7428,
|
|
306
319
|
"Attribute '{0}' is not supported in skill files. Supported: {1}.",
|
|
307
320
|
attribute.key,
|
|
308
321
|
supportedNames.value
|
|
@@ -318,11 +331,11 @@ let PromptValidator = class PromptValidator {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
if (nameAttribute.value.type !== "scalar") {
|
|
321
|
-
report(toMarker(( localize(
|
|
334
|
+
report(toMarker(( localize(7429, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
|
|
322
335
|
return;
|
|
323
336
|
}
|
|
324
337
|
if (nameAttribute.value.value.trim().length === 0) {
|
|
325
|
-
report(toMarker(( localize(
|
|
338
|
+
report(toMarker(( localize(7430, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
|
|
326
339
|
return;
|
|
327
340
|
}
|
|
328
341
|
}
|
|
@@ -332,11 +345,11 @@ let PromptValidator = class PromptValidator {
|
|
|
332
345
|
return;
|
|
333
346
|
}
|
|
334
347
|
if (descriptionAttribute.value.type !== "scalar") {
|
|
335
|
-
report(toMarker(( localize(
|
|
348
|
+
report(toMarker(( localize(7431, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
|
|
336
349
|
return;
|
|
337
350
|
}
|
|
338
351
|
if (descriptionAttribute.value.value.trim().length === 0) {
|
|
339
|
-
report(toMarker(( localize(
|
|
352
|
+
report(toMarker(( localize(7432, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
|
|
340
353
|
return;
|
|
341
354
|
}
|
|
342
355
|
}
|
|
@@ -346,11 +359,11 @@ let PromptValidator = class PromptValidator {
|
|
|
346
359
|
return;
|
|
347
360
|
}
|
|
348
361
|
if (argumentHintAttribute.value.type !== "scalar") {
|
|
349
|
-
report(toMarker(( localize(
|
|
362
|
+
report(toMarker(( localize(7433, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
|
|
350
363
|
return;
|
|
351
364
|
}
|
|
352
365
|
if (argumentHintAttribute.value.value.trim().length === 0) {
|
|
353
|
-
report(toMarker(( localize(
|
|
366
|
+
report(toMarker(( localize(7434, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Error));
|
|
354
367
|
return;
|
|
355
368
|
}
|
|
356
369
|
}
|
|
@@ -360,30 +373,30 @@ let PromptValidator = class PromptValidator {
|
|
|
360
373
|
return;
|
|
361
374
|
}
|
|
362
375
|
if (attribute.value.type !== "scalar" && attribute.value.type !== "sequence") {
|
|
363
|
-
report(toMarker(( localize(
|
|
376
|
+
report(toMarker(( localize(7435, "The 'model' attribute must be a string or an array of strings.")), attribute.value.range, MarkerSeverity.Error));
|
|
364
377
|
return;
|
|
365
378
|
}
|
|
366
379
|
const modelNames = [];
|
|
367
380
|
if (attribute.value.type === "scalar") {
|
|
368
381
|
const modelName = attribute.value.value.trim();
|
|
369
382
|
if (modelName.length === 0) {
|
|
370
|
-
report(toMarker(( localize(
|
|
383
|
+
report(toMarker(( localize(7436, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
|
|
371
384
|
return;
|
|
372
385
|
}
|
|
373
386
|
modelNames.push([modelName, attribute.value.range]);
|
|
374
387
|
} else if (attribute.value.type === "sequence") {
|
|
375
388
|
if (attribute.value.items.length === 0) {
|
|
376
|
-
report(toMarker(( localize(
|
|
389
|
+
report(toMarker(( localize(7437, "The 'model' array must not be empty.")), attribute.value.range, MarkerSeverity.Error));
|
|
377
390
|
return;
|
|
378
391
|
}
|
|
379
392
|
for (const item of attribute.value.items) {
|
|
380
393
|
if (item.type !== "scalar") {
|
|
381
|
-
report(toMarker(( localize(
|
|
394
|
+
report(toMarker(( localize(7438, "The 'model' array must contain only strings.")), item.range, MarkerSeverity.Error));
|
|
382
395
|
return;
|
|
383
396
|
}
|
|
384
397
|
const modelName = item.value.trim();
|
|
385
398
|
if (modelName.length === 0) {
|
|
386
|
-
report(toMarker(( localize(
|
|
399
|
+
report(toMarker(( localize(7439, "Model names in the array must be non-empty strings.")), item.range, MarkerSeverity.Error));
|
|
387
400
|
return;
|
|
388
401
|
}
|
|
389
402
|
modelNames.push([modelName, item.range]);
|
|
@@ -396,9 +409,9 @@ let PromptValidator = class PromptValidator {
|
|
|
396
409
|
for (const [modelName, range] of modelNames) {
|
|
397
410
|
const modelMetadata = this.findModelByName(modelName);
|
|
398
411
|
if (!modelMetadata) {
|
|
399
|
-
report(toMarker(( localize(
|
|
412
|
+
report(toMarker(( localize(7440, "Unknown model '{0}'.", modelName)), range, MarkerSeverity.Warning));
|
|
400
413
|
} else if (agentKind === ChatModeKind.Agent && !ILanguageModelChatMetadata.suitableForAgentMode(modelMetadata)) {
|
|
401
|
-
report(toMarker(( localize(
|
|
414
|
+
report(toMarker(( localize(7441, "Model '{0}' is not suited for agent mode.", modelName)), range, MarkerSeverity.Warning));
|
|
402
415
|
}
|
|
403
416
|
}
|
|
404
417
|
}
|
|
@@ -412,13 +425,13 @@ let PromptValidator = class PromptValidator {
|
|
|
412
425
|
continue;
|
|
413
426
|
}
|
|
414
427
|
if (attribute.value.type !== "scalar") {
|
|
415
|
-
report(toMarker(( localize(
|
|
428
|
+
report(toMarker(( localize(7442, "The '{0}' attribute must be a string.", claudeAttributeName)), attribute.value.range, MarkerSeverity.Error));
|
|
416
429
|
continue;
|
|
417
430
|
} else {
|
|
418
431
|
const modelName = attribute.value.value.trim();
|
|
419
432
|
if (enumValues.every(model => model.name !== modelName)) {
|
|
420
433
|
const validValues = ( enumValues.map(model => model.name)).join(", ");
|
|
421
|
-
report(toMarker(( localize(
|
|
434
|
+
report(toMarker(( localize(7443, "Unknown value '{0}', valid: {1}.", modelName, validValues)), attribute.value.range, MarkerSeverity.Warning));
|
|
422
435
|
}
|
|
423
436
|
}
|
|
424
437
|
}
|
|
@@ -437,12 +450,12 @@ let PromptValidator = class PromptValidator {
|
|
|
437
450
|
if (modeAttribute) {
|
|
438
451
|
if (agentAttribute) {
|
|
439
452
|
report(toMarker(( localize(
|
|
440
|
-
|
|
453
|
+
7444,
|
|
441
454
|
"The 'mode' attribute has been deprecated. The 'agent' attribute is used instead."
|
|
442
455
|
)), modeAttribute.range, MarkerSeverity.Warning));
|
|
443
456
|
} else {
|
|
444
457
|
report(toMarker(( localize(
|
|
445
|
-
|
|
458
|
+
7445,
|
|
446
459
|
"The 'mode' attribute has been deprecated. Please rename it to 'agent'."
|
|
447
460
|
)), modeAttribute.range, MarkerSeverity.Error));
|
|
448
461
|
}
|
|
@@ -452,12 +465,12 @@ let PromptValidator = class PromptValidator {
|
|
|
452
465
|
return undefined;
|
|
453
466
|
}
|
|
454
467
|
if (attribute.value.type !== "scalar") {
|
|
455
|
-
report(toMarker(( localize(
|
|
468
|
+
report(toMarker(( localize(7446, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
|
|
456
469
|
return undefined;
|
|
457
470
|
}
|
|
458
471
|
const agentValue = attribute.value.value;
|
|
459
472
|
if (agentValue.trim().length === 0) {
|
|
460
|
-
report(toMarker(( localize(
|
|
473
|
+
report(toMarker(( localize(7447, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
|
|
461
474
|
return undefined;
|
|
462
475
|
}
|
|
463
476
|
return this.validateAgentValue(attribute.value, report);
|
|
@@ -472,7 +485,7 @@ let PromptValidator = class PromptValidator {
|
|
|
472
485
|
availableAgents.push(agent.name.get());
|
|
473
486
|
}
|
|
474
487
|
const errorMessage = ( localize(
|
|
475
|
-
|
|
488
|
+
7448,
|
|
476
489
|
"Unknown agent '{0}'. Available agents: {1}.",
|
|
477
490
|
value.value,
|
|
478
491
|
availableAgents.join(", ")
|
|
@@ -487,7 +500,7 @@ let PromptValidator = class PromptValidator {
|
|
|
487
500
|
}
|
|
488
501
|
if (agentKind !== ChatModeKind.Agent) {
|
|
489
502
|
report(toMarker(( localize(
|
|
490
|
-
|
|
503
|
+
7449,
|
|
491
504
|
"The 'tools' attribute is only supported when using agents. Attribute will be ignored."
|
|
492
505
|
)), attribute.range, MarkerSeverity.Warning));
|
|
493
506
|
}
|
|
@@ -497,7 +510,7 @@ let PromptValidator = class PromptValidator {
|
|
|
497
510
|
}
|
|
498
511
|
if (value.type !== "sequence") {
|
|
499
512
|
report(toMarker(( localize(
|
|
500
|
-
|
|
513
|
+
7450,
|
|
501
514
|
"The 'tools' attribute must be an array or a comma separated string."
|
|
502
515
|
)), attribute.value.range, MarkerSeverity.Error));
|
|
503
516
|
return;
|
|
@@ -513,7 +526,7 @@ let PromptValidator = class PromptValidator {
|
|
|
513
526
|
const deprecatedNames = this.languageModelToolsService.getDeprecatedFullReferenceNames();
|
|
514
527
|
for (const item of valueItem.items) {
|
|
515
528
|
if (item.type !== "scalar") {
|
|
516
|
-
report(toMarker(( localize(
|
|
529
|
+
report(toMarker(( localize(7451, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
|
|
517
530
|
} else if (item.value) {
|
|
518
531
|
if (!( available.has(item.value))) {
|
|
519
532
|
const currentNames = deprecatedNames.get(item.value);
|
|
@@ -521,7 +534,7 @@ let PromptValidator = class PromptValidator {
|
|
|
521
534
|
if (currentNames?.size === 1) {
|
|
522
535
|
const newName = Array.from(currentNames)[0];
|
|
523
536
|
report(toMarker(( localize(
|
|
524
|
-
|
|
537
|
+
7452,
|
|
525
538
|
"Tool or toolset '{0}' has been renamed, use '{1}' instead.",
|
|
526
539
|
item.value,
|
|
527
540
|
newName
|
|
@@ -529,14 +542,14 @@ let PromptValidator = class PromptValidator {
|
|
|
529
542
|
} else {
|
|
530
543
|
const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
|
|
531
544
|
report(toMarker(( localize(
|
|
532
|
-
|
|
545
|
+
7453,
|
|
533
546
|
"Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
|
|
534
547
|
item.value,
|
|
535
548
|
newNames
|
|
536
549
|
)), item.range, MarkerSeverity.Info));
|
|
537
550
|
}
|
|
538
551
|
} else {
|
|
539
|
-
report(toMarker(( localize(
|
|
552
|
+
report(toMarker(( localize(7454, "Unknown tool '{0}'.", item.value)), item.range, MarkerSeverity.Warning));
|
|
540
553
|
}
|
|
541
554
|
}
|
|
542
555
|
}
|
|
@@ -549,25 +562,25 @@ let PromptValidator = class PromptValidator {
|
|
|
549
562
|
return;
|
|
550
563
|
}
|
|
551
564
|
if (attribute.value.type !== "scalar") {
|
|
552
|
-
report(toMarker(( localize(
|
|
565
|
+
report(toMarker(( localize(7455, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
|
|
553
566
|
return;
|
|
554
567
|
}
|
|
555
568
|
const pattern = attribute.value.value;
|
|
556
569
|
try {
|
|
557
570
|
const patterns = splitGlobAware(pattern, ",");
|
|
558
571
|
if (patterns.length === 0) {
|
|
559
|
-
report(toMarker(( localize(
|
|
572
|
+
report(toMarker(( localize(7456, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
|
|
560
573
|
return;
|
|
561
574
|
}
|
|
562
575
|
for (const pattern of patterns) {
|
|
563
576
|
const globPattern = parse(pattern);
|
|
564
577
|
if (isEmptyPattern(globPattern)) {
|
|
565
|
-
report(toMarker(( localize(
|
|
578
|
+
report(toMarker(( localize(7456, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
|
|
566
579
|
return;
|
|
567
580
|
}
|
|
568
581
|
}
|
|
569
582
|
} catch (_error) {
|
|
570
|
-
report(toMarker(( localize(
|
|
583
|
+
report(toMarker(( localize(7456, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
|
|
571
584
|
}
|
|
572
585
|
}
|
|
573
586
|
validatePaths(attributes, report) {
|
|
@@ -576,26 +589,26 @@ let PromptValidator = class PromptValidator {
|
|
|
576
589
|
return;
|
|
577
590
|
}
|
|
578
591
|
if (attribute.value.type !== "sequence") {
|
|
579
|
-
report(toMarker(( localize(
|
|
592
|
+
report(toMarker(( localize(7457, "The 'paths' attribute must be an array of glob patterns.")), attribute.value.range, MarkerSeverity.Error));
|
|
580
593
|
return;
|
|
581
594
|
}
|
|
582
595
|
for (const item of attribute.value.items) {
|
|
583
596
|
if (item.type !== "scalar") {
|
|
584
|
-
report(toMarker(( localize(
|
|
597
|
+
report(toMarker(( localize(7458, "Each entry in the 'paths' attribute must be a string.")), item.range, MarkerSeverity.Error));
|
|
585
598
|
continue;
|
|
586
599
|
}
|
|
587
600
|
const pattern = item.value.trim();
|
|
588
601
|
if (pattern.length === 0) {
|
|
589
|
-
report(toMarker(( localize(
|
|
602
|
+
report(toMarker(( localize(7459, "Path entries must be non-empty glob patterns.")), item.range, MarkerSeverity.Error));
|
|
590
603
|
continue;
|
|
591
604
|
}
|
|
592
605
|
try {
|
|
593
606
|
const globPattern = parse(pattern);
|
|
594
607
|
if (isEmptyPattern(globPattern)) {
|
|
595
|
-
report(toMarker(( localize(
|
|
608
|
+
report(toMarker(( localize(7460, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
|
|
596
609
|
}
|
|
597
610
|
} catch (_error) {
|
|
598
|
-
report(toMarker(( localize(
|
|
611
|
+
report(toMarker(( localize(7460, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
|
|
599
612
|
}
|
|
600
613
|
}
|
|
601
614
|
}
|
|
@@ -605,7 +618,7 @@ let PromptValidator = class PromptValidator {
|
|
|
605
618
|
return;
|
|
606
619
|
}
|
|
607
620
|
if (attribute.value.type !== "sequence" && attribute.value.type !== "scalar") {
|
|
608
|
-
report(toMarker(( localize(
|
|
621
|
+
report(toMarker(( localize(7461, "The 'excludeAgent' attribute must be an string or array.")), attribute.value.range, MarkerSeverity.Error));
|
|
609
622
|
return;
|
|
610
623
|
}
|
|
611
624
|
}
|
|
@@ -616,7 +629,7 @@ let PromptValidator = class PromptValidator {
|
|
|
616
629
|
}
|
|
617
630
|
if (attribute.value.type !== "map") {
|
|
618
631
|
report(toMarker(( localize(
|
|
619
|
-
|
|
632
|
+
7462,
|
|
620
633
|
"The 'hooks' attribute must be a map of hook event types to command arrays."
|
|
621
634
|
)), attribute.value.range, MarkerSeverity.Error));
|
|
622
635
|
return;
|
|
@@ -625,7 +638,7 @@ let PromptValidator = class PromptValidator {
|
|
|
625
638
|
for (const prop of attribute.value.properties) {
|
|
626
639
|
if (!( validHookNames.has(prop.key.value))) {
|
|
627
640
|
report(toMarker(( localize(
|
|
628
|
-
|
|
641
|
+
7463,
|
|
629
642
|
"Unknown hook event type '{0}'. Supported: {1}.",
|
|
630
643
|
prop.key.value,
|
|
631
644
|
Array.from(validHookNames).join(", ")
|
|
@@ -633,7 +646,7 @@ let PromptValidator = class PromptValidator {
|
|
|
633
646
|
}
|
|
634
647
|
if (prop.value.type !== "sequence") {
|
|
635
648
|
report(toMarker(( localize(
|
|
636
|
-
|
|
649
|
+
7464,
|
|
637
650
|
"Hook event '{0}' must have an array of command objects as its value.",
|
|
638
651
|
prop.key.value
|
|
639
652
|
)), prop.value.range, MarkerSeverity.Error));
|
|
@@ -646,19 +659,19 @@ let PromptValidator = class PromptValidator {
|
|
|
646
659
|
}
|
|
647
660
|
validateHookCommand(item, target, report) {
|
|
648
661
|
if (item.type !== "map") {
|
|
649
|
-
report(toMarker(( localize(
|
|
662
|
+
report(toMarker(( localize(7465, "Each hook command must be an object.")), item.range, MarkerSeverity.Error));
|
|
650
663
|
return;
|
|
651
664
|
}
|
|
652
665
|
const hooksProperty = item.properties.find(p => p.key.value === "hooks");
|
|
653
666
|
if (hooksProperty) {
|
|
654
667
|
for (const prop of item.properties) {
|
|
655
668
|
if (prop.key.value !== "hooks" && prop.key.value !== "matcher") {
|
|
656
|
-
report(toMarker(( localize(
|
|
669
|
+
report(toMarker(( localize(7466, "Unknown property '{0}' in hook matcher.", prop.key.value)), prop.key.range, MarkerSeverity.Warning));
|
|
657
670
|
}
|
|
658
671
|
}
|
|
659
672
|
if (hooksProperty.value.type !== "sequence") {
|
|
660
673
|
report(toMarker(( localize(
|
|
661
|
-
|
|
674
|
+
7467,
|
|
662
675
|
"The 'hooks' property in a matcher must be an array of command objects."
|
|
663
676
|
)), hooksProperty.value.range, MarkerSeverity.Error));
|
|
664
677
|
return;
|
|
@@ -687,37 +700,37 @@ let PromptValidator = class PromptValidator {
|
|
|
687
700
|
for (const prop of item.properties) {
|
|
688
701
|
const key = prop.key.value;
|
|
689
702
|
if (!( validProperties.has(key))) {
|
|
690
|
-
report(toMarker(( localize(
|
|
703
|
+
report(toMarker(( localize(7468, "Unknown property '{0}' in hook command.", key)), prop.key.range, MarkerSeverity.Warning));
|
|
691
704
|
}
|
|
692
705
|
if (key === "type") {
|
|
693
706
|
hasType = true;
|
|
694
707
|
if (prop.value.type !== "scalar" || prop.value.value !== "command") {
|
|
695
|
-
report(toMarker(( localize(
|
|
708
|
+
report(toMarker(( localize(7469, "The 'type' property in a hook command must be 'command'.")), prop.value.range, MarkerSeverity.Error));
|
|
696
709
|
}
|
|
697
710
|
} else if (( validCommandFields.has(key))) {
|
|
698
711
|
hasCommandField = true;
|
|
699
712
|
if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
|
|
700
713
|
report(toMarker(( localize(
|
|
701
|
-
|
|
714
|
+
7470,
|
|
702
715
|
"The '{0}' property in a hook command must be a non-empty string.",
|
|
703
716
|
key
|
|
704
717
|
)), prop.value.range, MarkerSeverity.Error));
|
|
705
718
|
}
|
|
706
719
|
} else if (key === "cwd") {
|
|
707
720
|
if (prop.value.type !== "scalar") {
|
|
708
|
-
report(toMarker(( localize(
|
|
721
|
+
report(toMarker(( localize(7471, "The 'cwd' property in a hook command must be a string.")), prop.value.range, MarkerSeverity.Error));
|
|
709
722
|
}
|
|
710
723
|
} else if (key === "env") {
|
|
711
724
|
if (prop.value.type !== "map") {
|
|
712
725
|
report(toMarker(( localize(
|
|
713
|
-
|
|
726
|
+
7472,
|
|
714
727
|
"The 'env' property in a hook command must be a map of string values."
|
|
715
728
|
)), prop.value.range, MarkerSeverity.Error));
|
|
716
729
|
} else {
|
|
717
730
|
for (const envProp of prop.value.properties) {
|
|
718
731
|
if (envProp.value.type !== "scalar") {
|
|
719
732
|
report(toMarker(( localize(
|
|
720
|
-
|
|
733
|
+
7473,
|
|
721
734
|
"Environment variable '{0}' must have a string value.",
|
|
722
735
|
envProp.key.value
|
|
723
736
|
)), envProp.value.range, MarkerSeverity.Error));
|
|
@@ -726,19 +739,19 @@ let PromptValidator = class PromptValidator {
|
|
|
726
739
|
}
|
|
727
740
|
} else if (key === "timeout" || key === "timeoutSec") {
|
|
728
741
|
if (prop.value.type !== "scalar" || isNaN(Number(prop.value.value))) {
|
|
729
|
-
report(toMarker(( localize(
|
|
742
|
+
report(toMarker(( localize(7474, "The '{0}' property in a hook command must be a number.", key)), prop.value.range, MarkerSeverity.Error));
|
|
730
743
|
}
|
|
731
744
|
}
|
|
732
745
|
}
|
|
733
746
|
if (!hasType) {
|
|
734
|
-
report(toMarker(( localize(
|
|
747
|
+
report(toMarker(( localize(7475, "Hook command is missing required property 'type'.")), item.range, MarkerSeverity.Error));
|
|
735
748
|
}
|
|
736
749
|
if (!hasCommandField) {
|
|
737
750
|
if (isCopilotCli) {
|
|
738
|
-
report(toMarker(( localize(
|
|
751
|
+
report(toMarker(( localize(7476, "Hook command must specify at least one of 'bash' or 'powershell'.")), item.range, MarkerSeverity.Error));
|
|
739
752
|
} else {
|
|
740
753
|
report(toMarker(( localize(
|
|
741
|
-
|
|
754
|
+
7477,
|
|
742
755
|
"Hook command must specify at least one of 'command', 'windows', 'linux', or 'osx'."
|
|
743
756
|
)), item.range, MarkerSeverity.Error));
|
|
744
757
|
}
|
|
@@ -750,13 +763,14 @@ let PromptValidator = class PromptValidator {
|
|
|
750
763
|
return;
|
|
751
764
|
}
|
|
752
765
|
if (attribute.value.type !== "sequence") {
|
|
753
|
-
report(toMarker(( localize(
|
|
766
|
+
report(toMarker(( localize(7478, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
|
|
754
767
|
return;
|
|
755
768
|
}
|
|
769
|
+
const seenLabels = ( new Map());
|
|
756
770
|
for (const item of attribute.value.items) {
|
|
757
771
|
if (item.type !== "map") {
|
|
758
772
|
report(toMarker(( localize(
|
|
759
|
-
|
|
773
|
+
7479,
|
|
760
774
|
"Each handoff in the 'handoffs' attribute must be an object with 'label', 'agent', 'prompt' and optional 'send'."
|
|
761
775
|
)), item.range, MarkerSeverity.Error));
|
|
762
776
|
continue;
|
|
@@ -766,39 +780,44 @@ let PromptValidator = class PromptValidator {
|
|
|
766
780
|
switch (prop.key.value) {
|
|
767
781
|
case "label":
|
|
768
782
|
if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
|
|
769
|
-
report(toMarker(( localize(
|
|
783
|
+
report(toMarker(( localize(7480, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
|
|
784
|
+
} else if (!/[a-zA-Z0-9]/.test(prop.value.value)) {
|
|
785
|
+
report(toMarker(( localize(
|
|
786
|
+
7481,
|
|
787
|
+
"The 'label' property in a handoff must contain at least one alphanumeric character."
|
|
788
|
+
)), prop.value.range, MarkerSeverity.Error));
|
|
770
789
|
}
|
|
771
790
|
break;
|
|
772
791
|
case "agent":
|
|
773
792
|
if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
|
|
774
|
-
report(toMarker(( localize(
|
|
793
|
+
report(toMarker(( localize(7482, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
|
|
775
794
|
} else {
|
|
776
795
|
this.validateAgentValue(prop.value, report);
|
|
777
796
|
}
|
|
778
797
|
break;
|
|
779
798
|
case "prompt":
|
|
780
799
|
if (prop.value.type !== "scalar") {
|
|
781
|
-
report(toMarker(( localize(
|
|
800
|
+
report(toMarker(( localize(7483, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
|
|
782
801
|
}
|
|
783
802
|
break;
|
|
784
803
|
case "send":
|
|
785
804
|
if (!isTrueOrFalse(prop.value)) {
|
|
786
|
-
report(toMarker(( localize(
|
|
805
|
+
report(toMarker(( localize(7484, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
|
|
787
806
|
}
|
|
788
807
|
break;
|
|
789
808
|
case "showContinueOn":
|
|
790
809
|
if (!isTrueOrFalse(prop.value)) {
|
|
791
|
-
report(toMarker(( localize(
|
|
810
|
+
report(toMarker(( localize(7485, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
|
|
792
811
|
}
|
|
793
812
|
break;
|
|
794
813
|
case "model":
|
|
795
814
|
if (prop.value.type !== "scalar") {
|
|
796
|
-
report(toMarker(( localize(
|
|
815
|
+
report(toMarker(( localize(7486, "The 'model' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
|
|
797
816
|
}
|
|
798
817
|
break;
|
|
799
818
|
default:
|
|
800
819
|
report(toMarker(( localize(
|
|
801
|
-
|
|
820
|
+
7487,
|
|
802
821
|
"Unknown property '{0}' in handoff object. Supported properties are 'label', 'agent', 'prompt' and optional 'send', 'showContinueOn', 'model'.",
|
|
803
822
|
prop.key.value
|
|
804
823
|
)), prop.value.range, MarkerSeverity.Warning));
|
|
@@ -807,11 +826,24 @@ let PromptValidator = class PromptValidator {
|
|
|
807
826
|
}
|
|
808
827
|
if (required.size > 0) {
|
|
809
828
|
report(toMarker(( localize(
|
|
810
|
-
|
|
829
|
+
7488,
|
|
811
830
|
"Missing required properties {0} in handoff object.",
|
|
812
831
|
( Array.from(required).map(s => `'${s}'`)).join(", ")
|
|
813
832
|
)), item.range, MarkerSeverity.Error));
|
|
814
833
|
}
|
|
834
|
+
const labelProp = item.properties.find(p => p.key.value === "label");
|
|
835
|
+
if (labelProp?.value.type === "scalar") {
|
|
836
|
+
const normalizedLabel = labelProp.value.value.toLowerCase();
|
|
837
|
+
if (normalizedLabel && ( seenLabels.has(normalizedLabel))) {
|
|
838
|
+
report(toMarker(( localize(
|
|
839
|
+
7489,
|
|
840
|
+
"Duplicate handoff label '{0}'. Each handoff must have a unique label.",
|
|
841
|
+
labelProp.value.value
|
|
842
|
+
)), labelProp.value.range, MarkerSeverity.Error));
|
|
843
|
+
} else if (normalizedLabel) {
|
|
844
|
+
seenLabels.set(normalizedLabel, labelProp.value.range);
|
|
845
|
+
}
|
|
846
|
+
}
|
|
815
847
|
}
|
|
816
848
|
}
|
|
817
849
|
validateInfer(attributes, report) {
|
|
@@ -820,7 +852,7 @@ let PromptValidator = class PromptValidator {
|
|
|
820
852
|
return;
|
|
821
853
|
}
|
|
822
854
|
report(toMarker(( localize(
|
|
823
|
-
|
|
855
|
+
7490,
|
|
824
856
|
"The 'infer' attribute is deprecated in favour of 'user-invocable' and 'disable-model-invocation'."
|
|
825
857
|
)), attribute.value.range, MarkerSeverity.Error));
|
|
826
858
|
}
|
|
@@ -830,18 +862,18 @@ let PromptValidator = class PromptValidator {
|
|
|
830
862
|
return;
|
|
831
863
|
}
|
|
832
864
|
if (attribute.value.type !== "scalar") {
|
|
833
|
-
report(toMarker(( localize(
|
|
865
|
+
report(toMarker(( localize(7491, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
|
|
834
866
|
return;
|
|
835
867
|
}
|
|
836
868
|
const targetValue = attribute.value.value.trim();
|
|
837
869
|
if (targetValue.length === 0) {
|
|
838
|
-
report(toMarker(( localize(
|
|
870
|
+
report(toMarker(( localize(7492, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
|
|
839
871
|
return;
|
|
840
872
|
}
|
|
841
873
|
const validTargets = ["github-copilot", "vscode"];
|
|
842
874
|
if (!validTargets.includes(targetValue)) {
|
|
843
875
|
report(toMarker(( localize(
|
|
844
|
-
|
|
876
|
+
7493,
|
|
845
877
|
"The 'target' attribute must be one of: {0}.",
|
|
846
878
|
validTargets.join(", ")
|
|
847
879
|
)), attribute.value.range, MarkerSeverity.Error));
|
|
@@ -853,7 +885,7 @@ let PromptValidator = class PromptValidator {
|
|
|
853
885
|
return;
|
|
854
886
|
}
|
|
855
887
|
if (!isTrueOrFalse(attribute.value)) {
|
|
856
|
-
report(toMarker(( localize(
|
|
888
|
+
report(toMarker(( localize(7494, "The 'user-invocable' attribute must be 'true' or 'false'.")), attribute.value.range, MarkerSeverity.Error));
|
|
857
889
|
return;
|
|
858
890
|
}
|
|
859
891
|
}
|
|
@@ -863,7 +895,7 @@ let PromptValidator = class PromptValidator {
|
|
|
863
895
|
return;
|
|
864
896
|
}
|
|
865
897
|
report(toMarker(( localize(
|
|
866
|
-
|
|
898
|
+
7495,
|
|
867
899
|
"The 'user-invokable' attribute is deprecated. Use 'user-invocable' instead."
|
|
868
900
|
)), attribute.range, MarkerSeverity.Warning));
|
|
869
901
|
}
|
|
@@ -874,7 +906,7 @@ let PromptValidator = class PromptValidator {
|
|
|
874
906
|
}
|
|
875
907
|
if (!isTrueOrFalse(attribute.value)) {
|
|
876
908
|
report(toMarker(( localize(
|
|
877
|
-
|
|
909
|
+
7496,
|
|
878
910
|
"The 'disable-model-invocation' attribute must be 'true' or 'false'."
|
|
879
911
|
)), attribute.value.range, MarkerSeverity.Error));
|
|
880
912
|
return;
|
|
@@ -886,7 +918,7 @@ let PromptValidator = class PromptValidator {
|
|
|
886
918
|
return;
|
|
887
919
|
}
|
|
888
920
|
if (attribute.value.type !== "sequence") {
|
|
889
|
-
report(toMarker(( localize(
|
|
921
|
+
report(toMarker(( localize(7497, "The 'agents' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
|
|
890
922
|
return;
|
|
891
923
|
}
|
|
892
924
|
const agents = await this.promptsService.getCustomAgents(CancellationToken.None);
|
|
@@ -895,12 +927,12 @@ let PromptValidator = class PromptValidator {
|
|
|
895
927
|
const agentNames = [];
|
|
896
928
|
for (const item of attribute.value.items) {
|
|
897
929
|
if (item.type !== "scalar") {
|
|
898
|
-
report(toMarker(( localize(
|
|
930
|
+
report(toMarker(( localize(7498, "Each agent name in the 'agents' attribute must be a string.")), item.range, MarkerSeverity.Error));
|
|
899
931
|
} else if (item.value) {
|
|
900
932
|
agentNames.push(item.value);
|
|
901
933
|
if (item.value !== "*" && !( availableAgentNames.has(item.value))) {
|
|
902
934
|
report(toMarker(( localize(
|
|
903
|
-
|
|
935
|
+
7499,
|
|
904
936
|
"Unknown agent '{0}'. Available agents: {1}.",
|
|
905
937
|
item.value,
|
|
906
938
|
Array.from(availableAgentNames).join(", ")
|
|
@@ -912,7 +944,7 @@ let PromptValidator = class PromptValidator {
|
|
|
912
944
|
const tools = header.tools;
|
|
913
945
|
if (tools && !tools.includes(SpecedToolAliases.agent)) {
|
|
914
946
|
report(toMarker(( localize(
|
|
915
|
-
|
|
947
|
+
7500,
|
|
916
948
|
"When 'agents' and 'tools' are specified, the 'agent' tool must be included in the 'tools' attribute."
|
|
917
949
|
)), attribute.value.range, MarkerSeverity.Warning));
|
|
918
950
|
}
|
|
@@ -924,20 +956,20 @@ let PromptValidator = class PromptValidator {
|
|
|
924
956
|
return;
|
|
925
957
|
}
|
|
926
958
|
if (attribute.value.type !== "map") {
|
|
927
|
-
report(toMarker(( localize(
|
|
959
|
+
report(toMarker(( localize(7501, "The 'github' attribute must be an object.")), attribute.value.range, MarkerSeverity.Error));
|
|
928
960
|
return;
|
|
929
961
|
}
|
|
930
962
|
for (const prop of attribute.value.properties) {
|
|
931
963
|
if (prop.key.value !== "permissions") {
|
|
932
964
|
report(toMarker(( localize(
|
|
933
|
-
|
|
965
|
+
7502,
|
|
934
966
|
"Unknown property '{0}' in 'github' object. Supported: 'permissions'.",
|
|
935
967
|
prop.key.value
|
|
936
968
|
)), prop.key.range, MarkerSeverity.Warning));
|
|
937
969
|
continue;
|
|
938
970
|
}
|
|
939
971
|
if (prop.value.type !== "map") {
|
|
940
|
-
report(toMarker(( localize(
|
|
972
|
+
report(toMarker(( localize(7503, "The 'permissions' property must be an object.")), prop.value.range, MarkerSeverity.Error));
|
|
941
973
|
continue;
|
|
942
974
|
}
|
|
943
975
|
for (const permProp of prop.value.properties) {
|
|
@@ -946,7 +978,7 @@ let PromptValidator = class PromptValidator {
|
|
|
946
978
|
if (!scopeInfo) {
|
|
947
979
|
const validScopes = ( Object.keys(githubPermissionScopes)).sort().join(", ");
|
|
948
980
|
report(toMarker(( localize(
|
|
949
|
-
|
|
981
|
+
7504,
|
|
950
982
|
"Unknown permission scope '{0}'. Valid scopes: {1}.",
|
|
951
983
|
scope,
|
|
952
984
|
validScopes
|
|
@@ -954,13 +986,13 @@ let PromptValidator = class PromptValidator {
|
|
|
954
986
|
continue;
|
|
955
987
|
}
|
|
956
988
|
if (permProp.value.type !== "scalar") {
|
|
957
|
-
report(toMarker(( localize(
|
|
989
|
+
report(toMarker(( localize(7505, "The permission value for '{0}' must be a string.", scope)), permProp.value.range, MarkerSeverity.Error));
|
|
958
990
|
continue;
|
|
959
991
|
}
|
|
960
992
|
const value = permProp.value.value;
|
|
961
993
|
if (!scopeInfo.allowedValues.includes(value)) {
|
|
962
994
|
report(toMarker(( localize(
|
|
963
|
-
|
|
995
|
+
7506,
|
|
964
996
|
"Invalid permission value '{0}' for scope '{1}'. Allowed values: {2}.",
|
|
965
997
|
value,
|
|
966
998
|
scope,
|
|
@@ -975,39 +1007,39 @@ PromptValidator = ( __decorate([( __param(0, ILanguageModelsService)), ( __param
|
|
|
975
1007
|
const githubPermissionScopes = {
|
|
976
1008
|
"actions": {
|
|
977
1009
|
allowedValues: ["read", "write", "none"],
|
|
978
|
-
description: ( localize(
|
|
1010
|
+
description: ( localize(7507, "Access to GitHub Actions workflows and runs"))
|
|
979
1011
|
},
|
|
980
1012
|
"checks": {
|
|
981
1013
|
allowedValues: ["read", "none"],
|
|
982
|
-
description: ( localize(
|
|
1014
|
+
description: ( localize(7508, "Access to check runs and statuses"))
|
|
983
1015
|
},
|
|
984
1016
|
"contents": {
|
|
985
1017
|
allowedValues: ["read", "write", "none"],
|
|
986
|
-
description: ( localize(
|
|
1018
|
+
description: ( localize(7509, "Access to repository contents (files, commits, branches)"))
|
|
987
1019
|
},
|
|
988
1020
|
"discussions": {
|
|
989
1021
|
allowedValues: ["read", "write", "none"],
|
|
990
|
-
description: ( localize(
|
|
1022
|
+
description: ( localize(7510, "Access to discussions"))
|
|
991
1023
|
},
|
|
992
1024
|
"issues": {
|
|
993
1025
|
allowedValues: ["read", "write", "none"],
|
|
994
|
-
description: ( localize(
|
|
1026
|
+
description: ( localize(7511, "Access to issues (read, create, update, comment)"))
|
|
995
1027
|
},
|
|
996
1028
|
"metadata": {
|
|
997
1029
|
allowedValues: ["read"],
|
|
998
|
-
description: ( localize(
|
|
1030
|
+
description: ( localize(7512, "Repository metadata (always read-only)"))
|
|
999
1031
|
},
|
|
1000
1032
|
"pull-requests": {
|
|
1001
1033
|
allowedValues: ["read", "write", "none"],
|
|
1002
|
-
description: ( localize(
|
|
1034
|
+
description: ( localize(7513, "Access to pull requests (read, create, update, review)"))
|
|
1003
1035
|
},
|
|
1004
1036
|
"security-events": {
|
|
1005
1037
|
allowedValues: ["read", "none"],
|
|
1006
|
-
description: ( localize(
|
|
1038
|
+
description: ( localize(7514, "Access to security-related events"))
|
|
1007
1039
|
},
|
|
1008
1040
|
"workflows": {
|
|
1009
1041
|
allowedValues: ["write", "none"],
|
|
1010
|
-
description: ( localize(
|
|
1042
|
+
description: ( localize(7515, "Access to modify workflow files"))
|
|
1011
1043
|
}
|
|
1012
1044
|
};
|
|
1013
1045
|
function isTrueOrFalse(value) {
|
|
@@ -1096,103 +1128,103 @@ function isNonRecommendedAttribute(attributeName) {
|
|
|
1096
1128
|
}
|
|
1097
1129
|
const knownClaudeTools = [{
|
|
1098
1130
|
name: "Bash",
|
|
1099
|
-
description: ( localize(
|
|
1131
|
+
description: ( localize(7516, "Execute shell commands")),
|
|
1100
1132
|
toolEquivalent: [SpecedToolAliases.execute]
|
|
1101
1133
|
}, {
|
|
1102
1134
|
name: "Edit",
|
|
1103
|
-
description: ( localize(
|
|
1135
|
+
description: ( localize(7517, "Make targeted file edits")),
|
|
1104
1136
|
toolEquivalent: ["edit/editNotebook", "edit/editFiles"]
|
|
1105
1137
|
}, {
|
|
1106
1138
|
name: "Glob",
|
|
1107
|
-
description: ( localize(
|
|
1139
|
+
description: ( localize(7518, "Find files by pattern")),
|
|
1108
1140
|
toolEquivalent: ["search/fileSearch"]
|
|
1109
1141
|
}, {
|
|
1110
1142
|
name: "Grep",
|
|
1111
|
-
description: ( localize(
|
|
1143
|
+
description: ( localize(7519, "Search file contents with regex")),
|
|
1112
1144
|
toolEquivalent: ["search/textSearch"]
|
|
1113
1145
|
}, {
|
|
1114
1146
|
name: "Read",
|
|
1115
|
-
description: ( localize(
|
|
1147
|
+
description: ( localize(7520, "Read file contents")),
|
|
1116
1148
|
toolEquivalent: ["read/readFile", "read/getNotebookSummary"]
|
|
1117
1149
|
}, {
|
|
1118
1150
|
name: "Write",
|
|
1119
|
-
description: ( localize(
|
|
1151
|
+
description: ( localize(7521, "Create/overwrite files")),
|
|
1120
1152
|
toolEquivalent: ["edit/createDirectory", "edit/createFile", "edit/createJupyterNotebook"]
|
|
1121
1153
|
}, {
|
|
1122
1154
|
name: "WebFetch",
|
|
1123
|
-
description: ( localize(
|
|
1155
|
+
description: ( localize(7522, "Fetch URL content")),
|
|
1124
1156
|
toolEquivalent: [SpecedToolAliases.web]
|
|
1125
1157
|
}, {
|
|
1126
1158
|
name: "WebSearch",
|
|
1127
|
-
description: ( localize(
|
|
1159
|
+
description: ( localize(7523, "Perform web searches")),
|
|
1128
1160
|
toolEquivalent: [SpecedToolAliases.web]
|
|
1129
1161
|
}, {
|
|
1130
1162
|
name: "Task",
|
|
1131
|
-
description: ( localize(
|
|
1163
|
+
description: ( localize(7524, "Run subagents for complex tasks")),
|
|
1132
1164
|
toolEquivalent: [SpecedToolAliases.agent]
|
|
1133
1165
|
}, {
|
|
1134
1166
|
name: "Skill",
|
|
1135
|
-
description: ( localize(
|
|
1167
|
+
description: ( localize(7525, "Execute skills")),
|
|
1136
1168
|
toolEquivalent: []
|
|
1137
1169
|
}, {
|
|
1138
1170
|
name: "LSP",
|
|
1139
|
-
description: ( localize(
|
|
1171
|
+
description: ( localize(7526, "Code intelligence (requires plugin)")),
|
|
1140
1172
|
toolEquivalent: []
|
|
1141
1173
|
}, {
|
|
1142
1174
|
name: "NotebookEdit",
|
|
1143
|
-
description: ( localize(
|
|
1175
|
+
description: ( localize(7527, "Modify Jupyter notebooks")),
|
|
1144
1176
|
toolEquivalent: ["edit/editNotebook"]
|
|
1145
1177
|
}, {
|
|
1146
1178
|
name: "AskUserQuestion",
|
|
1147
|
-
description: ( localize(
|
|
1179
|
+
description: ( localize(7528, "Ask multiple-choice questions")),
|
|
1148
1180
|
toolEquivalent: ["vscode/askQuestions"]
|
|
1149
1181
|
}, {
|
|
1150
1182
|
name: "MCPSearch",
|
|
1151
|
-
description: ( localize(
|
|
1183
|
+
description: ( localize(7529, "Searches for MCP tools when tool search is enabled")),
|
|
1152
1184
|
toolEquivalent: []
|
|
1153
1185
|
}];
|
|
1154
1186
|
const knownClaudeModels = [{
|
|
1155
1187
|
name: "sonnet",
|
|
1156
|
-
description: ( localize(
|
|
1188
|
+
description: ( localize(7530, "Latest Claude Sonnet")),
|
|
1157
1189
|
modelEquivalent: "Claude Sonnet 4.5 (copilot)"
|
|
1158
1190
|
}, {
|
|
1159
1191
|
name: "opus",
|
|
1160
|
-
description: ( localize(
|
|
1192
|
+
description: ( localize(7531, "Latest Claude Opus")),
|
|
1161
1193
|
modelEquivalent: "Claude Opus 4.6 (copilot)"
|
|
1162
1194
|
}, {
|
|
1163
1195
|
name: "haiku",
|
|
1164
|
-
description: ( localize(
|
|
1196
|
+
description: ( localize(7532, "Latest Claude Haiku, fast for simple tasks")),
|
|
1165
1197
|
modelEquivalent: "Claude Haiku 4.5 (copilot)"
|
|
1166
1198
|
}, {
|
|
1167
1199
|
name: "inherit",
|
|
1168
|
-
description: ( localize(
|
|
1200
|
+
description: ( localize(7533, "Inherit model from parent agent or prompt")),
|
|
1169
1201
|
modelEquivalent: undefined
|
|
1170
1202
|
}];
|
|
1171
1203
|
const claudeAgentAttributes = {
|
|
1172
1204
|
"name": {
|
|
1173
1205
|
type: "scalar",
|
|
1174
|
-
description: ( localize(
|
|
1206
|
+
description: ( localize(7534, "Unique identifier using lowercase letters and hyphens (required)"))
|
|
1175
1207
|
},
|
|
1176
1208
|
"description": {
|
|
1177
1209
|
type: "scalar",
|
|
1178
|
-
description: ( localize(
|
|
1210
|
+
description: ( localize(7535, "When to delegate to this subagent (required)"))
|
|
1179
1211
|
},
|
|
1180
1212
|
"tools": {
|
|
1181
1213
|
type: "sequence",
|
|
1182
|
-
description: ( localize(
|
|
1214
|
+
description: ( localize(7536, "Array of tools the subagent can use. Inherits all tools if omitted")),
|
|
1183
1215
|
defaults: ["Read, Edit, Bash"],
|
|
1184
1216
|
items: knownClaudeTools
|
|
1185
1217
|
},
|
|
1186
1218
|
"disallowedTools": {
|
|
1187
1219
|
type: "sequence",
|
|
1188
|
-
description: ( localize(
|
|
1220
|
+
description: ( localize(7537, "Tools to deny, removed from inherited or specified list")),
|
|
1189
1221
|
defaults: ["Write, Edit, Bash"],
|
|
1190
1222
|
items: knownClaudeTools
|
|
1191
1223
|
},
|
|
1192
1224
|
"model": {
|
|
1193
1225
|
type: "scalar",
|
|
1194
1226
|
description: ( localize(
|
|
1195
|
-
|
|
1227
|
+
7538,
|
|
1196
1228
|
"Model to use: sonnet, opus, haiku, or inherit. Defaults to inherit."
|
|
1197
1229
|
)),
|
|
1198
1230
|
defaults: ["sonnet", "opus", "haiku", "inherit"],
|
|
@@ -1201,77 +1233,77 @@ const claudeAgentAttributes = {
|
|
|
1201
1233
|
"permissionMode": {
|
|
1202
1234
|
type: "scalar",
|
|
1203
1235
|
description: ( localize(
|
|
1204
|
-
|
|
1236
|
+
7539,
|
|
1205
1237
|
"Permission mode: default, acceptEdits, dontAsk, bypassPermissions, or plan."
|
|
1206
1238
|
)),
|
|
1207
1239
|
defaults: ["default", "acceptEdits", "dontAsk", "bypassPermissions", "plan"],
|
|
1208
1240
|
enums: [{
|
|
1209
1241
|
name: "default",
|
|
1210
1242
|
description: ( localize(
|
|
1211
|
-
|
|
1243
|
+
7540,
|
|
1212
1244
|
"Standard behavior: prompts for permission on first use of each tool."
|
|
1213
1245
|
))
|
|
1214
1246
|
}, {
|
|
1215
1247
|
name: "acceptEdits",
|
|
1216
|
-
description: ( localize(
|
|
1248
|
+
description: ( localize(7541, "Automatically accepts file edit permissions for the session."))
|
|
1217
1249
|
}, {
|
|
1218
1250
|
name: "plan",
|
|
1219
1251
|
description: ( localize(
|
|
1220
|
-
|
|
1252
|
+
7542,
|
|
1221
1253
|
"Plan Mode: Claude can analyze but not modify files or execute commands."
|
|
1222
1254
|
))
|
|
1223
1255
|
}, {
|
|
1224
1256
|
name: "delegate",
|
|
1225
1257
|
description: ( localize(
|
|
1226
|
-
|
|
1258
|
+
7543,
|
|
1227
1259
|
"Coordination-only mode for agent team leads. Only available when an agent team is active."
|
|
1228
1260
|
))
|
|
1229
1261
|
}, {
|
|
1230
1262
|
name: "dontAsk",
|
|
1231
1263
|
description: ( localize(
|
|
1232
|
-
|
|
1264
|
+
7544,
|
|
1233
1265
|
"Auto-denies tools unless pre-approved via /permissions or permissions.allow rules."
|
|
1234
1266
|
))
|
|
1235
1267
|
}, {
|
|
1236
1268
|
name: "bypassPermissions",
|
|
1237
1269
|
description: ( localize(
|
|
1238
|
-
|
|
1270
|
+
7545,
|
|
1239
1271
|
"Skips all permission prompts (requires safe environment like containers)."
|
|
1240
1272
|
))
|
|
1241
1273
|
}]
|
|
1242
1274
|
},
|
|
1243
1275
|
"skills": {
|
|
1244
1276
|
type: "sequence",
|
|
1245
|
-
description: ( localize(
|
|
1277
|
+
description: ( localize(7546, "Skills to load into the subagent's context at startup."))
|
|
1246
1278
|
},
|
|
1247
1279
|
"mcpServers": {
|
|
1248
1280
|
type: "sequence",
|
|
1249
|
-
description: ( localize(
|
|
1281
|
+
description: ( localize(7547, "MCP servers available to this subagent."))
|
|
1250
1282
|
},
|
|
1251
1283
|
"hooks": {
|
|
1252
1284
|
type: "object",
|
|
1253
|
-
description: ( localize(
|
|
1285
|
+
description: ( localize(7548, "Lifecycle hooks scoped to this subagent."))
|
|
1254
1286
|
},
|
|
1255
1287
|
"memory": {
|
|
1256
1288
|
type: "scalar",
|
|
1257
1289
|
description: ( localize(
|
|
1258
|
-
|
|
1290
|
+
7549,
|
|
1259
1291
|
"Persistent memory scope: user, project, or local. Enables cross-session learning."
|
|
1260
1292
|
)),
|
|
1261
1293
|
defaults: ["user", "project", "local"],
|
|
1262
1294
|
enums: [{
|
|
1263
1295
|
name: "user",
|
|
1264
|
-
description: ( localize(
|
|
1296
|
+
description: ( localize(7550, "Remember learnings across all projects."))
|
|
1265
1297
|
}, {
|
|
1266
1298
|
name: "project",
|
|
1267
1299
|
description: ( localize(
|
|
1268
|
-
|
|
1300
|
+
7551,
|
|
1269
1301
|
"The subagent's knowledge is project-specific and shareable via version control."
|
|
1270
1302
|
))
|
|
1271
1303
|
}, {
|
|
1272
1304
|
name: "local",
|
|
1273
1305
|
description: ( localize(
|
|
1274
|
-
|
|
1306
|
+
7552,
|
|
1275
1307
|
"The subagent's knowledge is project-specific but should not be checked into version control."
|
|
1276
1308
|
))
|
|
1277
1309
|
}]
|
|
@@ -1281,14 +1313,14 @@ const claudeRulesAttributes = {
|
|
|
1281
1313
|
"description": {
|
|
1282
1314
|
type: "scalar",
|
|
1283
1315
|
description: ( localize(
|
|
1284
|
-
|
|
1316
|
+
7553,
|
|
1285
1317
|
"A description of what this rule covers, used to provide context about when it applies."
|
|
1286
1318
|
))
|
|
1287
1319
|
},
|
|
1288
1320
|
"paths": {
|
|
1289
1321
|
type: "sequence",
|
|
1290
1322
|
description: ( localize(
|
|
1291
|
-
|
|
1323
|
+
7554,
|
|
1292
1324
|
"Array of glob patterns that describe for which files the rule applies. Based on these patterns, the file is automatically included in the prompt when the context contains a file that matches.\nExample: `['src/**/*.ts', 'test/**']`"
|
|
1293
1325
|
))
|
|
1294
1326
|
}
|