@codingame/monaco-vscode-chat-service-override 26.2.2 → 28.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 +35 -2
- 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 +89 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +251 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +123 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +278 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +76 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +299 -0
- package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.d.ts +67 -0
- package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.js +263 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +85 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +397 -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 +13 -5
- 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 +85 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +8 -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 +18 -32
- 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 +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +49 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.d.ts +58 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +537 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.d.ts +17 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.js +9 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/media/agentPluginEditor.css +32 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +48 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +282 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +634 -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 +74 -67
- 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 +52 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +179 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +987 -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 +246 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +56 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +130 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +878 -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 +83 -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 +692 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +936 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +62 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +702 -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/simpleBrowserEditorOverlay.js +36 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +622 -391
- 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 +314 -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 +46 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +170 -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 +61 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +467 -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 +47 -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 +788 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +2 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +32 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +6 -24
- 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/media/chatEditorController.css +2 -2
- 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 +24 -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 +17 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +394 -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/chatTipCatalog.d.ts +66 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +245 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.d.ts +78 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.js +234 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +88 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +624 -68
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.js +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +88 -24
- 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 +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +175 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.d.ts +99 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +489 -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 +19 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +364 -279
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.d.ts +18 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +69 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +9 -9
- 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.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +67 -38
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +20 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +187 -74
- 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.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +29 -14
- 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 +126 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +9 -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 +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 +46 -9
- 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 +65 -37
- 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 +16 -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 +40 -0
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +28 -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 +44 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +208 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +19 -9
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +261 -105
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +21 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +7 -2
- 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 +13 -4
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +144 -11
- package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +36 -3
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +57 -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 +119 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +748 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +146 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +672 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +3 -16
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +7 -50
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +1 -6
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +4 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +10 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +26 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +293 -94
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.d.ts +10 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +86 -30
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +121 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +1422 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +48 -14
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +404 -132
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +17 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +40 -28
- 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/chat/common/widget/chatResponseResourceFileSystemProvider.d.ts +14 -2
- package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +54 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +12 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +27 -4
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +265 -25
- 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 +17 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +302 -69
- 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 +7 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +63 -21
- 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 +7 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +46 -17
- 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/browser/attachments/chatVariables.d.ts +0 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +0 -51
- 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';
|
|
@@ -25,17 +26,25 @@ import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platfo
|
|
|
25
26
|
import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
|
|
26
27
|
import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
|
|
27
28
|
import { getCleanPromptName, AGENT_MD_FILENAME, CLAUDE_CONFIG_FOLDER, CLAUDE_MD_FILENAME, CLAUDE_LOCAL_MD_FILENAME, PromptFileSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
28
|
-
import { PromptsType, PROMPT_LANGUAGE_ID, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
29
|
+
import { PromptsType, PROMPT_LANGUAGE_ID, Target, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
29
30
|
import { PromptFilesLocator } from '../utils/promptFilesLocator.js';
|
|
30
31
|
import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
|
|
31
|
-
import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT,
|
|
32
|
+
import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT, 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 {
|
|
35
|
-
import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
|
|
36
|
-
import { HookType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
|
|
35
|
+
import { parseSubagentHooksFromYaml } 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 { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
|
|
39
|
+
import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
|
|
40
|
+
import { getTarget, mapClaudeModels, mapClaudeTools } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptFileAttributes';
|
|
41
|
+
import { StopWatch } from '@codingame/monaco-vscode-api/vscode/vs/base/common/stopwatch';
|
|
42
|
+
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
43
|
+
import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
|
|
44
|
+
import { getCanonicalPluginCommandId } from '../../plugins/agentPluginService.js';
|
|
45
|
+
import { IAgentPluginService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginService.service';
|
|
46
|
+
import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
|
|
47
|
+
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
39
48
|
|
|
40
49
|
class SkillMissingNameError extends Error {
|
|
41
50
|
constructor(uri) {
|
|
@@ -73,7 +82,10 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
73
82
|
extensionService,
|
|
74
83
|
telemetryService,
|
|
75
84
|
workspaceService,
|
|
76
|
-
pathService
|
|
85
|
+
pathService,
|
|
86
|
+
contextKeyService,
|
|
87
|
+
agentPluginService,
|
|
88
|
+
workspaceTrustService
|
|
77
89
|
) {
|
|
78
90
|
super();
|
|
79
91
|
this.logger = logger;
|
|
@@ -89,7 +101,12 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
89
101
|
this.telemetryService = telemetryService;
|
|
90
102
|
this.workspaceService = workspaceService;
|
|
91
103
|
this.pathService = pathService;
|
|
104
|
+
this.contextKeyService = contextKeyService;
|
|
105
|
+
this.agentPluginService = agentPluginService;
|
|
106
|
+
this.workspaceTrustService = workspaceTrustService;
|
|
92
107
|
this.cachedParsedPromptFromModels = ( new ResourceMap());
|
|
108
|
+
this._onDidLogDiscovery = this._register(( new Emitter()));
|
|
109
|
+
this.onDidLogDiscovery = this._onDidLogDiscovery.event;
|
|
93
110
|
this.cachedFileLocations = {};
|
|
94
111
|
this.fileLocatorEvents = {};
|
|
95
112
|
this.contributedFiles = {
|
|
@@ -99,39 +116,100 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
99
116
|
[PromptsType.skill]: ( new ResourceMap()),
|
|
100
117
|
[PromptsType.hook]: ( new ResourceMap())
|
|
101
118
|
};
|
|
119
|
+
this._contributedWhenKeys = ( new Set());
|
|
120
|
+
this._contributedWhenClauses = ( new Map());
|
|
121
|
+
this._onDidContributedWhenChange = this._register(( new Emitter()));
|
|
122
|
+
this._onDidChangeInstructions = this._register(( new Emitter()));
|
|
123
|
+
this._onDidPluginPromptFilesChange = this._register(( new Emitter()));
|
|
124
|
+
this._onDidPluginHooksChange = this._register(( new Emitter()));
|
|
125
|
+
this._pluginPromptFilesByType = ( new Map());
|
|
102
126
|
this.promptFileProviders = [];
|
|
103
127
|
this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
|
|
104
|
-
this.fileLocator = this.
|
|
128
|
+
this.fileLocator = this.createPromptFilesLocator();
|
|
105
129
|
this._register(this.modelService.onModelRemoved(model => {
|
|
106
130
|
this.cachedParsedPromptFromModels.delete(model.uri);
|
|
107
131
|
}));
|
|
132
|
+
this._register(this.contextKeyService.onDidChangeContext(e => {
|
|
133
|
+
if (e.affectsSome(this._contributedWhenKeys)) {
|
|
134
|
+
for (const type of ( Object.keys(this.cachedFileLocations))) {
|
|
135
|
+
this.cachedFileLocations[type] = undefined;
|
|
136
|
+
}
|
|
137
|
+
this._onDidContributedWhenChange.fire();
|
|
138
|
+
}
|
|
139
|
+
}));
|
|
108
140
|
const modelChangeEvent = this._register(( new ModelChangeTracker(this.modelService))).onDidPromptChange;
|
|
109
141
|
this.cachedCustomAgents = this._register(( new CachedPromise(token => this.computeCustomAgents(token), () => Event.any(
|
|
110
142
|
this.getFileLocatorEvent(PromptsType.agent),
|
|
111
|
-
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent)
|
|
143
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent),
|
|
144
|
+
this._onDidContributedWhenChange.event,
|
|
145
|
+
Event.filter(
|
|
146
|
+
this.configurationService.onDidChangeConfiguration,
|
|
147
|
+
e => e.affectsConfiguration(PromptsConfig.USE_CUSTOM_AGENT_HOOKS)
|
|
148
|
+
)
|
|
112
149
|
))));
|
|
113
150
|
this.cachedSlashCommands = this._register(( new CachedPromise(token => this.computePromptSlashCommands(token), () => Event.any(
|
|
114
151
|
this.getFileLocatorEvent(PromptsType.prompt),
|
|
115
152
|
this.getFileLocatorEvent(PromptsType.skill),
|
|
116
153
|
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt),
|
|
117
|
-
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
|
|
154
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
|
|
155
|
+
this._onDidContributedWhenChange.event,
|
|
156
|
+
this._onDidPluginPromptFilesChange.event
|
|
118
157
|
))));
|
|
119
158
|
this.cachedSkills = this._register(( new CachedPromise(token => this.computeAgentSkills(token), () => Event.any(
|
|
120
159
|
this.getFileLocatorEvent(PromptsType.skill),
|
|
121
|
-
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
|
|
160
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
|
|
161
|
+
this._onDidContributedWhenChange.event,
|
|
162
|
+
this._onDidPluginPromptFilesChange.event
|
|
122
163
|
))));
|
|
123
164
|
this.cachedHooks = this._register(( new CachedPromise(
|
|
124
165
|
token => this.computeHooks(token),
|
|
125
166
|
() => Event.any(this.getFileLocatorEvent(PromptsType.hook), Event.filter(
|
|
126
167
|
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
|
-
))
|
|
168
|
+
e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS) || e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
|
|
169
|
+
), this._onDidPluginHooksChange.event, this.workspaceTrustService.onDidChangeTrust)
|
|
132
170
|
)));
|
|
133
|
-
this._register(this.cachedHooks.onDidChange(() => {}));
|
|
134
171
|
this._register(this.cachedSkills.onDidChange(() => {}));
|
|
172
|
+
this._register(this.cachedHooks.onDidChange(() => {}));
|
|
173
|
+
this._register(
|
|
174
|
+
this.watchPluginPromptFilesForType(PromptsType.prompt, (plugin, reader) => plugin.commands.read(reader))
|
|
175
|
+
);
|
|
176
|
+
this._register(
|
|
177
|
+
this.watchPluginPromptFilesForType(PromptsType.skill, (plugin, reader) => plugin.skills.read(reader))
|
|
178
|
+
);
|
|
179
|
+
this._register(
|
|
180
|
+
this.watchPluginPromptFilesForType(PromptsType.agent, (plugin, reader) => plugin.agents.read(reader))
|
|
181
|
+
);
|
|
182
|
+
this._register(autorun(reader => {
|
|
183
|
+
const plugins = this.agentPluginService.plugins.read(reader);
|
|
184
|
+
for (const plugin of plugins) {
|
|
185
|
+
plugin.hooks.read(reader);
|
|
186
|
+
}
|
|
187
|
+
this._onDidPluginHooksChange.fire();
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
watchPluginPromptFilesForType(type, getItems) {
|
|
191
|
+
return autorun(reader => {
|
|
192
|
+
const plugins = this.agentPluginService.plugins.read(reader);
|
|
193
|
+
const nextFiles = [];
|
|
194
|
+
for (const plugin of plugins) {
|
|
195
|
+
for (const item of getItems(plugin, reader)) {
|
|
196
|
+
nextFiles.push({
|
|
197
|
+
uri: item.uri,
|
|
198
|
+
storage: PromptsStorage.plugin,
|
|
199
|
+
type,
|
|
200
|
+
name: getCanonicalPluginCommandId(plugin, item.name),
|
|
201
|
+
pluginUri: plugin.uri
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
nextFiles.sort((a, b) => `${a.name ?? ""}|${( a.uri.toString())}`.localeCompare(`${b.name ?? ""}|${( b.uri.toString())}`));
|
|
206
|
+
this._pluginPromptFilesByType.set(type, nextFiles);
|
|
207
|
+
this.cachedFileLocations[type] = undefined;
|
|
208
|
+
this._onDidPluginPromptFilesChange.fire();
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
createPromptFilesLocator() {
|
|
212
|
+
return this.instantiationService.createInstance(PromptFilesLocator);
|
|
135
213
|
}
|
|
136
214
|
getFileLocatorEvent(type) {
|
|
137
215
|
let event = this.fileLocatorEvents[type];
|
|
@@ -178,10 +256,41 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
178
256
|
storage: PromptsStorage.local,
|
|
179
257
|
type
|
|
180
258
|
})))),
|
|
181
|
-
this.getExtensionPromptFiles(type, token)
|
|
259
|
+
this.getExtensionPromptFiles(type, token),
|
|
260
|
+
this._pluginPromptFilesByType.get(type) ?? []
|
|
182
261
|
]);
|
|
183
262
|
return [...prompts.flat()];
|
|
184
263
|
}
|
|
264
|
+
async _collectSourceFolderDiagnostics(type, foundFiles) {
|
|
265
|
+
const resolvedFolders = await this.fileLocator.getSourceFoldersInDiscoveryOrder(type);
|
|
266
|
+
const results = [];
|
|
267
|
+
for (const folder of resolvedFolders) {
|
|
268
|
+
const fileCount = foundFiles.filter(f => f.uri.path.startsWith(folder.uri.path + "/")).length;
|
|
269
|
+
let exists = fileCount > 0;
|
|
270
|
+
let errorMessage;
|
|
271
|
+
if (!exists) {
|
|
272
|
+
try {
|
|
273
|
+
const stat = await this.fileService.stat(folder.uri);
|
|
274
|
+
exists = stat.isDirectory;
|
|
275
|
+
} catch (e) {
|
|
276
|
+
if (e instanceof FileOperationError && e.fileOperationResult === FileOperationResult.FILE_NOT_FOUND) {
|
|
277
|
+
exists = false;
|
|
278
|
+
} else {
|
|
279
|
+
exists = false;
|
|
280
|
+
errorMessage = e instanceof Error ? e.message : String(e);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
results.push({
|
|
285
|
+
uri: folder.uri,
|
|
286
|
+
storage: folder.storage,
|
|
287
|
+
exists,
|
|
288
|
+
fileCount,
|
|
289
|
+
errorMessage
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return results;
|
|
293
|
+
}
|
|
185
294
|
registerPromptFileProvider(extension, type, provider) {
|
|
186
295
|
const providerEntry = {
|
|
187
296
|
extension,
|
|
@@ -192,26 +301,28 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
192
301
|
const disposables = ( new DisposableStore());
|
|
193
302
|
if (provider.onDidChangePromptFiles) {
|
|
194
303
|
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
|
-
}
|
|
304
|
+
this.invalidatePromptFileCache(type);
|
|
208
305
|
}));
|
|
209
306
|
}
|
|
307
|
+
this.invalidatePromptFileCache(type);
|
|
308
|
+
disposables.add({
|
|
309
|
+
dispose: () => {
|
|
310
|
+
const index = this.promptFileProviders.findIndex(p => p === providerEntry);
|
|
311
|
+
if (index >= 0) {
|
|
312
|
+
this.promptFileProviders.splice(index, 1);
|
|
313
|
+
this.invalidatePromptFileCache(type);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
return disposables;
|
|
318
|
+
}
|
|
319
|
+
invalidatePromptFileCache(type) {
|
|
210
320
|
if (type === PromptsType.agent) {
|
|
211
321
|
this.cachedFileLocations[PromptsType.agent] = undefined;
|
|
212
322
|
this.cachedCustomAgents.refresh();
|
|
213
323
|
} else if (type === PromptsType.instructions) {
|
|
214
324
|
this.cachedFileLocations[PromptsType.instructions] = undefined;
|
|
325
|
+
this._onDidChangeInstructions.fire();
|
|
215
326
|
} else if (type === PromptsType.prompt) {
|
|
216
327
|
this.cachedFileLocations[PromptsType.prompt] = undefined;
|
|
217
328
|
this.cachedSlashCommands.refresh();
|
|
@@ -220,28 +331,6 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
220
331
|
this.cachedSkills.refresh();
|
|
221
332
|
this.cachedSlashCommands.refresh();
|
|
222
333
|
}
|
|
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
334
|
}
|
|
246
335
|
async listFromProviders(type, activationEvent, token) {
|
|
247
336
|
const result = [];
|
|
@@ -268,7 +357,9 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
268
357
|
storage: PromptsStorage.extension,
|
|
269
358
|
type,
|
|
270
359
|
extension: providerEntry.extension,
|
|
271
|
-
source: ExtensionAgentSourceType.provider
|
|
360
|
+
source: ExtensionAgentSourceType.provider,
|
|
361
|
+
name: file.name,
|
|
362
|
+
description: file.description
|
|
272
363
|
});
|
|
273
364
|
}
|
|
274
365
|
} catch (e) {
|
|
@@ -296,6 +387,8 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
296
387
|
storage: PromptsStorage.user,
|
|
297
388
|
type
|
|
298
389
|
}))));
|
|
390
|
+
case PromptsStorage.plugin:
|
|
391
|
+
return this._pluginPromptFilesByType.get(type) ?? [];
|
|
299
392
|
default:
|
|
300
393
|
throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
|
|
301
394
|
}
|
|
@@ -303,7 +396,19 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
303
396
|
async getExtensionPromptFiles(type, token) {
|
|
304
397
|
await this.extensionService.whenInstalledExtensionsRegistered();
|
|
305
398
|
const settledResults = await Promise.allSettled(( this.contributedFiles[type].values()));
|
|
306
|
-
const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value))
|
|
399
|
+
const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value)).filter(file => {
|
|
400
|
+
if (!file.when) {
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
const expr = ContextKeyExpr.deserialize(file.when);
|
|
404
|
+
if (!expr) {
|
|
405
|
+
this.logger.warn(
|
|
406
|
+
`[getExtensionPromptFiles] Ignoring contributed prompt file with invalid when clause: ${file.when}`
|
|
407
|
+
);
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
return this.contextKeyService.contextMatchesRules(expr);
|
|
411
|
+
});
|
|
307
412
|
const activationEvent = this.getProviderActivationEvent(type);
|
|
308
413
|
if (!activationEvent) {
|
|
309
414
|
return contributedFiles;
|
|
@@ -327,16 +432,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
327
432
|
}
|
|
328
433
|
async getSourceFolders(type) {
|
|
329
434
|
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) {
|
|
435
|
+
if (type === PromptsType.hook) {
|
|
340
436
|
const hooksFolders = await this.fileLocator.getHookSourceFolders();
|
|
341
437
|
for (const uri of hooksFolders) {
|
|
342
438
|
result.push({
|
|
@@ -370,8 +466,8 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
370
466
|
get onDidChangeSlashCommands() {
|
|
371
467
|
return this.cachedSlashCommands.onDidChange;
|
|
372
468
|
}
|
|
373
|
-
async getPromptSlashCommands(token) {
|
|
374
|
-
return this.cachedSlashCommands.get(token);
|
|
469
|
+
async getPromptSlashCommands(token, sessionResource) {
|
|
470
|
+
return await this.cachedSlashCommands.get(token);
|
|
375
471
|
}
|
|
376
472
|
async computePromptSlashCommands(token) {
|
|
377
473
|
const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
|
|
@@ -411,7 +507,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
411
507
|
return result;
|
|
412
508
|
}
|
|
413
509
|
isValidSlashCommandName(command) {
|
|
414
|
-
return command.match(/^[\p{L}\d_
|
|
510
|
+
return command.match(/^[\p{L}\d_\-\.:]+$/u) !== null;
|
|
415
511
|
}
|
|
416
512
|
async resolvePromptSlashCommand(name, token) {
|
|
417
513
|
const commands = await this.getPromptSlashCommands(token);
|
|
@@ -419,7 +515,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
419
515
|
}
|
|
420
516
|
asChatPromptSlashCommand(parsedPromptFile, promptPath) {
|
|
421
517
|
let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
|
|
422
|
-
name = name.replace(/[^\p{L}\d_
|
|
518
|
+
name = name.replace(/[^\p{L}\d_\-\.:]+/gu, "-");
|
|
423
519
|
return {
|
|
424
520
|
name: name,
|
|
425
521
|
description: parsedPromptFile?.header?.description ?? promptPath.description,
|
|
@@ -439,23 +535,47 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
439
535
|
get onDidChangeCustomAgents() {
|
|
440
536
|
return this.cachedCustomAgents.onDidChange;
|
|
441
537
|
}
|
|
442
|
-
|
|
443
|
-
return
|
|
538
|
+
get onDidChangeInstructions() {
|
|
539
|
+
return Event.any(
|
|
540
|
+
this.getFileLocatorEvent(PromptsType.instructions),
|
|
541
|
+
this._onDidContributedWhenChange.event,
|
|
542
|
+
this._onDidChangeInstructions.event
|
|
543
|
+
);
|
|
544
|
+
}
|
|
545
|
+
async getCustomAgents(token, sessionResource) {
|
|
546
|
+
const sw = StopWatch.create();
|
|
547
|
+
const result = await this.cachedCustomAgents.get(token);
|
|
548
|
+
if (sessionResource) {
|
|
549
|
+
const elapsed = sw.elapsed();
|
|
550
|
+
const discoveryInfo = await this.getAgentDiscoveryInfo(token);
|
|
551
|
+
const details = result.length === 1 ? ( localize(7327, "Resolved {0} agent in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7328, "Resolved {0} agents in {1}ms", result.length, elapsed.toFixed(1)));
|
|
552
|
+
this._onDidLogDiscovery.fire({
|
|
553
|
+
sessionResource,
|
|
554
|
+
name: ( localize(7329, "Load Agents")),
|
|
555
|
+
details,
|
|
556
|
+
discoveryInfo,
|
|
557
|
+
category: "discovery"
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
return result;
|
|
444
561
|
}
|
|
445
562
|
async computeCustomAgents(token) {
|
|
446
563
|
let agentFiles = await this.listPromptFiles(PromptsType.agent, token);
|
|
447
564
|
const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
|
|
448
565
|
agentFiles = agentFiles.filter(promptPath => !( disabledAgents.has(promptPath.uri)));
|
|
566
|
+
const userHomeUri = await this.pathService.userHome();
|
|
567
|
+
const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
|
|
568
|
+
const defaultFolder = this.workspaceService.getWorkspace().folders[0];
|
|
449
569
|
const customAgentsResults = await Promise.allSettled(( agentFiles.map(async promptPath => {
|
|
450
570
|
const uri = promptPath.uri;
|
|
451
571
|
const ast = await this.parseNew(uri, token);
|
|
452
572
|
let metadata;
|
|
453
573
|
if (ast.header) {
|
|
454
574
|
const advanced = ast.header.getAttribute(PromptHeaderAttributes.advancedOptions);
|
|
455
|
-
if (advanced && advanced.value.type === "
|
|
575
|
+
if (advanced && advanced.value.type === "map") {
|
|
456
576
|
metadata = {};
|
|
457
577
|
for (const [key, value] of Object.entries(advanced.value)) {
|
|
458
|
-
if (
|
|
578
|
+
if (value.type === "scalar") {
|
|
459
579
|
metadata[key] = value;
|
|
460
580
|
}
|
|
461
581
|
}
|
|
@@ -493,14 +613,14 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
493
613
|
source,
|
|
494
614
|
target,
|
|
495
615
|
visibility: {
|
|
496
|
-
|
|
497
|
-
|
|
616
|
+
userInvocable: true,
|
|
617
|
+
agentInvocable: true
|
|
498
618
|
}
|
|
499
619
|
};
|
|
500
620
|
}
|
|
501
621
|
const visibility = {
|
|
502
|
-
|
|
503
|
-
|
|
622
|
+
userInvocable: ast.header.userInvocable !== false,
|
|
623
|
+
agentInvocable: ast.header.infer !== undefined ? ast.header.infer === true : ast.header.disableModelInvocation !== true
|
|
504
624
|
};
|
|
505
625
|
let model = ast.header.model;
|
|
506
626
|
if (target === Target.Claude && model) {
|
|
@@ -516,6 +636,14 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
516
636
|
if (target === Target.Claude && tools) {
|
|
517
637
|
tools = mapClaudeTools(tools);
|
|
518
638
|
}
|
|
639
|
+
let hooks;
|
|
640
|
+
const useCustomAgentHooks = this.configurationService.getValue(PromptsConfig.USE_CUSTOM_AGENT_HOOKS);
|
|
641
|
+
const hooksRaw = ast.header.hooksRaw;
|
|
642
|
+
if (useCustomAgentHooks && hooksRaw) {
|
|
643
|
+
const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(uri) ?? defaultFolder;
|
|
644
|
+
const workspaceRootUri = hookWorkspaceFolder?.uri;
|
|
645
|
+
hooks = parseSubagentHooksFromYaml(hooksRaw, workspaceRootUri, userHome, target);
|
|
646
|
+
}
|
|
519
647
|
return {
|
|
520
648
|
uri,
|
|
521
649
|
name,
|
|
@@ -527,6 +655,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
527
655
|
target,
|
|
528
656
|
visibility,
|
|
529
657
|
agents,
|
|
658
|
+
hooks,
|
|
530
659
|
agentInstructions,
|
|
531
660
|
source
|
|
532
661
|
};
|
|
@@ -562,7 +691,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
562
691
|
}
|
|
563
692
|
return ( new PromptFileParser()).parse(uri, ( fileContent.value.toString()));
|
|
564
693
|
}
|
|
565
|
-
registerContributedFile(type, uri, extension, name, description) {
|
|
694
|
+
registerContributedFile(type, uri, extension, name, description, when) {
|
|
566
695
|
const bucket = this.contributedFiles[type];
|
|
567
696
|
if (( bucket.has(uri))) {
|
|
568
697
|
return Disposable.None;
|
|
@@ -595,6 +724,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
595
724
|
uri,
|
|
596
725
|
name,
|
|
597
726
|
description,
|
|
727
|
+
when,
|
|
598
728
|
storage: PromptsStorage.extension,
|
|
599
729
|
type,
|
|
600
730
|
extension,
|
|
@@ -602,7 +732,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
602
732
|
};
|
|
603
733
|
})();
|
|
604
734
|
bucket.set(uri, entryPromise);
|
|
735
|
+
if (when) {
|
|
736
|
+
this._contributedWhenClauses.set(`${type}/${( uri.toString())}`, when);
|
|
737
|
+
}
|
|
605
738
|
const flushCachesIfRequired = () => {
|
|
739
|
+
this._updateContributedWhenKeys();
|
|
606
740
|
this.cachedFileLocations[type] = undefined;
|
|
607
741
|
switch (type) {
|
|
608
742
|
case PromptsType.agent:
|
|
@@ -621,10 +755,20 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
621
755
|
return {
|
|
622
756
|
dispose: () => {
|
|
623
757
|
bucket.delete(uri);
|
|
758
|
+
this._contributedWhenClauses.delete(`${type}/${( uri.toString())}`);
|
|
624
759
|
flushCachesIfRequired();
|
|
625
760
|
}
|
|
626
761
|
};
|
|
627
762
|
}
|
|
763
|
+
_updateContributedWhenKeys() {
|
|
764
|
+
this._contributedWhenKeys.clear();
|
|
765
|
+
for (const whenClause of ( this._contributedWhenClauses.values())) {
|
|
766
|
+
const expr = ContextKeyExpr.deserialize(whenClause);
|
|
767
|
+
for (const key of expr?.keys() ?? []) {
|
|
768
|
+
this._contributedWhenKeys.add(key);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
}
|
|
628
772
|
getPromptLocationLabel(promptPath) {
|
|
629
773
|
switch (promptPath.storage) {
|
|
630
774
|
case PromptsStorage.local:
|
|
@@ -632,17 +776,19 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
632
776
|
relative: true
|
|
633
777
|
});
|
|
634
778
|
case PromptsStorage.user:
|
|
635
|
-
return localize(
|
|
779
|
+
return localize(7330, "User Data");
|
|
636
780
|
case PromptsStorage.extension:
|
|
637
781
|
{
|
|
638
782
|
return localize(
|
|
639
|
-
|
|
783
|
+
7331,
|
|
640
784
|
"Extension: {0}",
|
|
641
785
|
promptPath.extension.displayName ?? promptPath.extension.id
|
|
642
786
|
);
|
|
643
787
|
}
|
|
788
|
+
case PromptsStorage.plugin:
|
|
789
|
+
return localize(7332, "Plugin");
|
|
644
790
|
default:
|
|
645
|
-
|
|
791
|
+
assertNever(promptPath, "Unknown prompt storage type");
|
|
646
792
|
}
|
|
647
793
|
}
|
|
648
794
|
async listNestedAgentMDs(token) {
|
|
@@ -843,12 +989,26 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
843
989
|
get onDidChangeSkills() {
|
|
844
990
|
return this.cachedSkills.onDidChange;
|
|
845
991
|
}
|
|
846
|
-
async findAgentSkills(token) {
|
|
992
|
+
async findAgentSkills(token, sessionResource) {
|
|
847
993
|
const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
|
|
848
994
|
if (!useAgentSkills) {
|
|
849
995
|
return undefined;
|
|
850
996
|
}
|
|
851
|
-
|
|
997
|
+
const sw = StopWatch.create();
|
|
998
|
+
const result = await this.cachedSkills.get(token);
|
|
999
|
+
if (sessionResource) {
|
|
1000
|
+
const elapsed = sw.elapsed();
|
|
1001
|
+
const discoveryInfo = await this.getSkillDiscoveryInfo(token);
|
|
1002
|
+
const details = result.length === 1 ? ( localize(7333, "Resolved {0} skill in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7334, "Resolved {0} skills in {1}ms", result.length, elapsed.toFixed(1)));
|
|
1003
|
+
this._onDidLogDiscovery.fire({
|
|
1004
|
+
sessionResource,
|
|
1005
|
+
name: ( localize(7335, "Load Skills")),
|
|
1006
|
+
details,
|
|
1007
|
+
discoveryInfo,
|
|
1008
|
+
category: "discovery"
|
|
1009
|
+
});
|
|
1010
|
+
}
|
|
1011
|
+
return result;
|
|
852
1012
|
}
|
|
853
1013
|
async computeAgentSkills(token) {
|
|
854
1014
|
const {
|
|
@@ -865,7 +1025,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
865
1025
|
name: file.name,
|
|
866
1026
|
description: sanitizedDescription,
|
|
867
1027
|
disableModelInvocation: file.disableModelInvocation ?? false,
|
|
868
|
-
|
|
1028
|
+
userInvocable: file.userInvocable ?? true
|
|
869
1029
|
});
|
|
870
1030
|
}
|
|
871
1031
|
}
|
|
@@ -907,6 +1067,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
907
1067
|
configPersonal: skillsBySource.get(PromptFileSource.ConfigPersonal) ?? 0,
|
|
908
1068
|
extensionContribution: skillsBySource.get(PromptFileSource.ExtensionContribution) ?? 0,
|
|
909
1069
|
extensionAPI: skillsBySource.get(PromptFileSource.ExtensionAPI) ?? 0,
|
|
1070
|
+
plugin: skillsBySource.get(PromptFileSource.Plugin) ?? 0,
|
|
910
1071
|
skippedDuplicateName,
|
|
911
1072
|
skippedMissingName,
|
|
912
1073
|
skippedMissingDescription,
|
|
@@ -915,40 +1076,73 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
915
1076
|
});
|
|
916
1077
|
return result;
|
|
917
1078
|
}
|
|
918
|
-
async getHooks(token) {
|
|
919
|
-
|
|
1079
|
+
async getHooks(token, sessionResource) {
|
|
1080
|
+
const sw = StopWatch.create();
|
|
1081
|
+
const result = await this.cachedHooks.get(token);
|
|
1082
|
+
if (sessionResource) {
|
|
1083
|
+
const elapsed = sw.elapsed();
|
|
1084
|
+
const hookCount = result ? ( Object.values(result.hooks)).reduce((sum, arr) => sum + arr.length, 0) : 0;
|
|
1085
|
+
const discoveryInfo = await this.getHookDiscoveryInfo(token);
|
|
1086
|
+
const details = hookCount === 1 ? ( localize(7336, "Resolved {0} hook in {1}ms", hookCount, elapsed.toFixed(1))) : ( localize(7337, "Resolved {0} hooks in {1}ms", hookCount, elapsed.toFixed(1)));
|
|
1087
|
+
this._onDidLogDiscovery.fire({
|
|
1088
|
+
sessionResource,
|
|
1089
|
+
name: ( localize(7338, "Load Hooks")),
|
|
1090
|
+
details,
|
|
1091
|
+
discoveryInfo,
|
|
1092
|
+
category: "discovery"
|
|
1093
|
+
});
|
|
1094
|
+
}
|
|
1095
|
+
return result;
|
|
1096
|
+
}
|
|
1097
|
+
async getInstructionFiles(token, sessionResource) {
|
|
1098
|
+
const sw = StopWatch.create();
|
|
1099
|
+
const result = await this.listPromptFiles(PromptsType.instructions, token);
|
|
1100
|
+
if (sessionResource) {
|
|
1101
|
+
const elapsed = sw.elapsed();
|
|
1102
|
+
const discoveryInfo = await this.getInstructionsDiscoveryInfo(token);
|
|
1103
|
+
const details = result.length === 1 ? ( localize(
|
|
1104
|
+
7339,
|
|
1105
|
+
"Resolved {0} instruction in {1}ms",
|
|
1106
|
+
result.length,
|
|
1107
|
+
elapsed.toFixed(1)
|
|
1108
|
+
)) : ( localize(
|
|
1109
|
+
7340,
|
|
1110
|
+
"Resolved {0} instructions in {1}ms",
|
|
1111
|
+
result.length,
|
|
1112
|
+
elapsed.toFixed(1)
|
|
1113
|
+
));
|
|
1114
|
+
this._onDidLogDiscovery.fire({
|
|
1115
|
+
sessionResource,
|
|
1116
|
+
name: ( localize(7341, "Load Instructions")),
|
|
1117
|
+
details,
|
|
1118
|
+
discoveryInfo,
|
|
1119
|
+
category: "discovery"
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
return result;
|
|
920
1123
|
}
|
|
921
1124
|
async computeHooks(token) {
|
|
922
1125
|
const useChatHooks = this.configurationService.getValue(PromptsConfig.USE_CHAT_HOOKS);
|
|
923
1126
|
if (!useChatHooks) {
|
|
924
1127
|
return undefined;
|
|
925
1128
|
}
|
|
926
|
-
|
|
927
|
-
const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
|
|
928
|
-
if (hookFiles.length === 0) {
|
|
929
|
-
this.logger.trace("[PromptsService] No hook files found.");
|
|
1129
|
+
if (!this.workspaceTrustService.isWorkspaceTrusted()) {
|
|
930
1130
|
return undefined;
|
|
931
1131
|
}
|
|
1132
|
+
const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
|
|
1133
|
+
const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
|
|
932
1134
|
this.logger.trace(`[PromptsService] Found ${hookFiles.length} hook file(s).`);
|
|
933
1135
|
const userHomeUri = await this.pathService.userHome();
|
|
934
1136
|
const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
|
|
935
|
-
const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
|
|
936
|
-
const workspaceRootUri = workspaceFolder?.uri;
|
|
937
1137
|
let hasDisabledClaudeHooks = false;
|
|
938
|
-
const collectedHooks =
|
|
939
|
-
|
|
940
|
-
[HookType.UserPromptSubmit]: [],
|
|
941
|
-
[HookType.PreToolUse]: [],
|
|
942
|
-
[HookType.PostToolUse]: [],
|
|
943
|
-
[HookType.PreCompact]: [],
|
|
944
|
-
[HookType.SubagentStart]: [],
|
|
945
|
-
[HookType.SubagentStop]: [],
|
|
946
|
-
[HookType.Stop]: []
|
|
947
|
-
};
|
|
1138
|
+
const collectedHooks = ( new Map());
|
|
1139
|
+
const defaultFolder = this.workspaceService.getWorkspace().folders[0];
|
|
948
1140
|
for (const hookFile of hookFiles) {
|
|
949
1141
|
try {
|
|
950
1142
|
const content = await this.fileService.readFile(hookFile.uri);
|
|
951
1143
|
const json = parse(( content.value.toString()));
|
|
1144
|
+
const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(hookFile.uri) ?? defaultFolder;
|
|
1145
|
+
const workspaceRootUri = hookWorkspaceFolder?.uri;
|
|
952
1146
|
const {
|
|
953
1147
|
format,
|
|
954
1148
|
hooks,
|
|
@@ -978,7 +1172,12 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
978
1172
|
hooks: commands
|
|
979
1173
|
}] of hooks) {
|
|
980
1174
|
for (const command of commands) {
|
|
981
|
-
collectedHooks
|
|
1175
|
+
let bucket = collectedHooks.get(hookType);
|
|
1176
|
+
if (!bucket) {
|
|
1177
|
+
bucket = [];
|
|
1178
|
+
collectedHooks.set(hookType, bucket);
|
|
1179
|
+
}
|
|
1180
|
+
bucket.push(command);
|
|
982
1181
|
this.logger.trace(
|
|
983
1182
|
`[PromptsService] Collected ${hookType} hook from ${hookFile.uri} (format: ${format})`
|
|
984
1183
|
);
|
|
@@ -988,37 +1187,74 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
988
1187
|
this.logger.warn(`[PromptsService] Failed to parse hook file: ${hookFile.uri}`, error);
|
|
989
1188
|
}
|
|
990
1189
|
}
|
|
991
|
-
const
|
|
992
|
-
|
|
1190
|
+
const plugins = this.agentPluginService.plugins.get();
|
|
1191
|
+
for (const plugin of plugins) {
|
|
1192
|
+
for (const hook of plugin.hooks.get()) {
|
|
1193
|
+
let bucket = collectedHooks.get(hook.type);
|
|
1194
|
+
if (!bucket) {
|
|
1195
|
+
bucket = [];
|
|
1196
|
+
collectedHooks.set(hook.type, bucket);
|
|
1197
|
+
}
|
|
1198
|
+
bucket.push(...hook.hooks);
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
if (collectedHooks.size === 0) {
|
|
993
1202
|
this.logger.trace("[PromptsService] No valid hooks collected.");
|
|
994
1203
|
return undefined;
|
|
995
1204
|
}
|
|
996
|
-
const result = Object.fromEntries(
|
|
997
|
-
Object.entries(collectedHooks).filter(([_, commands]) => commands.length > 0)
|
|
998
|
-
);
|
|
1205
|
+
const result = Object.fromEntries(collectedHooks);
|
|
999
1206
|
this.logger.trace(`[PromptsService] Collected hooks: ${JSON.stringify(( Object.keys(result)))}`);
|
|
1000
1207
|
return {
|
|
1001
1208
|
hooks: result,
|
|
1002
1209
|
hasDisabledClaudeHooks
|
|
1003
1210
|
};
|
|
1004
1211
|
}
|
|
1005
|
-
async getPromptDiscoveryInfo(type, token) {
|
|
1212
|
+
async getPromptDiscoveryInfo(type, token, sessionResource) {
|
|
1213
|
+
if (sessionResource) {
|
|
1214
|
+
this._onDidLogDiscovery.fire({
|
|
1215
|
+
sessionResource,
|
|
1216
|
+
name: ( localize(7342, "Discovery {0} (Start)", type)),
|
|
1217
|
+
category: "discovery"
|
|
1218
|
+
});
|
|
1219
|
+
}
|
|
1006
1220
|
const files = [];
|
|
1221
|
+
let result;
|
|
1007
1222
|
if (type === PromptsType.skill) {
|
|
1008
|
-
|
|
1223
|
+
result = await this.getSkillDiscoveryInfo(token);
|
|
1009
1224
|
} else if (type === PromptsType.agent) {
|
|
1010
|
-
|
|
1225
|
+
result = await this.getAgentDiscoveryInfo(token);
|
|
1011
1226
|
} else if (type === PromptsType.prompt) {
|
|
1012
|
-
|
|
1227
|
+
result = await this.getPromptSlashCommandDiscoveryInfo(token);
|
|
1013
1228
|
} else if (type === PromptsType.instructions) {
|
|
1014
|
-
|
|
1229
|
+
result = await this.getInstructionsDiscoveryInfo(token);
|
|
1015
1230
|
} else if (type === PromptsType.hook) {
|
|
1016
|
-
|
|
1231
|
+
result = await this.getHookDiscoveryInfo(token);
|
|
1232
|
+
} else {
|
|
1233
|
+
result = {
|
|
1234
|
+
type,
|
|
1235
|
+
files
|
|
1236
|
+
};
|
|
1017
1237
|
}
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1238
|
+
const loadedCount = result.files.filter(f => f.status === "loaded").length;
|
|
1239
|
+
const skippedCount = result.files.filter(f => f.status === "skipped").length;
|
|
1240
|
+
if (!result.sourceFolders) {
|
|
1241
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(type, result.files.filter(f => f.status === "loaded"));
|
|
1242
|
+
result = {
|
|
1243
|
+
...result,
|
|
1244
|
+
sourceFolders
|
|
1245
|
+
};
|
|
1246
|
+
}
|
|
1247
|
+
if (sessionResource) {
|
|
1248
|
+
const details = ( localize(7343, "{0} loaded, {1} skipped", loadedCount, skippedCount));
|
|
1249
|
+
this._onDidLogDiscovery.fire({
|
|
1250
|
+
sessionResource,
|
|
1251
|
+
name: ( localize(7344, "Discovery {0} (End)", type)),
|
|
1252
|
+
details,
|
|
1253
|
+
discoveryInfo: result,
|
|
1254
|
+
category: "discovery"
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
return result;
|
|
1022
1258
|
}
|
|
1023
1259
|
async getSkillDiscoveryInfo(token) {
|
|
1024
1260
|
const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
|
|
@@ -1031,17 +1267,21 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1031
1267
|
skipReason: "disabled",
|
|
1032
1268
|
extensionId: promptPath.extension?.identifier?.value
|
|
1033
1269
|
})));
|
|
1270
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, []);
|
|
1034
1271
|
return {
|
|
1035
1272
|
type: PromptsType.skill,
|
|
1036
|
-
files
|
|
1273
|
+
files,
|
|
1274
|
+
sourceFolders
|
|
1037
1275
|
};
|
|
1038
1276
|
}
|
|
1039
1277
|
const {
|
|
1040
1278
|
files
|
|
1041
1279
|
} = await this.computeSkillDiscoveryInfo(token);
|
|
1280
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, files.filter(f => f.status === "loaded"));
|
|
1042
1281
|
return {
|
|
1043
1282
|
type: PromptsType.skill,
|
|
1044
|
-
files
|
|
1283
|
+
files,
|
|
1284
|
+
sourceFolders
|
|
1045
1285
|
};
|
|
1046
1286
|
}
|
|
1047
1287
|
async computeSkillDiscoveryInfo(token) {
|
|
@@ -1052,10 +1292,15 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1052
1292
|
const allSkills = [];
|
|
1053
1293
|
const discoveredSkills = await this.fileLocator.findAgentSkills(token);
|
|
1054
1294
|
const extensionSkills = await this.getExtensionPromptFiles(PromptsType.skill, token);
|
|
1295
|
+
const pluginSkills = this._pluginPromptFilesByType.get(PromptsType.skill) ?? [];
|
|
1055
1296
|
allSkills.push(...discoveredSkills, ...( extensionSkills.map(extPath => ({
|
|
1056
1297
|
fileUri: extPath.uri,
|
|
1057
1298
|
storage: extPath.storage,
|
|
1058
1299
|
source: extPath.source === ExtensionAgentSourceType.contribution ? PromptFileSource.ExtensionContribution : PromptFileSource.ExtensionAPI
|
|
1300
|
+
}))), ...( pluginSkills.map(p => ({
|
|
1301
|
+
fileUri: p.uri,
|
|
1302
|
+
storage: p.storage,
|
|
1303
|
+
source: PromptFileSource.Plugin
|
|
1059
1304
|
}))));
|
|
1060
1305
|
const getPriority = skill => {
|
|
1061
1306
|
if (skill.storage === PromptsStorage.local) {
|
|
@@ -1064,13 +1309,16 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1064
1309
|
if (skill.storage === PromptsStorage.user) {
|
|
1065
1310
|
return 1;
|
|
1066
1311
|
}
|
|
1067
|
-
if (skill.
|
|
1312
|
+
if (skill.storage === PromptsStorage.plugin) {
|
|
1068
1313
|
return 2;
|
|
1069
1314
|
}
|
|
1070
|
-
if (skill.source === PromptFileSource.
|
|
1315
|
+
if (skill.source === PromptFileSource.ExtensionAPI) {
|
|
1071
1316
|
return 3;
|
|
1072
1317
|
}
|
|
1073
|
-
|
|
1318
|
+
if (skill.source === PromptFileSource.ExtensionContribution) {
|
|
1319
|
+
return 4;
|
|
1320
|
+
}
|
|
1321
|
+
return 5;
|
|
1074
1322
|
};
|
|
1075
1323
|
allSkills.sort((a, b) => getPriority(a) - getPriority(b));
|
|
1076
1324
|
const extensionIdByUri = ( new Map());
|
|
@@ -1152,7 +1400,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1152
1400
|
seenNames.add(sanitizedName);
|
|
1153
1401
|
nameToUri.set(sanitizedName, uri);
|
|
1154
1402
|
const disableModelInvocation = parsedFile.header?.disableModelInvocation === true;
|
|
1155
|
-
const
|
|
1403
|
+
const userInvocable = parsedFile.header?.userInvocable !== false;
|
|
1156
1404
|
files.push({
|
|
1157
1405
|
uri,
|
|
1158
1406
|
storage,
|
|
@@ -1162,7 +1410,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1162
1410
|
extensionId,
|
|
1163
1411
|
source,
|
|
1164
1412
|
disableModelInvocation,
|
|
1165
|
-
|
|
1413
|
+
userInvocable
|
|
1166
1414
|
});
|
|
1167
1415
|
skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
|
|
1168
1416
|
} catch (e) {
|
|
@@ -1226,9 +1474,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1226
1474
|
});
|
|
1227
1475
|
}
|
|
1228
1476
|
}
|
|
1477
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.agent, files.filter(f => f.status === "loaded"));
|
|
1229
1478
|
return {
|
|
1230
1479
|
type: PromptsType.agent,
|
|
1231
|
-
files
|
|
1480
|
+
files,
|
|
1481
|
+
sourceFolders
|
|
1232
1482
|
};
|
|
1233
1483
|
}
|
|
1234
1484
|
async getPromptSlashCommandDiscoveryInfo(token) {
|
|
@@ -1259,9 +1509,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1259
1509
|
});
|
|
1260
1510
|
}
|
|
1261
1511
|
}
|
|
1512
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.prompt, files.filter(f => f.status === "loaded"));
|
|
1262
1513
|
return {
|
|
1263
1514
|
type: PromptsType.prompt,
|
|
1264
|
-
files
|
|
1515
|
+
files,
|
|
1516
|
+
sourceFolders
|
|
1265
1517
|
};
|
|
1266
1518
|
}
|
|
1267
1519
|
async getInstructionsDiscoveryInfo(token) {
|
|
@@ -1292,17 +1544,17 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1292
1544
|
});
|
|
1293
1545
|
}
|
|
1294
1546
|
}
|
|
1547
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.instructions, files.filter(f => f.status === "loaded"));
|
|
1295
1548
|
return {
|
|
1296
1549
|
type: PromptsType.instructions,
|
|
1297
|
-
files
|
|
1550
|
+
files,
|
|
1551
|
+
sourceFolders
|
|
1298
1552
|
};
|
|
1299
1553
|
}
|
|
1300
1554
|
async getHookDiscoveryInfo(token) {
|
|
1301
1555
|
const files = [];
|
|
1302
1556
|
const userHomeUri = await this.pathService.userHome();
|
|
1303
1557
|
const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
|
|
1304
|
-
const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
|
|
1305
|
-
const workspaceRootUri = workspaceFolder?.uri;
|
|
1306
1558
|
const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
|
|
1307
1559
|
const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
|
|
1308
1560
|
for (const promptPath of hookFiles) {
|
|
@@ -1310,6 +1562,17 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1310
1562
|
const storage = promptPath.storage;
|
|
1311
1563
|
const extensionId = promptPath.extension?.identifier?.value;
|
|
1312
1564
|
const name = basename(uri);
|
|
1565
|
+
if (!this.workspaceTrustService.isWorkspaceTrusted()) {
|
|
1566
|
+
files.push({
|
|
1567
|
+
uri: promptPath.uri,
|
|
1568
|
+
storage: promptPath.storage,
|
|
1569
|
+
status: "skipped",
|
|
1570
|
+
skipReason: "workspace-untrusted",
|
|
1571
|
+
name: basename(promptPath.uri),
|
|
1572
|
+
extensionId: promptPath.extension?.identifier?.value
|
|
1573
|
+
});
|
|
1574
|
+
continue;
|
|
1575
|
+
}
|
|
1313
1576
|
if (getHookSourceFormat(uri) === HookSourceFormat.Claude && useClaudeHooks === false) {
|
|
1314
1577
|
files.push({
|
|
1315
1578
|
uri,
|
|
@@ -1336,6 +1599,8 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1336
1599
|
});
|
|
1337
1600
|
continue;
|
|
1338
1601
|
}
|
|
1602
|
+
const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(uri) ?? this.workspaceService.getWorkspace().folders[0];
|
|
1603
|
+
const workspaceRootUri = hookWorkspaceFolder?.uri;
|
|
1339
1604
|
const {
|
|
1340
1605
|
disabledAllHooks
|
|
1341
1606
|
} = parseHooksFromFile(uri, json, workspaceRootUri, userHome);
|
|
@@ -1369,13 +1634,15 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
1369
1634
|
});
|
|
1370
1635
|
}
|
|
1371
1636
|
}
|
|
1637
|
+
const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.hook, files.filter(f => f.status === "loaded"));
|
|
1372
1638
|
return {
|
|
1373
1639
|
type: PromptsType.hook,
|
|
1374
|
-
files
|
|
1640
|
+
files,
|
|
1641
|
+
sourceFolders
|
|
1375
1642
|
};
|
|
1376
1643
|
}
|
|
1377
1644
|
};
|
|
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));
|
|
1645
|
+
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)), ( __param(15, IWorkspaceTrustManagementService))], PromptsService));
|
|
1379
1646
|
class CachedPromise extends Disposable {
|
|
1380
1647
|
constructor(computeFn, getEvent, delay = 0) {
|
|
1381
1648
|
super();
|
|
@@ -1468,6 +1735,11 @@ var IAgentSource;
|
|
|
1468
1735
|
extensionId: promptPath.extension.identifier,
|
|
1469
1736
|
type: promptPath.source
|
|
1470
1737
|
};
|
|
1738
|
+
} else if (promptPath.storage === PromptsStorage.plugin) {
|
|
1739
|
+
return {
|
|
1740
|
+
storage: PromptsStorage.plugin,
|
|
1741
|
+
pluginUri: promptPath.pluginUri
|
|
1742
|
+
};
|
|
1471
1743
|
} else {
|
|
1472
1744
|
return {
|
|
1473
1745
|
storage: promptPath.storage
|