@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
@@ -4,6 +4,7 @@ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/l
4
4
  import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
5
5
  import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
6
6
  import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
7
+ import { IEnvironmentService } from "@codingame/monaco-vscode-api/vscode/vs/platform/environment/common/environment.service";
7
8
  import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
8
9
  import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
9
10
  import { IRequestService } from "@codingame/monaco-vscode-api/vscode/vs/platform/request/common/request.service";
@@ -90,7 +91,6 @@ interface IJsonPluginSource {
90
91
  export interface IMarketplaceInstalledPlugin {
91
92
  readonly pluginUri: URI;
92
93
  readonly plugin: IMarketplacePlugin;
93
- readonly enabled: boolean;
94
94
  }
95
95
  export declare class PluginMarketplaceService extends Disposable implements IPluginMarketplaceService {
96
96
  private readonly _configurationService;
@@ -104,6 +104,7 @@ export declare class PluginMarketplaceService extends Disposable implements IPlu
104
104
  readonly _serviceBrand: undefined;
105
105
  private readonly _gitHubMarketplaceCache;
106
106
  private readonly _installedPluginsStore;
107
+ private readonly _pluginMetadata;
107
108
  private readonly _trustedMarketplacesStore;
108
109
  private readonly _lastFetchedPluginsStore;
109
110
  private readonly _hasUpdatesAvailable;
@@ -113,7 +114,7 @@ export declare class PluginMarketplaceService extends Disposable implements IPlu
113
114
  readonly hasUpdatesAvailable: IObservable<boolean>;
114
115
  readonly lastFetchedPlugins: IObservable<readonly IMarketplacePlugin[]>;
115
116
  readonly recommendedPlugins: IObservable<ReadonlySet<string>>;
116
- constructor(_configurationService: IConfigurationService, _requestService: IRequestService, _fileService: IFileService, _pluginRepositoryService: IAgentPluginRepositoryService, _logService: ILogService, _storageService: IStorageService, _workspacePluginSettingsService: IWorkspacePluginSettingsService, _workspaceTrustService: IWorkspaceTrustManagementService);
117
+ constructor(_configurationService: IConfigurationService, _requestService: IRequestService, environmentService: IEnvironmentService, _fileService: IFileService, _pluginRepositoryService: IAgentPluginRepositoryService, _logService: ILogService, _storageService: IStorageService, _workspacePluginSettingsService: IWorkspacePluginSettingsService, _workspaceTrustService: IWorkspaceTrustManagementService);
117
118
  dispose(): void;
118
119
  clearUpdatesAvailable(): void;
119
120
  fetchMarketplacePlugins(token: CancellationToken): Promise<IMarketplacePlugin[]>;
@@ -124,8 +125,23 @@ export declare class PluginMarketplaceService extends Disposable implements IPlu
124
125
  getMarketplacePluginMetadata(pluginUri: URI): IMarketplacePlugin | undefined;
125
126
  addInstalledPlugin(pluginUri: URI, plugin: IMarketplacePlugin): void;
126
127
  removeInstalledPlugin(pluginUri: URI): void;
127
- setInstalledPluginEnabled(pluginUri: URI, enabled: boolean): void;
128
128
  isMarketplaceTrusted(ref: IMarketplaceReference): boolean;
129
+ /**
130
+ * For each plugin URI that has no cached metadata, walk up the directory
131
+ * tree from the plugin towards the agent-plugins root looking for a
132
+ * marketplace definition file. When found, read the marketplace plugins
133
+ * and match by source path to populate {@link _pluginMetadata}.
134
+ *
135
+ * After hydration completes the installed-plugins store is "touched" so
136
+ * that the derived {@link installedPlugins} observable re-evaluates with
137
+ * the newly available metadata.
138
+ */
139
+ private _hydratePluginMetadata;
140
+ /**
141
+ * Shared logic to parse a marketplace.json into {@link IMarketplacePlugin}
142
+ * objects. Used by both fetch and hydration paths.
143
+ */
144
+ private _parseMarketplacePlugins;
129
145
  trustMarketplace(ref: IMarketplaceReference): void;
130
146
  private _isAutoUpdateEnabled;
131
147
  /**
@@ -137,6 +153,12 @@ export declare class PluginMarketplaceService extends Disposable implements IPlu
137
153
  private _fetchFromClonedRepo;
138
154
  readPluginsFromDirectory(repoDir: URI, reference: IMarketplaceReference): Promise<IMarketplacePlugin[]>;
139
155
  private _readPluginsFromDirectory;
156
+ /**
157
+ * Iterates over {@link MARKETPLACE_DEFINITIONS} paths, calling
158
+ * {@link readJson} for each to obtain the parsed JSON. Returns the
159
+ * plugins from the first definition that yields a valid result.
160
+ */
161
+ private _readPluginsFromDefinitions;
140
162
  }
141
163
  /**
142
164
  * Parse a raw `source` field from marketplace.json into a structured
@@ -7,9 +7,10 @@ import { Lazy } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lazy';
7
7
  import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
8
8
  import { revive } from '@codingame/monaco-vscode-api/vscode/vs/base/common/marshalling';
9
9
  import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
10
- import { isEqualOrParent, isEqual, joinPath, normalizePath, relativePath } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
10
+ import { joinPath, isEqualOrParent, isEqual, normalizePath, relativePath } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
11
11
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
12
12
  import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
13
+ import { IEnvironmentService } from '@codingame/monaco-vscode-api/vscode/vs/platform/environment/common/environment.service';
13
14
  import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
14
15
  import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
15
16
  import { observableMemento } from '@codingame/monaco-vscode-api/vscode/vs/platform/observable/common/observableMemento';
@@ -20,12 +21,14 @@ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform
20
21
  import { AutoUpdateConfigurationKey } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions';
21
22
  import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
22
23
  import { IAgentPluginRepositoryService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginRepositoryService.service';
24
+ import { FileBackedInstalledPluginsStore } from './fileBackedInstalledPluginsStore.js';
23
25
  import { IWorkspacePluginSettingsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/workspacePluginSettingsService.service';
24
26
  import { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
25
27
  import { parseMarketplaceReferences, deduplicateMarketplaceReferences, parseMarketplaceReference, MarketplaceReferenceKind } from './marketplaceReference.js';
26
28
  import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
27
29
  import { observableFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
28
30
  import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
31
+ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
29
32
 
30
33
  var MarketplaceType;
31
34
  (function(MarketplaceType) {
@@ -70,15 +73,6 @@ function ensureSourceDescriptor(plugin) {
70
73
  }
71
74
  };
72
75
  }
73
- const installedPluginsMemento = observableMemento({
74
- defaultValue: [],
75
- key: "chat.plugins.installed.v1",
76
- toStorage: value => JSON.stringify(value),
77
- fromStorage: value => {
78
- const parsed = JSON.parse(value);
79
- return Array.isArray(parsed) ? parsed : [];
80
- }
81
- });
82
76
  const trustedMarketplacesMemento = observableMemento({
83
77
  defaultValue: [],
84
78
  key: "chat.plugins.trustedMarketplaces.v1",
@@ -110,6 +104,7 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
110
104
  constructor(
111
105
  _configurationService,
112
106
  _requestService,
107
+ environmentService,
113
108
  _fileService,
114
109
  _pluginRepositoryService,
115
110
  _logService,
@@ -127,11 +122,17 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
127
122
  this._workspacePluginSettingsService = _workspacePluginSettingsService;
128
123
  this._workspaceTrustService = _workspaceTrustService;
129
124
  this._gitHubMarketplaceCache = ( new Lazy(() => this._loadPersistedGitHubMarketplaceCache()));
125
+ this._pluginMetadata = ( new Map());
130
126
  this._hasUpdatesAvailable = observableValue("hasUpdatesAvailable", false);
131
127
  this.hasUpdatesAvailable = this._hasUpdatesAvailable;
132
- this._installedPluginsStore = this._register(
133
- installedPluginsMemento(StorageScope.APPLICATION, StorageTarget.MACHINE, _storageService)
134
- );
128
+ const oldCacheRoot = joinPath(environmentService.cacheHome, "agentPlugins");
129
+ this._installedPluginsStore = this._register(( new FileBackedInstalledPluginsStore(
130
+ _pluginRepositoryService.agentPluginsHome,
131
+ oldCacheRoot,
132
+ _fileService,
133
+ _logService,
134
+ _storageService
135
+ )));
135
136
  this._trustedMarketplacesStore = this._register(
136
137
  trustedMarketplacesMemento(StorageScope.APPLICATION, StorageTarget.MACHINE, _storageService)
137
138
  );
@@ -142,10 +143,19 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
142
143
  const revived = revive(s);
143
144
  return ( revived.plugins.map(ensureSourceDescriptor));
144
145
  }));
145
- this.installedPlugins = ( this._installedPluginsStore.map(s => ( revive(s).map(e => ({
146
- ...e,
147
- plugin: ensureSourceDescriptor(e.plugin)
148
- })))));
146
+ this.installedPlugins = ( this._installedPluginsStore.value.map(entries => {
147
+ const result = [];
148
+ for (const e of entries) {
149
+ const plugin = this._pluginMetadata.get(( e.pluginUri.toString()));
150
+ if (plugin) {
151
+ result.push({
152
+ pluginUri: e.pluginUri,
153
+ plugin
154
+ });
155
+ }
156
+ }
157
+ return result;
158
+ }));
149
159
  const workspaceTrusted = observableFromEvent(
150
160
  this,
151
161
  this._workspaceTrustService.onDidChangeTrust,
@@ -175,6 +185,13 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
175
185
  e => e.affectsConfiguration(AutoUpdateConfigurationKey)
176
186
  )(() => this._scheduleUpdateCheck()));
177
187
  }));
188
+ this._register(autorun(reader => {
189
+ const entries = this._installedPluginsStore.value.read(reader);
190
+ const unhydrated = entries.filter(e => !( this._pluginMetadata.has(( e.pluginUri.toString()))));
191
+ if (unhydrated.length > 0) {
192
+ this._hydratePluginMetadata(unhydrated);
193
+ }
194
+ }));
178
195
  }
179
196
  dispose() {
180
197
  if (this._updateCheckTimer !== undefined) {
@@ -230,11 +247,11 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
230
247
  })));
231
248
  }
232
249
  let repoMayBePrivate = true;
233
- for (const def of MARKETPLACE_DEFINITIONS) {
250
+ const plugins = await this._readPluginsFromDefinitions(reference, async defPath => {
234
251
  if (token.isCancellationRequested) {
235
- return [];
252
+ return undefined;
236
253
  }
237
- const url = `https://raw.githubusercontent.com/${repo}/main/${def.path}`;
254
+ const url = `https://raw.githubusercontent.com/${repo}/main/${defPath}`;
238
255
  try {
239
256
  const context = await this._requestService.request({
240
257
  type: "GET",
@@ -247,51 +264,25 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
247
264
  this._logService.debug(
248
265
  `[PluginMarketplaceService] ${url} returned status ${statusCode}, skipping`
249
266
  );
250
- continue;
251
- }
252
- const json = await asJson(context);
253
- if (!json?.plugins || !Array.isArray(json.plugins)) {
254
- this._logService.debug(
255
- `[PluginMarketplaceService] ${url} did not contain a valid plugins array, skipping`
256
- );
257
- continue;
267
+ return undefined;
258
268
  }
259
- const plugins = json.plugins.filter(p => typeof p.name === "string" && !!p.name).flatMap(p => {
260
- const sourceDescriptor = parsePluginSource(p.source, json.metadata?.pluginRoot, {
261
- pluginName: p.name,
262
- logService: this._logService,
263
- logPrefix: `[PluginMarketplaceService]`
264
- });
265
- if (!sourceDescriptor) {
266
- return [];
267
- }
268
- const source = sourceDescriptor.kind === PluginSourceKind.RelativePath ? sourceDescriptor.path : "";
269
- return [{
270
- name: p.name,
271
- description: p.description ?? "",
272
- version: p.version ?? "",
273
- source,
274
- sourceDescriptor,
275
- marketplace: reference.displayLabel,
276
- marketplaceReference: reference,
277
- marketplaceType: def.type,
278
- readmeUri: getMarketplaceReadmeUri(repo, source)
279
- }];
280
- });
281
- cache.set(reference.canonicalId, {
282
- plugins,
283
- expiresAt: Date.now() + GITHUB_MARKETPLACE_CACHE_TTL_MS,
284
- referenceRawValue: reference.rawValue
285
- });
286
- this._savePersistedGitHubMarketplaceCache(cache);
287
- return plugins;
269
+ return (await asJson(context)) ?? undefined;
288
270
  } catch (err) {
289
271
  this._logService.debug(
290
272
  `[PluginMarketplaceService] Failed to fetch marketplace.json from ${url}:`,
291
273
  err
292
274
  );
293
- continue;
275
+ return undefined;
294
276
  }
277
+ });
278
+ if (plugins.length > 0) {
279
+ cache.set(reference.canonicalId, {
280
+ plugins,
281
+ expiresAt: Date.now() + GITHUB_MARKETPLACE_CACHE_TTL_MS,
282
+ referenceRawValue: reference.rawValue
283
+ });
284
+ this._savePersistedGitHubMarketplaceCache(cache);
285
+ return plugins;
295
286
  }
296
287
  if (repoMayBePrivate) {
297
288
  this._logService.debug(
@@ -367,40 +358,93 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
367
358
  );
368
359
  }
369
360
  getMarketplacePluginMetadata(pluginUri) {
370
- const installed = this.installedPlugins.get();
371
- return installed.find(e => isEqualOrParent(pluginUri, e.pluginUri))?.plugin;
361
+ return this._pluginMetadata.get(( pluginUri.toString())) ?? [...this._pluginMetadata.entries()].find(([key]) => isEqualOrParent(pluginUri, ( URI.parse(key))))?.[1];
372
362
  }
373
363
  addInstalledPlugin(pluginUri, plugin) {
374
- const current = this.installedPlugins.get();
364
+ this._pluginMetadata.set(( pluginUri.toString()), plugin);
365
+ const current = this._installedPluginsStore.get();
375
366
  const existing = current.find(e => isEqual(e.pluginUri, pluginUri));
376
367
  if (existing) {
377
368
  this._installedPluginsStore.set(( current.map(c => c === existing ? {
378
369
  pluginUri,
379
- plugin,
380
- enabled: existing.enabled
370
+ marketplace: plugin.marketplaceReference.rawValue
381
371
  } : c)), undefined);
382
372
  } else {
383
373
  this._installedPluginsStore.set([...current, {
384
374
  pluginUri,
385
- plugin,
386
- enabled: true
375
+ marketplace: plugin.marketplaceReference.rawValue
387
376
  }], undefined);
388
377
  }
389
378
  }
390
379
  removeInstalledPlugin(pluginUri) {
391
- const current = this.installedPlugins.get();
380
+ this._pluginMetadata.delete(( pluginUri.toString()));
381
+ const current = this._installedPluginsStore.get();
392
382
  this._installedPluginsStore.set(current.filter(e => !isEqual(e.pluginUri, pluginUri)), undefined);
393
383
  }
394
- setInstalledPluginEnabled(pluginUri, enabled) {
395
- const current = this.installedPlugins.get();
396
- this._installedPluginsStore.set(( current.map(e => isEqual(e.pluginUri, pluginUri) ? {
397
- ...e,
398
- enabled
399
- } : e)), undefined);
400
- }
401
384
  isMarketplaceTrusted(ref) {
402
385
  return this._trustedMarketplacesStore.get().includes(ref.canonicalId);
403
386
  }
387
+ async _hydratePluginMetadata(entries) {
388
+ let hydrated = 0;
389
+ for (const entry of entries) {
390
+ const key = ( entry.pluginUri.toString());
391
+ if (( this._pluginMetadata.has(key))) {
392
+ continue;
393
+ }
394
+ const reference = parseMarketplaceReference(entry.marketplace);
395
+ if (!reference) {
396
+ this._logService.debug(
397
+ `[PluginMarketplaceService] Cannot parse marketplace reference '${entry.marketplace}' for ${key}`
398
+ );
399
+ continue;
400
+ }
401
+ try {
402
+ const repoDir = this._pluginRepositoryService.getRepositoryUri(reference);
403
+ const plugins = await this._readPluginsFromDirectory(repoDir, reference);
404
+ const match = plugins.find(p => {
405
+ const installUri = this._pluginRepositoryService.getPluginInstallUri(p);
406
+ return isEqual(installUri, entry.pluginUri);
407
+ });
408
+ if (match) {
409
+ this._pluginMetadata.set(key, match);
410
+ hydrated++;
411
+ }
412
+ } catch (err) {
413
+ this._logService.debug(`[PluginMarketplaceService] Failed to hydrate metadata for ${key}:`, err);
414
+ }
415
+ }
416
+ if (hydrated > 0) {
417
+ const current = this._installedPluginsStore.get();
418
+ this._installedPluginsStore.set([...current], undefined);
419
+ }
420
+ }
421
+ _parseMarketplacePlugins(json, reference, marketplaceType, repoDir) {
422
+ if (!json.plugins || !Array.isArray(json.plugins)) {
423
+ return [];
424
+ }
425
+ return json.plugins.filter(p => typeof p.name === "string" && !!p.name).flatMap(p => {
426
+ const sourceDescriptor = parsePluginSource(p.source, json.metadata?.pluginRoot, {
427
+ pluginName: p.name,
428
+ logService: this._logService,
429
+ logPrefix: "[PluginMarketplaceService]"
430
+ });
431
+ if (!sourceDescriptor) {
432
+ return [];
433
+ }
434
+ const source = sourceDescriptor.kind === PluginSourceKind.RelativePath ? sourceDescriptor.path : "";
435
+ return [{
436
+ name: p.name,
437
+ description: p.description ?? "",
438
+ version: p.version ?? "",
439
+ source,
440
+ sourceDescriptor,
441
+ marketplace: reference.displayLabel,
442
+ marketplaceReference: reference,
443
+ marketplaceType,
444
+ readmeUri: repoDir ? getMarketplaceReadmeFileUri(repoDir, source) : getMarketplaceReadmeUri(reference.githubRepo ?? "", source)
445
+ }];
446
+ });
447
+ }
404
448
  trustMarketplace(ref) {
405
449
  const current = this._trustedMarketplacesStore.get();
406
450
  if (!current.includes(ref.canonicalId)) {
@@ -426,7 +470,7 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
426
470
  async _runUpdateCheck() {
427
471
  this._updateCheckTimer = undefined;
428
472
  try {
429
- const installed = this.installedPlugins.get().filter(e => e.enabled);
473
+ const installed = this.installedPlugins.get();
430
474
  if (installed.length === 0) {
431
475
  return;
432
476
  }
@@ -483,44 +527,26 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
483
527
  return this._readPluginsFromDirectory(repoDir, reference);
484
528
  }
485
529
  async _readPluginsFromDirectory(repoDir, reference, token) {
486
- for (const def of MARKETPLACE_DEFINITIONS) {
530
+ return this._readPluginsFromDefinitions(reference, async defPath => {
487
531
  if (token?.isCancellationRequested) {
488
- return [];
532
+ return undefined;
489
533
  }
490
- const definitionUri = joinPath(repoDir, def.path);
491
- let json;
534
+ const definitionUri = joinPath(repoDir, defPath);
492
535
  try {
493
536
  const contents = await this._fileService.readFile(definitionUri);
494
- json = parse(( contents.value.toString()));
537
+ return parse(( contents.value.toString()));
495
538
  } catch {
496
- continue;
539
+ return undefined;
497
540
  }
541
+ }, repoDir);
542
+ }
543
+ async _readPluginsFromDefinitions(reference, readJson, repoDir) {
544
+ for (const def of MARKETPLACE_DEFINITIONS) {
545
+ const json = await readJson(def.path);
498
546
  if (!json?.plugins || !Array.isArray(json.plugins)) {
499
- this._logService.debug(`[PluginMarketplaceService] ${( definitionUri.toString())} did not contain a valid plugins array, skipping`);
500
547
  continue;
501
548
  }
502
- return json.plugins.filter(p => typeof p.name === "string" && !!p.name).flatMap(p => {
503
- const sourceDescriptor = parsePluginSource(p.source, json.metadata?.pluginRoot, {
504
- pluginName: p.name,
505
- logService: this._logService,
506
- logPrefix: `[PluginMarketplaceService]`
507
- });
508
- if (!sourceDescriptor) {
509
- return [];
510
- }
511
- const source = sourceDescriptor.kind === PluginSourceKind.RelativePath ? sourceDescriptor.path : "";
512
- return [{
513
- name: p.name,
514
- description: p.description ?? "",
515
- version: p.version ?? "",
516
- source,
517
- sourceDescriptor,
518
- marketplace: reference.displayLabel,
519
- marketplaceReference: reference,
520
- marketplaceType: def.type,
521
- readmeUri: getMarketplaceReadmeFileUri(repoDir, source)
522
- }];
523
- });
549
+ return this._parseMarketplacePlugins(json, reference, def.type, repoDir);
524
550
  }
525
551
  this._logService.debug(
526
552
  `[PluginMarketplaceService] No marketplace.json found in ${reference.rawValue}`
@@ -528,7 +554,7 @@ let PluginMarketplaceService = class PluginMarketplaceService extends Disposable
528
554
  return [];
529
555
  }
530
556
  };
531
- PluginMarketplaceService = ( __decorate([( __param(0, IConfigurationService)), ( __param(1, IRequestService)), ( __param(2, IFileService)), ( __param(3, IAgentPluginRepositoryService)), ( __param(4, ILogService)), ( __param(5, IStorageService)), ( __param(6, IWorkspacePluginSettingsService)), ( __param(7, IWorkspaceTrustManagementService))], PluginMarketplaceService));
557
+ PluginMarketplaceService = ( __decorate([( __param(0, IConfigurationService)), ( __param(1, IRequestService)), ( __param(2, IEnvironmentService)), ( __param(3, IFileService)), ( __param(4, IAgentPluginRepositoryService)), ( __param(5, ILogService)), ( __param(6, IStorageService)), ( __param(7, IWorkspacePluginSettingsService)), ( __param(8, IWorkspaceTrustManagementService))], PluginMarketplaceService));
532
558
  function normalizeMarketplacePath(value) {
533
559
  let normalized = value.trim().replace(/\\/g, "/");
534
560
  normalized = normalized.replace(/^\.?\/+/, "").replace(/\/+$/g, "");
@@ -539,9 +565,6 @@ function resolvePluginSource(pluginRoot, source) {
539
565
  const normalizedSource = normalizeMarketplacePath(source);
540
566
  const repoRoot = URI.file("/");
541
567
  const pluginRootUri = normalizedRoot ? normalizePath(joinPath(repoRoot, normalizedRoot)) : repoRoot;
542
- if (!normalizedSource) {
543
- return normalizedRoot || undefined;
544
- }
545
568
  if (normalizedRoot && (normalizedSource === normalizedRoot || normalizedSource.startsWith(`${normalizedRoot}/`))) {
546
569
  return normalizedSource;
547
570
  }
@@ -15,4 +15,5 @@ export declare class ChatPromptFilesExtensionPointHandler implements IWorkbenchC
15
15
  export interface IExtensionPromptFileResult {
16
16
  readonly uri: UriComponents;
17
17
  readonly type: PromptsType;
18
+ readonly extensionId: string;
18
19
  }
@@ -25,7 +25,7 @@ function registerChatFilesExtensionPoint(point) {
25
25
  return ExtensionsRegistry.registerExtensionPoint({
26
26
  extensionPoint: point,
27
27
  jsonSchema: {
28
- description: ( localize(7248, "Contributes {0} for chat prompts.", point)),
28
+ description: ( localize(7315, "Contributes {0} for chat prompts.", point)),
29
29
  type: "array",
30
30
  items: {
31
31
  additionalProperties: false,
@@ -39,23 +39,23 @@ function registerChatFilesExtensionPoint(point) {
39
39
  properties: {
40
40
  path: {
41
41
  description: point === ChatContributionPoint.chatSkills ? ( localize(
42
- 7249,
42
+ 7316,
43
43
  "Path to the SKILL.md file relative to the extension root. The folder name must match the \"name\" property in SKILL.md."
44
- )) : ( localize(7250, "Path to the file relative to the extension root.")),
44
+ )) : ( localize(7317, "Path to the file relative to the extension root.")),
45
45
  type: "string"
46
46
  },
47
47
  name: {
48
- description: ( localize(7251, "(Optional) Name for this entry.")),
49
- deprecationMessage: ( localize(7252, "Specify \"name\" in the prompt file itself instead.")),
48
+ description: ( localize(7318, "(Optional) Name for this entry.")),
49
+ deprecationMessage: ( localize(7319, "Specify \"name\" in the prompt file itself instead.")),
50
50
  type: "string"
51
51
  },
52
52
  description: {
53
- description: ( localize(7253, "(Optional) Description of the entry.")),
54
- deprecationMessage: ( localize(7254, "Specify \"description\" in the prompt file itself instead.")),
53
+ description: ( localize(7320, "(Optional) Description of the entry.")),
54
+ deprecationMessage: ( localize(7321, "Specify \"description\" in the prompt file itself instead.")),
55
55
  type: "string"
56
56
  },
57
57
  when: {
58
- description: ( localize(7255, "(Optional) A condition which must be true to enable this entry.")),
58
+ description: ( localize(7322, "(Optional) A condition which must be true to enable this entry.")),
59
59
  type: "string"
60
60
  }
61
61
  }
@@ -106,7 +106,7 @@ let ChatPromptFilesExtensionPointHandler = class ChatPromptFilesExtensionPointHa
106
106
  for (const raw of ext.value) {
107
107
  if (!raw.path) {
108
108
  ext.collector.error(( localize(
109
- 7256,
109
+ 7323,
110
110
  "Extension '{0}' cannot register {1} entry without path.",
111
111
  ext.description.identifier.value,
112
112
  contributionPoint
@@ -116,7 +116,7 @@ let ChatPromptFilesExtensionPointHandler = class ChatPromptFilesExtensionPointHa
116
116
  const fileUri = joinPath(ext.description.extensionLocation, raw.path);
117
117
  if (!isEqualOrParent(fileUri, ext.description.extensionLocation)) {
118
118
  ext.collector.error(( localize(
119
- 7257,
119
+ 7324,
120
120
  "Extension '{0}' {1} entry '{2}' resolves outside the extension.",
121
121
  ext.description.identifier.value,
122
122
  contributionPoint,
@@ -126,7 +126,7 @@ let ChatPromptFilesExtensionPointHandler = class ChatPromptFilesExtensionPointHa
126
126
  }
127
127
  if (raw.when && !ContextKeyExpr.deserialize(raw.when)) {
128
128
  ext.collector.error(( localize(
129
- 7258,
129
+ 7325,
130
130
  "Extension '{0}' {1} entry '{2}' has an invalid when clause: '{3}'.",
131
131
  ext.description.identifier.value,
132
132
  contributionPoint,
@@ -141,7 +141,7 @@ let ChatPromptFilesExtensionPointHandler = class ChatPromptFilesExtensionPointHa
141
141
  } catch (e) {
142
142
  const msg = e instanceof Error ? e.message : String(e);
143
143
  ext.collector.error(( localize(
144
- 7259,
144
+ 7326,
145
145
  "Extension '{0}' {1}. Failed to register {2}: {3}",
146
146
  ext.description.identifier.value,
147
147
  contributionPoint,
@@ -175,7 +175,8 @@ CommandsRegistry.registerCommand("_listExtensionPromptFiles", async accessor =>
175
175
  if (file.storage === PromptsStorage.extension) {
176
176
  result.push({
177
177
  uri: file.uri.toJSON(),
178
- type: file.type
178
+ type: file.type,
179
+ extensionId: file.extension.identifier.value
179
180
  });
180
181
  }
181
182
  }
@@ -201,7 +202,7 @@ class ChatPromptFilesDataRenderer extends Disposable {
201
202
  dispose: () => {}
202
203
  };
203
204
  }
204
- const headers = [( localize(7260, "Name")), ( localize(7261, "Description")), ( localize(7262, "Path"))];
205
+ const headers = [( localize(7327, "Name")), ( localize(7328, "Description")), ( localize(7329, "Path"))];
205
206
  const rows = ( contributions.map(d => {
206
207
  return [d.name ?? "-", d.description ?? "-", d.path];
207
208
  }));
@@ -216,7 +217,7 @@ class ChatPromptFilesDataRenderer extends Disposable {
216
217
  }
217
218
  ( Registry.as(Extensions.ExtensionFeaturesRegistry)).registerExtensionFeature({
218
219
  id: ChatContributionPoint.chatPromptFiles,
219
- label: ( localize(7263, "Chat Prompt Files")),
220
+ label: ( localize(7330, "Chat Prompt Files")),
220
221
  access: {
221
222
  canToggle: false
222
223
  },
@@ -224,7 +225,7 @@ class ChatPromptFilesDataRenderer extends Disposable {
224
225
  });
225
226
  ( Registry.as(Extensions.ExtensionFeaturesRegistry)).registerExtensionFeature({
226
227
  id: ChatContributionPoint.chatInstructions,
227
- label: ( localize(7264, "Chat Instructions")),
228
+ label: ( localize(7331, "Chat Instructions")),
228
229
  access: {
229
230
  canToggle: false
230
231
  },
@@ -232,7 +233,7 @@ class ChatPromptFilesDataRenderer extends Disposable {
232
233
  });
233
234
  ( Registry.as(Extensions.ExtensionFeaturesRegistry)).registerExtensionFeature({
234
235
  id: ChatContributionPoint.chatAgents,
235
- label: ( localize(7265, "Chat Agents")),
236
+ label: ( localize(7332, "Chat Agents")),
236
237
  access: {
237
238
  canToggle: false
238
239
  },
@@ -240,7 +241,7 @@ class ChatPromptFilesDataRenderer extends Disposable {
240
241
  });
241
242
  ( Registry.as(Extensions.ExtensionFeaturesRegistry)).registerExtensionFeature({
242
243
  id: ChatContributionPoint.chatSkills,
243
- label: ( localize(7266, "Chat Skills")),
244
+ label: ( localize(7333, "Chat Skills")),
244
245
  access: {
245
246
  canToggle: false
246
247
  },
@@ -76,7 +76,7 @@ let PromptCodeActionProvider = class PromptCodeActionProvider {
76
76
  modeAttr.range.startLineNumber,
77
77
  modeAttr.range.startColumn + modeAttr.key.length
78
78
  ));
79
- result.push(this.createCodeAction(model, keyRange, ( localize(7310, "Rename to 'agent'")), [asWorkspaceTextEdit(model, {
79
+ result.push(this.createCodeAction(model, keyRange, ( localize(7377, "Rename to 'agent'")), [asWorkspaceTextEdit(model, {
80
80
  range: keyRange,
81
81
  text: "agent"
82
82
  })]));
@@ -93,7 +93,7 @@ let PromptCodeActionProvider = class PromptCodeActionProvider {
93
93
  copy: false
94
94
  }
95
95
  };
96
- result.push(this.createCodeAction(model, ( new Range(1, 1, 1, 4)), ( localize(7311, "Migrate to custom agent file")), [edit]));
96
+ result.push(this.createCodeAction(model, ( new Range(1, 1, 1, 4)), ( localize(7378, "Migrate to custom agent file")), [edit]));
97
97
  }
98
98
  }
99
99
  }
@@ -140,7 +140,7 @@ let PromptCodeActionProvider = class PromptCodeActionProvider {
140
140
  };
141
141
  edits.push(edit);
142
142
  if (item.range.containsRange(range)) {
143
- result.push(this.createCodeAction(model, item.range, ( localize(7312, "Update to '{0}'", newName)), [asWorkspaceTextEdit(model, edit)]));
143
+ result.push(this.createCodeAction(model, item.range, ( localize(7379, "Update to '{0}'", newName)), [asWorkspaceTextEdit(model, edit)]));
144
144
  }
145
145
  } else {
146
146
  const newNamesArray = Array.from(newNames).sort((a, b) => a.localeCompare(b));
@@ -159,13 +159,13 @@ let PromptCodeActionProvider = class PromptCodeActionProvider {
159
159
  };
160
160
  edits.push(edit);
161
161
  if (item.range.containsRange(range)) {
162
- result.push(this.createCodeAction(model, item.range, ( localize(7313, "Expand to {0} tools", newNames.size)), [asWorkspaceTextEdit(model, edit)]));
162
+ result.push(this.createCodeAction(model, item.range, ( localize(7380, "Expand to {0} tools", newNames.size)), [asWorkspaceTextEdit(model, edit)]));
163
163
  }
164
164
  }
165
165
  }
166
166
  }
167
167
  if (edits.length && result.length === 0 || edits.length > 1) {
168
- result.push(this.createCodeAction(model, value.range, ( localize(7314, "Update all tool names")), ( edits.map(edit => asWorkspaceTextEdit(model, edit)))));
168
+ result.push(this.createCodeAction(model, value.range, ( localize(7381, "Update all tool names")), ( edits.map(edit => asWorkspaceTextEdit(model, edit)))));
169
169
  }
170
170
  }
171
171
  };