@codingame/monaco-vscode-chat-service-override 29.1.0 → 30.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 (258) hide show
  1. package/index.js +5 -2
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/agentHost/common/agentService.d.ts +37 -39
  4. package/vscode/src/vs/platform/agentHost/common/agentService.js +3 -1
  5. package/vscode/src/vs/platform/agentHost/common/agentService.service.d.ts +11 -1
  6. package/vscode/src/vs/platform/agentHost/common/state/protocol/action-origin.generated.d.ts +4 -4
  7. package/vscode/src/vs/platform/agentHost/common/state/protocol/actions.d.ts +132 -42
  8. package/vscode/src/vs/platform/agentHost/common/state/protocol/commands.d.ts +54 -0
  9. package/vscode/src/vs/platform/agentHost/common/state/protocol/errors.d.ts +15 -0
  10. package/vscode/src/vs/platform/agentHost/common/state/protocol/messages.d.ts +5 -1
  11. package/vscode/src/vs/platform/agentHost/common/state/protocol/state.d.ts +188 -51
  12. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.d.ts +7 -6
  13. package/vscode/src/vs/platform/agentHost/common/state/sessionProtocol.d.ts +1 -1
  14. package/vscode/src/vs/platform/agentHost/common/state/sessionState.d.ts +7 -2
  15. package/vscode/src/vs/platform/sandbox/browser/sandboxHelperService.d.ts +6 -0
  16. package/vscode/src/vs/platform/sandbox/browser/sandboxHelperService.js +14 -0
  17. package/vscode/src/vs/platform/sandbox/common/sandboxHelperIpc.d.ts +18 -0
  18. package/vscode/src/vs/platform/sandbox/common/sandboxHelperIpc.js +13 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +2 -2
  20. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +37 -16
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +8 -8
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +59 -59
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +12 -12
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +10 -8
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +37 -3
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +4 -4
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +6 -6
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +3 -3
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +20 -11
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +14 -14
  35. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +18 -13
  36. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  37. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +10 -10
  38. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  39. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +19 -19
  40. package/vscode/src/vs/workbench/contrib/chat/browser/actions/createPluginAction.d.ts +36 -0
  41. package/vscode/src/vs/workbench/contrib/chat/browser/actions/createPluginAction.js +482 -0
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.js +8 -8
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +2 -2
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +2 -2
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +10 -2
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +43 -10
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +13 -13
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +3 -3
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +74 -76
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +5 -5
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +1 -1
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +4 -4
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +4 -4
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +27 -35
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +17 -17
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.d.ts +5 -8
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.js +86 -80
  61. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +3 -2
  62. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +38 -4
  63. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +14 -14
  64. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +38 -18
  65. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +427 -167
  66. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +37 -37
  67. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +15 -0
  68. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +108 -37
  69. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +8 -1
  70. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +28 -2
  71. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +2 -0
  72. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +11 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.d.ts +1 -3
  74. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.js +3 -20
  75. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +4 -0
  76. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +65 -68
  77. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +2 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +1 -0
  79. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +64 -51
  80. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +19 -19
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +288 -195
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +21 -21
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +6 -6
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +2 -2
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +19 -19
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +7 -7
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +4 -4
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +7 -7
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +21 -21
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +12 -12
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +17 -17
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +21 -21
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +8 -8
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +23 -23
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +28 -28
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +11 -11
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +1 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +3 -0
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +3 -3
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +1 -0
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +5 -2
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +1 -0
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +2 -1
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +10 -3
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +4 -2
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +19 -7
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +3 -2
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +54 -12
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +3 -3
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +1 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +9 -8
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +14 -14
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +50 -50
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +11 -11
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +1 -1
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +3 -1
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +86 -17
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +6 -6
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +29 -26
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +12 -12
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +19 -19
  132. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +65 -65
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +24 -16
  134. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +17 -17
  135. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +2 -6
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +4 -4
  137. package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.js +2 -2
  138. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +4 -4
  139. package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.js +4 -4
  140. package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.js +2 -2
  141. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +1 -1
  142. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +3 -6
  143. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +54 -39
  144. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +16 -16
  145. package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.d.ts +24 -3
  146. package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +72 -14
  147. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
  148. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +26 -26
  149. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +3 -3
  150. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  151. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileContributions.js +181 -0
  152. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +3 -3
  153. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  154. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
  155. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
  156. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +3 -3
  157. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +8 -6
  158. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +37 -37
  159. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +28 -23
  160. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +6 -6
  161. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +7 -7
  162. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  163. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +9 -9
  164. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +6 -6
  165. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.d.ts +12 -0
  166. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.js +62 -0
  167. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +1 -10
  168. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +148 -88
  169. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +1 -1
  170. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
  171. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +1 -1
  172. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +1 -1
  173. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +1 -0
  174. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +16 -9
  175. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +2 -2
  176. package/vscode/src/vs/workbench/contrib/chat/common/chatArtifactExtraction.d.ts +8 -0
  177. package/vscode/src/vs/workbench/contrib/chat/common/chatArtifactExtraction.js +158 -0
  178. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +8 -3
  179. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +155 -76
  180. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +1 -2
  181. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +5 -4
  182. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +5 -1
  183. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +7 -6
  184. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +31 -1
  185. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +228 -1
  186. package/vscode/src/vs/workbench/contrib/chat/common/plugins/fileBackedInstalledPluginsStore.d.ts +66 -0
  187. package/vscode/src/vs/workbench/contrib/chat/common/plugins/fileBackedInstalledPluginsStore.js +190 -0
  188. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +25 -3
  189. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +130 -107
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +1 -0
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +19 -18
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +5 -5
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +5 -5
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +12 -12
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +2 -18
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +169 -266
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +12 -10
  198. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +149 -206
  199. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +3 -3
  200. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +27 -22
  201. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatArtifactsService.d.ts +20 -8
  202. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatArtifactsService.js +183 -43
  203. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  204. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +1 -1
  205. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +2 -3
  206. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +4 -4
  207. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +21 -21
  208. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +2 -2
  209. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +11 -11
  210. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
  211. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  212. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +11 -11
  213. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +6 -6
  214. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  215. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  216. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  217. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  218. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
  219. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +2 -2
  220. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
  221. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +3 -1
  222. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +4 -2
  223. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +3 -2
  224. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
  225. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.d.ts +1 -0
  226. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +1 -0
  227. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.d.ts +1 -3
  228. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +26 -23
  229. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
  230. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
  231. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
  232. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
  233. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +4 -9
  234. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  235. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -6
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +9 -9
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -2
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +150 -50
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +2 -2
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +66 -5
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +239 -48
  248. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +0 -14
  249. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +0 -208
  250. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +0 -22
  251. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +0 -637
  252. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.d.ts +0 -24
  253. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +0 -384
  254. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalCustomizations.d.ts +0 -33
  255. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalCustomizations.js +0 -47
  256. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalSkill.d.ts +0 -30
  257. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +0 -55
  258. /package/vscode/src/vs/workbench/contrib/chat/{common → browser}/promptSyntax/promptFileContributions.d.ts +0 -0
@@ -25,11 +25,11 @@ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform
25
25
  import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
26
26
  import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
27
27
  import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
28
- import { getCleanPromptName, AGENT_MD_FILENAME, CLAUDE_MD_FILENAME, CLAUDE_LOCAL_MD_FILENAME, CLAUDE_CONFIG_FOLDER, COPILOT_CUSTOM_INSTRUCTIONS_FILENAME, GITHUB_CONFIG_FOLDER, getSkillFolderName, PromptFileSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
29
- import { PromptsType, PROMPT_LANGUAGE_ID, Target, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
28
+ import { getCleanPromptName, AGENT_MD_FILENAME, CLAUDE_MD_FILENAME, CLAUDE_LOCAL_MD_FILENAME, CLAUDE_CONFIG_FOLDER, COPILOT_CUSTOM_INSTRUCTIONS_FILENAME, GITHUB_CONFIG_FOLDER, getSkillFolderName } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
29
+ import { PromptsType, PromptFileSource, PROMPT_LANGUAGE_ID, Target, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
30
30
  import { PromptFilesLocator } from '../utils/promptFilesLocator.js';
31
31
  import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
32
- import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT, AgentFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
32
+ import { PromptsStorage, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT, AgentFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
33
33
  import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
34
34
  import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
35
35
  import { parseSubagentHooksFromYaml } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
@@ -45,7 +45,6 @@ import { getCanonicalPluginCommandId } from '../../plugins/agentPluginService.js
45
45
  import { IAgentPluginService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginService.service';
46
46
  import { isContributionEnabled } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/enablement';
47
47
  import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
48
- import { ChatInternalCustomizations } from '../internalCustomizations/internalCustomizations.js';
49
48
  import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
50
49
 
51
50
  class SkillMissingNameError extends Error {
@@ -128,7 +127,6 @@ let PromptsService = class PromptsService extends Disposable {
128
127
  this.promptFileProviders = [];
129
128
  this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
130
129
  this.fileLocator = this.createPromptFilesLocator();
131
- this.internalCustomizations = this._register(( new ChatInternalCustomizations(this.fileService)));
132
130
  this._register(this.modelService.onModelRemoved(model => {
133
131
  this.cachedParsedPromptFromModels.delete(model.uri);
134
132
  }));
@@ -172,8 +170,12 @@ let PromptsService = class PromptsService extends Disposable {
172
170
  e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS) || e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
173
171
  ), this._onDidPluginHooksChange.event, this.workspaceTrustService.onDidChangeTrust)
174
172
  )));
175
- this._register(this.cachedSkills.onDidChange(() => {}));
176
- this._register(this.cachedHooks.onDidChange(() => {}));
173
+ this.cachedInstructions = this._register(( new CachedPromise(token => this.computeInstructionFiles(token), () => Event.any(
174
+ this.getFileLocatorEvent(PromptsType.instructions),
175
+ this._onDidContributedWhenChange.event,
176
+ this._onDidChangeInstructions.event,
177
+ this._onDidPluginPromptFilesChange.event
178
+ ))));
177
179
  this._register(
178
180
  this.watchPluginPromptFilesForType(PromptsType.prompt, (plugin, reader) => plugin.commands.read(reader))
179
181
  );
@@ -198,7 +200,8 @@ let PromptsService = class PromptsService extends Disposable {
198
200
  storage: PromptsStorage.plugin,
199
201
  type: PromptsType.hook,
200
202
  name: getCanonicalPluginCommandId(plugin, hook.originalId),
201
- pluginUri: plugin.uri
203
+ pluginUri: plugin.uri,
204
+ source: PromptFileSource.Plugin
202
205
  });
203
206
  }
204
207
  }
@@ -222,7 +225,8 @@ let PromptsService = class PromptsService extends Disposable {
222
225
  storage: PromptsStorage.plugin,
223
226
  type,
224
227
  name: getCanonicalPluginCommandId(plugin, item.name),
225
- pluginUri: plugin.uri
228
+ pluginUri: plugin.uri,
229
+ source: PromptFileSource.Plugin
226
230
  });
227
231
  }
228
232
  }
@@ -283,7 +287,7 @@ let PromptsService = class PromptsService extends Disposable {
283
287
  this.getExtensionPromptFiles(type, token),
284
288
  this._pluginPromptFilesByType.get(type) ?? []
285
289
  ]);
286
- return [...prompts.flat(), ...this.internalCustomizations.getPromptPaths(type)];
290
+ return prompts.flat();
287
291
  }
288
292
  async _collectSourceFolderDiagnostics(type) {
289
293
  const resolvedFolders = await this.fileLocator.getSourceFoldersInDiscoveryOrder(type);
@@ -358,7 +362,7 @@ let PromptsService = class PromptsService extends Disposable {
358
362
  storage: PromptsStorage.extension,
359
363
  type,
360
364
  extension: providerEntry.extension,
361
- source: ExtensionAgentSourceType.provider,
365
+ source: PromptFileSource.ExtensionAPI,
362
366
  name: file.name,
363
367
  description: file.description
364
368
  });
@@ -390,8 +394,6 @@ let PromptsService = class PromptsService extends Disposable {
390
394
  }))));
391
395
  case PromptsStorage.plugin:
392
396
  return this._pluginPromptFilesByType.get(type) ?? [];
393
- case PromptsStorage.internal:
394
- return this.internalCustomizations.getPromptPaths(type);
395
397
  default:
396
398
  throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
397
399
  }
@@ -467,7 +469,7 @@ let PromptsService = class PromptsService extends Disposable {
467
469
  return this.fileLocator.getResolvedSourceFolders(type);
468
470
  }
469
471
  get onDidChangeSlashCommands() {
470
- return this.cachedSlashCommands.onDidChange;
472
+ return this.cachedSlashCommands.onDidChangePromise;
471
473
  }
472
474
  async getPromptSlashCommands(token, sessionResource) {
473
475
  const sw = StopWatch.create();
@@ -476,19 +478,19 @@ let PromptsService = class PromptsService extends Disposable {
476
478
  const elapsed = sw.elapsed();
477
479
  void this.getPromptSlashCommandDiscoveryInfo(token).catch(() => undefined).then(discoveryInfo => {
478
480
  const details = result.length === 1 ? ( localize(
479
- 7555,
481
+ 7621,
480
482
  "Resolved {0} slash command in {1}ms",
481
483
  result.length,
482
484
  elapsed.toFixed(1)
483
485
  )) : ( localize(
484
- 7556,
486
+ 7622,
485
487
  "Resolved {0} slash commands in {1}ms",
486
488
  result.length,
487
489
  elapsed.toFixed(1)
488
490
  ));
489
491
  this._onDidLogDiscovery.fire({
490
492
  sessionResource,
491
- name: ( localize(7557, "Load Slash Commands")),
493
+ name: ( localize(7623, "Load Slash Commands")),
492
494
  details,
493
495
  discoveryInfo,
494
496
  category: "discovery"
@@ -545,14 +547,13 @@ let PromptsService = class PromptsService extends Disposable {
545
547
  asChatPromptSlashCommand(parsedPromptFile, promptPath) {
546
548
  let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
547
549
  name = name.replace(/[^\p{L}\d_\-\.:]+/gu, "-");
548
- const internalSkill = this.internalCustomizations.getInternalSkillByUri(promptPath.uri);
549
550
  return {
550
551
  name: name,
551
552
  description: parsedPromptFile?.header?.description ?? promptPath.description,
552
553
  argumentHint: parsedPromptFile?.header?.argumentHint,
553
554
  parsedPromptFile,
554
555
  promptPath,
555
- when: internalSkill?.when
556
+ when: undefined
556
557
  };
557
558
  }
558
559
  async getPromptSlashCommandName(uri, token) {
@@ -564,15 +565,10 @@ let PromptsService = class PromptsService extends Disposable {
564
565
  return slashCommand.name;
565
566
  }
566
567
  get onDidChangeCustomAgents() {
567
- return this.cachedCustomAgents.onDidChange;
568
+ return this.cachedCustomAgents.onDidChangePromise;
568
569
  }
569
570
  get onDidChangeInstructions() {
570
- return Event.any(
571
- this.getFileLocatorEvent(PromptsType.instructions),
572
- this._onDidContributedWhenChange.event,
573
- this._onDidChangeInstructions.event,
574
- this._onDidPluginPromptFilesChange.event
575
- );
571
+ return this.cachedInstructions.onDidChangePromise;
576
572
  }
577
573
  async getCustomAgents(token, sessionResource) {
578
574
  const sw = StopWatch.create();
@@ -580,10 +576,10 @@ let PromptsService = class PromptsService extends Disposable {
580
576
  if (sessionResource) {
581
577
  const elapsed = sw.elapsed();
582
578
  void this.getAgentDiscoveryInfo(token).catch(() => undefined).then(discoveryInfo => {
583
- const details = result.length === 1 ? ( localize(7558, "Resolved {0} agent in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7559, "Resolved {0} agents in {1}ms", result.length, elapsed.toFixed(1)));
579
+ const details = result.length === 1 ? ( localize(7624, "Resolved {0} agent in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7625, "Resolved {0} agents in {1}ms", result.length, elapsed.toFixed(1)));
584
580
  this._onDidLogDiscovery.fire({
585
581
  sessionResource,
586
- name: ( localize(7560, "Load Agents")),
582
+ name: ( localize(7626, "Load Agents")),
587
583
  details,
588
584
  discoveryInfo,
589
585
  category: "discovery"
@@ -761,7 +757,7 @@ let PromptsService = class PromptsService extends Disposable {
761
757
  storage: PromptsStorage.extension,
762
758
  type,
763
759
  extension,
764
- source: ExtensionAgentSourceType.contribution
760
+ source: PromptFileSource.ExtensionContribution
765
761
  };
766
762
  })();
767
763
  bucket.set(uri, entryPromise);
@@ -809,19 +805,17 @@ let PromptsService = class PromptsService extends Disposable {
809
805
  relative: true
810
806
  });
811
807
  case PromptsStorage.user:
812
- return localize(7561, "User Data");
808
+ return localize(7627, "User Data");
813
809
  case PromptsStorage.extension:
814
810
  {
815
811
  return localize(
816
- 7562,
812
+ 7628,
817
813
  "Extension: {0}",
818
814
  promptPath.extension.displayName ?? promptPath.extension.id
819
815
  );
820
816
  }
821
817
  case PromptsStorage.plugin:
822
- return localize(7563, "Plugin");
823
- case PromptsStorage.internal:
824
- return localize(7564, "Built-in");
818
+ return localize(7629, "Plugin");
825
819
  default:
826
820
  assertNever(promptPath, "Unknown prompt storage type");
827
821
  }
@@ -1029,7 +1023,7 @@ let PromptsService = class PromptsService extends Disposable {
1029
1023
  return sanitized;
1030
1024
  }
1031
1025
  get onDidChangeSkills() {
1032
- return this.cachedSkills.onDidChange;
1026
+ return this.cachedSkills.onDidChangePromise;
1033
1027
  }
1034
1028
  async findAgentSkills(token, sessionResource) {
1035
1029
  const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
@@ -1041,10 +1035,10 @@ let PromptsService = class PromptsService extends Disposable {
1041
1035
  if (sessionResource) {
1042
1036
  const elapsed = sw.elapsed();
1043
1037
  void this.getSkillDiscoveryInfo(token).catch(() => undefined).then(discoveryInfo => {
1044
- const details = result.length === 1 ? ( localize(7565, "Resolved {0} skill in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7566, "Resolved {0} skills in {1}ms", result.length, elapsed.toFixed(1)));
1038
+ const details = result.length === 1 ? ( localize(7630, "Resolved {0} skill in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7631, "Resolved {0} skills in {1}ms", result.length, elapsed.toFixed(1)));
1045
1039
  this._onDidLogDiscovery.fire({
1046
1040
  sessionResource,
1047
- name: ( localize(7567, "Load Skills")),
1041
+ name: ( localize(7632, "Load Skills")),
1048
1042
  details,
1049
1043
  discoveryInfo,
1050
1044
  category: "discovery"
@@ -1054,24 +1048,27 @@ let PromptsService = class PromptsService extends Disposable {
1054
1048
  return result;
1055
1049
  }
1056
1050
  async computeAgentSkills(token) {
1057
- const {
1058
- files,
1059
- skillsBySource
1060
- } = await this.computeSkillDiscoveryInfo(token);
1051
+ const files = await this.computeSkillDiscoveryInfo(token);
1061
1052
  const result = [];
1053
+ const skillsBySource = ( new Map());
1062
1054
  for (const file of files) {
1063
- if (file.status === "loaded" && file.name) {
1064
- const sanitizedDescription = this.truncateAgentSkillDescription(file.description, file.uri);
1065
- const internalSkill = this.internalCustomizations.getInternalSkillByUri(file.uri);
1055
+ if (file.status === "loaded" && file.promptPath.name) {
1056
+ const sanitizedDescription = this.truncateAgentSkillDescription(file.promptPath.description, file.promptPath.uri);
1066
1057
  result.push({
1067
- uri: file.uri,
1068
- storage: file.storage,
1069
- name: file.name,
1058
+ uri: file.promptPath.uri,
1059
+ storage: file.promptPath.storage,
1060
+ name: file.promptPath.name,
1070
1061
  description: sanitizedDescription,
1071
1062
  disableModelInvocation: file.disableModelInvocation ?? false,
1072
1063
  userInvocable: file.userInvocable ?? true,
1073
- when: internalSkill?.when
1064
+ when: undefined,
1065
+ pluginUri: file.promptPath.pluginUri,
1066
+ extension: file.promptPath.extension
1074
1067
  });
1068
+ const source = file.promptPath.source;
1069
+ if (source) {
1070
+ skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
1071
+ }
1075
1072
  }
1076
1073
  }
1077
1074
  let skippedMissingName = 0;
@@ -1128,10 +1125,10 @@ let PromptsService = class PromptsService extends Disposable {
1128
1125
  const elapsed = sw.elapsed();
1129
1126
  void this.getHookDiscoveryInfo(token).catch(() => undefined).then(discoveryInfo => {
1130
1127
  const hookCount = result ? ( Object.values(result.hooks)).reduce((sum, arr) => sum + arr.length, 0) : 0;
1131
- const details = hookCount === 1 ? ( localize(7568, "Resolved {0} hook in {1}ms", hookCount, elapsed.toFixed(1))) : ( localize(7569, "Resolved {0} hooks in {1}ms", hookCount, elapsed.toFixed(1)));
1128
+ const details = hookCount === 1 ? ( localize(7633, "Resolved {0} hook in {1}ms", hookCount, elapsed.toFixed(1))) : ( localize(7634, "Resolved {0} hooks in {1}ms", hookCount, elapsed.toFixed(1)));
1132
1129
  this._onDidLogDiscovery.fire({
1133
1130
  sessionResource,
1134
- name: ( localize(7570, "Load Hooks")),
1131
+ name: ( localize(7635, "Load Hooks")),
1135
1132
  details,
1136
1133
  discoveryInfo,
1137
1134
  category: "discovery"
@@ -1142,32 +1139,41 @@ let PromptsService = class PromptsService extends Disposable {
1142
1139
  }
1143
1140
  async getInstructionFiles(token, sessionResource) {
1144
1141
  const sw = StopWatch.create();
1145
- const result = await this.listPromptFiles(PromptsType.instructions, token);
1142
+ const discoveryInfo = await this.cachedInstructions.get(token);
1143
+ const result = ( discoveryInfo.files.filter(file => file.status === "loaded").map(file => file.promptPath));
1146
1144
  if (sessionResource) {
1147
1145
  const elapsed = sw.elapsed();
1148
- void this.getInstructionsDiscoveryInfo(token).catch(() => undefined).then(discoveryInfo => {
1149
- const details = result.length === 1 ? ( localize(
1150
- 7571,
1151
- "Resolved {0} instruction in {1}ms",
1152
- result.length,
1153
- elapsed.toFixed(1)
1154
- )) : ( localize(
1155
- 7572,
1156
- "Resolved {0} instructions in {1}ms",
1157
- result.length,
1158
- elapsed.toFixed(1)
1159
- ));
1160
- this._onDidLogDiscovery.fire({
1161
- sessionResource,
1162
- name: ( localize(7573, "Load Instructions")),
1163
- details,
1164
- discoveryInfo,
1165
- category: "discovery"
1166
- });
1146
+ const details = result.length === 1 ? ( localize(
1147
+ 7636,
1148
+ "Resolved {0} instruction in {1}ms",
1149
+ result.length,
1150
+ elapsed.toFixed(1)
1151
+ )) : ( localize(
1152
+ 7637,
1153
+ "Resolved {0} instructions in {1}ms",
1154
+ result.length,
1155
+ elapsed.toFixed(1)
1156
+ ));
1157
+ this._onDidLogDiscovery.fire({
1158
+ sessionResource,
1159
+ name: ( localize(7638, "Load Instructions")),
1160
+ details,
1161
+ discoveryInfo,
1162
+ category: "discovery"
1167
1163
  });
1168
1164
  }
1169
1165
  return result;
1170
1166
  }
1167
+ withPromptPathMetadata(promptPath, name, description) {
1168
+ return {
1169
+ ...promptPath,
1170
+ name,
1171
+ description
1172
+ };
1173
+ }
1174
+ async computeInstructionFiles(token) {
1175
+ return await this.getInstructionsDiscoveryInfo(token);
1176
+ }
1171
1177
  async computeHooks(token) {
1172
1178
  const useChatHooks = this.configurationService.getValue(PromptsConfig.USE_CHAT_HOOKS);
1173
1179
  if (!useChatHooks) {
@@ -1185,6 +1191,9 @@ let PromptsService = class PromptsService extends Disposable {
1185
1191
  const collectedHooks = ( new Map());
1186
1192
  const defaultFolder = this.workspaceService.getWorkspace().folders[0];
1187
1193
  for (const hookFile of hookFiles) {
1194
+ if (hookFile.storage === PromptsStorage.plugin) {
1195
+ continue;
1196
+ }
1188
1197
  try {
1189
1198
  const content = await this.fileService.readFile(hookFile.uri);
1190
1199
  const json = parse(( content.value.toString()));
@@ -1264,11 +1273,9 @@ let PromptsService = class PromptsService extends Disposable {
1264
1273
  if (!useAgentSkills) {
1265
1274
  const allFiles = await this.listPromptFiles(PromptsType.skill, token);
1266
1275
  const files = ( allFiles.map(promptPath => ({
1267
- uri: promptPath.uri,
1268
- storage: promptPath.storage,
1269
1276
  status: "skipped",
1270
1277
  skipReason: "disabled",
1271
- extensionId: promptPath.extension?.identifier?.value
1278
+ promptPath
1272
1279
  })));
1273
1280
  const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill);
1274
1281
  return {
@@ -1277,9 +1284,7 @@ let PromptsService = class PromptsService extends Disposable {
1277
1284
  sourceFolders
1278
1285
  };
1279
1286
  }
1280
- const {
1281
- files
1282
- } = await this.computeSkillDiscoveryInfo(token);
1287
+ const files = await this.computeSkillDiscoveryInfo(token);
1283
1288
  const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill);
1284
1289
  return {
1285
1290
  type: PromptsType.skill,
@@ -1289,26 +1294,13 @@ let PromptsService = class PromptsService extends Disposable {
1289
1294
  }
1290
1295
  async computeSkillDiscoveryInfo(token) {
1291
1296
  const files = [];
1292
- const skillsBySource = ( new Map());
1293
1297
  const seenNames = ( new Set());
1294
1298
  const nameToUri = ( new Map());
1295
1299
  const allSkills = [];
1296
1300
  const discoveredSkills = await this.fileLocator.findAgentSkills(token);
1297
1301
  const extensionSkills = await this.getExtensionPromptFiles(PromptsType.skill, token);
1298
1302
  const pluginSkills = this._pluginPromptFilesByType.get(PromptsType.skill) ?? [];
1299
- allSkills.push(...discoveredSkills, ...( extensionSkills.map(extPath => ({
1300
- fileUri: extPath.uri,
1301
- storage: extPath.storage,
1302
- source: extPath.source === ExtensionAgentSourceType.contribution ? PromptFileSource.ExtensionContribution : PromptFileSource.ExtensionAPI
1303
- }))), ...( pluginSkills.map(p => ({
1304
- fileUri: p.uri,
1305
- storage: p.storage,
1306
- source: PromptFileSource.Plugin
1307
- }))), ...( this.internalCustomizations.getSkills().map(s => ({
1308
- fileUri: s.uri,
1309
- storage: s.storage,
1310
- source: PromptFileSource.Internal
1311
- }))));
1303
+ allSkills.push(...discoveredSkills, ...extensionSkills, ...pluginSkills);
1312
1304
  const getPriority = skill => {
1313
1305
  if (skill.storage === PromptsStorage.local) {
1314
1306
  return 0;
@@ -1328,64 +1320,49 @@ let PromptsService = class PromptsService extends Disposable {
1328
1320
  return 5;
1329
1321
  };
1330
1322
  allSkills.sort((a, b) => getPriority(a) - getPriority(b));
1331
- const extensionIdByUri = ( new Map());
1332
- for (const extSkill of extensionSkills) {
1333
- extensionIdByUri.set(( extSkill.uri.toString()), extSkill.extension.identifier.value);
1334
- }
1335
1323
  for (const skill of allSkills) {
1336
- const uri = skill.fileUri;
1337
- const storage = skill.storage;
1338
- const source = skill.source;
1339
- const extensionId = extensionIdByUri.get(( uri.toString()));
1324
+ const uri = skill.uri;
1325
+ const promptPath = skill;
1340
1326
  try {
1341
1327
  const parsedFile = await this.parseNew(uri, token);
1342
1328
  const folderName = getSkillFolderName(uri);
1343
1329
  let name = parsedFile.header?.name;
1330
+ const description = parsedFile.header?.description;
1344
1331
  if (!name) {
1345
1332
  this.logger.debug(
1346
1333
  `[computeSkillDiscoveryInfo] Agent skill file missing name attribute, using folder name "${folderName}": ${uri}`
1347
1334
  );
1348
1335
  name = folderName;
1349
1336
  }
1350
- const sanitizedName = this.truncateAgentSkillName(name, uri);
1337
+ let sanitizedName = this.truncateAgentSkillName(name, uri);
1351
1338
  if (sanitizedName !== folderName) {
1352
1339
  this.logger.debug(
1353
1340
  `[computeSkillDiscoveryInfo] Agent skill name "${sanitizedName}" does not match folder name "${folderName}", using folder name: ${uri}`
1354
1341
  );
1342
+ sanitizedName = folderName;
1355
1343
  }
1356
1344
  if (( seenNames.has(sanitizedName))) {
1357
1345
  this.logger.debug(
1358
1346
  `[computeSkillDiscoveryInfo] Skipping duplicate agent skill name: ${sanitizedName} at ${uri}`
1359
1347
  );
1360
1348
  files.push({
1361
- uri,
1362
- storage,
1363
1349
  status: "skipped",
1364
1350
  skipReason: "duplicate-name",
1365
- name: sanitizedName,
1366
1351
  duplicateOf: nameToUri.get(sanitizedName),
1367
- extensionId,
1368
- source
1352
+ promptPath: this.withPromptPathMetadata(promptPath, sanitizedName, description)
1369
1353
  });
1370
1354
  continue;
1371
1355
  }
1372
- const description = parsedFile.header?.description;
1373
1356
  seenNames.add(sanitizedName);
1374
1357
  nameToUri.set(sanitizedName, uri);
1375
1358
  const disableModelInvocation = parsedFile.header?.disableModelInvocation === true;
1376
1359
  const userInvocable = parsedFile.header?.userInvocable !== false;
1377
1360
  files.push({
1378
- uri,
1379
- storage,
1380
1361
  status: "loaded",
1381
- name: sanitizedName,
1382
- description,
1383
- extensionId,
1384
- source,
1362
+ promptPath: this.withPromptPathMetadata(promptPath, sanitizedName, description),
1385
1363
  disableModelInvocation,
1386
1364
  userInvocable
1387
1365
  });
1388
- skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
1389
1366
  } catch (e) {
1390
1367
  const msg = e instanceof Error ? e.message : String(e);
1391
1368
  this.logger.error(
@@ -1393,57 +1370,45 @@ let PromptsService = class PromptsService extends Disposable {
1393
1370
  msg
1394
1371
  );
1395
1372
  files.push({
1396
- uri,
1397
- storage,
1398
1373
  status: "skipped",
1399
1374
  skipReason: "parse-error",
1400
1375
  errorMessage: msg,
1401
- extensionId,
1402
- source
1376
+ promptPath
1403
1377
  });
1404
1378
  }
1405
1379
  }
1406
- return {
1407
- files,
1408
- skillsBySource
1409
- };
1380
+ return files;
1410
1381
  }
1411
1382
  async getAgentDiscoveryInfo(token) {
1412
1383
  const files = [];
1413
1384
  const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
1414
1385
  const agentFiles = await this.listPromptFiles(PromptsType.agent, token);
1415
1386
  for (const promptPath of agentFiles) {
1416
- const uri = promptPath.uri;
1417
- const storage = promptPath.storage;
1418
- const extensionId = promptPath.extension?.identifier?.value;
1387
+ const {
1388
+ uri
1389
+ } = promptPath;
1419
1390
  if (( disabledAgents.has(uri))) {
1420
1391
  files.push({
1421
- uri,
1422
- storage,
1423
1392
  status: "skipped",
1424
1393
  skipReason: "disabled",
1425
- extensionId
1394
+ promptPath
1426
1395
  });
1427
1396
  continue;
1428
1397
  }
1429
1398
  try {
1430
1399
  const ast = await this.parseNew(uri, token);
1431
1400
  const name = ast.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
1401
+ const description = ast.header?.description ?? promptPath.description;
1432
1402
  files.push({
1433
- uri,
1434
- storage,
1435
1403
  status: "loaded",
1436
- name,
1437
- extensionId
1404
+ promptPath: this.withPromptPathMetadata(promptPath, name, description)
1438
1405
  });
1439
1406
  } catch (e) {
1440
1407
  files.push({
1441
- uri,
1442
- storage,
1443
1408
  status: "skipped",
1444
1409
  skipReason: "parse-error",
1445
1410
  errorMessage: e instanceof Error ? e.message : String(e),
1446
- extensionId
1411
+ promptPath
1447
1412
  });
1448
1413
  }
1449
1414
  }
@@ -1458,27 +1423,23 @@ let PromptsService = class PromptsService extends Disposable {
1458
1423
  const files = [];
1459
1424
  const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
1460
1425
  for (const promptPath of promptFiles) {
1461
- const uri = promptPath.uri;
1462
- const storage = promptPath.storage;
1463
- const extensionId = promptPath.extension?.identifier?.value;
1426
+ const {
1427
+ uri
1428
+ } = promptPath;
1464
1429
  try {
1465
1430
  const parsedPromptFile = await this.parseNew(uri, token);
1466
1431
  const name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
1432
+ const description = parsedPromptFile?.header?.description ?? promptPath.description;
1467
1433
  files.push({
1468
- uri,
1469
- storage,
1470
1434
  status: "loaded",
1471
- name,
1472
- extensionId
1435
+ promptPath: this.withPromptPathMetadata(promptPath, name, description)
1473
1436
  });
1474
1437
  } catch (e) {
1475
1438
  files.push({
1476
- uri,
1477
- storage,
1478
1439
  status: "skipped",
1479
1440
  skipReason: "parse-error",
1480
1441
  errorMessage: e instanceof Error ? e.message : String(e),
1481
- extensionId
1442
+ promptPath
1482
1443
  });
1483
1444
  }
1484
1445
  }
@@ -1494,26 +1455,20 @@ let PromptsService = class PromptsService extends Disposable {
1494
1455
  const instructionsFiles = await this.listPromptFiles(PromptsType.instructions, token);
1495
1456
  for (const promptPath of instructionsFiles) {
1496
1457
  const uri = promptPath.uri;
1497
- const storage = promptPath.storage;
1498
- const extensionId = promptPath.extension?.identifier?.value;
1499
1458
  try {
1500
1459
  const parsedPromptFile = await this.parseNew(uri, token);
1501
1460
  const name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(uri);
1461
+ const description = parsedPromptFile?.header?.description ?? promptPath.description;
1502
1462
  files.push({
1503
- uri,
1504
- storage,
1505
1463
  status: "loaded",
1506
- name,
1507
- extensionId
1464
+ promptPath: this.withPromptPathMetadata(promptPath, name, description)
1508
1465
  });
1509
1466
  } catch (e) {
1510
1467
  files.push({
1511
- uri,
1512
- storage,
1513
1468
  status: "skipped",
1514
1469
  skipReason: "parse-error",
1515
1470
  errorMessage: e instanceof Error ? e.message : String(e),
1516
- extensionId
1471
+ promptPath
1517
1472
  });
1518
1473
  }
1519
1474
  }
@@ -1531,29 +1486,23 @@ let PromptsService = class PromptsService extends Disposable {
1531
1486
  const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
1532
1487
  const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
1533
1488
  for (const promptPath of hookFiles) {
1534
- const uri = promptPath.uri;
1535
- const storage = promptPath.storage;
1536
- const extensionId = promptPath.extension?.identifier?.value;
1489
+ const {
1490
+ uri
1491
+ } = promptPath;
1537
1492
  const name = basename(uri);
1538
1493
  if (!this.workspaceTrustService.isWorkspaceTrusted()) {
1539
1494
  files.push({
1540
- uri: promptPath.uri,
1541
- storage: promptPath.storage,
1542
1495
  status: "skipped",
1543
1496
  skipReason: "workspace-untrusted",
1544
- name: basename(promptPath.uri),
1545
- extensionId: promptPath.extension?.identifier?.value
1497
+ promptPath: this.withPromptPathMetadata(promptPath, basename(promptPath.uri), promptPath.description)
1546
1498
  });
1547
1499
  continue;
1548
1500
  }
1549
1501
  if (getHookSourceFormat(uri) === HookSourceFormat.Claude && useClaudeHooks === false) {
1550
1502
  files.push({
1551
- uri,
1552
- storage,
1553
1503
  status: "skipped",
1554
1504
  skipReason: "claude-hooks-disabled",
1555
- name,
1556
- extensionId
1505
+ promptPath: this.withPromptPathMetadata(promptPath, name, promptPath.description)
1557
1506
  });
1558
1507
  continue;
1559
1508
  }
@@ -1562,13 +1511,10 @@ let PromptsService = class PromptsService extends Disposable {
1562
1511
  const json = parse(( content.value.toString()));
1563
1512
  if (!json || typeof json !== "object") {
1564
1513
  files.push({
1565
- uri,
1566
- storage,
1567
1514
  status: "skipped",
1568
1515
  skipReason: "parse-error",
1569
1516
  errorMessage: "Invalid hooks file: must be a JSON object",
1570
- name,
1571
- extensionId
1517
+ promptPath: this.withPromptPathMetadata(promptPath, name, promptPath.description)
1572
1518
  });
1573
1519
  continue;
1574
1520
  }
@@ -1579,31 +1525,22 @@ let PromptsService = class PromptsService extends Disposable {
1579
1525
  } = parseHooksFromFile(uri, json, workspaceRootUri, userHome);
1580
1526
  if (disabledAllHooks) {
1581
1527
  files.push({
1582
- uri,
1583
- storage,
1584
1528
  status: "skipped",
1585
1529
  skipReason: "all-hooks-disabled",
1586
- name,
1587
- extensionId
1530
+ promptPath: this.withPromptPathMetadata(promptPath, name, promptPath.description)
1588
1531
  });
1589
1532
  continue;
1590
1533
  }
1591
1534
  files.push({
1592
- uri,
1593
- storage,
1594
1535
  status: "loaded",
1595
- name,
1596
- extensionId
1536
+ promptPath: this.withPromptPathMetadata(promptPath, name, promptPath.description)
1597
1537
  });
1598
1538
  } catch (e) {
1599
1539
  files.push({
1600
- uri,
1601
- storage,
1602
1540
  status: "skipped",
1603
1541
  skipReason: "parse-error",
1604
1542
  errorMessage: e instanceof Error ? e.message : String(e),
1605
- name,
1606
- extensionId
1543
+ promptPath: this.withPromptPathMetadata(promptPath, name, promptPath.description)
1607
1544
  });
1608
1545
  }
1609
1546
  }
@@ -1623,30 +1560,28 @@ class CachedPromise extends Disposable {
1623
1560
  this.getEvent = getEvent;
1624
1561
  this.delay = delay;
1625
1562
  this.cachedPromise = undefined;
1626
- this.onDidUpdatePromiseEmitter = undefined;
1563
+ this.onDidUpdatePromiseEmitter = this._register(( new Emitter()));
1564
+ const delayer = this._register(( new Delayer(this.delay)));
1565
+ this._register(this.getEvent()(() => {
1566
+ this.cachedPromise = undefined;
1567
+ delayer.trigger(() => this.onDidUpdatePromiseEmitter.fire());
1568
+ }));
1627
1569
  }
1628
- get onDidChange() {
1629
- if (!this.onDidUpdatePromiseEmitter) {
1630
- const emitter = this.onDidUpdatePromiseEmitter = this._register(( new Emitter()));
1631
- const delayer = this._register(( new Delayer(this.delay)));
1632
- this._register(this.getEvent()(() => {
1633
- this.cachedPromise = undefined;
1634
- delayer.trigger(() => emitter.fire());
1635
- }));
1636
- }
1570
+ get onDidChangePromise() {
1637
1571
  return this.onDidUpdatePromiseEmitter.event;
1638
1572
  }
1639
1573
  get(token) {
1640
1574
  if (this.cachedPromise !== undefined) {
1641
1575
  return this.cachedPromise;
1642
1576
  }
1643
- const result = this.computeFn(token);
1644
- if (!this.onDidUpdatePromiseEmitter) {
1645
- return result;
1646
- }
1647
- this.cachedPromise = result;
1648
- this.onDidUpdatePromiseEmitter.fire();
1649
- return result;
1577
+ const promise = this.computeFn(token).catch(err => {
1578
+ if (this.cachedPromise === promise) {
1579
+ this.cachedPromise = undefined;
1580
+ }
1581
+ throw err;
1582
+ });
1583
+ this.cachedPromise = promise;
1584
+ return promise;
1650
1585
  }
1651
1586
  refresh() {
1652
1587
  this.cachedPromise = undefined;
@@ -1672,22 +1607,34 @@ class ModelChangeTracker extends Disposable {
1672
1607
  }))
1673
1608
  );
1674
1609
  }
1610
+ return promptType;
1675
1611
  };
1676
1612
  const onRemove = (languageId, uri) => {
1677
1613
  const promptType = getPromptsTypeForLanguageId(languageId);
1678
1614
  if (promptType !== undefined) {
1679
1615
  this.listeners.get(uri)?.dispose();
1680
1616
  this.listeners.delete(uri);
1681
- this.onDidPromptModelChange.fire({
1682
- uri,
1683
- promptType
1684
- });
1685
1617
  }
1618
+ return promptType;
1686
1619
  };
1687
1620
  this._register(modelService.onModelAdded(model => onAdd(model)));
1688
1621
  this._register(modelService.onModelLanguageChanged(e => {
1689
- onRemove(e.oldLanguageId, e.model.uri);
1690
- onAdd(e.model);
1622
+ const removedPromptType = onRemove(e.oldLanguageId, e.model.uri);
1623
+ const addedPromptType = onAdd(e.model);
1624
+ if (removedPromptType !== addedPromptType) {
1625
+ if (removedPromptType) {
1626
+ this.onDidPromptModelChange.fire({
1627
+ uri: e.model.uri,
1628
+ promptType: removedPromptType
1629
+ });
1630
+ }
1631
+ if (addedPromptType) {
1632
+ this.onDidPromptModelChange.fire({
1633
+ uri: e.model.uri,
1634
+ promptType: addedPromptType
1635
+ });
1636
+ }
1637
+ }
1691
1638
  }));
1692
1639
  this._register(
1693
1640
  modelService.onModelRemoved(model => onRemove(model.getLanguageId(), model.uri))
@@ -1713,10 +1660,6 @@ var IAgentSource;
1713
1660
  storage: PromptsStorage.plugin,
1714
1661
  pluginUri: promptPath.pluginUri
1715
1662
  };
1716
- } else if (promptPath.storage === PromptsStorage.internal) {
1717
- return {
1718
- storage: PromptsStorage.internal
1719
- };
1720
1663
  } else {
1721
1664
  return {
1722
1665
  storage: promptPath.storage