@codingame/monaco-vscode-chat-service-override 25.1.2 → 26.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 +24 -3
- package/package.json +5 -5
- package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +23 -3
- package/vscode/src/vs/platform/browserElements/common/browserElements.js +13 -6
- package/vscode/src/vs/platform/domWidget/browser/domWidget.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +42 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +218 -74
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatTerminalOutputAccessibleView.js +6 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +165 -168
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +27 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +141 -140
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +189 -121
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +14 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +60 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +435 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +28 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +10 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +37 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +54 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +73 -34
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +71 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +151 -89
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +12 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +39 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +90 -125
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +5 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +263 -143
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +188 -126
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +37 -28
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +21 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +392 -226
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +31 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +25 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +13 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +83 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +68 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +319 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +215 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +179 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +951 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agentsessionprojection.css +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +388 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/unifiedQuickAccess.css +195 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +120 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +394 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.d.ts +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +95 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +31 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +49 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +4 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/media/simpleBrowserOverlay.css +0 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +188 -151
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +1012 -639
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +256 -151
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +8 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +182 -101
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +79 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +193 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +9 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.d.ts +68 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +253 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +69 -50
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +52 -33
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +5 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +274 -155
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +2 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +130 -104
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +12 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +385 -160
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +53 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +112 -75
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +19 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +31 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +39 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNewNotebookContentEdits.js +10 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +25 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +265 -203
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +29 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +114 -60
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +16 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +44 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +119 -45
- 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 +152 -136
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +12 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +51 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +323 -217
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +653 -401
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +52 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +5 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +43 -28
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +182 -136
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +548 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +222 -138
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +151 -113
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +6 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +453 -217
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +162 -88
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/media/chatSetup.css +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +1 -13
- 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 +309 -233
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +55 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.js +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +37 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +109 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +35 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.d.ts +9 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +73 -33
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +47 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +333 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +39 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +9 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +23 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +20 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +65 -57
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +48 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +20 -12
- 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 +52 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +155 -159
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +521 -246
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +107 -76
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +28 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.js +10 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.js +57 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatLayoutService.js +4 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +56 -44
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +37 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatEditorInputContentProvider.js +5 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +1284 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +179 -125
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +9 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +7 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +96 -78
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +58 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +25 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +484 -292
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.d.ts +1 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +65 -92
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +1 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +9 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +331 -189
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +81 -93
- package/vscode/src/vs/workbench/contrib/chat/common/ignoredFiles.js +1 -3
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +6 -7
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +36 -8
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +169 -31
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.d.ts +6 -0
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +141 -0
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +6 -4
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +218 -144
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatTransferService.js +20 -10
- package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.d.ts +109 -0
- package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +349 -0
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +9 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +9 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +139 -36
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +3 -6
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +64 -51
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +49 -34
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +21 -13
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +125 -97
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +91 -131
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkProvider.js +8 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +488 -222
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +32 -12
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +58 -13
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +717 -200
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +79 -18
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +371 -130
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +3 -7
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +79 -61
- package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +27 -21
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +7 -10
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +26 -32
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +2 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -60
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +115 -426
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +127 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -37
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +21 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +51 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +334 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +424 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +58 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.d.ts +7 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +195 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +368 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +7 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +23 -25
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +7 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +34 -38
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +8 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +103 -95
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +28 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +4 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +12 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +65 -54
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +86 -60
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +13 -26
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +56 -46
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +63 -31
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +35 -30
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +44 -37
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +3 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +70 -50
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +26 -394
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +85 -49
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +68 -27
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +67 -45
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +106 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +177 -97
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +136 -49
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +128 -112
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +51 -49
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +25 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +21 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +5 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +2 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +29 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +30 -31
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -17
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +19 -20
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +58 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +31 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +325 -199
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +33 -38
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +45 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +746 -456
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +145 -98
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +88 -37
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +120 -51
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +25 -28
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +58 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.js +17 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +8 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +47 -28
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +171 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +0 -58
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +0 -213
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +0 -39
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +0 -243
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +0 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +0 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +0 -166
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +0 -607
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +0 -255
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +0 -46
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +0 -396
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +0 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +0 -379
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +0 -117
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -141
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -961
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +0 -36
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +0 -447
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +0 -6
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +0 -251
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.d.ts +0 -10
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -42
package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
3
4
|
import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
|
|
4
5
|
import { Event, Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
5
6
|
import { Disposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
6
7
|
import { ResourceMap, ResourceSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
|
|
7
|
-
import { isEqual, dirname } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
8
|
+
import { isEqual, dirname, basename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
8
9
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
9
10
|
import { OffsetRange } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/ranges/offsetRange';
|
|
10
11
|
import { IModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/model.service';
|
|
@@ -22,17 +23,50 @@ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform
|
|
|
22
23
|
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
23
24
|
import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
|
|
24
25
|
import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
|
|
25
|
-
import {
|
|
26
|
-
import { getCleanPromptName } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
26
|
+
import { getCleanPromptName, PromptFileSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
|
|
27
27
|
import { PromptsType, PROMPT_LANGUAGE_ID, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
28
28
|
import { PromptFilesLocator } from '../utils/promptFilesLocator.js';
|
|
29
29
|
import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
|
|
30
|
-
import { PromptsStorage,
|
|
30
|
+
import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
|
|
31
31
|
import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
32
32
|
import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
|
|
33
33
|
|
|
34
|
+
class SkillMissingNameError extends Error {
|
|
35
|
+
constructor(uri) {
|
|
36
|
+
super("Skill file must have a name attribute");
|
|
37
|
+
this.uri = uri;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
class SkillMissingDescriptionError extends Error {
|
|
41
|
+
constructor(uri) {
|
|
42
|
+
super("Skill file must have a description attribute");
|
|
43
|
+
this.uri = uri;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
class SkillNameMismatchError extends Error {
|
|
47
|
+
constructor(uri, skillName, folderName) {
|
|
48
|
+
super(
|
|
49
|
+
`Skill name must match folder name: expected "${folderName}" but got "${skillName}"`
|
|
50
|
+
);
|
|
51
|
+
this.uri = uri;
|
|
52
|
+
this.skillName = skillName;
|
|
53
|
+
this.folderName = folderName;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
34
56
|
let PromptsService = class PromptsService extends Disposable {
|
|
35
|
-
constructor(
|
|
57
|
+
constructor(
|
|
58
|
+
logger,
|
|
59
|
+
labelService,
|
|
60
|
+
modelService,
|
|
61
|
+
instantiationService,
|
|
62
|
+
userDataService,
|
|
63
|
+
configurationService,
|
|
64
|
+
fileService,
|
|
65
|
+
filesConfigService,
|
|
66
|
+
storageService,
|
|
67
|
+
extensionService,
|
|
68
|
+
telemetryService
|
|
69
|
+
) {
|
|
36
70
|
super();
|
|
37
71
|
this.logger = logger;
|
|
38
72
|
this.labelService = labelService;
|
|
@@ -44,7 +78,6 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
44
78
|
this.filesConfigService = filesConfigService;
|
|
45
79
|
this.storageService = storageService;
|
|
46
80
|
this.extensionService = extensionService;
|
|
47
|
-
this.defaultAccountService = defaultAccountService;
|
|
48
81
|
this.telemetryService = telemetryService;
|
|
49
82
|
this.cachedParsedPromptFromModels = ( new ResourceMap());
|
|
50
83
|
this.cachedFileLocations = {};
|
|
@@ -53,22 +86,23 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
53
86
|
[PromptsType.prompt]: ( new ResourceMap()),
|
|
54
87
|
[PromptsType.instructions]: ( new ResourceMap()),
|
|
55
88
|
[PromptsType.agent]: ( new ResourceMap()),
|
|
89
|
+
[PromptsType.skill]: ( new ResourceMap())
|
|
56
90
|
};
|
|
57
|
-
this.
|
|
58
|
-
this.disabledPromptsStorageKeyPrefix =
|
|
91
|
+
this.promptFileProviders = [];
|
|
92
|
+
this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
|
|
59
93
|
this.fileLocator = this.instantiationService.createInstance(PromptFilesLocator);
|
|
60
|
-
this._register(this.modelService.onModelRemoved(
|
|
94
|
+
this._register(this.modelService.onModelRemoved(model => {
|
|
61
95
|
this.cachedParsedPromptFromModels.delete(model.uri);
|
|
62
96
|
}));
|
|
63
97
|
const modelChangeEvent = this._register(( new ModelChangeTracker(this.modelService))).onDidPromptChange;
|
|
64
|
-
this.cachedCustomAgents = this._register(( new CachedPromise(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
)));
|
|
68
|
-
this.cachedSlashCommands = this._register(( new CachedPromise(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
)));
|
|
98
|
+
this.cachedCustomAgents = this._register(( new CachedPromise(token => this.computeCustomAgents(token), () => Event.any(
|
|
99
|
+
this.getFileLocatorEvent(PromptsType.agent),
|
|
100
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent)
|
|
101
|
+
))));
|
|
102
|
+
this.cachedSlashCommands = this._register(( new CachedPromise(token => this.computePromptSlashCommands(token), () => Event.any(
|
|
103
|
+
this.getFileLocatorEvent(PromptsType.prompt),
|
|
104
|
+
Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt)
|
|
105
|
+
))));
|
|
72
106
|
}
|
|
73
107
|
getFileLocatorEvent(type) {
|
|
74
108
|
let event = this.fileLocatorEvents[type];
|
|
@@ -105,113 +139,185 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
105
139
|
}
|
|
106
140
|
async computeListPromptFiles(type, token) {
|
|
107
141
|
const prompts = await Promise.all([
|
|
108
|
-
this.fileLocator.listFiles(type, PromptsStorage.user, token).then(uris => ( uris.map(uri => ({
|
|
109
|
-
|
|
110
|
-
|
|
142
|
+
this.fileLocator.listFiles(type, PromptsStorage.user, token).then(uris => ( uris.map(uri => ({
|
|
143
|
+
uri,
|
|
144
|
+
storage: PromptsStorage.user,
|
|
145
|
+
type
|
|
146
|
+
})))),
|
|
147
|
+
this.fileLocator.listFiles(type, PromptsStorage.local, token).then(uris => ( uris.map(uri => ({
|
|
148
|
+
uri,
|
|
149
|
+
storage: PromptsStorage.local,
|
|
150
|
+
type
|
|
151
|
+
})))),
|
|
152
|
+
this.getExtensionPromptFiles(type, token)
|
|
111
153
|
]);
|
|
112
154
|
return [...prompts.flat()];
|
|
113
155
|
}
|
|
114
|
-
|
|
115
|
-
const providerEntry = {
|
|
116
|
-
|
|
156
|
+
registerPromptFileProvider(extension, type, provider) {
|
|
157
|
+
const providerEntry = {
|
|
158
|
+
extension,
|
|
159
|
+
type,
|
|
160
|
+
...provider
|
|
161
|
+
};
|
|
162
|
+
this.promptFileProviders.push(providerEntry);
|
|
117
163
|
const disposables = ( new DisposableStore());
|
|
118
|
-
if (provider.
|
|
119
|
-
disposables.add(provider.
|
|
120
|
-
|
|
121
|
-
|
|
164
|
+
if (provider.onDidChangePromptFiles) {
|
|
165
|
+
disposables.add(provider.onDidChangePromptFiles(() => {
|
|
166
|
+
if (type === PromptsType.agent) {
|
|
167
|
+
this.cachedFileLocations[PromptsType.agent] = undefined;
|
|
168
|
+
this.cachedCustomAgents.refresh();
|
|
169
|
+
} else if (type === PromptsType.instructions) {
|
|
170
|
+
this.cachedFileLocations[PromptsType.instructions] = undefined;
|
|
171
|
+
} else if (type === PromptsType.prompt) {
|
|
172
|
+
this.cachedFileLocations[PromptsType.prompt] = undefined;
|
|
173
|
+
this.cachedSlashCommands.refresh();
|
|
174
|
+
} else if (type === PromptsType.skill) {
|
|
175
|
+
this.cachedFileLocations[PromptsType.skill] = undefined;
|
|
176
|
+
}
|
|
122
177
|
}));
|
|
123
178
|
}
|
|
124
|
-
|
|
125
|
-
|
|
179
|
+
if (type === PromptsType.agent) {
|
|
180
|
+
this.cachedFileLocations[PromptsType.agent] = undefined;
|
|
181
|
+
this.cachedCustomAgents.refresh();
|
|
182
|
+
} else if (type === PromptsType.instructions) {
|
|
183
|
+
this.cachedFileLocations[PromptsType.instructions] = undefined;
|
|
184
|
+
} else if (type === PromptsType.prompt) {
|
|
185
|
+
this.cachedFileLocations[PromptsType.prompt] = undefined;
|
|
186
|
+
this.cachedSlashCommands.refresh();
|
|
187
|
+
} else if (type === PromptsType.skill) {
|
|
188
|
+
this.cachedFileLocations[PromptsType.skill] = undefined;
|
|
189
|
+
}
|
|
126
190
|
disposables.add({
|
|
127
191
|
dispose: () => {
|
|
128
|
-
const index = this.
|
|
192
|
+
const index = this.promptFileProviders.findIndex(p => p === providerEntry);
|
|
129
193
|
if (index >= 0) {
|
|
130
|
-
this.
|
|
131
|
-
|
|
132
|
-
|
|
194
|
+
this.promptFileProviders.splice(index, 1);
|
|
195
|
+
if (type === PromptsType.agent) {
|
|
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
|
+
}
|
|
133
206
|
}
|
|
134
207
|
}
|
|
135
208
|
});
|
|
136
209
|
return disposables;
|
|
137
210
|
}
|
|
138
|
-
async
|
|
211
|
+
async listFromProviders(type, activationEvent, token) {
|
|
139
212
|
const result = [];
|
|
140
|
-
|
|
213
|
+
await this.extensionService.activateByEvent(activationEvent);
|
|
214
|
+
const providers = this.promptFileProviders.filter(p => p.type === type);
|
|
215
|
+
if (providers.length === 0) {
|
|
141
216
|
return result;
|
|
142
217
|
}
|
|
143
|
-
|
|
144
|
-
for (const providerEntry of this.customAgentsProviders) {
|
|
218
|
+
for (const providerEntry of providers) {
|
|
145
219
|
try {
|
|
146
|
-
const
|
|
147
|
-
if (!
|
|
220
|
+
const files = await providerEntry.providePromptFiles({}, token);
|
|
221
|
+
if (!files || token.isCancellationRequested) {
|
|
148
222
|
continue;
|
|
149
223
|
}
|
|
150
|
-
for (const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
157
|
-
this.logger.error(`[listCustomAgentsFromProvider] Failed to make agent file readonly: ${agent.uri}`, msg);
|
|
158
|
-
}
|
|
224
|
+
for (const file of files) {
|
|
225
|
+
try {
|
|
226
|
+
await this.filesConfigService.updateReadonly(file.uri, true);
|
|
227
|
+
} catch (e) {
|
|
228
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
229
|
+
this.logger.error(`[listFromProviders] Failed to make file readonly: ${file.uri}`, msg);
|
|
159
230
|
}
|
|
160
231
|
result.push({
|
|
161
|
-
uri:
|
|
162
|
-
name: agent.name,
|
|
163
|
-
description: agent.description,
|
|
232
|
+
uri: file.uri,
|
|
164
233
|
storage: PromptsStorage.extension,
|
|
165
|
-
type
|
|
234
|
+
type,
|
|
166
235
|
extension: providerEntry.extension,
|
|
167
236
|
source: ExtensionAgentSourceType.provider
|
|
168
237
|
});
|
|
169
238
|
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
239
|
+
} catch (e) {
|
|
240
|
+
this.logger.error(
|
|
241
|
+
`[listFromProviders] Failed to get ${type} files from provider`,
|
|
242
|
+
e instanceof Error ? e.message : String(e)
|
|
243
|
+
);
|
|
173
244
|
}
|
|
174
245
|
}
|
|
175
246
|
return result;
|
|
176
247
|
}
|
|
177
248
|
async listPromptFilesForStorage(type, storage, token) {
|
|
178
249
|
switch (storage) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
250
|
+
case PromptsStorage.extension:
|
|
251
|
+
return this.getExtensionPromptFiles(type, token);
|
|
252
|
+
case PromptsStorage.local:
|
|
253
|
+
return this.fileLocator.listFiles(type, PromptsStorage.local, token).then(uris => ( uris.map(uri => ({
|
|
254
|
+
uri,
|
|
255
|
+
storage: PromptsStorage.local,
|
|
256
|
+
type
|
|
257
|
+
}))));
|
|
258
|
+
case PromptsStorage.user:
|
|
259
|
+
return this.fileLocator.listFiles(type, PromptsStorage.user, token).then(uris => ( uris.map(uri => ({
|
|
260
|
+
uri,
|
|
261
|
+
storage: PromptsStorage.user,
|
|
262
|
+
type
|
|
263
|
+
}))));
|
|
264
|
+
default:
|
|
265
|
+
throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
|
|
187
266
|
}
|
|
188
267
|
}
|
|
189
268
|
async getExtensionPromptFiles(type, token) {
|
|
190
269
|
await this.extensionService.whenInstalledExtensionsRegistered();
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
270
|
+
const settledResults = await Promise.allSettled(( this.contributedFiles[type].values()));
|
|
271
|
+
const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value));
|
|
272
|
+
const activationEvent = this.getProviderActivationEvent(type);
|
|
273
|
+
const providerFiles = await this.listFromProviders(type, activationEvent, token);
|
|
274
|
+
return [...contributedFiles, ...providerFiles];
|
|
275
|
+
}
|
|
276
|
+
getProviderActivationEvent(type) {
|
|
277
|
+
switch (type) {
|
|
278
|
+
case PromptsType.agent:
|
|
279
|
+
return CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT;
|
|
280
|
+
case PromptsType.instructions:
|
|
281
|
+
return INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT;
|
|
282
|
+
case PromptsType.prompt:
|
|
283
|
+
return PROMPT_FILE_PROVIDER_ACTIVATION_EVENT;
|
|
284
|
+
case PromptsType.skill:
|
|
285
|
+
return SKILL_PROVIDER_ACTIVATION_EVENT;
|
|
195
286
|
}
|
|
196
|
-
return contributedFiles;
|
|
197
287
|
}
|
|
198
|
-
getSourceFolders(type) {
|
|
288
|
+
async getSourceFolders(type) {
|
|
199
289
|
const result = [];
|
|
200
290
|
if (type === PromptsType.agent) {
|
|
201
|
-
const folders = this.fileLocator.
|
|
291
|
+
const folders = await this.fileLocator.getAgentSourceFolders();
|
|
202
292
|
for (const uri of folders) {
|
|
203
|
-
result.push({
|
|
293
|
+
result.push({
|
|
294
|
+
uri,
|
|
295
|
+
storage: PromptsStorage.local,
|
|
296
|
+
type
|
|
297
|
+
});
|
|
204
298
|
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
299
|
+
} else {
|
|
300
|
+
for (const uri of await this.fileLocator.getConfigBasedSourceFolders(type)) {
|
|
301
|
+
result.push({
|
|
302
|
+
uri,
|
|
303
|
+
storage: PromptsStorage.local,
|
|
304
|
+
type
|
|
305
|
+
});
|
|
209
306
|
}
|
|
210
307
|
}
|
|
211
|
-
|
|
212
|
-
|
|
308
|
+
if (type !== PromptsType.skill) {
|
|
309
|
+
const userHome = this.userDataService.currentProfile.promptsHome;
|
|
310
|
+
result.push({
|
|
311
|
+
uri: userHome,
|
|
312
|
+
storage: PromptsStorage.user,
|
|
313
|
+
type
|
|
314
|
+
});
|
|
315
|
+
}
|
|
213
316
|
return result;
|
|
214
317
|
}
|
|
318
|
+
async getResolvedSourceFolders(type) {
|
|
319
|
+
return this.fileLocator.getResolvedSourceFolders(type);
|
|
320
|
+
}
|
|
215
321
|
get onDidChangeSlashCommands() {
|
|
216
322
|
return this.cachedSlashCommands.onDidChange;
|
|
217
323
|
}
|
|
@@ -220,13 +326,15 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
220
326
|
}
|
|
221
327
|
async computePromptSlashCommands(token) {
|
|
222
328
|
const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
|
|
223
|
-
const details = await Promise.all(( promptFiles.map(async
|
|
329
|
+
const details = await Promise.all(( promptFiles.map(async promptPath => {
|
|
224
330
|
try {
|
|
225
331
|
const parsedPromptFile = await this.parseNew(promptPath.uri, token);
|
|
226
332
|
return this.asChatPromptSlashCommand(parsedPromptFile, promptPath);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
|
|
333
|
+
} catch (e) {
|
|
334
|
+
this.logger.error(
|
|
335
|
+
`[computePromptSlashCommands] Failed to parse prompt file for slash command: ${promptPath.uri}`,
|
|
336
|
+
e instanceof Error ? e.message : String(e)
|
|
337
|
+
);
|
|
230
338
|
return undefined;
|
|
231
339
|
}
|
|
232
340
|
})));
|
|
@@ -241,7 +349,11 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
241
349
|
for (const model of this.modelService.getModels()) {
|
|
242
350
|
if (model.getLanguageId() === PROMPT_LANGUAGE_ID && model.uri.scheme === Schemas.untitled && !( seen.has(model.uri))) {
|
|
243
351
|
const parsedPromptFile = this.getParsedPromptFile(model);
|
|
244
|
-
result.push(this.asChatPromptSlashCommand(parsedPromptFile, {
|
|
352
|
+
result.push(this.asChatPromptSlashCommand(parsedPromptFile, {
|
|
353
|
+
uri: model.uri,
|
|
354
|
+
storage: PromptsStorage.local,
|
|
355
|
+
type: PromptsType.prompt
|
|
356
|
+
}));
|
|
245
357
|
}
|
|
246
358
|
}
|
|
247
359
|
return result;
|
|
@@ -255,7 +367,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
255
367
|
}
|
|
256
368
|
asChatPromptSlashCommand(parsedPromptFile, promptPath) {
|
|
257
369
|
let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
|
|
258
|
-
name = name.replace(/[^\p{L}\d_\-\.]+/gu,
|
|
370
|
+
name = name.replace(/[^\p{L}\d_\-\.]+/gu, "-");
|
|
259
371
|
return {
|
|
260
372
|
name: name,
|
|
261
373
|
description: parsedPromptFile?.header?.description ?? promptPath.description,
|
|
@@ -282,16 +394,16 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
282
394
|
let agentFiles = await this.listPromptFiles(PromptsType.agent, token);
|
|
283
395
|
const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
|
|
284
396
|
agentFiles = agentFiles.filter(promptPath => !( disabledAgents.has(promptPath.uri)));
|
|
285
|
-
const customAgentsResults = await Promise.allSettled(( agentFiles.map(async
|
|
397
|
+
const customAgentsResults = await Promise.allSettled(( agentFiles.map(async promptPath => {
|
|
286
398
|
const uri = promptPath.uri;
|
|
287
399
|
const ast = await this.parseNew(uri, token);
|
|
288
400
|
let metadata;
|
|
289
401
|
if (ast.header) {
|
|
290
402
|
const advanced = ast.header.getAttribute(PromptHeaderAttributes.advancedOptions);
|
|
291
|
-
if (advanced && advanced.value.type ===
|
|
403
|
+
if (advanced && advanced.value.type === "object") {
|
|
292
404
|
metadata = {};
|
|
293
405
|
for (const [key, value] of Object.entries(advanced.value)) {
|
|
294
|
-
if ([
|
|
406
|
+
if (["string", "number", "boolean"].includes(value.type)) {
|
|
295
407
|
metadata[key] = value;
|
|
296
408
|
}
|
|
297
409
|
}
|
|
@@ -302,37 +414,78 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
302
414
|
const bodyOffset = ast.body.offset;
|
|
303
415
|
const bodyVarRefs = ast.body.variableReferences;
|
|
304
416
|
for (let i = bodyVarRefs.length - 1; i >= 0; i--) {
|
|
305
|
-
const {
|
|
417
|
+
const {
|
|
418
|
+
name,
|
|
419
|
+
offset
|
|
420
|
+
} = bodyVarRefs[i];
|
|
306
421
|
const range = ( new OffsetRange(offset - bodyOffset, offset - bodyOffset + name.length + 1));
|
|
307
|
-
toolReferences.push({
|
|
422
|
+
toolReferences.push({
|
|
423
|
+
name,
|
|
424
|
+
range
|
|
425
|
+
});
|
|
308
426
|
}
|
|
309
427
|
}
|
|
310
428
|
const agentInstructions = {
|
|
311
|
-
content: ast.body?.getContent() ??
|
|
429
|
+
content: ast.body?.getContent() ?? "",
|
|
312
430
|
toolReferences,
|
|
313
|
-
metadata
|
|
431
|
+
metadata
|
|
314
432
|
};
|
|
315
433
|
const name = ast.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
|
|
316
434
|
const source = IAgentSource.fromPromptPath(promptPath);
|
|
317
435
|
if (!ast.header) {
|
|
318
|
-
return {
|
|
436
|
+
return {
|
|
437
|
+
uri,
|
|
438
|
+
name,
|
|
439
|
+
agentInstructions,
|
|
440
|
+
source,
|
|
441
|
+
visibility: {
|
|
442
|
+
userInvokable: true,
|
|
443
|
+
agentInvokable: true
|
|
444
|
+
}
|
|
445
|
+
};
|
|
319
446
|
}
|
|
320
|
-
const
|
|
321
|
-
|
|
447
|
+
const visibility = {
|
|
448
|
+
userInvokable: ast.header.userInvokable !== false,
|
|
449
|
+
agentInvokable: ast.header.infer === true || ast.header.disableModelInvocation !== true
|
|
450
|
+
};
|
|
451
|
+
const {
|
|
452
|
+
description,
|
|
453
|
+
model,
|
|
454
|
+
tools,
|
|
455
|
+
handOffs,
|
|
456
|
+
argumentHint,
|
|
457
|
+
target,
|
|
458
|
+
agents
|
|
459
|
+
} = ast.header;
|
|
460
|
+
return {
|
|
461
|
+
uri,
|
|
462
|
+
name,
|
|
463
|
+
description,
|
|
464
|
+
model,
|
|
465
|
+
tools,
|
|
466
|
+
handOffs,
|
|
467
|
+
argumentHint,
|
|
468
|
+
target,
|
|
469
|
+
visibility,
|
|
470
|
+
agents,
|
|
471
|
+
agentInstructions,
|
|
472
|
+
source
|
|
473
|
+
};
|
|
322
474
|
})));
|
|
323
475
|
const customAgents = [];
|
|
324
476
|
for (let i = 0; i < customAgentsResults.length; i++) {
|
|
325
477
|
const result = customAgentsResults[i];
|
|
326
|
-
if (result.status ===
|
|
478
|
+
if (result.status === "fulfilled") {
|
|
327
479
|
customAgents.push(result.value);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
480
|
+
} else {
|
|
330
481
|
const uri = agentFiles[i].uri;
|
|
331
482
|
const error = result.reason;
|
|
332
483
|
if (error instanceof FileOperationError && error.fileOperationResult === FileOperationResult.FILE_NOT_FOUND) {
|
|
333
|
-
this.logger.warn(
|
|
334
|
-
|
|
335
|
-
|
|
484
|
+
this.logger.warn(
|
|
485
|
+
`[computeCustomAgents] Skipping agent file that does not exist: ${uri}`,
|
|
486
|
+
error.message
|
|
487
|
+
);
|
|
488
|
+
} else {
|
|
336
489
|
this.logger.error(`[computeCustomAgents] Failed to parse agent file: ${uri}`, error);
|
|
337
490
|
}
|
|
338
491
|
}
|
|
@@ -356,25 +509,49 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
356
509
|
return Disposable.None;
|
|
357
510
|
}
|
|
358
511
|
const entryPromise = (async () => {
|
|
512
|
+
if (type === PromptsType.skill) {
|
|
513
|
+
try {
|
|
514
|
+
const validated = await this.validateAndSanitizeSkillFile(uri, CancellationToken.None);
|
|
515
|
+
name = validated.name;
|
|
516
|
+
description = validated.description;
|
|
517
|
+
} catch (e) {
|
|
518
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
519
|
+
this.logger.error(
|
|
520
|
+
`[registerContributedFile] Extension '${extension.identifier.value}' failed to validate skill file: ${uri}`,
|
|
521
|
+
msg
|
|
522
|
+
);
|
|
523
|
+
throw e;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
359
526
|
try {
|
|
360
527
|
await this.filesConfigService.updateReadonly(uri, true);
|
|
361
|
-
}
|
|
362
|
-
catch (e) {
|
|
528
|
+
} catch (e) {
|
|
363
529
|
const msg = e instanceof Error ? e.message : String(e);
|
|
364
|
-
this.logger.error(
|
|
530
|
+
this.logger.error(
|
|
531
|
+
`[registerContributedFile] Failed to make prompt file readonly: ${uri}`,
|
|
532
|
+
msg
|
|
533
|
+
);
|
|
365
534
|
}
|
|
366
|
-
return {
|
|
535
|
+
return {
|
|
536
|
+
uri,
|
|
537
|
+
name,
|
|
538
|
+
description,
|
|
539
|
+
storage: PromptsStorage.extension,
|
|
540
|
+
type,
|
|
541
|
+
extension,
|
|
542
|
+
source: ExtensionAgentSourceType.contribution
|
|
543
|
+
};
|
|
367
544
|
})();
|
|
368
545
|
bucket.set(uri, entryPromise);
|
|
369
546
|
const flushCachesIfRequired = () => {
|
|
370
547
|
this.cachedFileLocations[type] = undefined;
|
|
371
548
|
switch (type) {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
549
|
+
case PromptsType.agent:
|
|
550
|
+
this.cachedCustomAgents.refresh();
|
|
551
|
+
break;
|
|
552
|
+
case PromptsType.prompt:
|
|
553
|
+
this.cachedSlashCommands.refresh();
|
|
554
|
+
break;
|
|
378
555
|
}
|
|
379
556
|
};
|
|
380
557
|
flushCachesIfRequired();
|
|
@@ -387,16 +564,22 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
387
564
|
}
|
|
388
565
|
getPromptLocationLabel(promptPath) {
|
|
389
566
|
switch (promptPath.storage) {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
567
|
+
case PromptsStorage.local:
|
|
568
|
+
return this.labelService.getUriLabel(dirname(promptPath.uri), {
|
|
569
|
+
relative: true
|
|
570
|
+
});
|
|
571
|
+
case PromptsStorage.user:
|
|
572
|
+
return localize(6380, "User Data");
|
|
573
|
+
case PromptsStorage.extension:
|
|
574
|
+
{
|
|
393
575
|
return localize(
|
|
394
|
-
|
|
395
|
-
|
|
576
|
+
6381,
|
|
577
|
+
"Extension: {0}",
|
|
396
578
|
promptPath.extension.displayName ?? promptPath.extension.id
|
|
397
579
|
);
|
|
398
580
|
}
|
|
399
|
-
|
|
581
|
+
default:
|
|
582
|
+
throw ( new Error("Unknown prompt storage type"));
|
|
400
583
|
}
|
|
401
584
|
}
|
|
402
585
|
findAgentMDsInWorkspace(token) {
|
|
@@ -409,8 +592,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
409
592
|
}
|
|
410
593
|
if (includeNested) {
|
|
411
594
|
return await this.fileLocator.findAgentMDsInWorkspace(token);
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
595
|
+
} else {
|
|
414
596
|
return await this.fileLocator.findAgentMDsInWorkspaceRoots(token);
|
|
415
597
|
}
|
|
416
598
|
}
|
|
@@ -426,7 +608,7 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
426
608
|
}
|
|
427
609
|
getDisabledPromptFiles(type) {
|
|
428
610
|
const disabledKey = this.disabledPromptsStorageKeyPrefix + type;
|
|
429
|
-
const value = this.storageService.get(disabledKey, StorageScope.PROFILE,
|
|
611
|
+
const value = this.storageService.get(disabledKey, StorageScope.PROFILE, "[]");
|
|
430
612
|
const result = ( new ResourceSet());
|
|
431
613
|
try {
|
|
432
614
|
const arr = JSON.parse(value);
|
|
@@ -434,25 +616,57 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
434
616
|
for (const s of arr) {
|
|
435
617
|
try {
|
|
436
618
|
result.add(URI.revive(s));
|
|
437
|
-
}
|
|
438
|
-
catch {
|
|
439
|
-
}
|
|
619
|
+
} catch {}
|
|
440
620
|
}
|
|
441
621
|
}
|
|
442
|
-
}
|
|
443
|
-
catch {
|
|
444
|
-
}
|
|
622
|
+
} catch {}
|
|
445
623
|
return result;
|
|
446
624
|
}
|
|
447
625
|
setDisabledPromptFiles(type, uris) {
|
|
448
626
|
const disabled = ( Array.from(uris).map(uri => uri.toJSON()));
|
|
449
|
-
this.storageService.store(
|
|
627
|
+
this.storageService.store(
|
|
628
|
+
this.disabledPromptsStorageKeyPrefix + type,
|
|
629
|
+
JSON.stringify(disabled),
|
|
630
|
+
StorageScope.PROFILE,
|
|
631
|
+
StorageTarget.USER
|
|
632
|
+
);
|
|
450
633
|
if (type === PromptsType.agent) {
|
|
451
634
|
this.cachedCustomAgents.refresh();
|
|
452
635
|
}
|
|
453
636
|
}
|
|
454
637
|
sanitizeAgentSkillText(text) {
|
|
455
|
-
return text.replace(/<[^>]+>/g,
|
|
638
|
+
return text.replace(/<[^>]+>/g, "");
|
|
639
|
+
}
|
|
640
|
+
async validateAndSanitizeSkillFile(uri, token) {
|
|
641
|
+
const parsedFile = await this.parseNew(uri, token);
|
|
642
|
+
const name = parsedFile.header?.name;
|
|
643
|
+
if (!name) {
|
|
644
|
+
this.logger.error(
|
|
645
|
+
`[validateAndSanitizeSkillFile] Agent skill file missing name attribute: ${uri}`
|
|
646
|
+
);
|
|
647
|
+
throw ( new SkillMissingNameError(uri));
|
|
648
|
+
}
|
|
649
|
+
const description = parsedFile.header?.description;
|
|
650
|
+
if (!description) {
|
|
651
|
+
this.logger.error(
|
|
652
|
+
`[validateAndSanitizeSkillFile] Agent skill file missing description attribute: ${uri}`
|
|
653
|
+
);
|
|
654
|
+
throw ( new SkillMissingDescriptionError(uri));
|
|
655
|
+
}
|
|
656
|
+
const sanitizedName = this.truncateAgentSkillName(name, uri);
|
|
657
|
+
const skillFolderUri = dirname(uri);
|
|
658
|
+
const folderName = basename(skillFolderUri);
|
|
659
|
+
if (sanitizedName !== folderName) {
|
|
660
|
+
this.logger.error(
|
|
661
|
+
`[validateAndSanitizeSkillFile] Agent skill name "${sanitizedName}" does not match folder name "${folderName}": ${uri}`
|
|
662
|
+
);
|
|
663
|
+
throw ( new SkillNameMismatchError(uri, sanitizedName, folderName));
|
|
664
|
+
}
|
|
665
|
+
const sanitizedDescription = this.truncateAgentSkillDescription(parsedFile.header?.description, uri);
|
|
666
|
+
return {
|
|
667
|
+
name: sanitizedName,
|
|
668
|
+
description: sanitizedDescription
|
|
669
|
+
};
|
|
456
670
|
}
|
|
457
671
|
truncateAgentSkillName(name, uri) {
|
|
458
672
|
const MAX_NAME_LENGTH = 64;
|
|
@@ -461,7 +675,9 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
461
675
|
this.logger.warn(`[findAgentSkills] Agent skill name contains XML tags, removed: ${uri}`);
|
|
462
676
|
}
|
|
463
677
|
if (sanitized.length > MAX_NAME_LENGTH) {
|
|
464
|
-
this.logger.warn(
|
|
678
|
+
this.logger.warn(
|
|
679
|
+
`[findAgentSkills] Agent skill name exceeds ${MAX_NAME_LENGTH} characters, truncated: ${uri}`
|
|
680
|
+
);
|
|
465
681
|
return sanitized.substring(0, MAX_NAME_LENGTH);
|
|
466
682
|
}
|
|
467
683
|
return sanitized;
|
|
@@ -473,85 +689,376 @@ let PromptsService = class PromptsService extends Disposable {
|
|
|
473
689
|
const MAX_DESCRIPTION_LENGTH = 1024;
|
|
474
690
|
const sanitized = this.sanitizeAgentSkillText(description);
|
|
475
691
|
if (sanitized !== description) {
|
|
476
|
-
this.logger.warn(
|
|
692
|
+
this.logger.warn(
|
|
693
|
+
`[findAgentSkills] Agent skill description contains XML tags, removed: ${uri}`
|
|
694
|
+
);
|
|
477
695
|
}
|
|
478
696
|
if (sanitized.length > MAX_DESCRIPTION_LENGTH) {
|
|
479
|
-
this.logger.warn(
|
|
697
|
+
this.logger.warn(
|
|
698
|
+
`[findAgentSkills] Agent skill description exceeds ${MAX_DESCRIPTION_LENGTH} characters, truncated: ${uri}`
|
|
699
|
+
);
|
|
480
700
|
return sanitized.substring(0, MAX_DESCRIPTION_LENGTH);
|
|
481
701
|
}
|
|
482
702
|
return sanitized;
|
|
483
703
|
}
|
|
484
704
|
async findAgentSkills(token) {
|
|
485
705
|
const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
706
|
+
if (!useAgentSkills) {
|
|
707
|
+
return undefined;
|
|
708
|
+
}
|
|
709
|
+
const {
|
|
710
|
+
files,
|
|
711
|
+
skillsBySource
|
|
712
|
+
} = await this.computeSkillDiscoveryInfo(token);
|
|
713
|
+
const result = [];
|
|
714
|
+
for (const file of files) {
|
|
715
|
+
if (file.status === "loaded" && file.name) {
|
|
716
|
+
const sanitizedDescription = this.truncateAgentSkillDescription(file.description, file.uri);
|
|
717
|
+
result.push({
|
|
718
|
+
uri: file.uri,
|
|
719
|
+
storage: file.storage,
|
|
720
|
+
name: file.name,
|
|
721
|
+
description: sanitizedDescription
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
let skippedMissingName = 0;
|
|
726
|
+
let skippedMissingDescription = 0;
|
|
727
|
+
let skippedDuplicateName = 0;
|
|
728
|
+
let skippedParseFailed = 0;
|
|
729
|
+
let skippedNameMismatch = 0;
|
|
730
|
+
for (const file of files) {
|
|
731
|
+
if (file.status === "skipped") {
|
|
732
|
+
switch (file.skipReason) {
|
|
733
|
+
case "missing-name":
|
|
734
|
+
skippedMissingName++;
|
|
735
|
+
break;
|
|
736
|
+
case "missing-description":
|
|
737
|
+
skippedMissingDescription++;
|
|
738
|
+
break;
|
|
739
|
+
case "duplicate-name":
|
|
740
|
+
skippedDuplicateName++;
|
|
741
|
+
break;
|
|
742
|
+
case "name-mismatch":
|
|
743
|
+
skippedNameMismatch++;
|
|
744
|
+
break;
|
|
745
|
+
case "parse-error":
|
|
516
746
|
skippedParseFailed++;
|
|
517
|
-
|
|
747
|
+
break;
|
|
518
748
|
}
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
this.telemetryService.publicLog2("agentSkillsFound", {
|
|
752
|
+
totalSkillsFound: result.length,
|
|
753
|
+
claudePersonal: skillsBySource.get(PromptFileSource.ClaudePersonal) ?? 0,
|
|
754
|
+
claudeWorkspace: skillsBySource.get(PromptFileSource.ClaudeWorkspace) ?? 0,
|
|
755
|
+
copilotPersonal: skillsBySource.get(PromptFileSource.CopilotPersonal) ?? 0,
|
|
756
|
+
githubWorkspace: skillsBySource.get(PromptFileSource.GitHubWorkspace) ?? 0,
|
|
757
|
+
agentsPersonal: skillsBySource.get(PromptFileSource.AgentsPersonal) ?? 0,
|
|
758
|
+
agentsWorkspace: skillsBySource.get(PromptFileSource.AgentsWorkspace) ?? 0,
|
|
759
|
+
configWorkspace: skillsBySource.get(PromptFileSource.ConfigWorkspace) ?? 0,
|
|
760
|
+
configPersonal: skillsBySource.get(PromptFileSource.ConfigPersonal) ?? 0,
|
|
761
|
+
extensionContribution: skillsBySource.get(PromptFileSource.ExtensionContribution) ?? 0,
|
|
762
|
+
extensionAPI: skillsBySource.get(PromptFileSource.ExtensionAPI) ?? 0,
|
|
763
|
+
skippedDuplicateName,
|
|
764
|
+
skippedMissingName,
|
|
765
|
+
skippedMissingDescription,
|
|
766
|
+
skippedNameMismatch,
|
|
767
|
+
skippedParseFailed
|
|
768
|
+
});
|
|
769
|
+
return result;
|
|
770
|
+
}
|
|
771
|
+
async getPromptDiscoveryInfo(type, token) {
|
|
772
|
+
const files = [];
|
|
773
|
+
if (type === PromptsType.skill) {
|
|
774
|
+
return this.getSkillDiscoveryInfo(token);
|
|
775
|
+
} else if (type === PromptsType.agent) {
|
|
776
|
+
return this.getAgentDiscoveryInfo(token);
|
|
777
|
+
} else if (type === PromptsType.prompt) {
|
|
778
|
+
return this.getPromptSlashCommandDiscoveryInfo(token);
|
|
779
|
+
} else if (type === PromptsType.instructions) {
|
|
780
|
+
return this.getInstructionsDiscoveryInfo(token);
|
|
781
|
+
}
|
|
782
|
+
return {
|
|
783
|
+
type,
|
|
784
|
+
files
|
|
785
|
+
};
|
|
786
|
+
}
|
|
787
|
+
async getSkillDiscoveryInfo(token) {
|
|
788
|
+
const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
|
|
789
|
+
if (!useAgentSkills) {
|
|
790
|
+
const allFiles = await this.listPromptFiles(PromptsType.skill, token);
|
|
791
|
+
const files = ( allFiles.map(promptPath => ({
|
|
792
|
+
uri: promptPath.uri,
|
|
793
|
+
storage: promptPath.storage,
|
|
794
|
+
status: "skipped",
|
|
795
|
+
skipReason: "disabled",
|
|
796
|
+
extensionId: promptPath.extension?.identifier?.value
|
|
797
|
+
})));
|
|
798
|
+
return {
|
|
799
|
+
type: PromptsType.skill,
|
|
800
|
+
files
|
|
519
801
|
};
|
|
520
|
-
const workspaceSkills = await this.fileLocator.findAgentSkillsInWorkspace(token);
|
|
521
|
-
await Promise.all(( workspaceSkills.map(({ uri, type }) => process(uri, type, 'project'))));
|
|
522
|
-
const userSkills = await this.fileLocator.findAgentSkillsInUserHome(token);
|
|
523
|
-
await Promise.all(( userSkills.map(({ uri, type }) => process(uri, type, 'personal'))));
|
|
524
|
-
this.telemetryService.publicLog2('agentSkillsFound', {
|
|
525
|
-
totalSkillsFound: result.length,
|
|
526
|
-
claudePersonal: skillTypes.get('claude-personal') ?? 0,
|
|
527
|
-
claudeWorkspace: skillTypes.get('claude-workspace') ?? 0,
|
|
528
|
-
copilotPersonal: skillTypes.get('copilot-personal') ?? 0,
|
|
529
|
-
githubWorkspace: skillTypes.get('github-workspace') ?? 0,
|
|
530
|
-
customPersonal: skillTypes.get('custom-personal') ?? 0,
|
|
531
|
-
customWorkspace: skillTypes.get('custom-workspace') ?? 0,
|
|
532
|
-
skippedDuplicateName,
|
|
533
|
-
skippedMissingName,
|
|
534
|
-
skippedParseFailed
|
|
535
|
-
});
|
|
536
|
-
return result;
|
|
537
802
|
}
|
|
538
|
-
|
|
803
|
+
const {
|
|
804
|
+
files
|
|
805
|
+
} = await this.computeSkillDiscoveryInfo(token);
|
|
806
|
+
return {
|
|
807
|
+
type: PromptsType.skill,
|
|
808
|
+
files
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
async computeSkillDiscoveryInfo(token) {
|
|
812
|
+
const files = [];
|
|
813
|
+
const skillsBySource = ( new Map());
|
|
814
|
+
const seenNames = ( new Set());
|
|
815
|
+
const nameToUri = ( new Map());
|
|
816
|
+
const allSkills = [];
|
|
817
|
+
const discoveredSkills = await this.fileLocator.findAgentSkills(token);
|
|
818
|
+
const extensionSkills = await this.getExtensionPromptFiles(PromptsType.skill, token);
|
|
819
|
+
allSkills.push(...discoveredSkills, ...( extensionSkills.map(extPath => ({
|
|
820
|
+
fileUri: extPath.uri,
|
|
821
|
+
storage: extPath.storage,
|
|
822
|
+
source: extPath.source === ExtensionAgentSourceType.contribution ? PromptFileSource.ExtensionContribution : PromptFileSource.ExtensionAPI
|
|
823
|
+
}))));
|
|
824
|
+
const getPriority = skill => {
|
|
825
|
+
if (skill.storage === PromptsStorage.local) {
|
|
826
|
+
return 0;
|
|
827
|
+
}
|
|
828
|
+
if (skill.storage === PromptsStorage.user) {
|
|
829
|
+
return 1;
|
|
830
|
+
}
|
|
831
|
+
if (skill.source === PromptFileSource.ExtensionAPI) {
|
|
832
|
+
return 2;
|
|
833
|
+
}
|
|
834
|
+
if (skill.source === PromptFileSource.ExtensionContribution) {
|
|
835
|
+
return 3;
|
|
836
|
+
}
|
|
837
|
+
return 4;
|
|
838
|
+
};
|
|
839
|
+
allSkills.sort((a, b) => getPriority(a) - getPriority(b));
|
|
840
|
+
const extensionIdByUri = ( new Map());
|
|
841
|
+
for (const extSkill of extensionSkills) {
|
|
842
|
+
extensionIdByUri.set(( extSkill.uri.toString()), extSkill.extension.identifier.value);
|
|
843
|
+
}
|
|
844
|
+
for (const skill of allSkills) {
|
|
845
|
+
const uri = skill.fileUri;
|
|
846
|
+
const storage = skill.storage;
|
|
847
|
+
const source = skill.source;
|
|
848
|
+
const extensionId = extensionIdByUri.get(( uri.toString()));
|
|
849
|
+
try {
|
|
850
|
+
const parsedFile = await this.parseNew(uri, token);
|
|
851
|
+
const name = parsedFile.header?.name;
|
|
852
|
+
if (!name) {
|
|
853
|
+
this.logger.error(
|
|
854
|
+
`[computeSkillDiscoveryInfo] Agent skill file missing name attribute: ${uri}`
|
|
855
|
+
);
|
|
856
|
+
files.push({
|
|
857
|
+
uri,
|
|
858
|
+
storage,
|
|
859
|
+
status: "skipped",
|
|
860
|
+
skipReason: "missing-name",
|
|
861
|
+
extensionId,
|
|
862
|
+
source
|
|
863
|
+
});
|
|
864
|
+
continue;
|
|
865
|
+
}
|
|
866
|
+
const sanitizedName = this.truncateAgentSkillName(name, uri);
|
|
867
|
+
const skillFolderUri = dirname(uri);
|
|
868
|
+
const folderName = basename(skillFolderUri);
|
|
869
|
+
if (sanitizedName !== folderName) {
|
|
870
|
+
this.logger.error(
|
|
871
|
+
`[computeSkillDiscoveryInfo] Agent skill name "${sanitizedName}" does not match folder name "${folderName}": ${uri}`
|
|
872
|
+
);
|
|
873
|
+
files.push({
|
|
874
|
+
uri,
|
|
875
|
+
storage,
|
|
876
|
+
status: "skipped",
|
|
877
|
+
skipReason: "name-mismatch",
|
|
878
|
+
name: sanitizedName,
|
|
879
|
+
extensionId,
|
|
880
|
+
source
|
|
881
|
+
});
|
|
882
|
+
continue;
|
|
883
|
+
}
|
|
884
|
+
if (( seenNames.has(sanitizedName))) {
|
|
885
|
+
this.logger.warn(
|
|
886
|
+
`[computeSkillDiscoveryInfo] Skipping duplicate agent skill name: ${sanitizedName} at ${uri}`
|
|
887
|
+
);
|
|
888
|
+
files.push({
|
|
889
|
+
uri,
|
|
890
|
+
storage,
|
|
891
|
+
status: "skipped",
|
|
892
|
+
skipReason: "duplicate-name",
|
|
893
|
+
name: sanitizedName,
|
|
894
|
+
duplicateOf: nameToUri.get(sanitizedName),
|
|
895
|
+
extensionId,
|
|
896
|
+
source
|
|
897
|
+
});
|
|
898
|
+
continue;
|
|
899
|
+
}
|
|
900
|
+
const description = parsedFile.header?.description;
|
|
901
|
+
if (!description) {
|
|
902
|
+
this.logger.error(
|
|
903
|
+
`[computeSkillDiscoveryInfo] Agent skill file missing description attribute: ${uri}`
|
|
904
|
+
);
|
|
905
|
+
files.push({
|
|
906
|
+
uri,
|
|
907
|
+
storage,
|
|
908
|
+
status: "skipped",
|
|
909
|
+
skipReason: "missing-description",
|
|
910
|
+
name: sanitizedName,
|
|
911
|
+
extensionId,
|
|
912
|
+
source
|
|
913
|
+
});
|
|
914
|
+
continue;
|
|
915
|
+
}
|
|
916
|
+
seenNames.add(sanitizedName);
|
|
917
|
+
nameToUri.set(sanitizedName, uri);
|
|
918
|
+
files.push({
|
|
919
|
+
uri,
|
|
920
|
+
storage,
|
|
921
|
+
status: "loaded",
|
|
922
|
+
name: sanitizedName,
|
|
923
|
+
description,
|
|
924
|
+
extensionId,
|
|
925
|
+
source
|
|
926
|
+
});
|
|
927
|
+
skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
|
|
928
|
+
} catch (e) {
|
|
929
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
930
|
+
this.logger.error(
|
|
931
|
+
`[computeSkillDiscoveryInfo] Failed to validate Agent skill file: ${uri}`,
|
|
932
|
+
msg
|
|
933
|
+
);
|
|
934
|
+
files.push({
|
|
935
|
+
uri,
|
|
936
|
+
storage,
|
|
937
|
+
status: "skipped",
|
|
938
|
+
skipReason: "parse-error",
|
|
939
|
+
errorMessage: msg,
|
|
940
|
+
extensionId,
|
|
941
|
+
source
|
|
942
|
+
});
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
return {
|
|
946
|
+
files,
|
|
947
|
+
skillsBySource
|
|
948
|
+
};
|
|
949
|
+
}
|
|
950
|
+
async getAgentDiscoveryInfo(token) {
|
|
951
|
+
const files = [];
|
|
952
|
+
const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
|
|
953
|
+
const agentFiles = await this.listPromptFiles(PromptsType.agent, token);
|
|
954
|
+
for (const promptPath of agentFiles) {
|
|
955
|
+
const uri = promptPath.uri;
|
|
956
|
+
const storage = promptPath.storage;
|
|
957
|
+
const extensionId = promptPath.extension?.identifier?.value;
|
|
958
|
+
if (( disabledAgents.has(uri))) {
|
|
959
|
+
files.push({
|
|
960
|
+
uri,
|
|
961
|
+
storage,
|
|
962
|
+
status: "skipped",
|
|
963
|
+
skipReason: "disabled",
|
|
964
|
+
extensionId
|
|
965
|
+
});
|
|
966
|
+
continue;
|
|
967
|
+
}
|
|
968
|
+
try {
|
|
969
|
+
const ast = await this.parseNew(uri, token);
|
|
970
|
+
const name = ast.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
|
|
971
|
+
files.push({
|
|
972
|
+
uri,
|
|
973
|
+
storage,
|
|
974
|
+
status: "loaded",
|
|
975
|
+
name,
|
|
976
|
+
extensionId
|
|
977
|
+
});
|
|
978
|
+
} catch (e) {
|
|
979
|
+
files.push({
|
|
980
|
+
uri,
|
|
981
|
+
storage,
|
|
982
|
+
status: "skipped",
|
|
983
|
+
skipReason: "parse-error",
|
|
984
|
+
errorMessage: e instanceof Error ? e.message : String(e),
|
|
985
|
+
extensionId
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
return {
|
|
990
|
+
type: PromptsType.agent,
|
|
991
|
+
files
|
|
992
|
+
};
|
|
993
|
+
}
|
|
994
|
+
async getPromptSlashCommandDiscoveryInfo(token) {
|
|
995
|
+
const files = [];
|
|
996
|
+
const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
|
|
997
|
+
for (const promptPath of promptFiles) {
|
|
998
|
+
const uri = promptPath.uri;
|
|
999
|
+
const storage = promptPath.storage;
|
|
1000
|
+
const extensionId = promptPath.extension?.identifier?.value;
|
|
1001
|
+
try {
|
|
1002
|
+
const parsedPromptFile = await this.parseNew(uri, token);
|
|
1003
|
+
const name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
|
|
1004
|
+
files.push({
|
|
1005
|
+
uri,
|
|
1006
|
+
storage,
|
|
1007
|
+
status: "loaded",
|
|
1008
|
+
name,
|
|
1009
|
+
extensionId
|
|
1010
|
+
});
|
|
1011
|
+
} catch (e) {
|
|
1012
|
+
files.push({
|
|
1013
|
+
uri,
|
|
1014
|
+
storage,
|
|
1015
|
+
status: "skipped",
|
|
1016
|
+
skipReason: "parse-error",
|
|
1017
|
+
errorMessage: e instanceof Error ? e.message : String(e),
|
|
1018
|
+
extensionId
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
return {
|
|
1023
|
+
type: PromptsType.prompt,
|
|
1024
|
+
files
|
|
1025
|
+
};
|
|
1026
|
+
}
|
|
1027
|
+
async getInstructionsDiscoveryInfo(token) {
|
|
1028
|
+
const files = [];
|
|
1029
|
+
const instructionsFiles = await this.listPromptFiles(PromptsType.instructions, token);
|
|
1030
|
+
for (const promptPath of instructionsFiles) {
|
|
1031
|
+
const uri = promptPath.uri;
|
|
1032
|
+
const storage = promptPath.storage;
|
|
1033
|
+
const extensionId = promptPath.extension?.identifier?.value;
|
|
1034
|
+
try {
|
|
1035
|
+
const parsedPromptFile = await this.parseNew(uri, token);
|
|
1036
|
+
const name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
|
|
1037
|
+
files.push({
|
|
1038
|
+
uri,
|
|
1039
|
+
storage,
|
|
1040
|
+
status: "loaded",
|
|
1041
|
+
name,
|
|
1042
|
+
extensionId
|
|
1043
|
+
});
|
|
1044
|
+
} catch (e) {
|
|
1045
|
+
files.push({
|
|
1046
|
+
uri,
|
|
1047
|
+
storage,
|
|
1048
|
+
status: "skipped",
|
|
1049
|
+
skipReason: "parse-error",
|
|
1050
|
+
errorMessage: e instanceof Error ? e.message : String(e),
|
|
1051
|
+
extensionId
|
|
1052
|
+
});
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
return {
|
|
1056
|
+
type: PromptsType.instructions,
|
|
1057
|
+
files
|
|
1058
|
+
};
|
|
539
1059
|
}
|
|
540
1060
|
};
|
|
541
|
-
PromptsService = ( __decorate([
|
|
542
|
-
( __param(0, ILogService)),
|
|
543
|
-
( __param(1, ILabelService)),
|
|
544
|
-
( __param(2, IModelService)),
|
|
545
|
-
( __param(3, IInstantiationService)),
|
|
546
|
-
( __param(4, IUserDataProfileService)),
|
|
547
|
-
( __param(5, IConfigurationService)),
|
|
548
|
-
( __param(6, IFileService)),
|
|
549
|
-
( __param(7, IFilesConfigurationService)),
|
|
550
|
-
( __param(8, IStorageService)),
|
|
551
|
-
( __param(9, IExtensionService)),
|
|
552
|
-
( __param(10, IDefaultAccountService)),
|
|
553
|
-
( __param(11, ITelemetryService))
|
|
554
|
-
], PromptsService));
|
|
1061
|
+
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))], PromptsService));
|
|
555
1062
|
class CachedPromise extends Disposable {
|
|
556
1063
|
constructor(computeFn, getEvent, delay = 0) {
|
|
557
1064
|
super();
|
|
@@ -597,10 +1104,16 @@ class ModelChangeTracker extends Disposable {
|
|
|
597
1104
|
super();
|
|
598
1105
|
this.listeners = ( new ResourceMap());
|
|
599
1106
|
this.onDidPromptModelChange = this._register(( new Emitter()));
|
|
600
|
-
const onAdd =
|
|
1107
|
+
const onAdd = model => {
|
|
601
1108
|
const promptType = getPromptsTypeForLanguageId(model.getLanguageId());
|
|
602
1109
|
if (promptType !== undefined) {
|
|
603
|
-
this.listeners.set(
|
|
1110
|
+
this.listeners.set(
|
|
1111
|
+
model.uri,
|
|
1112
|
+
model.onDidChangeContent(() => this.onDidPromptModelChange.fire({
|
|
1113
|
+
uri: model.uri,
|
|
1114
|
+
promptType
|
|
1115
|
+
}))
|
|
1116
|
+
);
|
|
604
1117
|
}
|
|
605
1118
|
};
|
|
606
1119
|
const onRemove = (languageId, uri) => {
|
|
@@ -608,7 +1121,10 @@ class ModelChangeTracker extends Disposable {
|
|
|
608
1121
|
if (promptType !== undefined) {
|
|
609
1122
|
this.listeners.get(uri)?.dispose();
|
|
610
1123
|
this.listeners.delete(uri);
|
|
611
|
-
this.onDidPromptModelChange.fire({
|
|
1124
|
+
this.onDidPromptModelChange.fire({
|
|
1125
|
+
uri,
|
|
1126
|
+
promptType
|
|
1127
|
+
});
|
|
612
1128
|
}
|
|
613
1129
|
};
|
|
614
1130
|
this._register(modelService.onModelAdded(model => onAdd(model)));
|
|
@@ -616,7 +1132,9 @@ class ModelChangeTracker extends Disposable {
|
|
|
616
1132
|
onRemove(e.oldLanguageId, e.model.uri);
|
|
617
1133
|
onAdd(e.model);
|
|
618
1134
|
}));
|
|
619
|
-
this._register(
|
|
1135
|
+
this._register(
|
|
1136
|
+
modelService.onModelRemoved(model => onRemove(model.getLanguageId(), model.uri))
|
|
1137
|
+
);
|
|
620
1138
|
}
|
|
621
1139
|
dispose() {
|
|
622
1140
|
super.dispose();
|
|
@@ -625,7 +1143,7 @@ class ModelChangeTracker extends Disposable {
|
|
|
625
1143
|
}
|
|
626
1144
|
}
|
|
627
1145
|
var IAgentSource;
|
|
628
|
-
(function
|
|
1146
|
+
(function(IAgentSource) {
|
|
629
1147
|
function fromPromptPath(promptPath) {
|
|
630
1148
|
if (promptPath.storage === PromptsStorage.extension) {
|
|
631
1149
|
return {
|
|
@@ -633,8 +1151,7 @@ var IAgentSource;
|
|
|
633
1151
|
extensionId: promptPath.extension.identifier,
|
|
634
1152
|
type: promptPath.source
|
|
635
1153
|
};
|
|
636
|
-
}
|
|
637
|
-
else {
|
|
1154
|
+
} else {
|
|
638
1155
|
return {
|
|
639
1156
|
storage: promptPath.storage
|
|
640
1157
|
};
|
|
@@ -643,4 +1160,4 @@ var IAgentSource;
|
|
|
643
1160
|
IAgentSource.fromPromptPath = fromPromptPath;
|
|
644
1161
|
})(IAgentSource || (IAgentSource = {}));
|
|
645
1162
|
|
|
646
|
-
export { PromptsService };
|
|
1163
|
+
export { PromptsService, SkillMissingDescriptionError, SkillMissingNameError, SkillNameMismatchError };
|