@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.
Files changed (334) hide show
  1. package/index.js +24 -3
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +23 -3
  4. package/vscode/src/vs/platform/browserElements/common/browserElements.js +13 -6
  5. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +4 -4
  6. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -1
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +42 -27
  8. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +14 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +218 -74
  10. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatTerminalOutputAccessibleView.js +6 -8
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -9
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +165 -168
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +27 -25
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +141 -140
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +189 -121
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +14 -15
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +60 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +435 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +28 -12
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +10 -12
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -1
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +37 -16
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.d.ts +11 -0
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +54 -24
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +73 -34
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +71 -30
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +151 -89
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +12 -15
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +39 -40
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +90 -125
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +5 -2
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +263 -143
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +4 -4
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +188 -126
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -1
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +37 -28
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +21 -9
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +392 -226
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +31 -27
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +25 -23
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -3
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.d.ts +2 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +13 -0
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +20 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +83 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +68 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +319 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.d.ts +1 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +215 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +179 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +951 -0
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agentsessionprojection.css +20 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +388 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/unifiedQuickAccess.css +195 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +120 -0
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +394 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.d.ts +38 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +95 -0
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +31 -29
  61. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +49 -47
  62. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +4 -6
  63. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/media/simpleBrowserOverlay.css +0 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +188 -151
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +1012 -639
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +256 -151
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +8 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +182 -101
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +79 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +193 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +9 -7
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.d.ts +68 -0
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +253 -0
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -5
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +69 -50
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -4
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +52 -33
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +5 -6
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +274 -155
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +2 -10
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +130 -104
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +12 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +385 -160
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +53 -36
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +112 -75
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +19 -10
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +31 -11
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +39 -17
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNewNotebookContentEdits.js +10 -14
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +0 -2
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +25 -16
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +265 -203
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +29 -26
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +114 -60
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +16 -19
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +44 -30
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +119 -45
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +152 -136
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +12 -8
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +51 -31
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +323 -217
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -3
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +653 -401
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +52 -40
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -3
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +5 -2
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +43 -28
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +182 -136
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +33 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +548 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +0 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +222 -138
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +3 -3
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +151 -113
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +6 -4
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +453 -217
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +162 -88
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/media/chatSetup.css +2 -1
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +1 -13
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +309 -233
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +55 -53
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.js +3 -1
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +37 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +109 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +35 -23
  132. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.d.ts +9 -4
  133. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +73 -33
  134. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +47 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +333 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +39 -25
  137. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +9 -5
  138. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +23 -20
  139. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +20 -16
  141. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +65 -57
  142. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +48 -36
  143. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +20 -12
  144. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +52 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +155 -159
  147. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -14
  148. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +521 -246
  149. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +107 -76
  150. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +28 -24
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.js +10 -6
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.d.ts +16 -0
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.js +57 -0
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatLayoutService.js +4 -6
  155. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +56 -44
  156. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -3
  157. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +37 -47
  158. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatEditorInputContentProvider.js +5 -7
  159. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +10 -0
  160. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +1284 -0
  161. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +179 -125
  162. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +9 -11
  163. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +7 -6
  164. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +96 -78
  165. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +58 -53
  166. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +25 -11
  167. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +484 -292
  168. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.d.ts +1 -6
  169. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +65 -92
  170. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -19
  171. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +1 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +9 -1
  173. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +331 -189
  174. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +81 -93
  175. package/vscode/src/vs/workbench/contrib/chat/common/ignoredFiles.js +1 -3
  176. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -3
  177. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +6 -7
  178. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +36 -8
  179. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +169 -31
  180. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.d.ts +6 -0
  181. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +141 -0
  182. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +6 -4
  183. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +218 -144
  184. package/vscode/src/vs/workbench/contrib/chat/common/model/chatTransferService.js +20 -10
  185. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.d.ts +109 -0
  186. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +349 -0
  187. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +9 -8
  188. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +9 -0
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +139 -36
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +3 -6
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +64 -51
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +49 -34
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +21 -13
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -1
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +125 -97
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +91 -131
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkProvider.js +8 -5
  198. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -0
  199. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +488 -222
  200. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +32 -12
  201. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +58 -13
  202. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +717 -200
  203. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +79 -18
  204. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +371 -130
  205. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +0 -1
  206. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +3 -7
  207. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +79 -61
  208. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +27 -21
  209. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +7 -10
  210. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
  211. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +26 -32
  212. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +2 -2
  213. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -60
  214. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +115 -426
  215. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +15 -0
  216. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +127 -0
  217. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -37
  218. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +16 -0
  219. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +21 -0
  220. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +51 -0
  221. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +334 -0
  222. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.d.ts +41 -0
  223. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +424 -0
  224. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.d.ts +4 -0
  225. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +58 -0
  226. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.d.ts +7 -0
  227. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +195 -0
  228. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.d.ts +8 -0
  229. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +368 -0
  230. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.d.ts +2 -0
  231. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +7 -0
  232. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  233. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +1 -1
  234. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +23 -25
  235. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +7 -8
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +34 -38
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +8 -12
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +103 -95
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +28 -16
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +4 -5
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +12 -8
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +65 -54
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +86 -60
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +13 -26
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +2 -1
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +56 -46
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +2 -2
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +63 -31
  252. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +2 -1
  253. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +35 -30
  254. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +2 -1
  255. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +44 -37
  256. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +3 -4
  257. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +3 -3
  258. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +11 -0
  259. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +70 -50
  260. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +26 -394
  261. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +85 -49
  262. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +68 -27
  263. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +1 -0
  264. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +67 -45
  265. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.d.ts +12 -0
  266. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +106 -0
  267. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +2 -2
  268. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +177 -97
  269. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +136 -49
  270. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +2 -1
  271. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +128 -112
  272. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +51 -49
  273. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +8 -0
  274. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +25 -0
  275. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
  276. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
  277. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
  278. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
  279. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
  280. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
  281. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
  282. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +12 -0
  283. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +21 -0
  284. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +5 -14
  285. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +2 -4
  286. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +1 -0
  287. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
  288. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +29 -0
  289. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +30 -31
  290. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -17
  291. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +19 -20
  292. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.d.ts +11 -0
  293. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +58 -0
  294. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +31 -3
  295. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +325 -199
  296. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +1 -1
  297. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +1 -1
  298. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +33 -38
  299. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +45 -5
  300. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +746 -456
  301. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +145 -98
  302. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +88 -37
  303. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +120 -51
  304. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +25 -28
  305. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +5 -0
  306. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +58 -12
  307. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +12 -0
  308. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.js +17 -0
  309. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +8 -1
  310. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +47 -28
  311. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +37 -0
  312. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +171 -0
  313. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +0 -58
  314. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +0 -213
  315. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +0 -39
  316. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +0 -243
  317. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +0 -7
  318. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +0 -41
  319. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +0 -166
  320. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +0 -607
  321. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +0 -255
  322. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +0 -46
  323. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +0 -396
  324. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +0 -9
  325. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +0 -379
  326. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +0 -117
  327. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -141
  328. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -961
  329. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +0 -36
  330. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +0 -447
  331. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +0 -6
  332. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +0 -251
  333. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.d.ts +0 -10
  334. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -42
@@ -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 { IDefaultAccountService } from '@codingame/monaco-vscode-api/vscode/vs/platform/defaultAccount/common/defaultAccount.service';
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, CUSTOM_AGENTS_PROVIDER_ACTIVATION_EVENT, ExtensionAgentSourceType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
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(logger, labelService, modelService, instantiationService, userDataService, configurationService, fileService, filesConfigService, storageService, extensionService, defaultAccountService, telemetryService) {
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.customAgentsProviders = [];
58
- this.disabledPromptsStorageKeyPrefix = 'chat.disabledPromptFiles.';
91
+ this.promptFileProviders = [];
92
+ this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
59
93
  this.fileLocator = this.instantiationService.createInstance(PromptFilesLocator);
60
- this._register(this.modelService.onModelRemoved((model) => {
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
- (token) => this.computeCustomAgents(token),
66
- () => Event.any(this.getFileLocatorEvent(PromptsType.agent), Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent))
67
- )));
68
- this.cachedSlashCommands = this._register(( new CachedPromise(
69
- (token) => this.computePromptSlashCommands(token),
70
- () => Event.any(this.getFileLocatorEvent(PromptsType.prompt), Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt))
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 => ({ uri, storage: PromptsStorage.user, type })))),
109
- this.fileLocator.listFiles(type, PromptsStorage.local, token).then(uris => ( uris.map(uri => ({ uri, storage: PromptsStorage.local, type })))),
110
- this.getExtensionPromptFiles(type, token),
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
- registerCustomAgentsProvider(extension, provider) {
115
- const providerEntry = { extension, ...provider };
116
- this.customAgentsProviders.push(providerEntry);
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.onDidChangeCustomAgents) {
119
- disposables.add(provider.onDidChangeCustomAgents(() => {
120
- this.cachedFileLocations[PromptsType.agent] = undefined;
121
- this.cachedCustomAgents.refresh();
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
- this.cachedFileLocations[PromptsType.agent] = undefined;
125
- this.cachedCustomAgents.refresh();
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.customAgentsProviders.findIndex((p) => p === providerEntry);
192
+ const index = this.promptFileProviders.findIndex(p => p === providerEntry);
129
193
  if (index >= 0) {
130
- this.customAgentsProviders.splice(index, 1);
131
- this.cachedFileLocations[PromptsType.agent] = undefined;
132
- this.cachedCustomAgents.refresh();
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 listCustomAgentsFromProvider(token) {
211
+ async listFromProviders(type, activationEvent, token) {
139
212
  const result = [];
140
- if (this.customAgentsProviders.length === 0) {
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
- await this.extensionService.activateByEvent(CUSTOM_AGENTS_PROVIDER_ACTIVATION_EVENT);
144
- for (const providerEntry of this.customAgentsProviders) {
218
+ for (const providerEntry of providers) {
145
219
  try {
146
- const agents = await providerEntry.provideCustomAgents({}, token);
147
- if (!agents || token.isCancellationRequested) {
220
+ const files = await providerEntry.providePromptFiles({}, token);
221
+ if (!files || token.isCancellationRequested) {
148
222
  continue;
149
223
  }
150
- for (const agent of agents) {
151
- if (!agent.isEditable) {
152
- try {
153
- await this.filesConfigService.updateReadonly(agent.uri, true);
154
- }
155
- catch (e) {
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: agent.uri,
162
- name: agent.name,
163
- description: agent.description,
232
+ uri: file.uri,
164
233
  storage: PromptsStorage.extension,
165
- type: PromptsType.agent,
234
+ type,
166
235
  extension: providerEntry.extension,
167
236
  source: ExtensionAgentSourceType.provider
168
237
  });
169
238
  }
170
- }
171
- catch (e) {
172
- this.logger.error(`[listCustomAgentsFromProvider] Failed to get custom agents from provider`, e instanceof Error ? e.message : String(e));
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
- case PromptsStorage.extension:
180
- return this.getExtensionPromptFiles(type, token);
181
- case PromptsStorage.local:
182
- return this.fileLocator.listFiles(type, PromptsStorage.local, token).then(uris => ( uris.map(uri => ({ uri, storage: PromptsStorage.local, type }))));
183
- case PromptsStorage.user:
184
- return this.fileLocator.listFiles(type, PromptsStorage.user, token).then(uris => ( uris.map(uri => ({ uri, storage: PromptsStorage.user, type }))));
185
- default:
186
- throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
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 contributedFiles = await Promise.all(( this.contributedFiles[type].values()));
192
- if (type === PromptsType.agent) {
193
- const providerAgents = await this.listCustomAgentsFromProvider(token);
194
- return [...contributedFiles, ...providerAgents];
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.getAgentSourceFolder();
291
+ const folders = await this.fileLocator.getAgentSourceFolders();
202
292
  for (const uri of folders) {
203
- result.push({ uri, storage: PromptsStorage.local, type });
293
+ result.push({
294
+ uri,
295
+ storage: PromptsStorage.local,
296
+ type
297
+ });
204
298
  }
205
- }
206
- else {
207
- for (const uri of this.fileLocator.getConfigBasedSourceFolders(type)) {
208
- result.push({ uri, storage: PromptsStorage.local, type });
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
- const userHome = this.userDataService.currentProfile.promptsHome;
212
- result.push({ uri: userHome, storage: PromptsStorage.user, type });
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 (promptPath) => {
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
- catch (e) {
229
- this.logger.error(`[computePromptSlashCommands] Failed to parse prompt file for slash command: ${promptPath.uri}`, e instanceof Error ? e.message : String(e));
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, { uri: model.uri, storage: PromptsStorage.local, type: PromptsType.prompt }));
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 (promptPath) => {
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 === 'object') {
403
+ if (advanced && advanced.value.type === "object") {
292
404
  metadata = {};
293
405
  for (const [key, value] of Object.entries(advanced.value)) {
294
- if (['string', 'number', 'boolean'].includes(value.type)) {
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 { name, offset } = bodyVarRefs[i];
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({ name, range });
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 { uri, name, agentInstructions, source };
436
+ return {
437
+ uri,
438
+ name,
439
+ agentInstructions,
440
+ source,
441
+ visibility: {
442
+ userInvokable: true,
443
+ agentInvokable: true
444
+ }
445
+ };
319
446
  }
320
- const { description, model, tools, handOffs, argumentHint, target, infer } = ast.header;
321
- return { uri, name, description, model, tools, handOffs, argumentHint, target, infer, agentInstructions, source };
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 === 'fulfilled') {
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(`[computeCustomAgents] Skipping agent file that does not exist: ${uri}`, error.message);
334
- }
335
- else {
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(`[registerContributedFile] Failed to make prompt file readonly: ${uri}`, msg);
530
+ this.logger.error(
531
+ `[registerContributedFile] Failed to make prompt file readonly: ${uri}`,
532
+ msg
533
+ );
365
534
  }
366
- return { uri, name, description, storage: PromptsStorage.extension, type, extension, source: ExtensionAgentSourceType.contribution };
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
- case PromptsType.agent:
373
- this.cachedCustomAgents.refresh();
374
- break;
375
- case PromptsType.prompt:
376
- this.cachedSlashCommands.refresh();
377
- break;
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
- case PromptsStorage.local: return this.labelService.getUriLabel(dirname(promptPath.uri), { relative: true });
391
- case PromptsStorage.user: return localize(6068, 'User Data');
392
- case PromptsStorage.extension: {
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
- 6069,
395
- 'Extension: {0}',
576
+ 6381,
577
+ "Extension: {0}",
396
578
  promptPath.extension.displayName ?? promptPath.extension.id
397
579
  );
398
580
  }
399
- default: throw ( new Error('Unknown prompt storage type'));
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(this.disabledPromptsStorageKeyPrefix + type, JSON.stringify(disabled), StorageScope.PROFILE, StorageTarget.USER);
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(`[findAgentSkills] Agent skill name exceeds ${MAX_NAME_LENGTH} characters, truncated: ${uri}`);
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(`[findAgentSkills] Agent skill description contains XML tags, removed: ${uri}`);
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(`[findAgentSkills] Agent skill description exceeds ${MAX_DESCRIPTION_LENGTH} characters, truncated: ${uri}`);
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
- const defaultAccount = await this.defaultAccountService.getDefaultAccount();
487
- const previewFeaturesEnabled = defaultAccount?.chat_preview_features_enabled ?? true;
488
- if (useAgentSkills && previewFeaturesEnabled) {
489
- const result = [];
490
- const seenNames = ( new Set());
491
- const skillTypes = ( new Map());
492
- let skippedMissingName = 0;
493
- let skippedDuplicateName = 0;
494
- let skippedParseFailed = 0;
495
- const process = async (uri, skillType, scopeType) => {
496
- try {
497
- const parsedFile = await this.parseNew(uri, token);
498
- const name = parsedFile.header?.name;
499
- if (!name) {
500
- skippedMissingName++;
501
- this.logger.error(`[findAgentSkills] Agent skill file missing name attribute: ${uri}`);
502
- return;
503
- }
504
- const sanitizedName = this.truncateAgentSkillName(name, uri);
505
- if (( seenNames.has(sanitizedName))) {
506
- skippedDuplicateName++;
507
- this.logger.warn(`[findAgentSkills] Skipping duplicate agent skill name: ${sanitizedName} at ${uri}`);
508
- return;
509
- }
510
- seenNames.add(sanitizedName);
511
- const sanitizedDescription = this.truncateAgentSkillDescription(parsedFile.header?.description, uri);
512
- result.push({ uri, type: scopeType, name: sanitizedName, description: sanitizedDescription });
513
- skillTypes.set(skillType, (skillTypes.get(skillType) || 0) + 1);
514
- }
515
- catch (e) {
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
- this.logger.error(`[findAgentSkills] Failed to parse Agent skill file: ${uri}`, e instanceof Error ? e.message : String(e));
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
- return undefined;
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 = (model) => {
1107
+ const onAdd = model => {
601
1108
  const promptType = getPromptsTypeForLanguageId(model.getLanguageId());
602
1109
  if (promptType !== undefined) {
603
- this.listeners.set(model.uri, model.onDidChangeContent(() => this.onDidPromptModelChange.fire({ uri: model.uri, promptType })));
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({ uri, promptType });
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(modelService.onModelRemoved(model => onRemove(model.getLanguageId(), model.uri)));
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 (IAgentSource) {
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 };