@codingame/monaco-vscode-chat-service-override 26.2.2 → 27.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 +31 -1
- package/package.json +5 -5
- package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +15 -0
- package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.d.ts +53 -0
- package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.js +219 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.d.ts +39 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +83 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +123 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +274 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +71 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +284 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +79 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +378 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +27 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +9 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +74 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +54 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +87 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +71 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +43 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +22 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +154 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -8
- 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 +53 -43
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +84 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +15 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +13 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +16 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +204 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +77 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +541 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +10 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +70 -65
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +7 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +27 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +4 -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.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +90 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +20 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +43 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +7 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +84 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.d.ts → localAgentSessionsController.d.ts} +7 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.js → localAgentSessionsController.js} +24 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +171 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +48 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +19 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +181 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +943 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +248 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +57 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +27 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +118 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +727 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +72 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +165 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +75 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +623 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +858 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +30 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.d.ts +32 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.js +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +19 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +36 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +529 -363
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +18 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +419 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.js +46 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +198 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +305 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +64 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +84 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +27 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +110 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +111 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.d.ts +71 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +611 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +125 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +504 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +914 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +128 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +58 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +429 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +31 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +113 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +126 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +279 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +18 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +122 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +85 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +781 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +5 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +16 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +63 -76
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +26 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatManagementEditor.css +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +15 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +40 -413
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +38 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +56 -46
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +15 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +52 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +138 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +11 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +166 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +6 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +37 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +351 -0
- 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 +118 -63
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +28 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +182 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +892 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +55 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +28 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.js +62 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.d.ts +36 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +110 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.js +39 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.js +39 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +27 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +102 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +16 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +69 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +2 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +76 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.js +30 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +43 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +67 -42
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +31 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +242 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +311 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +10 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +8 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +64 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +4 -2
- 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 +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.d.ts +15 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +42 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +8 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +58 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +6 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +8 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +15 -6
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +39 -0
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +27 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +190 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +11 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +36 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +188 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +18 -8
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +192 -85
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -6
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +16 -8
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +8 -4
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +111 -7
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +52 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +29 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +73 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +622 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +64 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +478 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +1 -30
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +0 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +2 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +23 -22
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +44 -14
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +345 -113
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +14 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +34 -24
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +13 -0
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +11 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +248 -24
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +6 -11
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +18 -81
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +2 -3
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +10 -10
- 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 +6 -6
- 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 +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +6 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +35 -26
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +1 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +13 -11
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +3 -1
- 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/commandLineAutoApproveAnalyzer.js +12 -12
- 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/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 +9 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +280 -65
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -10
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +47 -19
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +31 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
- 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 +6 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +38 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +0 -72
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +0 -587
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +0 -71
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +0 -293
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.js +0 -31
package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
3
|
import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
4
4
|
import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
5
|
-
import {
|
|
5
|
+
import { Emitter, Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
6
6
|
import { parse } from '@codingame/monaco-vscode-api/vscode/vs/base/common/json';
|
|
7
7
|
import { Disposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
8
|
+
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
8
9
|
import { ResourceMap, ResourceSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
|
|
9
10
|
import { isEqual, dirname, joinPath, basename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
10
11
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
@@ -31,11 +32,18 @@ import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vsco
|
|
|
31
32
|
import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT, Target, AgentFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
|
|
32
33
|
import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
33
34
|
import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
|
|
34
|
-
import { getTarget, mapClaudeModels, mapClaudeTools } from '@codingame/monaco-vscode-xterm-addons-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator';
|
|
35
|
-
import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
|
|
36
35
|
import { HookType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
|
|
37
36
|
import { parseHooksFromFile, HookSourceFormat, getHookSourceFormat } from '../hookCompatibility.js';
|
|
38
37
|
import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
|
|
38
|
+
import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
|
|
39
|
+
import { getTarget, mapClaudeModels, mapClaudeTools } from '@codingame/monaco-vscode-xterm-addons-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator';
|
|
40
|
+
import { StopWatch } from '@codingame/monaco-vscode-api/vscode/vs/base/common/stopwatch';
|
|
41
|
+
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
42
|
+
import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
|
|
43
|
+
import { getCanonicalPluginCommandId } from '../../plugins/agentPluginService.js';
|
|
44
|
+
import { IAgentPluginService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginService.service';
|
|
45
|
+
import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
|
|
46
|
+
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
39
47
|
|
|
40
48
|
class SkillMissingNameError extends Error {
|
|
41
49
|
constructor(uri) {
|
|
@@ -73,7 +81,9 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
73
81
|
extensionService,
|
|
74
82
|
telemetryService,
|
|
75
83
|
workspaceService,
|
|
76
|
-
pathService
|
|
84
|
+
pathService,
|
|
85
|
+
contextKeyService,
|
|
86
|
+
agentPluginService
|
|
77
87
|
) {
|
|
78
88
|
super();
|
|
79
89
|
this.logger = logger;
|
|
@@ -89,7 +99,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
89
99
|
this.telemetryService = telemetryService;
|
|
90
100
|
this.workspaceService = workspaceService;
|
|
91
101
|
this.pathService = pathService;
|
|
102
|
+
this.contextKeyService = contextKeyService;
|
|
103
|
+
this.agentPluginService = agentPluginService;
|
|
92
104
|
this.cachedParsedPromptFromModels = ( new ResourceMap());
|
|
105
|
+
this._onDidLogDiscovery = this._register(( new Emitter()));
|
|
106
|
+
this.onDidLogDiscovery = this._onDidLogDiscovery.event;
|
|
93
107
|
this.cachedFileLocations = {};
|
|
94
108
|
this.fileLocatorEvents = {};
|
|
95
109
|
this.contributedFiles = {
|
|
@@ -99,39 +113,95 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
99
113
|
[PromptsType.skill]: ( new ResourceMap()),
|
|
100
114
|
[PromptsType.hook]: ( new ResourceMap())
|
|
101
115
|
};
|
|
116
|
+
this._contributedWhenKeys = ( new Set());
|
|
117
|
+
this._contributedWhenClauses = ( new Map());
|
|
118
|
+
this._onDidContributedWhenChange = this._register(( new Emitter()));
|
|
119
|
+
this._onDidPluginPromptFilesChange = this._register(( new Emitter()));
|
|
120
|
+
this._onDidPluginHooksChange = this._register(( new Emitter()));
|
|
121
|
+
this._pluginPromptFilesByType = ( new Map());
|
|
102
122
|
this.promptFileProviders = [];
|
|
103
123
|
this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
|
|
104
|
-
this.fileLocator = this.
|
|
124
|
+
this.fileLocator = this.createPromptFilesLocator();
|
|
105
125
|
this._register(this.modelService.onModelRemoved(model => {
|
|
106
126
|
this.cachedParsedPromptFromModels.delete(model.uri);
|
|
107
127
|
}));
|
|
128
|
+
this._register(this.contextKeyService.onDidChangeContext(e => {
|
|
129
|
+
if (e.affectsSome(this._contributedWhenKeys)) {
|
|
130
|
+
for (const type of ( Object.keys(this.cachedFileLocations))) {
|
|
131
|
+
this.cachedFileLocations[type] = undefined;
|
|
132
|
+
}
|
|
133
|
+
this._onDidContributedWhenChange.fire();
|
|
134
|
+
}
|
|
135
|
+
}));
|
|
108
136
|
const modelChangeEvent = this._register(( new ModelChangeTracker(this.modelService))).onDidPromptChange;
|
|
109
137
|
this.cachedCustomAgents = this._register(( new CachedPromise(token => this.computeCustomAgents(token), () => Event.any(
|
|
110
138
|
this.getFileLocatorEvent(PromptsType.agent),
|
|
111
|
-
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent)
|
|
139
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent),
|
|
140
|
+
this._onDidContributedWhenChange.event
|
|
112
141
|
))));
|
|
113
142
|
this.cachedSlashCommands = this._register(( new CachedPromise(token => this.computePromptSlashCommands(token), () => Event.any(
|
|
114
143
|
this.getFileLocatorEvent(PromptsType.prompt),
|
|
115
144
|
this.getFileLocatorEvent(PromptsType.skill),
|
|
116
145
|
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt),
|
|
117
|
-
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
|
|
146
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
|
|
147
|
+
this._onDidContributedWhenChange.event,
|
|
148
|
+
this._onDidPluginPromptFilesChange.event
|
|
118
149
|
))));
|
|
119
150
|
this.cachedSkills = this._register(( new CachedPromise(token => this.computeAgentSkills(token), () => Event.any(
|
|
120
151
|
this.getFileLocatorEvent(PromptsType.skill),
|
|
121
|
-
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
|
|
152
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
|
|
153
|
+
this._onDidContributedWhenChange.event,
|
|
154
|
+
this._onDidPluginPromptFilesChange.event
|
|
122
155
|
))));
|
|
123
156
|
this.cachedHooks = this._register(( new CachedPromise(
|
|
124
157
|
token => this.computeHooks(token),
|
|
125
158
|
() => Event.any(this.getFileLocatorEvent(PromptsType.hook), Event.filter(
|
|
126
159
|
this.configurationService.onDidChangeConfiguration,
|
|
127
|
-
e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS)
|
|
128
|
-
),
|
|
129
|
-
this.configurationService.onDidChangeConfiguration,
|
|
130
|
-
e => e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
|
|
131
|
-
))
|
|
160
|
+
e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS) || e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
|
|
161
|
+
), this._onDidPluginHooksChange.event)
|
|
132
162
|
)));
|
|
133
|
-
this._register(this.cachedHooks.onDidChange(() => {}));
|
|
134
163
|
this._register(this.cachedSkills.onDidChange(() => {}));
|
|
164
|
+
this._register(this.cachedHooks.onDidChange(() => {}));
|
|
165
|
+
this._register(
|
|
166
|
+
this.watchPluginPromptFilesForType(PromptsType.prompt, (plugin, reader) => plugin.commands.read(reader))
|
|
167
|
+
);
|
|
168
|
+
this._register(
|
|
169
|
+
this.watchPluginPromptFilesForType(PromptsType.skill, (plugin, reader) => plugin.skills.read(reader))
|
|
170
|
+
);
|
|
171
|
+
this._register(
|
|
172
|
+
this.watchPluginPromptFilesForType(PromptsType.agent, (plugin, reader) => plugin.agents.read(reader))
|
|
173
|
+
);
|
|
174
|
+
this._register(autorun(reader => {
|
|
175
|
+
const plugins = this.agentPluginService.plugins.read(reader);
|
|
176
|
+
for (const plugin of plugins) {
|
|
177
|
+
plugin.hooks.read(reader);
|
|
178
|
+
}
|
|
179
|
+
this._onDidPluginHooksChange.fire();
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
watchPluginPromptFilesForType(type, getItems) {
|
|
183
|
+
return autorun(reader => {
|
|
184
|
+
const plugins = this.agentPluginService.plugins.read(reader);
|
|
185
|
+
const nextFiles = [];
|
|
186
|
+
for (const plugin of plugins) {
|
|
187
|
+
for (const item of getItems(plugin, reader)) {
|
|
188
|
+
nextFiles.push({
|
|
189
|
+
uri: item.uri,
|
|
190
|
+
storage: PromptsStorage.plugin,
|
|
191
|
+
type,
|
|
192
|
+
name: getCanonicalPluginCommandId(plugin, item.name),
|
|
193
|
+
pluginUri: plugin.uri
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
nextFiles.sort((a, b) => `${a.name ?? ""}|${( a.uri.toString())}`.localeCompare(`${b.name ?? ""}|${( b.uri.toString())}`));
|
|
198
|
+
this._pluginPromptFilesByType.set(type, nextFiles);
|
|
199
|
+
this.cachedFileLocations[type] = undefined;
|
|
200
|
+
this._onDidPluginPromptFilesChange.fire();
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
createPromptFilesLocator() {
|
|
204
|
+
return this.instantiationService.createInstance(PromptFilesLocator);
|
|
135
205
|
}
|
|
136
206
|
getFileLocatorEvent(type) {
|
|
137
207
|
let event = this.fileLocatorEvents[type];
|
|
@@ -178,10 +248,41 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
178
248
|
storage: PromptsStorage.local,
|
|
179
249
|
type
|
|
180
250
|
})))),
|
|
181
|
-
this.getExtensionPromptFiles(type, token)
|
|
251
|
+
this.getExtensionPromptFiles(type, token),
|
|
252
|
+
this._pluginPromptFilesByType.get(type) ?? []
|
|
182
253
|
]);
|
|
183
254
|
return [...prompts.flat()];
|
|
184
255
|
}
|
|
256
|
+
async _collectSourceFolderDiagnostics(type, foundFiles) {
|
|
257
|
+
const resolvedFolders = await this.fileLocator.getSourceFoldersInDiscoveryOrder(type);
|
|
258
|
+
const results = [];
|
|
259
|
+
for (const folder of resolvedFolders) {
|
|
260
|
+
const fileCount = foundFiles.filter(f => f.uri.path.startsWith(folder.uri.path + "/")).length;
|
|
261
|
+
let exists = fileCount > 0;
|
|
262
|
+
let errorMessage;
|
|
263
|
+
if (!exists) {
|
|
264
|
+
try {
|
|
265
|
+
const stat = await this.fileService.stat(folder.uri);
|
|
266
|
+
exists = stat.isDirectory;
|
|
267
|
+
} catch (e) {
|
|
268
|
+
if (e instanceof FileOperationError && e.fileOperationResult === FileOperationResult.FILE_NOT_FOUND) {
|
|
269
|
+
exists = false;
|
|
270
|
+
} else {
|
|
271
|
+
exists = false;
|
|
272
|
+
errorMessage = e instanceof Error ? e.message : String(e);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
results.push({
|
|
277
|
+
uri: folder.uri,
|
|
278
|
+
storage: folder.storage,
|
|
279
|
+
exists,
|
|
280
|
+
fileCount,
|
|
281
|
+
errorMessage
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
return results;
|
|
285
|
+
}
|
|
185
286
|
registerPromptFileProvider(extension, type, provider) {
|
|
186
287
|
const providerEntry = {
|
|
187
288
|
extension,
|
|
@@ -192,21 +293,22 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
192
293
|
const disposables = ( new DisposableStore());
|
|
193
294
|
if (provider.onDidChangePromptFiles) {
|
|
194
295
|
disposables.add(provider.onDidChangePromptFiles(() => {
|
|
195
|
-
|
|
196
|
-
this.cachedFileLocations[PromptsType.agent] = undefined;
|
|
197
|
-
this.cachedCustomAgents.refresh();
|
|
198
|
-
} else if (type === PromptsType.instructions) {
|
|
199
|
-
this.cachedFileLocations[PromptsType.instructions] = undefined;
|
|
200
|
-
} else if (type === PromptsType.prompt) {
|
|
201
|
-
this.cachedFileLocations[PromptsType.prompt] = undefined;
|
|
202
|
-
this.cachedSlashCommands.refresh();
|
|
203
|
-
} else if (type === PromptsType.skill) {
|
|
204
|
-
this.cachedFileLocations[PromptsType.skill] = undefined;
|
|
205
|
-
this.cachedSkills.refresh();
|
|
206
|
-
this.cachedSlashCommands.refresh();
|
|
207
|
-
}
|
|
296
|
+
this.invalidatePromptFileCache(type);
|
|
208
297
|
}));
|
|
209
298
|
}
|
|
299
|
+
this.invalidatePromptFileCache(type);
|
|
300
|
+
disposables.add({
|
|
301
|
+
dispose: () => {
|
|
302
|
+
const index = this.promptFileProviders.findIndex(p => p === providerEntry);
|
|
303
|
+
if (index >= 0) {
|
|
304
|
+
this.promptFileProviders.splice(index, 1);
|
|
305
|
+
this.invalidatePromptFileCache(type);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
return disposables;
|
|
310
|
+
}
|
|
311
|
+
invalidatePromptFileCache(type) {
|
|
210
312
|
if (type === PromptsType.agent) {
|
|
211
313
|
this.cachedFileLocations[PromptsType.agent] = undefined;
|
|
212
314
|
this.cachedCustomAgents.refresh();
|
|
@@ -220,28 +322,6 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
220
322
|
this.cachedSkills.refresh();
|
|
221
323
|
this.cachedSlashCommands.refresh();
|
|
222
324
|
}
|
|
223
|
-
disposables.add({
|
|
224
|
-
dispose: () => {
|
|
225
|
-
const index = this.promptFileProviders.findIndex(p => p === providerEntry);
|
|
226
|
-
if (index >= 0) {
|
|
227
|
-
this.promptFileProviders.splice(index, 1);
|
|
228
|
-
if (type === PromptsType.agent) {
|
|
229
|
-
this.cachedFileLocations[PromptsType.agent] = undefined;
|
|
230
|
-
this.cachedCustomAgents.refresh();
|
|
231
|
-
} else if (type === PromptsType.instructions) {
|
|
232
|
-
this.cachedFileLocations[PromptsType.instructions] = undefined;
|
|
233
|
-
} else if (type === PromptsType.prompt) {
|
|
234
|
-
this.cachedFileLocations[PromptsType.prompt] = undefined;
|
|
235
|
-
this.cachedSlashCommands.refresh();
|
|
236
|
-
} else if (type === PromptsType.skill) {
|
|
237
|
-
this.cachedFileLocations[PromptsType.skill] = undefined;
|
|
238
|
-
this.cachedSkills.refresh();
|
|
239
|
-
this.cachedSlashCommands.refresh();
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
return disposables;
|
|
245
325
|
}
|
|
246
326
|
async listFromProviders(type, activationEvent, token) {
|
|
247
327
|
const result = [];
|
|
@@ -268,7 +348,9 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
268
348
|
storage: PromptsStorage.extension,
|
|
269
349
|
type,
|
|
270
350
|
extension: providerEntry.extension,
|
|
271
|
-
source: ExtensionAgentSourceType.provider
|
|
351
|
+
source: ExtensionAgentSourceType.provider,
|
|
352
|
+
name: file.name,
|
|
353
|
+
description: file.description
|
|
272
354
|
});
|
|
273
355
|
}
|
|
274
356
|
} catch (e) {
|
|
@@ -296,6 +378,8 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
296
378
|
storage: PromptsStorage.user,
|
|
297
379
|
type
|
|
298
380
|
}))));
|
|
381
|
+
case PromptsStorage.plugin:
|
|
382
|
+
return this._pluginPromptFilesByType.get(type) ?? [];
|
|
299
383
|
default:
|
|
300
384
|
throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
|
|
301
385
|
}
|
|
@@ -303,7 +387,19 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
303
387
|
async getExtensionPromptFiles(type, token) {
|
|
304
388
|
await this.extensionService.whenInstalledExtensionsRegistered();
|
|
305
389
|
const settledResults = await Promise.allSettled(( this.contributedFiles[type].values()));
|
|
306
|
-
const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value))
|
|
390
|
+
const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value)).filter(file => {
|
|
391
|
+
if (!file.when) {
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
const expr = ContextKeyExpr.deserialize(file.when);
|
|
395
|
+
if (!expr) {
|
|
396
|
+
this.logger.warn(
|
|
397
|
+
`[getExtensionPromptFiles] Ignoring contributed prompt file with invalid when clause: ${file.when}`
|
|
398
|
+
);
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
return this.contextKeyService.contextMatchesRules(expr);
|
|
402
|
+
});
|
|
307
403
|
const activationEvent = this.getProviderActivationEvent(type);
|
|
308
404
|
if (!activationEvent) {
|
|
309
405
|
return contributedFiles;
|
|
@@ -327,16 +423,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
327
423
|
}
|
|
328
424
|
async getSourceFolders(type) {
|
|
329
425
|
const result = [];
|
|
330
|
-
if (type === PromptsType.
|
|
331
|
-
const folders = await this.fileLocator.getAgentSourceFolders();
|
|
332
|
-
for (const uri of folders) {
|
|
333
|
-
result.push({
|
|
334
|
-
uri,
|
|
335
|
-
storage: PromptsStorage.local,
|
|
336
|
-
type
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
} else if (type === PromptsType.hook) {
|
|
426
|
+
if (type === PromptsType.hook) {
|
|
340
427
|
const hooksFolders = await this.fileLocator.getHookSourceFolders();
|
|
341
428
|
for (const uri of hooksFolders) {
|
|
342
429
|
result.push({
|
|
@@ -370,8 +457,8 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
370
457
|
get onDidChangeSlashCommands() {
|
|
371
458
|
return this.cachedSlashCommands.onDidChange;
|
|
372
459
|
}
|
|
373
|
-
async getPromptSlashCommands(token) {
|
|
374
|
-
return this.cachedSlashCommands.get(token);
|
|
460
|
+
async getPromptSlashCommands(token, sessionResource) {
|
|
461
|
+
return await this.cachedSlashCommands.get(token);
|
|
375
462
|
}
|
|
376
463
|
async computePromptSlashCommands(token) {
|
|
377
464
|
const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
|
|
@@ -411,7 +498,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
411
498
|
return result;
|
|
412
499
|
}
|
|
413
500
|
isValidSlashCommandName(command) {
|
|
414
|
-
return command.match(/^[\p{L}\d_
|
|
501
|
+
return command.match(/^[\p{L}\d_\-\.:]+$/u) !== null;
|
|
415
502
|
}
|
|
416
503
|
async resolvePromptSlashCommand(name, token) {
|
|
417
504
|
const commands = await this.getPromptSlashCommands(token);
|
|
@@ -419,7 +506,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
419
506
|
}
|
|
420
507
|
asChatPromptSlashCommand(parsedPromptFile, promptPath) {
|
|
421
508
|
let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
|
|
422
|
-
name = name.replace(/[^\p{L}\d_
|
|
509
|
+
name = name.replace(/[^\p{L}\d_\-\.:]+/gu, "-");
|
|
423
510
|
return {
|
|
424
511
|
name: name,
|
|
425
512
|
description: parsedPromptFile?.header?.description ?? promptPath.description,
|
|
@@ -439,8 +526,22 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
439
526
|
get onDidChangeCustomAgents() {
|
|
440
527
|
return this.cachedCustomAgents.onDidChange;
|
|
441
528
|
}
|
|
442
|
-
async getCustomAgents(token) {
|
|
443
|
-
|
|
529
|
+
async getCustomAgents(token, sessionResource) {
|
|
530
|
+
const sw = StopWatch.create();
|
|
531
|
+
const result = await this.cachedCustomAgents.get(token);
|
|
532
|
+
if (sessionResource) {
|
|
533
|
+
const elapsed = sw.elapsed();
|
|
534
|
+
const discoveryInfo = await this.getAgentDiscoveryInfo(token);
|
|
535
|
+
const details = result.length === 1 ? ( localize(7150, "Resolved {0} agent in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7151, "Resolved {0} agents in {1}ms", result.length, elapsed.toFixed(1)));
|
|
536
|
+
this._onDidLogDiscovery.fire({
|
|
537
|
+
sessionResource,
|
|
538
|
+
name: ( localize(7152, "Load Agents")),
|
|
539
|
+
details,
|
|
540
|
+
discoveryInfo,
|
|
541
|
+
category: "discovery"
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
return result;
|
|
444
545
|
}
|
|
445
546
|
async computeCustomAgents(token) {
|
|
446
547
|
let agentFiles = await this.listPromptFiles(PromptsType.agent, token);
|
|
@@ -452,10 +553,10 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
452
553
|
let metadata;
|
|
453
554
|
if (ast.header) {
|
|
454
555
|
const advanced = ast.header.getAttribute(PromptHeaderAttributes.advancedOptions);
|
|
455
|
-
if (advanced && advanced.value.type === "
|
|
556
|
+
if (advanced && advanced.value.type === "map") {
|
|
456
557
|
metadata = {};
|
|
457
558
|
for (const [key, value] of Object.entries(advanced.value)) {
|
|
458
|
-
if (
|
|
559
|
+
if (value.type === "scalar") {
|
|
459
560
|
metadata[key] = value;
|
|
460
561
|
}
|
|
461
562
|
}
|
|
@@ -493,14 +594,14 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
493
594
|
source,
|
|
494
595
|
target,
|
|
495
596
|
visibility: {
|
|
496
|
-
|
|
497
|
-
|
|
597
|
+
userInvocable: true,
|
|
598
|
+
agentInvocable: true
|
|
498
599
|
}
|
|
499
600
|
};
|
|
500
601
|
}
|
|
501
602
|
const visibility = {
|
|
502
|
-
|
|
503
|
-
|
|
603
|
+
userInvocable: ast.header.userInvocable !== false,
|
|
604
|
+
agentInvocable: ast.header.infer === true || ast.header.disableModelInvocation !== true
|
|
504
605
|
};
|
|
505
606
|
let model = ast.header.model;
|
|
506
607
|
if (target === Target.Claude && model) {
|
|
@@ -562,7 +663,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
562
663
|
}
|
|
563
664
|
return ( new PromptFileParser()).parse(uri, ( fileContent.value.toString()));
|
|
564
665
|
}
|
|
565
|
-
registerContributedFile(type, uri, extension, name, description) {
|
|
666
|
+
registerContributedFile(type, uri, extension, name, description, when) {
|
|
566
667
|
const bucket = this.contributedFiles[type];
|
|
567
668
|
if (( bucket.has(uri))) {
|
|
568
669
|
return Disposable.None;
|
|
@@ -595,6 +696,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
595
696
|
uri,
|
|
596
697
|
name,
|
|
597
698
|
description,
|
|
699
|
+
when,
|
|
598
700
|
storage: PromptsStorage.extension,
|
|
599
701
|
type,
|
|
600
702
|
extension,
|
|
@@ -602,7 +704,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
602
704
|
};
|
|
603
705
|
})();
|
|
604
706
|
bucket.set(uri, entryPromise);
|
|
707
|
+
if (when) {
|
|
708
|
+
this._contributedWhenClauses.set(`${type}/${( uri.toString())}`, when);
|
|
709
|
+
}
|
|
605
710
|
const flushCachesIfRequired = () => {
|
|
711
|
+
this._updateContributedWhenKeys();
|
|
606
712
|
this.cachedFileLocations[type] = undefined;
|
|
607
713
|
switch (type) {
|
|
608
714
|
case PromptsType.agent:
|
|
@@ -621,10 +727,20 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
621
727
|
return {
|
|
622
728
|
dispose: () => {
|
|
623
729
|
bucket.delete(uri);
|
|
730
|
+
this._contributedWhenClauses.delete(`${type}/${( uri.toString())}`);
|
|
624
731
|
flushCachesIfRequired();
|
|
625
732
|
}
|
|
626
733
|
};
|
|
627
734
|
}
|
|
735
|
+
_updateContributedWhenKeys() {
|
|
736
|
+
this._contributedWhenKeys.clear();
|
|
737
|
+
for (const whenClause of ( this._contributedWhenClauses.values())) {
|
|
738
|
+
const expr = ContextKeyExpr.deserialize(whenClause);
|
|
739
|
+
for (const key of expr?.keys() ?? []) {
|
|
740
|
+
this._contributedWhenKeys.add(key);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
628
744
|
getPromptLocationLabel(promptPath) {
|
|
629
745
|
switch (promptPath.storage) {
|
|
630
746
|
case PromptsStorage.local:
|
|
@@ -632,17 +748,19 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
632
748
|
relative: true
|
|
633
749
|
});
|
|
634
750
|
case PromptsStorage.user:
|
|
635
|
-
return localize(
|
|
751
|
+
return localize(7153, "User Data");
|
|
636
752
|
case PromptsStorage.extension:
|
|
637
753
|
{
|
|
638
754
|
return localize(
|
|
639
|
-
|
|
755
|
+
7154,
|
|
640
756
|
"Extension: {0}",
|
|
641
757
|
promptPath.extension.displayName ?? promptPath.extension.id
|
|
642
758
|
);
|
|
643
759
|
}
|
|
760
|
+
case PromptsStorage.plugin:
|
|
761
|
+
return localize(7155, "Plugin");
|
|
644
762
|
default:
|
|
645
|
-
|
|
763
|
+
assertNever(promptPath, "Unknown prompt storage type");
|
|
646
764
|
}
|
|
647
765
|
}
|
|
648
766
|
async listNestedAgentMDs(token) {
|
|
@@ -843,12 +961,26 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
843
961
|
get onDidChangeSkills() {
|
|
844
962
|
return this.cachedSkills.onDidChange;
|
|
845
963
|
}
|
|
846
|
-
async findAgentSkills(token) {
|
|
964
|
+
async findAgentSkills(token, sessionResource) {
|
|
847
965
|
const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
|
|
848
966
|
if (!useAgentSkills) {
|
|
849
967
|
return undefined;
|
|
850
968
|
}
|
|
851
|
-
|
|
969
|
+
const sw = StopWatch.create();
|
|
970
|
+
const result = await this.cachedSkills.get(token);
|
|
971
|
+
if (sessionResource) {
|
|
972
|
+
const elapsed = sw.elapsed();
|
|
973
|
+
const discoveryInfo = await this.getSkillDiscoveryInfo(token);
|
|
974
|
+
const details = result.length === 1 ? ( localize(7156, "Resolved {0} skill in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7157, "Resolved {0} skills in {1}ms", result.length, elapsed.toFixed(1)));
|
|
975
|
+
this._onDidLogDiscovery.fire({
|
|
976
|
+
sessionResource,
|
|
977
|
+
name: ( localize(7158, "Load Skills")),
|
|
978
|
+
details,
|
|
979
|
+
discoveryInfo,
|
|
980
|
+
category: "discovery"
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
return result;
|
|
852
984
|
}
|
|
853
985
|
async computeAgentSkills(token) {
|
|
854
986
|
const {
|
|
@@ -865,7 +997,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
865
997
|
name: file.name,
|
|
866
998
|
description: sanitizedDescription,
|
|
867
999
|
disableModelInvocation: file.disableModelInvocation ?? false,
|
|
868
|
-
|
|
1000
|
+
userInvocable: file.userInvocable ?? true
|
|
869
1001
|
});
|
|
870
1002
|
}
|
|
871
1003
|
}
|
|
@@ -907,6 +1039,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
907
1039
|
configPersonal: skillsBySource.get(PromptFileSource.ConfigPersonal) ?? 0,
|
|
908
1040
|
extensionContribution: skillsBySource.get(PromptFileSource.ExtensionContribution) ?? 0,
|
|
909
1041
|
extensionAPI: skillsBySource.get(PromptFileSource.ExtensionAPI) ?? 0,
|
|
1042
|
+
plugin: skillsBySource.get(PromptFileSource.Plugin) ?? 0,
|
|
910
1043
|
skippedDuplicateName,
|
|
911
1044
|
skippedMissingName,
|
|
912
1045
|
skippedMissingDescription,
|
|
@@ -915,8 +1048,50 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
915
1048
|
});
|
|
916
1049
|
return result;
|
|
917
1050
|
}
|
|
918
|
-
async getHooks(token) {
|
|
919
|
-
|
|
1051
|
+
async getHooks(token, sessionResource) {
|
|
1052
|
+
const sw = StopWatch.create();
|
|
1053
|
+
const result = await this.cachedHooks.get(token);
|
|
1054
|
+
if (sessionResource) {
|
|
1055
|
+
const elapsed = sw.elapsed();
|
|
1056
|
+
const hookCount = result ? ( Object.values(result.hooks)).reduce((sum, arr) => sum + arr.length, 0) : 0;
|
|
1057
|
+
const discoveryInfo = await this.getHookDiscoveryInfo(token);
|
|
1058
|
+
const details = hookCount === 1 ? ( localize(7159, "Resolved {0} hook in {1}ms", hookCount, elapsed.toFixed(1))) : ( localize(7160, "Resolved {0} hooks in {1}ms", hookCount, elapsed.toFixed(1)));
|
|
1059
|
+
this._onDidLogDiscovery.fire({
|
|
1060
|
+
sessionResource,
|
|
1061
|
+
name: ( localize(7161, "Load Hooks")),
|
|
1062
|
+
details,
|
|
1063
|
+
discoveryInfo,
|
|
1064
|
+
category: "discovery"
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
return result;
|
|
1068
|
+
}
|
|
1069
|
+
async getInstructionFiles(token, sessionResource) {
|
|
1070
|
+
const sw = StopWatch.create();
|
|
1071
|
+
const result = await this.listPromptFiles(PromptsType.instructions, token);
|
|
1072
|
+
if (sessionResource) {
|
|
1073
|
+
const elapsed = sw.elapsed();
|
|
1074
|
+
const discoveryInfo = await this.getInstructionsDiscoveryInfo(token);
|
|
1075
|
+
const details = result.length === 1 ? ( localize(
|
|
1076
|
+
7162,
|
|
1077
|
+
"Resolved {0} instruction in {1}ms",
|
|
1078
|
+
result.length,
|
|
1079
|
+
elapsed.toFixed(1)
|
|
1080
|
+
)) : ( localize(
|
|
1081
|
+
7163,
|
|
1082
|
+
"Resolved {0} instructions in {1}ms",
|
|
1083
|
+
result.length,
|
|
1084
|
+
elapsed.toFixed(1)
|
|
1085
|
+
));
|
|
1086
|
+
this._onDidLogDiscovery.fire({
|
|
1087
|
+
sessionResource,
|
|
1088
|
+
name: ( localize(7164, "Load Instructions")),
|
|
1089
|
+
details,
|
|
1090
|
+
discoveryInfo,
|
|
1091
|
+
category: "discovery"
|
|
1092
|
+
});
|
|
1093
|
+
}
|
|
1094
|
+
return result;
|
|
920
1095
|
}
|
|
921
1096
|
async computeHooks(token) {
|
|
922
1097
|
const useChatHooks = this.configurationService.getValue(PromptsConfig.USE_CHAT_HOOKS);
|
|
@@ -925,15 +1100,9 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
925
1100
|
}
|
|
926
1101
|
const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
|
|
927
1102
|
const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
|
|
928
|
-
if (hookFiles.length === 0) {
|
|
929
|
-
this.logger.trace("[PromptsService] No hook files found.");
|
|
930
|
-
return undefined;
|
|
931
|
-
}
|
|
932
1103
|
this.logger.trace(`[PromptsService] Found ${hookFiles.length} hook file(s).`);
|
|
933
1104
|
const userHomeUri = await this.pathService.userHome();
|
|
934
1105
|
const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
|
|
935
|
-
const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
|
|
936
|
-
const workspaceRootUri = workspaceFolder?.uri;
|
|
937
1106
|
let hasDisabledClaudeHooks = false;
|
|
938
1107
|
const collectedHooks = {
|
|
939
1108
|
[HookType.SessionStart]: [],
|
|
@@ -945,10 +1114,13 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
945
1114
|
[HookType.SubagentStop]: [],
|
|
946
1115
|
[HookType.Stop]: []
|
|
947
1116
|
};
|
|
1117
|
+
const defaultFolder = this.workspaceService.getWorkspace().folders[0];
|
|
948
1118
|
for (const hookFile of hookFiles) {
|
|
949
1119
|
try {
|
|
950
1120
|
const content = await this.fileService.readFile(hookFile.uri);
|
|
951
1121
|
const json = parse(( content.value.toString()));
|
|
1122
|
+
const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(hookFile.uri) ?? defaultFolder;
|
|
1123
|
+
const workspaceRootUri = hookWorkspaceFolder?.uri;
|
|
952
1124
|
const {
|
|
953
1125
|
format,
|
|
954
1126
|
hooks,
|
|
@@ -988,6 +1160,12 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
988
1160
|
this.logger.warn(`[PromptsService] Failed to parse hook file: ${hookFile.uri}`, error);
|
|
989
1161
|
}
|
|
990
1162
|
}
|
|
1163
|
+
const plugins = this.agentPluginService.plugins.get();
|
|
1164
|
+
for (const plugin of plugins) {
|
|
1165
|
+
for (const hook of plugin.hooks.get()) {
|
|
1166
|
+
collectedHooks[hook.type].push(...hook.hooks);
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
991
1169
|
const hasHooks = ( ( Object.values(collectedHooks)).some(arr => arr.length > 0));
|
|
992
1170
|
if (!hasHooks) {
|
|
993
1171
|
this.logger.trace("[PromptsService] No valid hooks collected.");
|
|
@@ -1002,23 +1180,52 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1002
1180
|
hasDisabledClaudeHooks
|
|
1003
1181
|
};
|
|
1004
1182
|
}
|
|
1005
|
-
async getPromptDiscoveryInfo(type, token) {
|
|
1183
|
+
async getPromptDiscoveryInfo(type, token, sessionResource) {
|
|
1184
|
+
if (sessionResource) {
|
|
1185
|
+
this._onDidLogDiscovery.fire({
|
|
1186
|
+
sessionResource,
|
|
1187
|
+
name: ( localize(7165, "Discovery {0} (Start)", type)),
|
|
1188
|
+
category: "discovery"
|
|
1189
|
+
});
|
|
1190
|
+
}
|
|
1006
1191
|
const files = [];
|
|
1192
|
+
let result;
|
|
1007
1193
|
if (type === PromptsType.skill) {
|
|
1008
|
-
|
|
1194
|
+
result = await this.getSkillDiscoveryInfo(token);
|
|
1009
1195
|
} else if (type === PromptsType.agent) {
|
|
1010
|
-
|
|
1196
|
+
result = await this.getAgentDiscoveryInfo(token);
|
|
1011
1197
|
} else if (type === PromptsType.prompt) {
|
|
1012
|
-
|
|
1198
|
+
result = await this.getPromptSlashCommandDiscoveryInfo(token);
|
|
1013
1199
|
} else if (type === PromptsType.instructions) {
|
|
1014
|
-
|
|
1200
|
+
result = await this.getInstructionsDiscoveryInfo(token);
|
|
1015
1201
|
} else if (type === PromptsType.hook) {
|
|
1016
|
-
|
|
1202
|
+
result = await this.getHookDiscoveryInfo(token);
|
|
1203
|
+
} else {
|
|
1204
|
+
result = {
|
|
1205
|
+
type,
|
|
1206
|
+
files
|
|
1207
|
+
};
|
|
1017
1208
|
}
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1209
|
+
const loadedCount = result.files.filter(f => f.status === "loaded").length;
|
|
1210
|
+
const skippedCount = result.files.filter(f => f.status === "skipped").length;
|
|
1211
|
+
if (!result.sourceFolders) {
|
|
1212
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(type, result.files.filter(f => f.status === "loaded"));
|
|
1213
|
+
result = {
|
|
1214
|
+
...result,
|
|
1215
|
+
sourceFolders
|
|
1216
|
+
};
|
|
1217
|
+
}
|
|
1218
|
+
if (sessionResource) {
|
|
1219
|
+
const details = ( localize(7166, "{0} loaded, {1} skipped", loadedCount, skippedCount));
|
|
1220
|
+
this._onDidLogDiscovery.fire({
|
|
1221
|
+
sessionResource,
|
|
1222
|
+
name: ( localize(7167, "Discovery {0} (End)", type)),
|
|
1223
|
+
details,
|
|
1224
|
+
discoveryInfo: result,
|
|
1225
|
+
category: "discovery"
|
|
1226
|
+
});
|
|
1227
|
+
}
|
|
1228
|
+
return result;
|
|
1022
1229
|
}
|
|
1023
1230
|
async getSkillDiscoveryInfo(token) {
|
|
1024
1231
|
const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
|
|
@@ -1031,17 +1238,21 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1031
1238
|
skipReason: "disabled",
|
|
1032
1239
|
extensionId: promptPath.extension?.identifier?.value
|
|
1033
1240
|
})));
|
|
1241
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, []);
|
|
1034
1242
|
return {
|
|
1035
1243
|
type: PromptsType.skill,
|
|
1036
|
-
files
|
|
1244
|
+
files,
|
|
1245
|
+
sourceFolders
|
|
1037
1246
|
};
|
|
1038
1247
|
}
|
|
1039
1248
|
const {
|
|
1040
1249
|
files
|
|
1041
1250
|
} = await this.computeSkillDiscoveryInfo(token);
|
|
1251
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, files.filter(f => f.status === "loaded"));
|
|
1042
1252
|
return {
|
|
1043
1253
|
type: PromptsType.skill,
|
|
1044
|
-
files
|
|
1254
|
+
files,
|
|
1255
|
+
sourceFolders
|
|
1045
1256
|
};
|
|
1046
1257
|
}
|
|
1047
1258
|
async computeSkillDiscoveryInfo(token) {
|
|
@@ -1052,10 +1263,15 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1052
1263
|
const allSkills = [];
|
|
1053
1264
|
const discoveredSkills = await this.fileLocator.findAgentSkills(token);
|
|
1054
1265
|
const extensionSkills = await this.getExtensionPromptFiles(PromptsType.skill, token);
|
|
1266
|
+
const pluginSkills = this._pluginPromptFilesByType.get(PromptsType.skill) ?? [];
|
|
1055
1267
|
allSkills.push(...discoveredSkills, ...( extensionSkills.map(extPath => ({
|
|
1056
1268
|
fileUri: extPath.uri,
|
|
1057
1269
|
storage: extPath.storage,
|
|
1058
1270
|
source: extPath.source === ExtensionAgentSourceType.contribution ? PromptFileSource.ExtensionContribution : PromptFileSource.ExtensionAPI
|
|
1271
|
+
}))), ...( pluginSkills.map(p => ({
|
|
1272
|
+
fileUri: p.uri,
|
|
1273
|
+
storage: p.storage,
|
|
1274
|
+
source: PromptFileSource.Plugin
|
|
1059
1275
|
}))));
|
|
1060
1276
|
const getPriority = skill => {
|
|
1061
1277
|
if (skill.storage === PromptsStorage.local) {
|
|
@@ -1064,13 +1280,16 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1064
1280
|
if (skill.storage === PromptsStorage.user) {
|
|
1065
1281
|
return 1;
|
|
1066
1282
|
}
|
|
1067
|
-
if (skill.
|
|
1283
|
+
if (skill.storage === PromptsStorage.plugin) {
|
|
1068
1284
|
return 2;
|
|
1069
1285
|
}
|
|
1070
|
-
if (skill.source === PromptFileSource.
|
|
1286
|
+
if (skill.source === PromptFileSource.ExtensionAPI) {
|
|
1071
1287
|
return 3;
|
|
1072
1288
|
}
|
|
1073
|
-
|
|
1289
|
+
if (skill.source === PromptFileSource.ExtensionContribution) {
|
|
1290
|
+
return 4;
|
|
1291
|
+
}
|
|
1292
|
+
return 5;
|
|
1074
1293
|
};
|
|
1075
1294
|
allSkills.sort((a, b) => getPriority(a) - getPriority(b));
|
|
1076
1295
|
const extensionIdByUri = ( new Map());
|
|
@@ -1152,7 +1371,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1152
1371
|
seenNames.add(sanitizedName);
|
|
1153
1372
|
nameToUri.set(sanitizedName, uri);
|
|
1154
1373
|
const disableModelInvocation = parsedFile.header?.disableModelInvocation === true;
|
|
1155
|
-
const
|
|
1374
|
+
const userInvocable = parsedFile.header?.userInvocable !== false;
|
|
1156
1375
|
files.push({
|
|
1157
1376
|
uri,
|
|
1158
1377
|
storage,
|
|
@@ -1162,7 +1381,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1162
1381
|
extensionId,
|
|
1163
1382
|
source,
|
|
1164
1383
|
disableModelInvocation,
|
|
1165
|
-
|
|
1384
|
+
userInvocable
|
|
1166
1385
|
});
|
|
1167
1386
|
skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
|
|
1168
1387
|
} catch (e) {
|
|
@@ -1226,9 +1445,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1226
1445
|
});
|
|
1227
1446
|
}
|
|
1228
1447
|
}
|
|
1448
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.agent, files.filter(f => f.status === "loaded"));
|
|
1229
1449
|
return {
|
|
1230
1450
|
type: PromptsType.agent,
|
|
1231
|
-
files
|
|
1451
|
+
files,
|
|
1452
|
+
sourceFolders
|
|
1232
1453
|
};
|
|
1233
1454
|
}
|
|
1234
1455
|
async getPromptSlashCommandDiscoveryInfo(token) {
|
|
@@ -1259,9 +1480,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1259
1480
|
});
|
|
1260
1481
|
}
|
|
1261
1482
|
}
|
|
1483
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.prompt, files.filter(f => f.status === "loaded"));
|
|
1262
1484
|
return {
|
|
1263
1485
|
type: PromptsType.prompt,
|
|
1264
|
-
files
|
|
1486
|
+
files,
|
|
1487
|
+
sourceFolders
|
|
1265
1488
|
};
|
|
1266
1489
|
}
|
|
1267
1490
|
async getInstructionsDiscoveryInfo(token) {
|
|
@@ -1292,17 +1515,17 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1292
1515
|
});
|
|
1293
1516
|
}
|
|
1294
1517
|
}
|
|
1518
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.instructions, files.filter(f => f.status === "loaded"));
|
|
1295
1519
|
return {
|
|
1296
1520
|
type: PromptsType.instructions,
|
|
1297
|
-
files
|
|
1521
|
+
files,
|
|
1522
|
+
sourceFolders
|
|
1298
1523
|
};
|
|
1299
1524
|
}
|
|
1300
1525
|
async getHookDiscoveryInfo(token) {
|
|
1301
1526
|
const files = [];
|
|
1302
1527
|
const userHomeUri = await this.pathService.userHome();
|
|
1303
1528
|
const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
|
|
1304
|
-
const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
|
|
1305
|
-
const workspaceRootUri = workspaceFolder?.uri;
|
|
1306
1529
|
const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
|
|
1307
1530
|
const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
|
|
1308
1531
|
for (const promptPath of hookFiles) {
|
|
@@ -1336,6 +1559,8 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1336
1559
|
});
|
|
1337
1560
|
continue;
|
|
1338
1561
|
}
|
|
1562
|
+
const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(uri) ?? this.workspaceService.getWorkspace().folders[0];
|
|
1563
|
+
const workspaceRootUri = hookWorkspaceFolder?.uri;
|
|
1339
1564
|
const {
|
|
1340
1565
|
disabledAllHooks
|
|
1341
1566
|
} = parseHooksFromFile(uri, json, workspaceRootUri, userHome);
|
|
@@ -1369,13 +1594,15 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1369
1594
|
});
|
|
1370
1595
|
}
|
|
1371
1596
|
}
|
|
1597
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.hook, files.filter(f => f.status === "loaded"));
|
|
1372
1598
|
return {
|
|
1373
1599
|
type: PromptsType.hook,
|
|
1374
|
-
files
|
|
1600
|
+
files,
|
|
1601
|
+
sourceFolders
|
|
1375
1602
|
};
|
|
1376
1603
|
}
|
|
1377
1604
|
};
|
|
1378
|
-
PromptsService = ( __decorate([( __param(0, ILogService)), ( __param(1, ILabelService)), ( __param(2, IModelService)), ( __param(3, IInstantiationService)), ( __param(4, IUserDataProfileService)), ( __param(5, IConfigurationService)), ( __param(6, IFileService)), ( __param(7, IFilesConfigurationService)), ( __param(8, IStorageService)), ( __param(9, IExtensionService)), ( __param(10, ITelemetryService)), ( __param(11, IWorkspaceContextService)), ( __param(12, IPathService))], PromptsService));
|
|
1605
|
+
PromptsService = ( __decorate([( __param(0, ILogService)), ( __param(1, ILabelService)), ( __param(2, IModelService)), ( __param(3, IInstantiationService)), ( __param(4, IUserDataProfileService)), ( __param(5, IConfigurationService)), ( __param(6, IFileService)), ( __param(7, IFilesConfigurationService)), ( __param(8, IStorageService)), ( __param(9, IExtensionService)), ( __param(10, ITelemetryService)), ( __param(11, IWorkspaceContextService)), ( __param(12, IPathService)), ( __param(13, IContextKeyService)), ( __param(14, IAgentPluginService))], PromptsService));
|
|
1379
1606
|
class CachedPromise extends Disposable {
|
|
1380
1607
|
constructor(computeFn, getEvent, delay = 0) {
|
|
1381
1608
|
super();
|
|
@@ -1468,6 +1695,11 @@ var IAgentSource;
|
|
|
1468
1695
|
extensionId: promptPath.extension.identifier,
|
|
1469
1696
|
type: promptPath.source
|
|
1470
1697
|
};
|
|
1698
|
+
} else if (promptPath.storage === PromptsStorage.plugin) {
|
|
1699
|
+
return {
|
|
1700
|
+
storage: PromptsStorage.plugin,
|
|
1701
|
+
pluginUri: promptPath.pluginUri
|
|
1702
|
+
};
|
|
1471
1703
|
} else {
|
|
1472
1704
|
return {
|
|
1473
1705
|
storage: promptPath.storage
|