@codingame/monaco-vscode-chat-service-override 37.1.0 → 37.3.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 (746) hide show
  1. package/common.d.ts +9 -0
  2. package/common.js +372 -0
  3. package/index.d.ts +4 -6
  4. package/index.js +20 -367
  5. package/package.json +12 -5
  6. package/session.d.ts +8 -0
  7. package/session.js +56 -0
  8. package/vscode/src/vs/platform/agentHost/browser/agentHostConnectionsService.js +5 -2
  9. package/vscode/src/vs/platform/agentHost/browser/agentHostIpcChannelTransport.d.ts +1 -1
  10. package/vscode/src/vs/platform/agentHost/browser/agentHostIpcChannelTransport.js +2 -2
  11. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostServiceImpl.js +35 -11
  12. package/vscode/src/vs/platform/agentHost/browser/webSocketClientTransport.d.ts +1 -1
  13. package/vscode/src/vs/platform/agentHost/browser/webSocketClientTransport.js +2 -2
  14. package/vscode/src/vs/platform/agentHost/common/agentHostCustomizationConfig.js +34 -18
  15. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.d.ts +1 -1
  16. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.js +1 -1
  17. package/vscode/src/vs/platform/agentHost/common/agentHostStarter.config.contribution.js +54 -54
  18. package/vscode/src/vs/platform/agentHost/common/agentModelPricing.js +20 -23
  19. package/vscode/src/vs/platform/agentHost/common/copilotConfigSlashCommands.js +8 -8
  20. package/vscode/src/vs/platform/agentHost/common/meta/clientPluginCustomizationMeta.js +3 -1
  21. package/vscode/src/vs/platform/agentHost/common/otlp/otlpLogEmitter.d.ts +198 -0
  22. package/vscode/src/vs/platform/agentHost/common/otlp/otlpLogEmitter.js +197 -0
  23. package/vscode/src/vs/platform/agentHost/common/sandboxConfigSchema.js +14 -14
  24. package/vscode/src/vs/platform/agentHost/common/state/sessionWorkingDirectories.d.ts +1 -1
  25. package/vscode/src/vs/platform/agentHost/common/wslRemoteAgentHost.d.ts +63 -0
  26. package/vscode/src/vs/platform/agentHost/common/wslRemoteAgentHost.js +7 -0
  27. package/vscode/src/vs/platform/agentHost/common/wslRemoteAgentHost.service.d.ts +51 -0
  28. package/vscode/src/vs/platform/agentHost/common/wslRemoteAgentHost.service.js +6 -0
  29. package/vscode/src/vs/platform/networkFilter/common/networkFilterService.js +3 -3
  30. package/vscode/src/vs/platform/sandbox/common/terminalSandboxEngine.d.ts +1 -1
  31. package/vscode/src/vs/platform/sandbox/common/terminalSandboxEngine.js +6 -6
  32. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/media/mobileMultiDiffView.css +215 -0
  33. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileDiffHelpers.d.ts +28 -0
  34. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileDiffHelpers.js +429 -0
  35. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileDiffView.d.ts +100 -0
  36. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileDiffView.js +675 -0
  37. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileMultiDiffView.d.ts +86 -0
  38. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileMultiDiffView.js +860 -0
  39. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileMultiDiffVirtualizer.d.ts +35 -0
  40. package/vscode/src/vs/sessions/browser/parts/mobile/contributions/mobileMultiDiffVirtualizer.js +67 -0
  41. package/vscode/src/vs/sessions/contrib/chat/browser/agentHostDelegation.d.ts +1 -0
  42. package/vscode/src/vs/sessions/contrib/chat/browser/agentHostDelegation.js +41 -0
  43. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.d.ts +85 -0
  44. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +247 -0
  45. package/vscode/src/vs/sessions/contrib/chat/browser/branchChatSessionAction.d.ts +16 -0
  46. package/vscode/src/vs/sessions/contrib/chat/browser/branchChatSessionAction.js +71 -0
  47. package/vscode/src/vs/sessions/contrib/chat/browser/btwSlashCommand.contribution.d.ts +15 -0
  48. package/vscode/src/vs/sessions/contrib/chat/browser/btwSlashCommand.contribution.js +106 -0
  49. package/vscode/src/vs/sessions/contrib/chat/browser/chat.contribution.d.ts +1 -0
  50. package/vscode/src/vs/sessions/contrib/chat/browser/chat.contribution.js +438 -0
  51. package/vscode/src/vs/sessions/contrib/chat/browser/chatPetAchievements.d.ts +8 -0
  52. package/vscode/src/vs/sessions/contrib/chat/browser/chatPetAchievements.js +25 -0
  53. package/vscode/src/vs/sessions/contrib/chat/browser/customizationsDebugLog.contribution.d.ts +1 -0
  54. package/vscode/src/vs/sessions/contrib/chat/browser/customizationsDebugLog.contribution.js +173 -0
  55. package/vscode/src/vs/sessions/contrib/chat/browser/media/runScriptAction.css +186 -0
  56. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +9 -0
  57. package/vscode/src/vs/sessions/contrib/chat/browser/newSessionFolderQuickPickAction.d.ts +12 -0
  58. package/vscode/src/vs/sessions/contrib/chat/browser/newSessionFolderQuickPickAction.js +104 -0
  59. package/vscode/src/vs/sessions/contrib/chat/browser/nullInlineChatSessionService.d.ts +15 -0
  60. package/vscode/src/vs/sessions/contrib/chat/browser/nullInlineChatSessionService.js +23 -0
  61. package/vscode/src/vs/sessions/contrib/chat/browser/openSessionLinkOpener.contribution.d.ts +51 -0
  62. package/vscode/src/vs/sessions/contrib/chat/browser/openSessionLinkOpener.contribution.js +151 -0
  63. package/vscode/src/vs/sessions/contrib/chat/browser/promptsService.d.ts +32 -0
  64. package/vscode/src/vs/sessions/contrib/chat/browser/promptsService.js +85 -0
  65. package/vscode/src/vs/sessions/contrib/chat/browser/registerDefaultSessionTaskRunners.d.ts +14 -0
  66. package/vscode/src/vs/sessions/contrib/chat/browser/registerDefaultSessionTaskRunners.js +20 -0
  67. package/vscode/src/vs/sessions/contrib/chat/browser/requestOriginProvider.contribution.d.ts +1 -0
  68. package/vscode/src/vs/sessions/contrib/chat/browser/requestOriginProvider.contribution.js +34 -0
  69. package/vscode/src/vs/sessions/contrib/chat/browser/runScriptAction.d.ts +39 -0
  70. package/vscode/src/vs/sessions/contrib/chat/browser/runScriptAction.js +828 -0
  71. package/vscode/src/vs/sessions/contrib/chat/browser/runScriptCustomTaskWidget.d.ts +48 -0
  72. package/vscode/src/vs/sessions/contrib/chat/browser/runScriptCustomTaskWidget.js +215 -0
  73. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTurnChanges.d.ts +27 -0
  74. package/vscode/src/vs/sessions/contrib/chat/browser/sessionTurnChanges.js +237 -0
  75. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsChatAccessibilityHelp.d.ts +10 -0
  76. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsChatAccessibilityHelp.js +348 -0
  77. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsOpenerParticipant.d.ts +6 -0
  78. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsOpenerParticipant.js +35 -0
  79. package/vscode/src/vs/sessions/contrib/chat/browser/sideChatProvider.contribution.d.ts +45 -0
  80. package/vscode/src/vs/sessions/contrib/chat/browser/sideChatProvider.contribution.js +189 -0
  81. package/vscode/src/vs/sessions/contrib/chat/browser/unifiedWorkspacePickerConfiguration.d.ts +3 -0
  82. package/vscode/src/vs/sessions/contrib/chat/browser/unifiedWorkspacePickerConfiguration.js +17 -0
  83. package/vscode/src/vs/sessions/contrib/chat/browser/voiceBridge.contribution.d.ts +14 -0
  84. package/vscode/src/vs/sessions/contrib/chat/browser/voiceBridge.contribution.js +381 -0
  85. package/vscode/src/vs/sessions/contrib/chat/browser/workbenchSessionTaskRunner.d.ts +23 -0
  86. package/vscode/src/vs/sessions/contrib/chat/browser/workbenchSessionTaskRunner.js +48 -0
  87. package/vscode/src/vs/sessions/contrib/chat/browser/worktreeCreatedTaskDispatcher.d.ts +40 -0
  88. package/vscode/src/vs/sessions/contrib/chat/browser/worktreeCreatedTaskDispatcher.js +116 -0
  89. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostAgentPicker.d.ts +1 -0
  90. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostAgentPicker.js +300 -0
  91. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSettings.contribution.d.ts +1 -0
  92. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSettings.contribution.js +74 -0
  93. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSettingsFileSystemProvider.d.ts +55 -0
  94. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSettingsFileSystemProvider.js +103 -0
  95. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSettingsShared.d.ts +50 -0
  96. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentHostSettingsShared.js +72 -0
  97. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentSessionSettings.contribution.d.ts +1 -0
  98. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentSessionSettings.contribution.js +70 -0
  99. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentSessionSettingsFileSystemProvider.d.ts +69 -0
  100. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/agentSessionSettingsFileSystemProvider.js +151 -0
  101. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/openAgentHostStateFileAction.d.ts +17 -0
  102. package/vscode/src/vs/sessions/contrib/providers/agentHost/browser/openAgentHostStateFileAction.js +39 -0
  103. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/branchPicker.d.ts +31 -0
  104. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/branchPicker.js +150 -0
  105. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessions.contribution.d.ts +1 -0
  106. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessions.contribution.js +42 -0
  107. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsActions.d.ts +19 -0
  108. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsActions.js +199 -0
  109. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsChangesets.d.ts +104 -0
  110. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsChangesets.js +301 -0
  111. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsProvider.d.ts +518 -0
  112. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/copilotChatSessionsProvider.js +3121 -0
  113. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/mobilePermissionPicker.contribution.d.ts +1 -0
  114. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/mobilePermissionPicker.contribution.js +37 -0
  115. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/mobilePermissionPicker.d.ts +25 -0
  116. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/mobilePermissionPicker.js +97 -0
  117. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/modePicker.d.ts +74 -0
  118. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/modePicker.js +355 -0
  119. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/permissionPicker.d.ts +135 -0
  120. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/permissionPicker.js +521 -0
  121. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/sandboxPicker.d.ts +26 -0
  122. package/vscode/src/vs/sessions/contrib/providers/copilotChatSessions/browser/sandboxPicker.js +86 -0
  123. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHost.contribution.d.ts +1 -0
  124. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHost.contribution.js +14 -0
  125. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostContribution.d.ts +166 -0
  126. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxAgentHostContribution.js +586 -0
  127. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxConnectionCustomization.d.ts +15 -0
  128. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxConnectionCustomization.js +47 -0
  129. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxReadOnlySessionHandler.d.ts +45 -0
  130. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxReadOnlySessionHandler.js +109 -0
  131. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxSessionsProvider.d.ts +49 -0
  132. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/cloudSandboxSessionsProvider.js +69 -0
  133. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/entryDrivenProviderContribution.d.ts +47 -0
  134. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/entryDrivenProviderContribution.js +109 -0
  135. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/hostFilter.contribution.d.ts +1 -0
  136. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/hostFilter.contribution.js +72 -0
  137. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/hostFilterActionViewItem.d.ts +79 -0
  138. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/hostFilterActionViewItem.js +353 -0
  139. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/manageRemoteAgentHosts.d.ts +1 -0
  140. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/manageRemoteAgentHosts.js +161 -0
  141. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/managedReconnectAgentHostContribution.d.ts +95 -0
  142. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/managedReconnectAgentHostContribution.js +172 -0
  143. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/media/hostFilter.css +259 -0
  144. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/media/hostPickerSheet.css +351 -0
  145. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/mobileHostFilterActionViewItem.d.ts +36 -0
  146. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/mobileHostFilterActionViewItem.js +236 -0
  147. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHost.contribution.d.ts +80 -0
  148. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHost.contribution.js +686 -0
  149. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostActions.d.ts +20 -0
  150. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostActions.js +1210 -0
  151. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostCustomizationHarness.d.ts +31 -0
  152. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostCustomizationHarness.js +136 -0
  153. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostLogForwarder.d.ts +103 -0
  154. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostLogForwarder.js +173 -0
  155. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostTerminal.contribution.d.ts +1 -0
  156. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/remoteAgentHostTerminal.contribution.js +51 -0
  157. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/tunnelAgentHost.contribution.d.ts +74 -0
  158. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/tunnelAgentHost.contribution.js +438 -0
  159. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/webSocketAgentHost.contribution.d.ts +14 -0
  160. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/webSocketAgentHost.contribution.js +52 -0
  161. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/wslAgentHost.contribution.d.ts +44 -0
  162. package/vscode/src/vs/sessions/contrib/providers/remoteAgentHost/browser/wslAgentHost.contribution.js +171 -0
  163. package/vscode/src/vs/sessions/contrib/sessions/browser/mobile/mobileOverlayContribution.d.ts +1 -0
  164. package/vscode/src/vs/sessions/contrib/sessions/browser/mobile/mobileOverlayContribution.js +98 -0
  165. package/vscode/src/vs/sessions/services/agentHost/browser/agentHostCustomizationService.d.ts +24 -0
  166. package/vscode/src/vs/sessions/services/agentHost/browser/agentHostCustomizationService.js +142 -0
  167. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.d.ts +104 -0
  168. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +827 -0
  169. package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.d.ts +15 -0
  170. package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.js +71 -0
  171. package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.d.ts +16 -0
  172. package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.js +95 -0
  173. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.d.ts +22 -0
  174. package/vscode/src/vs/workbench/api/browser/mainThreadChatDebug.js +286 -0
  175. package/vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.d.ts +10 -0
  176. package/vscode/src/vs/workbench/api/browser/mainThreadChatInputNotification.js +38 -0
  177. package/vscode/src/vs/workbench/api/browser/mainThreadChatQuota.d.ts +9 -0
  178. package/vscode/src/vs/workbench/api/browser/mainThreadChatQuota.js +22 -0
  179. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +130 -0
  180. package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +907 -0
  181. package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.d.ts +10 -0
  182. package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.js +28 -0
  183. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.d.ts +27 -0
  184. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +167 -0
  185. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.d.ts +46 -0
  186. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +358 -0
  187. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoice.contribution.js +35 -35
  188. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoiceSessionsPicker.js +4 -4
  189. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoiceWidget.d.ts +3 -3
  190. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoiceWidget.js +20 -20
  191. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoiceWidgetBinding.js +6 -6
  192. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/agentsVoiceWindowService.js +3 -3
  193. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/confirmationComponent.d.ts +1 -1
  194. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/confirmationComponent.js +3 -3
  195. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/feedbackDialog.js +6 -6
  196. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/headerComponent.d.ts +1 -1
  197. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/headerComponent.js +11 -11
  198. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/onboardingComponent.js +11 -11
  199. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/sessionListComponent.d.ts +1 -1
  200. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/sessionListComponent.js +9 -9
  201. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/statusRowsComponent.d.ts +1 -1
  202. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/statusRowsComponent.js +5 -5
  203. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/transcriptComponent.d.ts +1 -1
  204. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/voiceBarComponent.d.ts +1 -1
  205. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/components/voiceBarComponent.js +2 -2
  206. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/transcriptsView/voiceTranscripts.contribution.js +14 -14
  207. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/transcriptsView/voiceTranscriptsView.js +7 -7
  208. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/voiceModeOnboarding.d.ts +2 -2
  209. package/vscode/src/vs/workbench/contrib/agentsVoice/browser/voiceModeOnboarding.js +40 -40
  210. package/vscode/src/vs/workbench/contrib/agentsVoice/common/voiceTranscriptStore.js +1 -1
  211. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +27 -31
  212. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +8 -8
  213. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.d.ts +1 -1
  214. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +97 -97
  215. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +5 -3
  216. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +1 -1
  217. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +17 -17
  218. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +11 -11
  219. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +8 -8
  220. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +11 -11
  221. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  222. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFindActions.js +8 -8
  223. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +3 -3
  224. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +15 -15
  225. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  226. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +13 -13
  227. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +13 -13
  228. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +17 -17
  229. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  230. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +15 -15
  231. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  232. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +1 -1
  233. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +20 -20
  234. package/vscode/src/vs/workbench/contrib/chat/browser/actions/createPluginAction.js +50 -42
  235. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.js +11 -11
  236. package/vscode/src/vs/workbench/contrib/chat/browser/actions/openAgentHostStateFileAction.js +9 -5
  237. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginCommands.js +7 -7
  238. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +6 -6
  239. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.d.ts +1 -1
  240. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +3 -3
  241. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +12 -12
  242. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +1 -1
  243. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +20 -20
  244. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentCustomizationContentExpander.js +3 -3
  245. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentCustomizationItemProvider.js +8 -6
  246. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHost.contribution.js +2 -7
  247. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostActiveClientService.js +4 -4
  248. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostAuth.js +2 -2
  249. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatContribution.js +7 -7
  250. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostCopilotCliSettingsContribution.js +1 -1
  251. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostCustomizationService.js +431 -19
  252. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLanguageModelProvider.js +7 -7
  253. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLocalCustomizations.js +3 -1
  254. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostMcpServerSupport.d.ts +1 -1
  255. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostMcpServerSupport.js +11 -11
  256. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostModeSynchronizer.js +1 -1
  257. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPermissionUiContribution.js +5 -5
  258. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPromptCacheNotification.d.ts +1 -1
  259. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPromptCacheNotification.js +4 -4
  260. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostProtectedResourcesService.js +4 -2
  261. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostResponseFileChanges.d.ts +1 -1
  262. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostResponseFileChanges.js +3 -3
  263. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostRootConfigForwarder.d.ts +1 -1
  264. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionHandler.js +88 -77
  265. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionInputPills.d.ts +3 -3
  266. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionInputPills.js +48 -43
  267. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionListContribution.js +1 -1
  268. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionListController.js +4 -4
  269. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionListStore.d.ts +1 -1
  270. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionListStore.js +2 -2
  271. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionWorkingDirectorySynchronizer.d.ts +1 -1
  272. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionWorkingDirectorySynchronizer.js +9 -4
  273. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSettings.contribution.js +2 -2
  274. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSettingsFileSystemProvider.js +4 -4
  275. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostShellInitSynchronizer.d.ts +1 -1
  276. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostShellInitSynchronizer.js +1 -1
  277. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSignedOutModelsNotification.js +8 -6
  278. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostTerminalContribution.js +2 -2
  279. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostUntitledProvisionalSessionService.js +12 -3
  280. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentSessionSettings.contribution.js +3 -3
  281. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentSessionSettingsFileSystemProvider.d.ts +1 -1
  282. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentSessionSettingsFileSystemProvider.js +5 -5
  283. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/applyAgentHostSessionConfig.js +1 -1
  284. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/applyAgentHostSubmitConfig.js +1 -1
  285. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/openSessionLinkOpener.contribution.js +1 -1
  286. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/syncedCustomizationBundler.js +9 -9
  287. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +4 -4
  288. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +1 -1
  289. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +55 -53
  290. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +1 -1
  291. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +7 -7
  292. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +3 -3
  293. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +4 -4
  294. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +6 -6
  295. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +4 -4
  296. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +25 -25
  297. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +20 -20
  298. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  299. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.js +5 -5
  300. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionSummaryHoverService.d.ts +1 -1
  301. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionSummaryHoverService.js +1 -1
  302. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessionsConfiguration.js +3 -3
  303. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +48 -48
  304. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationAccessibility.js +7 -7
  305. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationServiceImpl.d.ts +1 -1
  306. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationServiceImpl.js +26 -23
  307. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpServerCustomizationMigration.d.ts +1 -1
  308. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpServerCustomizationMigration.js +9 -9
  309. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +9 -9
  310. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatReferenceAttachmentWidget.contribution.js +1 -1
  311. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/transcriptContextAttachmentWidget.contribution.js +1 -1
  312. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +2 -2
  313. package/vscode/src/vs/workbench/contrib/chat/browser/chat.shared.contribution.js +393 -419
  314. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostChatDebugProvider.d.ts +1 -1
  315. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostChatDebugProvider.js +43 -43
  316. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostLogSources.js +10 -10
  317. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostUsageSidecar.d.ts +1 -1
  318. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/agentHostUsageSidecar.js +1 -1
  319. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +1 -1
  320. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +36 -36
  321. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.d.ts +1 -1
  322. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.js +136 -136
  323. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheInsights.js +75 -75
  324. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +1 -1
  325. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +6 -6
  326. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +1 -1
  327. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +2 -2
  328. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEnablement.js +3 -3
  329. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +1 -1
  330. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +20 -20
  331. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +1 -1
  332. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +8 -8
  333. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +4 -4
  334. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +7 -7
  335. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +1 -1
  336. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +26 -26
  337. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +7 -7
  338. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +12 -12
  339. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.d.ts +1 -1
  340. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +18 -18
  341. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +1 -1
  342. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +27 -27
  343. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +1 -1
  344. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +8 -8
  345. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +1 -1
  346. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +23 -23
  347. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +36 -36
  348. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +1 -1
  349. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +11 -11
  350. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +32 -36
  351. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugWireLogView.js +42 -42
  352. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +13 -13
  353. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +5 -5
  354. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +1 -1
  355. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +19 -19
  356. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +8 -8
  357. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +12 -12
  358. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +15 -15
  359. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +8 -8
  360. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +3 -3
  361. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +1 -1
  362. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +18 -18
  363. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +10 -10
  364. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +12 -12
  365. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +4 -2
  366. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +4 -4
  367. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +5 -5
  368. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  369. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +5 -5
  370. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +4 -4
  371. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +9 -9
  372. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +8 -8
  373. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +2 -2
  374. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +2 -2
  375. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +4 -4
  376. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +36 -36
  377. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievements.contribution.js +18 -16
  378. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementsEditor.js +1 -1
  379. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementsEditorInput.js +1 -1
  380. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementsWidget.js +39 -39
  381. package/vscode/src/vs/workbench/contrib/chat/browser/chatPromoNotification.js +1 -1
  382. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuotaNotification.js +25 -25
  383. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
  384. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionDescription.d.ts +2 -0
  385. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionDescription.js +57 -0
  386. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +19 -19
  387. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
  388. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +1 -1
  389. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +7 -7
  390. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +37 -37
  391. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +59 -54
  392. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +39 -37
  393. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +14 -14
  394. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +19 -19
  395. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +2 -2
  396. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +9 -9
  397. package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.js +2 -2
  398. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContext.contribution.js +5 -5
  399. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +2 -2
  400. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +6 -6
  401. package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.js +2 -2
  402. package/vscode/src/vs/workbench/contrib/chat/browser/expNotification/chatExpNotificationConfig.js +2 -2
  403. package/vscode/src/vs/workbench/contrib/chat/browser/expNotification/chatExpNotificationContribution.js +1 -1
  404. package/vscode/src/vs/workbench/contrib/chat/browser/githubRepoFetcher.js +2 -2
  405. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +6 -6
  406. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorOverlay.js +7 -7
  407. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackService.js +3 -3
  408. package/vscode/src/vs/workbench/contrib/chat/browser/pluginGitCommandService.js +6 -6
  409. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +30 -30
  410. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +21 -17
  411. package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +7 -7
  412. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +2 -2
  413. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  414. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +3 -3
  415. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolSetsCodeLensProvider.js +5 -5
  416. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +4 -4
  417. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +10 -10
  418. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
  419. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +5 -5
  420. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +4 -4
  421. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptBucketing.js +5 -2
  422. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimeline.contribution.js +6 -6
  423. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimelineCard.js +4 -4
  424. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimelineGutterRail.js +5 -5
  425. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimelineModel.js +12 -12
  426. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimelineRulerRail.js +4 -4
  427. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimelineStickyHeader.js +4 -4
  428. package/vscode/src/vs/workbench/contrib/chat/browser/promptTimeline/promptTimelineWidgetContrib.js +1 -1
  429. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +37 -30
  430. package/vscode/src/vs/workbench/contrib/chat/browser/telemetry/chatEditorTopologyTelemetry.js +3 -3
  431. package/vscode/src/vs/workbench/contrib/chat/browser/tools/clientToolSetsContribution.js +10 -10
  432. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +46 -42
  433. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +33 -33
  434. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +10 -10
  435. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +3 -3
  436. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolResultCompressorService.js +68 -4
  437. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +12 -12
  438. package/vscode/src/vs/workbench/contrib/chat/browser/utilityModelContribution.js +2 -2
  439. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +6 -6
  440. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceClientService.d.ts +1 -1
  441. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceClientService.js +10 -10
  442. package/vscode/src/vs/workbench/contrib/chat/browser/voiceInputMode/voiceInputMode.js +3 -3
  443. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.d.ts +1 -1
  444. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentOpenChat.js +25 -25
  445. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatFind/chatFindAccessibilityHelp.js +15 -15
  446. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetWidgetService.d.ts +1 -1
  447. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatPetWidgetService.js +2 -2
  448. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNoticeHub.d.ts +1 -1
  449. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNoticeHub.js +1 -1
  450. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +13 -13
  451. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletions.d.ts +1 -1
  452. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletions.js +4 -4
  453. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCommandArgumentHint.js +2 -2
  454. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +97 -93
  455. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +4 -4
  456. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +14 -6
  457. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +1 -1
  458. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +2 -2
  459. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +1 -1
  460. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +2 -2
  461. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +19 -19
  462. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +3 -3
  463. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugEvents.d.ts +1 -1
  464. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +253 -0
  465. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +20 -0
  466. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +1 -1
  467. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +3 -3
  468. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +1 -1
  469. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +28 -26
  470. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +2 -2
  471. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +4 -4
  472. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +5 -2
  473. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +14 -14
  474. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +1 -1
  475. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +1 -1
  476. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +19 -19
  477. package/vscode/src/vs/workbench/contrib/chat/common/plugins/workspacePluginSettingsService.js +2 -2
  478. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +20 -20
  479. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/computeAutomaticInstructions.d.ts +65 -0
  480. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/computeAutomaticInstructions.js +698 -0
  481. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +13 -13
  482. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +18 -12
  483. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +12 -12
  484. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +157 -157
  485. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/confirmationTool.d.ts +36 -0
  486. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/confirmationTool.js +239 -0
  487. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/editFileTool.d.ts +21 -0
  488. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/editFileTool.js +143 -0
  489. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/manageTodoListTool.d.ts +24 -0
  490. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/manageTodoListTool.js +298 -0
  491. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/reviewPlanTool.d.ts +25 -0
  492. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/reviewPlanTool.js +177 -0
  493. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/runSubagentTool.d.ts +73 -0
  494. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/runSubagentTool.js +577 -0
  495. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactRulesTool.d.ts +11 -0
  496. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactRulesTool.js +90 -0
  497. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactsTool.d.ts +16 -0
  498. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/setArtifactsTool.js +130 -0
  499. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/taskCompleteTool.d.ts +12 -0
  500. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/taskCompleteTool.js +53 -0
  501. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/toolHelpers.d.ts +5 -0
  502. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/toolHelpers.js +12 -0
  503. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/tools.d.ts +10 -0
  504. package/vscode/src/vs/workbench/contrib/chat/common/tools/builtinTools/tools.js +91 -0
  505. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatArtifactsService.js +1 -1
  506. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +38 -0
  507. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +518 -0
  508. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +6 -0
  509. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +231 -0
  510. package/vscode/src/vs/workbench/contrib/chat/common/tools/toolResultCompressor.js +5 -1
  511. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +6 -6
  512. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +1 -1
  513. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarousel.contribution.js +13 -13
  514. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselEditor.js +10 -10
  515. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselEditorInput.js +1 -1
  516. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
  517. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +16 -16
  518. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +3 -3
  519. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditReviewSession.js +3 -3
  520. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +1 -1
  521. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +5 -5
  522. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +29 -25
  523. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  524. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +12 -12
  525. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +6 -6
  526. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  527. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  528. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
  529. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  530. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChat.js +22 -22
  531. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  532. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +21 -21
  533. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +4 -2
  534. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +4 -4
  535. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/agentHostSandboxForwarder.js +1 -1
  536. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +15 -15
  537. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +2 -2
  538. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +7 -7
  539. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +5 -5
  540. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +1 -1
  541. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
  542. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +18 -18
  543. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +9 -9
  544. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/consoleCompactor/consoleCompactor.js +28 -25
  545. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  546. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
  547. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  548. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
  549. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +4 -4
  550. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +4 -4
  551. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +78 -78
  552. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +1 -1
  553. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sendToTerminalTool.js +10 -10
  554. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +15 -15
  555. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +8 -8
  556. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +15 -15
  557. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  558. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +1 -1
  559. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandParser.js +3 -3
  560. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +3 -3
  561. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/sandboxSettingsReader.js +1 -1
  562. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +7 -7
  563. package/vscode/src/vs/workbench/services/agentEditorComments/browser/agentEditorCommentsOverlayWidget.js +4 -4
  564. package/vscode/src/vs/workbench/services/agentHost/browser/editorRemoteAgentHostServiceClient.d.ts +3 -3
  565. package/vscode/src/vs/workbench/services/agentHost/browser/editorRemoteAgentHostServiceClient.js +4 -4
  566. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSystemService.d.ts +1 -1
  567. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSystemService.js +1 -1
  568. package/vscode/src/vs/workbench/services/agentHost/common/agentHostResourceService.js +6 -6
  569. package/vscode/src/vs/workbench/services/agentHost/common/editorRemoteAgentHostTransport.js +25 -25
  570. package/vscode/src/vs/platform/agentHost/browser/agentHostProtocolClient.d.ts +0 -603
  571. package/vscode/src/vs/platform/agentHost/browser/agentHostProtocolClient.js +0 -1911
  572. package/vscode/src/vs/platform/agentHost/common/agentHostClientInfo.d.ts +0 -9
  573. package/vscode/src/vs/platform/agentHost/common/agentHostClientInfo.js +0 -20
  574. package/vscode/src/vs/platform/agentHost/common/agentHostExtensionProtocol.d.ts +0 -144
  575. package/vscode/src/vs/platform/agentHost/common/agentHostExtensionProtocol.js +0 -20
  576. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemProvider.d.ts +0 -204
  577. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemProvider.js +0 -440
  578. package/vscode/src/vs/platform/agentHost/common/agentHostManagedRules.d.ts +0 -47
  579. package/vscode/src/vs/platform/agentHost/common/agentHostManagedRules.js +0 -75
  580. package/vscode/src/vs/platform/agentHost/common/agentHostManagedSettings.d.ts +0 -68
  581. package/vscode/src/vs/platform/agentHost/common/agentHostManagedSettings.js +0 -161
  582. package/vscode/src/vs/platform/agentHost/common/agentHostWorkingDirectories.d.ts +0 -16
  583. package/vscode/src/vs/platform/agentHost/common/agentHostWorkingDirectories.js +0 -14
  584. package/vscode/src/vs/platform/agentHost/common/agentMerge.d.ts +0 -261
  585. package/vscode/src/vs/platform/agentHost/common/agentMerge.js +0 -67
  586. package/vscode/src/vs/platform/agentHost/common/ahpJsonlLogger.d.ts +0 -39
  587. package/vscode/src/vs/platform/agentHost/common/ahpJsonlLogger.js +0 -169
  588. package/vscode/src/vs/platform/agentHost/common/changesetUri.d.ts +0 -130
  589. package/vscode/src/vs/platform/agentHost/common/changesetUri.js +0 -41
  590. package/vscode/src/vs/platform/agentHost/common/customAgents.d.ts +0 -42
  591. package/vscode/src/vs/platform/agentHost/common/customAgents.js +0 -20
  592. package/vscode/src/vs/platform/agentHost/common/meta/agentCompletionAttachmentMeta.d.ts +0 -110
  593. package/vscode/src/vs/platform/agentHost/common/meta/agentCompletionAttachmentMeta.js +0 -79
  594. package/vscode/src/vs/platform/agentHost/common/meta/agentHostArtifactRemovalMeta.d.ts +0 -4
  595. package/vscode/src/vs/platform/agentHost/common/resourceReadLogging.d.ts +0 -1
  596. package/vscode/src/vs/platform/agentHost/common/resourceReadLogging.js +0 -26
  597. package/vscode/src/vs/platform/agentHost/common/sessionArtifacts.d.ts +0 -75
  598. package/vscode/src/vs/platform/agentHost/common/sessionArtifacts.js +0 -84
  599. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.d.ts +0 -461
  600. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.js +0 -803
  601. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-annotations/reducer.d.ts +0 -18
  602. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-annotations/reducer.js +0 -89
  603. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation/reducer.d.ts +0 -4
  604. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation/reducer.js +0 -37
  605. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation-run/reducer.d.ts +0 -4
  606. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-automation-run/reducer.js +0 -45
  607. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-changeset/reducer.d.ts +0 -13
  608. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-changeset/reducer.js +0 -147
  609. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/reducer.d.ts +0 -6
  610. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-chat/reducer.js +0 -544
  611. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-root/reducer.d.ts +0 -6
  612. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-root/reducer.js +0 -30
  613. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-session/reducer.d.ts +0 -6
  614. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-session/reducer.js +0 -430
  615. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-terminal/reducer.d.ts +0 -6
  616. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-terminal/reducer.js +0 -114
  617. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/reducer-helpers.d.ts +0 -17
  618. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/reducer-helpers.js +0 -9
  619. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/timestamps.d.ts +0 -1
  620. package/vscode/src/vs/platform/agentHost/common/state/protocol/common/timestamps.js +0 -7
  621. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.d.ts +0 -67
  622. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.js +0 -117
  623. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.d.ts +0 -106
  624. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.js +0 -23
  625. package/vscode/src/vs/platform/agentHost/common/transportConstants.d.ts +0 -15
  626. package/vscode/src/vs/platform/agentHost/common/transportConstants.js +0 -6
  627. package/vscode/src/vs/platform/agentHost/common/worktreePaths.d.ts +0 -24
  628. package/vscode/src/vs/platform/agentHost/common/worktreePaths.js +0 -15
  629. package/vscode/src/vs/platform/domWidget/browser/domWidget.d.ts +0 -52
  630. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +0 -53
  631. package/vscode/src/vs/platform/networkFilter/common/domainMatcher.d.ts +0 -54
  632. package/vscode/src/vs/platform/networkFilter/common/domainMatcher.js +0 -210
  633. package/vscode/src/vs/platform/networkFilter/common/settings.d.ts +0 -8
  634. package/vscode/src/vs/platform/networkFilter/common/settings.js +0 -10
  635. package/vscode/src/vs/workbench/browser/chatChangesPill.d.ts +0 -29
  636. package/vscode/src/vs/workbench/browser/chatChangesPill.js +0 -84
  637. package/vscode/src/vs/workbench/common/chatPullRequest.d.ts +0 -19
  638. package/vscode/src/vs/workbench/common/chatPullRequest.js +0 -53
  639. package/vscode/src/vs/workbench/contrib/chat/browser/agentHostCompletionAction.d.ts +0 -30
  640. package/vscode/src/vs/workbench/contrib/chat/browser/agentHostCompletionAction.js +0 -37
  641. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +0 -30
  642. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.js +0 -9
  643. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostDownloadProgress.d.ts +0 -35
  644. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostDownloadProgress.js +0 -73
  645. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostToolSetEnablementService.d.ts +0 -51
  646. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostToolSetEnablementService.js +0 -167
  647. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/externalSessionsFilterMenu.d.ts +0 -3
  648. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/externalSessionsFilterMenu.js +0 -62
  649. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/sessionSummaryHover.css +0 -104
  650. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionSummaryHover.d.ts +0 -115
  651. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionSummaryHover.js +0 -168
  652. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +0 -35
  653. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +0 -294
  654. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +0 -66
  655. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +0 -23
  656. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.d.ts +0 -147
  657. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.js +0 -31
  658. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.d.ts +0 -83
  659. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.js +0 -55
  660. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +0 -278
  661. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +0 -2036
  662. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.d.ts +0 -22
  663. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.js +0 -18
  664. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +0 -397
  665. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +0 -4127
  666. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +0 -37
  667. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +0 -93
  668. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementSectionRegistry.d.ts +0 -26
  669. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementSectionRegistry.js +0 -34
  670. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationPresentation.d.ts +0 -2
  671. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationPresentation.js +0 -23
  672. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePage.d.ts +0 -57
  673. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePage.js +0 -48
  674. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.d.ts +0 -40
  675. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.js +0 -369
  676. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCardList.d.ts +0 -40
  677. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCardList.js +0 -302
  678. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +0 -70
  679. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +0 -74
  680. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.d.ts +0 -43
  681. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.js +0 -63
  682. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigration.d.ts +0 -38
  683. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigration.js +0 -240
  684. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationCategories.d.ts +0 -82
  685. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationCategories.js +0 -762
  686. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationDashboard.d.ts +0 -80
  687. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationMigrationDashboard.js +0 -279
  688. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.d.ts +0 -109
  689. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.js +0 -743
  690. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedExtensionToolsDetail.d.ts +0 -42
  691. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedExtensionToolsDetail.js +0 -130
  692. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.d.ts +0 -62
  693. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.js +0 -217
  694. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/galleryItemRenderer.d.ts +0 -46
  695. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/galleryItemRenderer.js +0 -91
  696. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +0 -357
  697. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +0 -2656
  698. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +0 -3742
  699. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationWelcomePromptLaunchers.css +0 -301
  700. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/customizationMigrationDashboard.css +0 -354
  701. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +0 -197
  702. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +0 -2205
  703. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.d.ts +0 -27
  704. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.js +0 -317
  705. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/toolsListWidget.d.ts +0 -132
  706. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/toolsListWidget.js +0 -1216
  707. package/vscode/src/vs/workbench/contrib/chat/browser/chatInputPills.d.ts +0 -86
  708. package/vscode/src/vs/workbench/contrib/chat/browser/chatInputPills.js +0 -282
  709. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +0 -118
  710. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +0 -540
  711. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +0 -82
  712. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +0 -1448
  713. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +0 -329
  714. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementPreview.d.ts +0 -7
  715. package/vscode/src/vs/workbench/contrib/chat/browser/chatPetAchievementPreview.js +0 -114
  716. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
  717. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +0 -9
  718. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +0 -99
  719. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +0 -1268
  720. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +0 -552
  721. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +0 -31
  722. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +0 -676
  723. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.d.ts +0 -68
  724. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +0 -225
  725. package/vscode/src/vs/workbench/contrib/chat/browser/sessionChatPillOptions.d.ts +0 -13
  726. package/vscode/src/vs/workbench/contrib/chat/browser/sessionChatPillOptions.js +0 -52
  727. package/vscode/src/vs/workbench/contrib/chat/browser/sessionPullRequestPill.d.ts +0 -22
  728. package/vscode/src/vs/workbench/contrib/chat/browser/sessionPullRequestPill.js +0 -58
  729. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceInputUtils.d.ts +0 -11
  730. package/vscode/src/vs/workbench/contrib/chat/browser/voiceClient/voiceInputUtils.js +0 -13
  731. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletionsBase.d.ts +0 -73
  732. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletionsBase.js +0 -65
  733. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.d.ts +0 -31
  734. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.js +0 -110
  735. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputPlaceholderDecoration.d.ts +0 -11
  736. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputPlaceholderDecoration.js +0 -28
  737. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputReferenceDecorations.d.ts +0 -3
  738. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputReferenceDecorations.js +0 -16
  739. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationBlueprint.d.ts +0 -22
  740. package/vscode/src/vs/workbench/contrib/chat/common/automations/automationBlueprint.js +0 -163
  741. package/vscode/src/vs/workbench/contrib/chat/common/chatNotification.d.ts +0 -6
  742. package/vscode/src/vs/workbench/contrib/chat/common/chatNotification.js +0 -12
  743. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationService.d.ts +0 -115
  744. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/customizationMigrationService.js +0 -69
  745. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatPills.d.ts +0 -60
  746. package/vscode/src/vs/workbench/contrib/chat/common/sessionChatPills.js +0 -139
@@ -1,2205 +0,0 @@
1
-
2
- import { registerCss } from '@codingame/monaco-vscode-api/css';
3
- import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
4
- import * as aiCustomizationManagement from './media/aiCustomizationManagement.css';
5
- import { $ as $$1, append, clearNode, addDisposableGenericMouseDownListener, EventHelper, DisposableResizeObserver, getWindow, createTextNode, addDisposableListener, EventType, scheduleAtNextAnimationFrame } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
6
- import { DisposableStore, Disposable, MutableDisposable, isDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
7
- import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
8
- import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
9
- import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
10
- import { WorkbenchList } from '@codingame/monaco-vscode-api/vscode/vs/platform/list/browser/listService';
11
- import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
12
- import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
13
- import { Button, ButtonWithDropdown } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/button/button';
14
- import { defaultCheckboxStyles, defaultButtonStyles, getButtonStyles, defaultInputBoxStyles } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/browser/defaultStyles';
15
- import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
16
- import { IOpenerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service';
17
- import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
18
- import { InputBox, MessageType } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/inputbox/inputBox';
19
- import { IContextViewService, IContextMenuService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextview/browser/contextView.service';
20
- import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
21
- import { CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
22
- import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
23
- import { Action, Separator } from '@codingame/monaco-vscode-api/vscode/vs/base/common/actions';
24
- import { isEqual, basename, dirname } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
25
- import { IHoverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service';
26
- import { isWeb } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
27
- import { IAgentPluginService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginService.service';
28
- import { isContributionEnabled, ContributionEnablementState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/enablement';
29
- import { isPluginPolicyBlocked, getInstalledPluginContextMenuActions } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentPluginActions';
30
- import { IPluginMarketplaceService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.service';
31
- import { IPluginInstallService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/pluginInstallService.service';
32
- import { AgentPluginItemKind } from '../agentPluginEditor/agentPluginItems.js';
33
- import { formatDisplayName } from './aiCustomizationListWidget.js';
34
- import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
35
- import { CUSTOMIZATION_GROUP_HEADER_HEIGHT, CUSTOMIZATION_GROUP_HEADER_HEIGHT_WITH_SEPARATOR, CustomizationGroupHeaderRenderer } from './customizationGroupHeaderRenderer.js';
36
- import { getCustomizationDisabledLabel, isPluginCustomizationItem } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/customizationHarnessService';
37
- import { ICustomizationHarnessService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/customizationHarnessService.service';
38
- import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
39
- import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
40
- import { IAICustomizationItemsModel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.service';
41
- import { UpdateAgentPluginsCommandId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat';
42
- import { Switch } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/toggle/switch';
43
- import { Checkbox } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/toggle/toggle';
44
- import { INotificationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/notification/common/notification.service';
45
- import { getErrorMessage } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
46
- import { getPluginInclusionLabel } from './aiCustomizationPresentation.js';
47
- import { status } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/aria/aria';
48
- import { setVirtualizedRowActionsTabbable, createCustomizationCardPrimaryAction, setupCollapsibleSection, CustomizationCardListController, layoutVirtualizedSections, getVirtualizedSectionMinimumHeight, layoutVirtualizedSectionList, renderVirtualizedSectionLoadingPlaceholder } from './customizationCardList.js';
49
- import { DomScrollableElement } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/scrollbar/scrollableElement';
50
- import { ScrollbarVisibility } from '@codingame/monaco-vscode-api/vscode/vs/base/common/scrollable';
51
- import { truncateToFirstLine } from './aiCustomizationListWidgetUtils.js';
52
- import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
53
- import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
54
-
55
- registerCss(aiCustomizationManagement);
56
- const $ = $$1;
57
- const PLUGIN_ITEM_HEIGHT = 66;
58
- const PLUGIN_MARKETPLACE_ITEM_HEIGHT = 68;
59
- class PluginMarketplaceSnapshotModel {
60
- constructor() {
61
- this._state = "uninitialized";
62
- this._items = [];
63
- }
64
- get state() {
65
- return this._state;
66
- }
67
- get items() {
68
- return this._items;
69
- }
70
- beginLoading() {
71
- if (this._state !== "uninitialized") {
72
- return false;
73
- }
74
- this._state = "loading";
75
- return true;
76
- }
77
- complete(items) {
78
- this._items = items;
79
- this._state = "loaded";
80
- }
81
- fail() {
82
- this._items = [];
83
- this._state = "failed";
84
- }
85
- reset() {
86
- this._items = [];
87
- this._state = "uninitialized";
88
- }
89
- }
90
- function shouldLoadPluginMarketplaceSnapshot(visible, state, marketplaceAvailable) {
91
- return visible && state === "uninitialized" && marketplaceAvailable;
92
- }
93
- function isCurrentPluginMarketplaceRequest(
94
- requestQuery,
95
- currentQuery,
96
- requestBrowseMode,
97
- currentBrowseMode,
98
- isActiveRequest,
99
- isCancellationRequested
100
- ) {
101
- return isActiveRequest && !isCancellationRequested && requestQuery === currentQuery && requestBrowseMode === currentBrowseMode;
102
- }
103
- class PluginItemDelegate {
104
- getHeight(element) {
105
- if (element.type === "group-header") {
106
- return element.isFirst ? CUSTOMIZATION_GROUP_HEADER_HEIGHT : CUSTOMIZATION_GROUP_HEADER_HEIGHT_WITH_SEPARATOR;
107
- }
108
- if (element.type === "search-header") {
109
- return 32;
110
- }
111
- if (element.type === "marketplace-item") {
112
- return PLUGIN_MARKETPLACE_ITEM_HEIGHT;
113
- }
114
- return PLUGIN_ITEM_HEIGHT;
115
- }
116
- getTemplateId(element) {
117
- if (element.type === "group-header") {
118
- return "pluginGroupHeader";
119
- }
120
- if (element.type === "search-header") {
121
- return "pluginSearchHeader";
122
- }
123
- if (element.type === "marketplace-item") {
124
- return PLUGIN_MARKETPLACE_ITEM_TEMPLATE_ID;
125
- }
126
- if (element.type === "remote-item") {
127
- return "pluginRemoteItem";
128
- }
129
- return "pluginInstalledItem";
130
- }
131
- }
132
- class PluginSearchHeaderRenderer {
133
- constructor() {
134
- this.templateId = "pluginSearchHeader";
135
- }
136
- renderTemplate(container) {
137
- container.classList.add("plugin-search-header");
138
- const label = append(container, $(".plugin-search-header-label"));
139
- return {
140
- container,
141
- label
142
- };
143
- }
144
- renderElement(element, _index, templateData) {
145
- templateData.label.textContent = element.label;
146
- templateData.container.classList.toggle("available-to-install", element.id === "plugin-search-available");
147
- }
148
- disposeTemplate() {}
149
- }
150
- class PluginInstalledItemRenderer {
151
- constructor(_harnessService, _renderActions, _showSyncCheckbox = true) {
152
- this._harnessService = _harnessService;
153
- this._renderActions = _renderActions;
154
- this._showSyncCheckbox = _showSyncCheckbox;
155
- this.templateId = "pluginInstalledItem";
156
- this._templates = ( new Set());
157
- this._focusedIndex = -1;
158
- }
159
- renderTemplate(container) {
160
- container.classList.add("plugin-list-item", "plugin-installed-item");
161
- const syncCheckboxContainer = append(container, $(".item-sync-checkbox"));
162
- const details = append(container, $(".plugin-list-item-details"));
163
- const nameRow = append(details, $(".plugin-list-item-name-row"));
164
- const name = append(nameRow, $(".plugin-list-item-name"));
165
- const source = append(nameRow, $(".inline-badge.plugin-source-badge"));
166
- const description = append(details, $(".plugin-list-item-description"));
167
- const metadata = append(details, $(".plugin-list-item-metadata"));
168
- const actions = append(container, $(".plugin-list-item-action"));
169
- const template = {
170
- container,
171
- syncCheckboxContainer,
172
- name,
173
- source,
174
- description,
175
- metadata,
176
- actions,
177
- disposables: ( new DisposableStore()),
178
- currentIndex: -1
179
- };
180
- this._templates.add(template);
181
- return template;
182
- }
183
- renderElement(element, index, templateData) {
184
- templateData.disposables.clear();
185
- templateData.currentIndex = index;
186
- templateData.name.textContent = formatDisplayName(element.item.name);
187
- templateData.source.textContent = element.item.marketplace ? "" : ( localize(7063, "Local"));
188
- templateData.source.title = element.item.marketplace ? "" : ( localize(7064, "Installed from a local source"));
189
- templateData.source.style.display = element.item.marketplace ? "none" : "";
190
- if (element.item.description) {
191
- templateData.description.textContent = truncateToFirstLine(element.item.description);
192
- templateData.description.style.display = "";
193
- } else {
194
- templateData.description.style.display = "none";
195
- }
196
- templateData.metadata.textContent = getInstalledPluginMetadata(element.item);
197
- templateData.metadata.style.display = templateData.metadata.textContent ? "" : "none";
198
- templateData.disposables.add(autorun(reader => {
199
- const enabled = isContributionEnabled(element.item.plugin.enablement.read(reader));
200
- templateData.container.classList.toggle("disabled", !enabled);
201
- }));
202
- const syncProvider = this._showSyncCheckbox ? this._harnessService.getActiveDescriptor().syncProvider : undefined;
203
- if (syncProvider) {
204
- templateData.syncCheckboxContainer.style.display = "";
205
- const pluginUri = element.item.plugin.uri;
206
- const disabled = syncProvider.isDisabled(pluginUri);
207
- const title = disabled ? ( localize(7065, "Enable {0} for sync", element.item.name)) : ( localize(7066, "Disable {0} from sync", element.item.name));
208
- const checkbox = templateData.disposables.add(( new Checkbox(title, !disabled, defaultCheckboxStyles)));
209
- templateData.syncCheckboxContainer.replaceChildren(checkbox.domNode);
210
- templateData.disposables.add(checkbox.onChange(() => {
211
- syncProvider.setDisabled(pluginUri, !checkbox.checked);
212
- }));
213
- } else {
214
- templateData.syncCheckboxContainer.style.display = "none";
215
- templateData.syncCheckboxContainer.replaceChildren();
216
- }
217
- clearNode(templateData.actions);
218
- this._renderActions(
219
- element.item,
220
- templateData.container,
221
- templateData.actions,
222
- templateData.disposables
223
- );
224
- setVirtualizedRowActionsTabbable(templateData.actions, index === this._focusedIndex);
225
- }
226
- setFocusedIndex(index) {
227
- this._focusedIndex = index;
228
- for (const template of this._templates) {
229
- setVirtualizedRowActionsTabbable(template.actions, template.currentIndex === index);
230
- }
231
- }
232
- disposeTemplate(templateData) {
233
- this._templates.delete(templateData);
234
- templateData.disposables.dispose();
235
- }
236
- }
237
- class PluginRemoteItemRenderer {
238
- constructor(_renderActions) {
239
- this._renderActions = _renderActions;
240
- this.templateId = "pluginRemoteItem";
241
- this._templates = ( new Set());
242
- this._focusedIndex = -1;
243
- }
244
- renderTemplate(container) {
245
- container.classList.add("plugin-list-item", "plugin-remote-item");
246
- const details = append(container, $(".plugin-list-item-details"));
247
- const nameRow = append(details, $(".plugin-list-item-name-row"));
248
- const name = append(nameRow, $("span"));
249
- const badge = append(nameRow, $(".inline-badge.item-badge"));
250
- const description = append(details, $(".plugin-list-item-description"));
251
- const metadata = append(details, $(".plugin-list-item-metadata"));
252
- const status = append(container, $(".plugin-list-item-status"));
253
- const actions = append(container, $(".plugin-list-item-action"));
254
- const template = {
255
- container,
256
- name,
257
- badge,
258
- description,
259
- metadata,
260
- status,
261
- actions,
262
- disposables: ( new DisposableStore()),
263
- currentIndex: -1
264
- };
265
- this._templates.add(template);
266
- return template;
267
- }
268
- renderElement(element, index, templateData) {
269
- templateData.disposables.clear();
270
- templateData.currentIndex = index;
271
- templateData.name.textContent = formatDisplayName(element.item.name);
272
- if (element.item.badge) {
273
- templateData.badge.textContent = element.item.badge;
274
- templateData.badge.style.display = "";
275
- templateData.badge.title = element.item.badgeTooltip ?? "";
276
- } else {
277
- templateData.badge.textContent = "";
278
- templateData.badge.style.display = "none";
279
- templateData.badge.title = "";
280
- }
281
- if (element.item.description) {
282
- templateData.description.textContent = truncateToFirstLine(element.item.description);
283
- templateData.description.style.display = "";
284
- } else {
285
- templateData.description.textContent = "";
286
- templateData.description.style.display = "none";
287
- }
288
- templateData.container.classList.toggle("disabled", element.item.enabled === false);
289
- templateData.metadata.textContent = ( localize(7067, "Remote agent host"));
290
- templateData.status.className = "plugin-list-item-status";
291
- if (element.item.enabled === false) {
292
- templateData.status.textContent = getRemotePluginDisabledLabel(element.item);
293
- templateData.status.classList.add("disabled");
294
- } else {
295
- switch (element.item.status) {
296
- case "loading":
297
- templateData.status.textContent = getRemotePluginStatusLabel(element.item);
298
- templateData.status.classList.add("running");
299
- break;
300
- case "loaded":
301
- templateData.status.textContent = getRemotePluginStatusLabel(element.item);
302
- templateData.status.classList.add("running");
303
- break;
304
- case "degraded":
305
- templateData.status.textContent = getRemotePluginStatusLabel(element.item);
306
- templateData.status.classList.add("disabled");
307
- break;
308
- case "error":
309
- templateData.status.textContent = getRemotePluginStatusLabel(element.item);
310
- templateData.status.classList.add("disabled");
311
- break;
312
- default:
313
- templateData.status.textContent = "";
314
- break;
315
- }
316
- }
317
- clearNode(templateData.actions);
318
- this._renderActions(element.item, templateData.actions, templateData.disposables);
319
- setVirtualizedRowActionsTabbable(templateData.actions, index === this._focusedIndex);
320
- }
321
- setFocusedIndex(index) {
322
- this._focusedIndex = index;
323
- for (const template of this._templates) {
324
- setVirtualizedRowActionsTabbable(template.actions, template.currentIndex === index);
325
- }
326
- }
327
- disposeTemplate(templateData) {
328
- this._templates.delete(templateData);
329
- templateData.disposables.dispose();
330
- }
331
- }
332
- function getRemotePluginDisabledLabel(item) {
333
- return getCustomizationDisabledLabel(item.disabledReason);
334
- }
335
- const PLUGIN_MARKETPLACE_ITEM_TEMPLATE_ID = "pluginMarketplaceItem";
336
- class PluginMarketplaceItemRenderer {
337
- constructor(
338
- pluginInstallService,
339
- agentPluginService,
340
- pluginMarketplaceService,
341
- notificationService,
342
- showRecommendedBadge = true
343
- ) {
344
- this.pluginInstallService = pluginInstallService;
345
- this.agentPluginService = agentPluginService;
346
- this.pluginMarketplaceService = pluginMarketplaceService;
347
- this.notificationService = notificationService;
348
- this.showRecommendedBadge = showRecommendedBadge;
349
- this.templateId = PLUGIN_MARKETPLACE_ITEM_TEMPLATE_ID;
350
- this._templates = ( new Set());
351
- this._focusedIndex = -1;
352
- }
353
- renderTemplate(container) {
354
- container.classList.add("plugin-list-item", "plugin-marketplace-item");
355
- const details = append(container, $(".plugin-list-item-details"));
356
- const nameRow = append(details, $(".plugin-list-item-name-row"));
357
- const name = append(nameRow, $(".plugin-list-item-name"));
358
- const recommendedBadge = append(nameRow, $(".inline-badge.plugin-recommended-badge"));
359
- recommendedBadge.textContent = ( localize(7068, "Recommended"));
360
- const description = append(details, $(".plugin-list-item-description"));
361
- const publisher = append(details, $(".plugin-list-item-source"));
362
- const metadata = append(details, $(".plugin-list-item-metadata"));
363
- const actionContainer = append(container, $(".plugin-list-item-action"));
364
- const installButton = ( new Button(actionContainer, defaultButtonStyles));
365
- installButton.element.classList.add("plugin-list-item-install-button");
366
- const templateDisposables = ( new DisposableStore());
367
- templateDisposables.add(installButton);
368
- templateDisposables.add(
369
- addDisposableGenericMouseDownListener(installButton.element, event => EventHelper.stop(event, true))
370
- );
371
- const template = {
372
- container,
373
- name,
374
- recommendedBadge,
375
- publisher,
376
- description,
377
- metadata,
378
- installButton,
379
- elementDisposables: ( new DisposableStore()),
380
- templateDisposables,
381
- currentIndex: -1
382
- };
383
- this._templates.add(template);
384
- return template;
385
- }
386
- renderElement(element, index, templateData) {
387
- templateData.elementDisposables.clear();
388
- templateData.currentIndex = index;
389
- templateData.name.textContent = element.item.name;
390
- templateData.recommendedBadge.style.display = this.showRecommendedBadge && this.isRecommended(element.item) ? "" : "none";
391
- templateData.publisher.textContent = "";
392
- templateData.publisher.style.display = "none";
393
- templateData.description.textContent = element.item.description || "";
394
- templateData.metadata.textContent = "";
395
- templateData.metadata.style.display = "none";
396
- const installUri = this.pluginInstallService.getPluginInstallUri({
397
- name: element.item.name,
398
- description: element.item.description,
399
- version: element.item.version ?? "",
400
- sourceDescriptor: element.item.sourceDescriptor,
401
- source: element.item.source,
402
- marketplace: element.item.marketplace,
403
- marketplaceReference: element.item.marketplaceReference,
404
- marketplaceType: element.item.marketplaceType
405
- });
406
- const isAlreadyInstalled = ( this.agentPluginService.plugins.get().some(p => isEqual(p.uri, installUri)));
407
- if (isAlreadyInstalled) {
408
- templateData.installButton.label = ( localize(7069, "Installed"));
409
- templateData.installButton.enabled = false;
410
- this.updateInstallButtonTabbability(templateData);
411
- return;
412
- }
413
- templateData.installButton.label = ( localize(7070, "Install"));
414
- templateData.installButton.enabled = true;
415
- this.updateInstallButtonTabbability(templateData);
416
- templateData.elementDisposables.add(templateData.installButton.onDidClick(async event => {
417
- EventHelper.stop(event, true);
418
- templateData.installButton.label = ( localize(7071, "Installing..."));
419
- templateData.installButton.enabled = false;
420
- try {
421
- await this.pluginInstallService.installPlugin({
422
- name: element.item.name,
423
- description: element.item.description,
424
- version: element.item.version ?? "",
425
- sourceDescriptor: element.item.sourceDescriptor,
426
- source: element.item.source,
427
- marketplace: element.item.marketplace,
428
- marketplaceReference: element.item.marketplaceReference,
429
- marketplaceType: element.item.marketplaceType,
430
- readmeUri: element.item.readmeUri
431
- });
432
- templateData.installButton.label = ( localize(7069, "Installed"));
433
- this.updateInstallButtonTabbability(templateData);
434
- } catch (error) {
435
- templateData.installButton.label = ( localize(7070, "Install"));
436
- templateData.installButton.enabled = true;
437
- this.updateInstallButtonTabbability(templateData);
438
- this.notificationService.error(( localize(7072, "Unable to install plugin: {0}", getErrorMessage(error))));
439
- }
440
- }));
441
- }
442
- setFocusedIndex(index) {
443
- this._focusedIndex = index;
444
- for (const template of this._templates) {
445
- this.updateInstallButtonTabbability(template);
446
- }
447
- }
448
- updateInstallButtonTabbability(templateData) {
449
- templateData.installButton.element.tabIndex = templateData.installButton.enabled && templateData.currentIndex === this._focusedIndex ? 0 : -1;
450
- }
451
- isRecommended(item) {
452
- return ( this.pluginMarketplaceService.recommendedPlugins.get().has(getMarketplaceRecommendationKey(item)));
453
- }
454
- disposeTemplate(templateData) {
455
- this._templates.delete(templateData);
456
- templateData.elementDisposables.dispose();
457
- templateData.templateDisposables.dispose();
458
- }
459
- }
460
- function installedPluginToItem(plugin, labelService) {
461
- const name = plugin.label || basename(plugin.uri);
462
- const description = plugin.fromMarketplace?.description ?? labelService.getUriLabel(dirname(plugin.uri), {
463
- relative: true
464
- });
465
- const marketplace = plugin.fromMarketplace?.marketplace;
466
- return {
467
- kind: AgentPluginItemKind.Installed,
468
- name,
469
- description,
470
- marketplace,
471
- plugin
472
- };
473
- }
474
- function marketplacePluginToItem(plugin) {
475
- return {
476
- kind: AgentPluginItemKind.Marketplace,
477
- name: plugin.name,
478
- description: plugin.description,
479
- version: plugin.version,
480
- source: plugin.source,
481
- sourceDescriptor: plugin.sourceDescriptor,
482
- marketplace: plugin.marketplace,
483
- marketplaceReference: plugin.marketplaceReference,
484
- marketplaceType: plugin.marketplaceType,
485
- readmeUri: plugin.readmeUri
486
- };
487
- }
488
- function getMarketplaceRecommendationKey(plugin) {
489
- return `${plugin.name}@${plugin.marketplace}`;
490
- }
491
- function compareInstalledPluginItems(a, b) {
492
- return formatDisplayName(a.name).localeCompare(formatDisplayName(b.name));
493
- }
494
- function getInstalledPluginMetadata(item) {
495
- const metadata = [];
496
- const contributionSummary = getInstalledPluginContributionSummary(item);
497
- if (contributionSummary) {
498
- metadata.push(contributionSummary);
499
- }
500
- return metadata.join(" • ");
501
- }
502
- function getInstalledPluginContributionEntries(item) {
503
- const plugin = item.plugin;
504
- const entries = [];
505
- appendContributionEntry(
506
- entries,
507
- formatContributionLabel(plugin.agents.get().length, ( localize(7073, "1 agent")), ( localize(7074, "{0} agents", plugin.agents.get().length))),
508
- plugin.agents.get()
509
- );
510
- appendContributionEntry(
511
- entries,
512
- formatContributionLabel(plugin.skills.get().length, ( localize(7075, "1 skill")), ( localize(7076, "{0} skills", plugin.skills.get().length))),
513
- plugin.skills.get()
514
- );
515
- appendContributionEntry(
516
- entries,
517
- formatContributionLabel(plugin.commands.get().length, ( localize(7077, "1 command")), ( localize(7078, "{0} commands", plugin.commands.get().length))),
518
- plugin.commands.get()
519
- );
520
- appendContributionEntry(
521
- entries,
522
- formatContributionLabel(plugin.instructions.get().length, ( localize(7079, "1 instruction")), ( localize(7080, "{0} instructions", plugin.instructions.get().length))),
523
- plugin.instructions.get()
524
- );
525
- appendContributionEntry(
526
- entries,
527
- formatContributionLabel(plugin.mcpServerDefinitions.get().length, ( localize(7081, "1 MCP server")), ( localize(7082, "{0} MCP servers", plugin.mcpServerDefinitions.get().length))),
528
- ( plugin.mcpServerDefinitions.get().map(server => ({
529
- name: server.name
530
- })))
531
- );
532
- appendContributionEntry(entries, formatContributionLabel(plugin.hooks.get().length, ( localize(7083, "1 hook")), ( localize(7084, "{0} hooks", plugin.hooks.get().length))), ( plugin.hooks.get().map(hook => ({
533
- name: hook.originalId,
534
- description: ( localize(7085, "{0} commands", hook.hooks.length))
535
- }))));
536
- return entries;
537
- }
538
- function appendContributionEntry(entries, label, items) {
539
- if (label && items.length > 0) {
540
- entries.push({
541
- label,
542
- items
543
- });
544
- }
545
- }
546
- function formatContributionLabel(count, singular, plural) {
547
- if (count === 0) {
548
- return undefined;
549
- }
550
- return count === 1 ? singular : plural;
551
- }
552
- function getRemotePluginStatusLabel(item) {
553
- if (item.enabled === false) {
554
- return getRemotePluginDisabledLabel(item);
555
- }
556
- switch (item.status) {
557
- case "loading":
558
- return localize(7086, "Loading");
559
- case "loaded":
560
- return localize(7087, "Loaded");
561
- case "degraded":
562
- return localize(7088, "Warning");
563
- case "error":
564
- return localize(7089, "Error");
565
- default:
566
- return "";
567
- }
568
- }
569
- function getInstalledPluginContributionSummary(item) {
570
- return ( getInstalledPluginContributionEntries(item).map(entry => entry.label)).slice(0, 2).join(" • ");
571
- }
572
- function getToggledPluginEnablementState(state) {
573
- switch (state) {
574
- case ContributionEnablementState.EnabledWorkspace:
575
- return ContributionEnablementState.DisabledWorkspace;
576
- case ContributionEnablementState.DisabledWorkspace:
577
- return ContributionEnablementState.EnabledWorkspace;
578
- case ContributionEnablementState.EnabledProfile:
579
- return ContributionEnablementState.DisabledProfile;
580
- case ContributionEnablementState.DisabledProfile:
581
- return ContributionEnablementState.EnabledProfile;
582
- }
583
- }
584
- let PluginListWidget = class PluginListWidget extends Disposable {
585
- constructor(
586
- marketplaceBrowsingAvailable = !isWeb,
587
- instantiationService,
588
- agentPluginService,
589
- pluginMarketplaceService,
590
- pluginInstallService,
591
- openerService,
592
- contextViewService,
593
- contextMenuService,
594
- hoverService,
595
- labelService,
596
- commandService,
597
- harnessService,
598
- itemsModel,
599
- configurationService,
600
- notificationService
601
- ) {
602
- super();
603
- this.marketplaceBrowsingAvailable = marketplaceBrowsingAvailable;
604
- this.instantiationService = instantiationService;
605
- this.agentPluginService = agentPluginService;
606
- this.pluginMarketplaceService = pluginMarketplaceService;
607
- this.pluginInstallService = pluginInstallService;
608
- this.openerService = openerService;
609
- this.contextViewService = contextViewService;
610
- this.contextMenuService = contextMenuService;
611
- this.hoverService = hoverService;
612
- this.labelService = labelService;
613
- this.commandService = commandService;
614
- this.harnessService = harnessService;
615
- this.itemsModel = itemsModel;
616
- this.configurationService = configurationService;
617
- this.notificationService = notificationService;
618
- this._onDidSelectPlugin = this._register(( new Emitter()));
619
- this.onDidSelectPlugin = this._onDidSelectPlugin.event;
620
- this._onDidChangeItemCount = this._register(( new Emitter()));
621
- this.onDidChangeItemCount = this._onDidChangeItemCount.event;
622
- this.disabledLinkListener = this._register(( new MutableDisposable()));
623
- this.addDropdownActions = this._register(( new DisposableStore()));
624
- this.cardDisposables = this._register(( new DisposableStore()));
625
- this.pendingSectionLayout = this._register(( new MutableDisposable()));
626
- this.cardListControllers = ( new WeakMap());
627
- this.sectionLists = [];
628
- this.collapsedSections = ( new Set());
629
- this.installedItems = [];
630
- this.remoteItems = [];
631
- this.marketplaceItems = [];
632
- this.marketplaceSnapshot = ( new PluginMarketplaceSnapshotModel());
633
- this.searchQuery = "";
634
- this.browseMode = false;
635
- this.visible = false;
636
- this.narrowLayout = false;
637
- this.wideLayout = false;
638
- this.lastHeight = 0;
639
- this.lastWidth = 0;
640
- this.lastHeaderHeight = 0;
641
- this._layoutDeferred = false;
642
- this.revealLastItemScheduler = this._register(( new MutableDisposable()));
643
- this.collapsedGroups = ( new Set());
644
- this.sectionScrollPositions = ( new Map());
645
- this.delayedFilter = ( new Delayer(200));
646
- this.delayedMarketplaceSearch = ( new Delayer(400));
647
- this.filterGeneration = 0;
648
- this.element = $(".mcp-list-widget.plugin-list-widget");
649
- this.create();
650
- const resizeObserver = this._register(new DisposableResizeObserver(
651
- "PluginListWidget",
652
- () => this.updateResponsiveLayout(this.element.offsetWidth),
653
- getWindow(this.element)
654
- ));
655
- this._register(resizeObserver.observe(this.element));
656
- this.updateAccessState();
657
- this._register(this.configurationService.onDidChangeConfiguration(e => {
658
- if (e.affectsConfiguration(ChatConfiguration.PluginsEnabled)) {
659
- this.updateAccessState();
660
- }
661
- }));
662
- this._register({
663
- dispose: () => {
664
- this.delayedFilter.cancel();
665
- this.delayedMarketplaceSearch.cancel();
666
- this.marketplaceCts?.dispose(true);
667
- this.marketplaceCts = undefined;
668
- this.marketplaceSnapshotCts?.dispose(true);
669
- this.marketplaceSnapshotCts = undefined;
670
- }
671
- });
672
- }
673
- create() {
674
- this.sectionTitleHeader = append(this.element, $(".section-title-header"));
675
- const titleRow = append(this.sectionTitleHeader, $(".section-title-row"));
676
- const sectionTitle = append(titleRow, $("h2.section-title"));
677
- sectionTitle.textContent = ( localize(7090, "Plugins"));
678
- const sectionTitleDescription = append(this.sectionTitleHeader, $("p.section-title-description"));
679
- const sectionTitleDescriptionText = append(sectionTitleDescription, $("span.section-title-description-text"));
680
- sectionTitleDescriptionText.textContent = ( localize(
681
- 7091,
682
- "Extend your AI agent with plugins that add commands, skills, agents, hooks, and MCP servers from reusable packages."
683
- ));
684
- sectionTitleDescription.appendChild(createTextNode(" "));
685
- this.sectionLink = append(sectionTitleDescription, $("a.section-title-link"));
686
- this.sectionLink.textContent = ( localize(7092, "Learn more about agent plugins"));
687
- this.sectionLink.href = "https://code.visualstudio.com/docs/agent-customization/agent-plugins?referrer=in-product";
688
- this._register(addDisposableListener(this.sectionLink, "click", e => {
689
- e.preventDefault();
690
- const href = this.sectionLink.href;
691
- if (href) {
692
- this.openerService.open(( URI.parse(href)));
693
- }
694
- }));
695
- const targetWindow = getWindow(this.element);
696
- const headerObserver = this._register(
697
- new DisposableResizeObserver("PluginListWidget.sectionTitleHeader", () => {
698
- if (this.lastWidth <= 0 || this.lastHeight <= 0) {
699
- return;
700
- }
701
- const headerHeight = this.sectionTitleHeader.offsetHeight;
702
- if (headerHeight === this.lastHeaderHeight) {
703
- return;
704
- }
705
- this.layout(this.lastHeight, this.lastWidth);
706
- }, targetWindow)
707
- );
708
- this._register(headerObserver.observe(this.sectionTitleHeader));
709
- this.marketplaceBackContainer = append(this.element, $(".plugin-marketplace-back-container"));
710
- this.marketplaceBackContainer.style.display = "none";
711
- const backToInstalledLabel = ( localize(7093, "Back to Installed"));
712
- this.backButtonContainer = append(this.marketplaceBackContainer, $(".list-add-button-container"));
713
- this.backButton = this._register(( new Button(this.backButtonContainer, {
714
- ...getButtonStyles({
715
- buttonSecondaryBackground: undefined,
716
- buttonSecondaryForeground: undefined,
717
- buttonSecondaryHoverBackground: undefined,
718
- buttonSecondaryBorder: undefined
719
- }),
720
- secondary: true,
721
- supportIcons: true,
722
- title: backToInstalledLabel,
723
- ariaLabel: backToInstalledLabel
724
- })));
725
- this.backButton.element.classList.add("list-add-button", "plugin-card-ghost-button");
726
- this.backButton.label = `$(${Codicon.arrowLeft.id}) ${backToInstalledLabel}`;
727
- this._register(this.backButton.onDidClick(() => this.toggleBrowseMode(false)));
728
- this.searchAndButtonContainer = append(this.element, $(".list-search-and-button-container"));
729
- const searchContainer = append(this.searchAndButtonContainer, $(".list-search-container"));
730
- this.searchInput = this._register(( new InputBox(searchContainer, this.contextViewService, {
731
- placeholder: ( localize(7094, "Type to search...")),
732
- inputBoxStyles: defaultInputBoxStyles
733
- })));
734
- this._register(this.searchInput.onDidChange(() => {
735
- this.searchQuery = this.searchInput.value;
736
- this.marketplaceCts?.dispose(true);
737
- this.marketplaceCts = undefined;
738
- if (this.browseMode) {
739
- this.delayedMarketplaceSearch.trigger(() => this.queryMarketplace());
740
- } else if (this.searchQuery.trim()) {
741
- this.delayedMarketplaceSearch.trigger(() => this.queryPluginSearch());
742
- } else {
743
- this.delayedMarketplaceSearch.cancel();
744
- this.marketplaceItems = [];
745
- this.searchInput.hideMessage();
746
- this.delayedFilter.trigger(() => this.filterPlugins());
747
- }
748
- }));
749
- this.buttonContainer = append(this.searchAndButtonContainer, $(".list-button-group"));
750
- const browseButtonContainer = append(this.buttonContainer, $(".list-add-button-container"));
751
- const browseMarketplaceLabel = ( localize(7095, "Browse Marketplace"));
752
- this.browseButton = this._register(( new Button(browseButtonContainer, {
753
- ...defaultButtonStyles,
754
- secondary: true,
755
- supportIcons: true,
756
- title: browseMarketplaceLabel,
757
- ariaLabel: browseMarketplaceLabel
758
- })));
759
- this.browseButton.element.classList.add("list-add-button");
760
- browseButtonContainer.style.display = "none";
761
- this.addButtonContainer = append(this.buttonContainer, $(".list-add-button-container"));
762
- const addPluginLabel = ( localize(7096, "Add Plugin"));
763
- this.addButtonSimple = this._register(( new Button(this.addButtonContainer, {
764
- ...defaultButtonStyles,
765
- secondary: true,
766
- title: addPluginLabel,
767
- ariaLabel: addPluginLabel
768
- })));
769
- this.addButtonSimple.element.classList.add("list-add-button");
770
- this._register(this.addButtonSimple.onDidClick(() => this.runPrimaryAddAction()));
771
- this.addButton = this._register(( new ButtonWithDropdown(this.addButtonContainer, {
772
- ...defaultButtonStyles,
773
- secondary: true,
774
- contextMenuProvider: this.contextMenuService,
775
- addPrimaryActionToDropdown: false,
776
- actions: {
777
- getActions: () => this.getAddDropdownActions()
778
- },
779
- title: addPluginLabel,
780
- ariaLabel: addPluginLabel
781
- })));
782
- this.addButton.element.classList.add("list-add-button");
783
- this._register(this.addButton.onDidClick(() => this.runPrimaryAddAction()));
784
- const updatePluginsLabel = ( localize(7097, "Update Plugins"));
785
- this.updatePluginsButton = this._register(( new Button(this.buttonContainer, {
786
- ...defaultButtonStyles,
787
- secondary: true,
788
- supportIcons: true,
789
- title: updatePluginsLabel,
790
- ariaLabel: updatePluginsLabel
791
- })));
792
- this.updatePluginsButton.element.classList.add("list-icon-button");
793
- this.updatePluginsButton.label = `$(${Codicon.refresh.id})`;
794
- this._register(this.updatePluginsButton.onDidClick(() => this.runUpdatePluginsAction()));
795
- this.emptyContainer = append(this.element, $(".mcp-empty-state"));
796
- const emptyHeader = append(this.emptyContainer, $(".empty-state-header"));
797
- this.emptyText = append(emptyHeader, $(".empty-text"));
798
- this.emptySubtext = append(this.emptyContainer, $(".empty-subtext"));
799
- this.disabledContainer = append(this.element, $(".mcp-disabled-state"));
800
- const disabledHeader = append(this.disabledContainer, $(".empty-state-header"));
801
- this.disabledIcon = append(disabledHeader, $(".empty-icon"));
802
- const disabledText = append(disabledHeader, $(".empty-text"));
803
- disabledText.textContent = ( localize(7098, "Plugins are disabled"));
804
- this.disabledMessage = append(this.disabledContainer, $(".empty-subtext"));
805
- this.cardContainer = $(".plugin-card-container");
806
- this.cardScrollable = this._register(( new DomScrollableElement(this.cardContainer, {
807
- horizontal: ScrollbarVisibility.Hidden,
808
- vertical: ScrollbarVisibility.Auto,
809
- useShadows: false
810
- })));
811
- this._register(
812
- addDisposableListener(this.cardContainer, EventType.SCROLL, () => {
813
- this.cardScrollable.setScrollPosition({
814
- scrollTop: this.cardContainer.scrollTop
815
- });
816
- })
817
- );
818
- this.cardScrollableNode = this.cardScrollable.getDomNode();
819
- this.cardScrollableNode.classList.add("plugin-card-scrollable");
820
- this.cardScrollableNode.style.display = "none";
821
- this.element.appendChild(this.cardScrollableNode);
822
- const cardResizeObserver = this._register(
823
- new DisposableResizeObserver("PluginListWidget.cardScrollable", () => this.cardScrollable.scanDomNode())
824
- );
825
- this._register(cardResizeObserver.observe(this.cardScrollableNode));
826
- this.listContainer = append(this.element, $(".mcp-list-container"));
827
- const delegate = ( new PluginItemDelegate());
828
- const groupHeaderRenderer = ( new CustomizationGroupHeaderRenderer("pluginGroupHeader", this.hoverService));
829
- const searchHeaderRenderer = ( new PluginSearchHeaderRenderer());
830
- const installedRenderer = ( new PluginInstalledItemRenderer(
831
- this.harnessService,
832
- (item, container, actions, disposables) => this.renderInstalledListActions(item, container, actions, disposables)
833
- ));
834
- const remoteRenderer = ( new PluginRemoteItemRenderer(
835
- (item, actions, disposables) => this.renderRemoteListActions(item, actions, disposables)
836
- ));
837
- const marketplaceRenderer = ( new PluginMarketplaceItemRenderer(
838
- this.pluginInstallService,
839
- this.agentPluginService,
840
- this.pluginMarketplaceService,
841
- this.notificationService
842
- ));
843
- this.list = this._register(
844
- this.instantiationService.createInstance(WorkbenchList, "PluginManagementList", this.listContainer, delegate, [
845
- groupHeaderRenderer,
846
- searchHeaderRenderer,
847
- installedRenderer,
848
- remoteRenderer,
849
- marketplaceRenderer
850
- ], {
851
- multipleSelectionSupport: false,
852
- setRowLineHeight: false,
853
- horizontalScrolling: false,
854
- accessibilityProvider: {
855
- getAriaLabel: element => {
856
- if (element.type === "group-header") {
857
- return localize(
858
- 7099,
859
- "{0}, {1} items, {2}",
860
- element.label,
861
- element.count,
862
- element.collapsed ? ( localize(7100, "collapsed")) : ( localize(7101, "expanded"))
863
- );
864
- }
865
- if (element.type === "search-header") {
866
- return element.label;
867
- }
868
- const name = formatDisplayName(element.item.name);
869
- const description = element.item.description ? truncateToFirstLine(element.item.description) : undefined;
870
- const nameAndDesc = description ? ( localize(7102, "{0}. {1}", name, description)) : name;
871
- if (element.type === "plugin-item") {
872
- const enabled = isContributionEnabled(element.item.plugin.enablement.get());
873
- const metadata = getInstalledPluginMetadata(element.item);
874
- const withMetadata = metadata ? ( localize(7103, "{0}. {1}", nameAndDesc, metadata)) : nameAndDesc;
875
- return enabled ? ( localize(7104, "{0}. Enabled", withMetadata)) : ( localize(7105, "{0}. Disabled", withMetadata));
876
- }
877
- if (element.type === "remote-item") {
878
- const status = getRemotePluginStatusLabel(element.item);
879
- return status ? ( localize(7106, "{0}. Remote agent host. Status: {1}", nameAndDesc, status)) : ( localize(7107, "{0}. Remote agent host", nameAndDesc));
880
- }
881
- if (element.type === "marketplace-item") {
882
- const recommended = ( this.pluginMarketplaceService.recommendedPlugins.get().has(getMarketplaceRecommendationKey(element.item)));
883
- const label = ( localize(7108, "{0}. From {1}", nameAndDesc, element.item.marketplace));
884
- return recommended ? ( localize(7109, "{0}. Recommended for this workspace", label)) : label;
885
- }
886
- return nameAndDesc;
887
- },
888
- getWidgetAriaLabel: () => {
889
- return localize(7110, "Plugins");
890
- }
891
- },
892
- openOnSingleClick: true,
893
- identityProvider: {
894
- getId(element) {
895
- if (element.type === "group-header") {
896
- return element.id;
897
- }
898
- if (element.type === "search-header") {
899
- return element.id;
900
- }
901
- if (element.type === "marketplace-item") {
902
- return `marketplace-${element.item.marketplaceReference.canonicalId}/${element.item.source}`;
903
- }
904
- if (element.type === "remote-item") {
905
- return element.item.itemKey ?? `remote-${element.item.groupKey ?? "default"}-${( element.item.uri.toString())}`;
906
- }
907
- return ( element.item.plugin.uri.toString());
908
- }
909
- }
910
- })
911
- );
912
- this._register(this.list.onDidOpen(e => {
913
- if (e.element) {
914
- if (e.element.type === "group-header") {
915
- this.toggleGroup(e.element);
916
- } else if (e.element.type === "search-header")
917
- ; else if (e.element.type === "plugin-item") {
918
- this._onDidSelectPlugin.fire(e.element.item);
919
- } else if (e.element.type === "remote-item")
920
- ; else if (e.element.type === "marketplace-item") {
921
- this._onDidSelectPlugin.fire(e.element.item);
922
- }
923
- }
924
- }));
925
- this._register(this.list.onDidChangeFocus(event => {
926
- const index = event.indexes[0] ?? -1;
927
- installedRenderer.setFocusedIndex(index);
928
- remoteRenderer.setFocusedIndex(index);
929
- marketplaceRenderer.setFocusedIndex(index);
930
- }));
931
- this._register(this.list.onContextMenu(e => this.onContextMenu(e)));
932
- this._register(autorun(reader => {
933
- this.agentPluginService.plugins.read(reader);
934
- void this.refresh();
935
- }));
936
- this._register(this.pluginMarketplaceService.onDidChangeMarketplaces(() => {
937
- this.marketplaceItems = [];
938
- this.marketplaceSnapshotCts?.dispose(true);
939
- this.marketplaceSnapshot.reset();
940
- void this.refresh();
941
- }));
942
- this._register(autorun(reader => {
943
- this.pluginMarketplaceService.recommendedPlugins.read(reader);
944
- if (this.browseMode) {
945
- this.updateMarketplaceList();
946
- } else if (!this.searchQuery.trim()) {
947
- this.renderPluginHome();
948
- }
949
- }));
950
- this._register(autorun(reader => {
951
- this.harnessService.activeHarness.read(reader);
952
- this.updateToolbarActions();
953
- if (!this.browseMode) {
954
- void this.refresh();
955
- }
956
- }));
957
- const itemProviderChangeDisposable = this._register(( new MutableDisposable()));
958
- this._register(autorun(reader => {
959
- this.harnessService.activeHarness.read(reader);
960
- const itemProvider = this.harnessService.getActiveDescriptor().itemProvider;
961
- if (itemProvider) {
962
- itemProviderChangeDisposable.value = itemProvider.onDidChange(() => {
963
- if (!this.browseMode) {
964
- void this.refresh();
965
- }
966
- });
967
- } else {
968
- itemProviderChangeDisposable.clear();
969
- }
970
- }));
971
- this.updateToolbarActions();
972
- void this.refresh();
973
- }
974
- async refresh() {
975
- if (this.browseMode) {
976
- await this.queryMarketplace();
977
- } else if (this.searchQuery.trim()) {
978
- await this.queryPluginSearch();
979
- } else {
980
- this.filterPlugins();
981
- }
982
- }
983
- updateAccessState() {
984
- const inspect = this.configurationService.inspect(ChatConfiguration.PluginsEnabled);
985
- const value = inspect.value ?? inspect.defaultValue;
986
- const disabled = value === false;
987
- const policyLocked = inspect.policyValue === false;
988
- this.element.classList.toggle("access-disabled", disabled);
989
- if (disabled) {
990
- this.disabledIcon.className = "empty-icon";
991
- this.disabledIcon.classList.add(
992
- ...ThemeIcon.asClassNameArray(policyLocked ? Codicon.shield : Codicon.plug)
993
- );
994
- clearNode(this.disabledMessage);
995
- this.disabledLinkListener.clear();
996
- if (policyLocked) {
997
- this.disabledMessage.textContent = ( localize(
998
- 7111,
999
- "Plugin integration in chat is disabled by your organization. Contact your organization administrator for more information."
1000
- ));
1001
- } else {
1002
- this.disabledMessage.appendChild(createTextNode(( localize(7112, "Plugins are disabled in settings. "))));
1003
- const link = append(this.disabledMessage, $("a.mcp-disabled-settings-link"));
1004
- link.textContent = ( localize(7113, "Configure in settings."));
1005
- link.href = "#";
1006
- link.setAttribute("role", "button");
1007
- this.disabledLinkListener.value = addDisposableListener(link, "click", e => {
1008
- e.preventDefault();
1009
- this.commandService.executeCommand("workbench.action.openSettings", `@id:${ChatConfiguration.PluginsEnabled}`);
1010
- });
1011
- }
1012
- }
1013
- }
1014
- get pluginActions() {
1015
- return this.harnessService.getActiveDescriptor().pluginActions ?? [];
1016
- }
1017
- formatActionLabel(action, iconOnly = false) {
1018
- if (!action.icon) {
1019
- return action.label;
1020
- }
1021
- return iconOnly ? `$(${action.icon.id})` : `$(${action.icon.id}) ${action.label}`;
1022
- }
1023
- updateToolbarActions() {
1024
- const browseMarketplaceAvailable = this.isBrowseMarketplaceAvailable();
1025
- if (!browseMarketplaceAvailable && this.browseMode) {
1026
- this.toggleBrowseMode(false);
1027
- }
1028
- this.marketplaceBackContainer.style.display = this.browseMode ? "" : "none";
1029
- this.browseButton.element.parentElement.style.display = "none";
1030
- this.browseButton.label = `$(${Codicon.library.id}) ${( localize(7095, "Browse Marketplace"))}`;
1031
- this.browseButton.enabled = browseMarketplaceAvailable;
1032
- const browseTitle = browseMarketplaceAvailable ? ( localize(7095, "Browse Marketplace")) : ( localize(7114, "Browse Marketplace is not available in VS Code for the Web."));
1033
- this.browseButton.setTitle(browseTitle);
1034
- this.browseButton.element.setAttribute("aria-label", browseTitle);
1035
- this.addButton.element.style.display = "none";
1036
- this.addButtonSimple.element.style.display = "none";
1037
- this.updatePluginsButton.element.style.display = "none";
1038
- this.updateInstalledCreateButtonLabel();
1039
- }
1040
- updateInstalledCreateButtonLabel() {
1041
- if (this.installedCreateButton) {
1042
- this.installedCreateButton.label = this.narrowLayout ? ( localize(7115, "Create")) : ( localize(7116, "Create Plugin"));
1043
- }
1044
- }
1045
- updateResponsiveLayout(width) {
1046
- const narrow = width < 500;
1047
- const wide = width >= 600;
1048
- if (this.narrowLayout === narrow) {
1049
- if (this.wideLayout !== wide) {
1050
- this.wideLayout = wide;
1051
- this.element.classList.toggle("wide-layout", wide);
1052
- }
1053
- return;
1054
- }
1055
- this.narrowLayout = narrow;
1056
- this.wideLayout = wide;
1057
- this.element.classList.toggle("narrow-layout", narrow);
1058
- this.element.classList.toggle("wide-layout", wide);
1059
- this.updateToolbarActions();
1060
- }
1061
- isBrowseMarketplaceAvailable() {
1062
- return this.marketplaceBrowsingAvailable;
1063
- }
1064
- buildAddActions() {
1065
- return [...this.pluginActions, {
1066
- id: "plugin.installFromSource",
1067
- label: ( localize(7117, "Install from Source")),
1068
- tooltip: ( localize(7118, "Install Plugin from Source")),
1069
- run: async () => {
1070
- const installed = await this.commandService.executeCommand("workbench.action.chat.installPluginFromSource", {
1071
- skipReveal: true
1072
- });
1073
- if (installed && this.browseMode) {
1074
- this.exitBrowseMode();
1075
- }
1076
- }
1077
- }];
1078
- }
1079
- getAddDropdownActions() {
1080
- this.addDropdownActions.clear();
1081
- return ( this.buildAddActions().slice(1).map((action, index) => this.addDropdownActions.add(( new Action(
1082
- `plugin_add_${index}`,
1083
- this.formatActionLabel(action),
1084
- undefined,
1085
- action.enabled !== false,
1086
- () => this.runPluginAction(action)
1087
- )))));
1088
- }
1089
- async runPrimaryAddAction() {
1090
- const [primary] = this.buildAddActions();
1091
- if (primary) {
1092
- await this.runPluginAction(primary);
1093
- }
1094
- }
1095
- async runCreatePluginAction() {
1096
- await this.commandService.executeCommand("workbench.action.chat.createPlugin");
1097
- }
1098
- async runInstallFromSourceAction() {
1099
- await this.commandService.executeCommand("workbench.action.chat.installPluginFromSource");
1100
- }
1101
- async runUpdatePluginsAction(button = this.updatePluginsButton) {
1102
- button.enabled = false;
1103
- try {
1104
- await this.commandService.executeCommand(UpdateAgentPluginsCommandId);
1105
- } finally {
1106
- button.enabled = true;
1107
- }
1108
- }
1109
- async runPluginAction(action) {
1110
- if (action.enabled !== false) {
1111
- await action.run();
1112
- }
1113
- }
1114
- showCardSurface() {
1115
- this.emptyContainer.style.display = "none";
1116
- this.listContainer.style.display = "none";
1117
- this.cardScrollableNode.style.display = "";
1118
- }
1119
- showEmptySurface() {
1120
- this.cardScrollableNode.style.display = "none";
1121
- this.listContainer.style.display = "none";
1122
- this.emptyContainer.style.display = "flex";
1123
- }
1124
- createCardScrollContent(...classNames) {
1125
- const content = append(this.cardContainer, $(".plugin-card-scroll.plugin-card-scroll-content"));
1126
- content.classList.add(...classNames);
1127
- this.sectionLayoutContainer = classNames.includes("distributed-section-layout") ? content : undefined;
1128
- const resizeObserver = this.cardDisposables.add(new DisposableResizeObserver(
1129
- "PluginListWidget.cardScrollContent",
1130
- () => this.schedulePluginSectionLayout()
1131
- ));
1132
- this.cardDisposables.add(resizeObserver.observe(content));
1133
- return content;
1134
- }
1135
- addSurfaceActivation(surface, label, callback, ...classNames) {
1136
- const primaryAction = createCustomizationCardPrimaryAction(surface, label, ...classNames);
1137
- this.rememberCardFocusElement(primaryAction);
1138
- this.cardDisposables.add(addDisposableListener(primaryAction, "click", callback));
1139
- return primaryAction;
1140
- }
1141
- renderCardSection(parent, title, description, className, count, renderActions) {
1142
- const section = append(parent, $(".plugin-card-section"));
1143
- if (className) {
1144
- section.classList.add(className);
1145
- }
1146
- const header = append(section, $(".plugin-card-section-header"));
1147
- const text = append(header, $(".plugin-card-section-text"));
1148
- const headingRow = append(text, $(".plugin-card-section-heading-row"));
1149
- const heading = append(headingRow, $("h3.plugin-card-section-title"));
1150
- heading.textContent = title;
1151
- if (count !== undefined) {
1152
- const countEl = append(headingRow, $(".plugin-card-section-count"));
1153
- countEl.textContent = String(count);
1154
- }
1155
- if (description) {
1156
- const descriptionEl = append(text, $(".plugin-card-section-description"));
1157
- descriptionEl.textContent = description;
1158
- }
1159
- renderActions?.(header);
1160
- const list = append(section, $(".plugin-card-grid"));
1161
- const sectionKey = className ?? title;
1162
- list.dataset.virtualizedSectionKey = sectionKey;
1163
- const collapsedSections = this.collapsedSections ??= ( new Set());
1164
- setupCollapsibleSection(headingRow, list, title, this.cardDisposables, ( collapsedSections.has(sectionKey)), collapsed => {
1165
- if (collapsed) {
1166
- collapsedSections.add(sectionKey);
1167
- } else {
1168
- collapsedSections.delete(sectionKey);
1169
- }
1170
- this.schedulePluginSectionLayout();
1171
- });
1172
- this.cardListControllers.set(list, this.cardDisposables.add(( new CustomizationCardListController(list, title))));
1173
- return list;
1174
- }
1175
- createPluginSectionList(container, label, entries, showRecommendedBadge = true) {
1176
- const key = container.dataset.virtualizedSectionKey ?? label;
1177
- const delegate = ( new PluginItemDelegate());
1178
- container.style.height = `${entries.length > 0 ? delegate.getHeight(entries[0]) : PLUGIN_ITEM_HEIGHT}px`;
1179
- container.classList.add("virtualized-section-list");
1180
- this.cardListControllers.get(container)?.dispose();
1181
- this.cardListControllers.delete(container);
1182
- container.removeAttribute("role");
1183
- container.removeAttribute("aria-label");
1184
- const installedRenderer = ( new PluginInstalledItemRenderer(
1185
- this.harnessService,
1186
- (item, row, actions, disposables) => this.renderInstalledListActions(item, row, actions, disposables),
1187
- false
1188
- ));
1189
- const remoteRenderer = ( new PluginRemoteItemRenderer(
1190
- (item, actions, disposables) => this.renderRemoteListActions(item, actions, disposables)
1191
- ));
1192
- const marketplaceRenderer = ( new PluginMarketplaceItemRenderer(
1193
- this.pluginInstallService,
1194
- this.agentPluginService,
1195
- this.pluginMarketplaceService,
1196
- this.notificationService,
1197
- showRecommendedBadge
1198
- ));
1199
- const list = this.cardDisposables.add(this.instantiationService.createInstance(
1200
- WorkbenchList,
1201
- `PluginManagementList.${label}`,
1202
- container,
1203
- delegate,
1204
- [installedRenderer, remoteRenderer, marketplaceRenderer],
1205
- {
1206
- multipleSelectionSupport: false,
1207
- setRowLineHeight: false,
1208
- horizontalScrolling: false,
1209
- accessibilityProvider: {
1210
- getAriaLabel: element => this.getPluginEntryAriaLabel(element),
1211
- getWidgetAriaLabel: () => label,
1212
- getSetSize: (_element, _index, listLength) => listLength,
1213
- getPosInSet: (_element, index) => index + 1
1214
- },
1215
- openOnSingleClick: true,
1216
- identityProvider: {
1217
- getId: element => this.getPluginEntryId(element)
1218
- }
1219
- }
1220
- ));
1221
- list.splice(0, 0, entries);
1222
- list.scrollTop = this.sectionScrollPositions.get(key) ?? 0;
1223
- this.cardDisposables.add(list.onDidOpen(event => {
1224
- const entry = event.element;
1225
- if (entry?.type === "plugin-item" || entry?.type === "marketplace-item") {
1226
- this._onDidSelectPlugin.fire(entry.item);
1227
- }
1228
- }));
1229
- this.cardDisposables.add(list.onContextMenu(event => this.onContextMenu(event)));
1230
- this.cardDisposables.add(list.onDidChangeFocus(event => {
1231
- const index = event.indexes[0] ?? -1;
1232
- installedRenderer.setFocusedIndex(index);
1233
- remoteRenderer.setFocusedIndex(index);
1234
- marketplaceRenderer.setFocusedIndex(index);
1235
- }));
1236
- this.cardDisposables.add(list.onDidFocus(() => {
1237
- if (list.getFocus().length === 0 && entries.length > 0) {
1238
- list.setFocus([0]);
1239
- }
1240
- }));
1241
- this.sectionLists.push({
1242
- list,
1243
- entries,
1244
- container,
1245
- key
1246
- });
1247
- }
1248
- captureSectionScrollPositions() {
1249
- for (const section of this.sectionLists) {
1250
- this.sectionScrollPositions.set(section.key, section.list.scrollTop);
1251
- }
1252
- }
1253
- getPluginEntryAriaLabel(element) {
1254
- if (element.type === "group-header" || element.type === "search-header") {
1255
- return element.label;
1256
- }
1257
- const name = formatDisplayName(element.item.name);
1258
- const description = element.item.description ? truncateToFirstLine(element.item.description) : undefined;
1259
- const nameAndDescription = description ? ( localize(7102, "{0}. {1}", name, description)) : name;
1260
- if (element.type === "plugin-item") {
1261
- const metadata = getInstalledPluginMetadata(element.item);
1262
- const withMetadata = metadata ? ( localize(7103, "{0}. {1}", nameAndDescription, metadata)) : nameAndDescription;
1263
- return derived(
1264
- this,
1265
- reader => isContributionEnabled(element.item.plugin.enablement.read(reader)) ? ( localize(7104, "{0}. Enabled", withMetadata)) : ( localize(7105, "{0}. Disabled", withMetadata))
1266
- );
1267
- }
1268
- if (element.type === "remote-item") {
1269
- const statusLabel = getRemotePluginStatusLabel(element.item);
1270
- return statusLabel ? ( localize(
1271
- 7106,
1272
- "{0}. Remote agent host. Status: {1}",
1273
- nameAndDescription,
1274
- statusLabel
1275
- )) : ( localize(7107, "{0}. Remote agent host", nameAndDescription));
1276
- }
1277
- const marketplaceLabel = ( localize(7108, "{0}. From {1}", nameAndDescription, element.item.marketplace));
1278
- return ( this.pluginMarketplaceService.recommendedPlugins.get().has(getMarketplaceRecommendationKey(element.item))) ? ( localize(7109, "{0}. Recommended for this workspace", marketplaceLabel)) : marketplaceLabel;
1279
- }
1280
- getPluginEntryId(element) {
1281
- if (element.type === "group-header" || element.type === "search-header") {
1282
- return element.id;
1283
- }
1284
- if (element.type === "marketplace-item") {
1285
- return `marketplace-${element.item.marketplaceReference.canonicalId}/${element.item.source}`;
1286
- }
1287
- if (element.type === "remote-item") {
1288
- return element.item.itemKey ?? `remote-${element.item.groupKey ?? "default"}-${( element.item.uri.toString())}`;
1289
- }
1290
- return ( element.item.plugin.uri.toString());
1291
- }
1292
- renderInstalledListActions(item, row, actions, disposables) {
1293
- let renderedState = item.plugin.enablement.get();
1294
- const toggle = disposables.add(( new Switch({
1295
- ariaLabel: item.name,
1296
- checked: isContributionEnabled(renderedState)
1297
- })));
1298
- append(actions, toggle.domNode);
1299
- disposables.add(
1300
- addDisposableGenericMouseDownListener(toggle.domNode, event => EventHelper.stop(event, true))
1301
- );
1302
- const update = (state, blocked) => {
1303
- renderedState = state;
1304
- const checked = isContributionEnabled(state);
1305
- const workspaceScope = state === ContributionEnablementState.EnabledWorkspace || state === ContributionEnablementState.DisabledWorkspace;
1306
- const toggleLabel = checked ? (workspaceScope ? ( localize(7119, "Exclude {0} from Workspace", item.name)) : ( localize(7120, "Exclude {0} from Profile", item.name))) : (workspaceScope ? ( localize(7121, "Include {0} in Workspace", item.name)) : ( localize(7122, "Include {0} for Profile", item.name)));
1307
- toggle.disabled = blocked;
1308
- toggle.checked = checked;
1309
- toggle.setAriaLabel(blocked ? ( localize(7123, "{0} is managed by your organization", item.name)) : toggleLabel, blocked ? ( localize(7124, "This plugin is managed by your organization.")) : toggleLabel);
1310
- row.classList.toggle("disabled", !checked || blocked);
1311
- };
1312
- disposables.add(autorun(reader => update(
1313
- item.plugin.enablement.read(reader),
1314
- item.plugin.policyBlocked?.read(reader) === true
1315
- )));
1316
- disposables.add(toggle.onChange(() => {
1317
- const nextState = getToggledPluginEnablementState(renderedState);
1318
- update(nextState, isPluginPolicyBlocked(item.plugin));
1319
- this.agentPluginService.enablementModel.setEnabled(( item.plugin.uri.toString()), nextState);
1320
- status(( localize(7125, "{0}. {1}.", item.name, getPluginInclusionLabel(item.plugin))));
1321
- }));
1322
- const more = disposables.add(( new Button(actions, {
1323
- ...getButtonStyles({
1324
- buttonSecondaryBackground: undefined,
1325
- buttonSecondaryBorder: undefined
1326
- }),
1327
- secondary: true,
1328
- supportIcons: true,
1329
- ariaLabel: ( localize(7126, "More actions for {0}", item.name))
1330
- })));
1331
- more.element.classList.add("plugin-card-icon-button");
1332
- more.label = `$(${Codicon.ellipsis.id})`;
1333
- disposables.add(
1334
- addDisposableGenericMouseDownListener(more.element, event => EventHelper.stop(event, true))
1335
- );
1336
- disposables.add(more.onDidClick(event => {
1337
- EventHelper.stop(event, true);
1338
- this.showInstalledPluginActions(item, more.element);
1339
- }));
1340
- }
1341
- renderRemoteListActions(item, actions, disposables) {
1342
- if (!item.actions?.length) {
1343
- actions.style.display = "none";
1344
- return;
1345
- }
1346
- actions.style.display = "";
1347
- const more = disposables.add(( new Button(actions, {
1348
- ...getButtonStyles({
1349
- buttonSecondaryBackground: undefined,
1350
- buttonSecondaryBorder: undefined
1351
- }),
1352
- secondary: true,
1353
- supportIcons: true,
1354
- ariaLabel: ( localize(7126, "More actions for {0}", item.name))
1355
- })));
1356
- more.element.classList.add("plugin-card-icon-button");
1357
- more.label = `$(${Codicon.ellipsis.id})`;
1358
- disposables.add(
1359
- addDisposableGenericMouseDownListener(more.element, event => EventHelper.stop(event, true))
1360
- );
1361
- disposables.add(more.onDidClick(event => {
1362
- EventHelper.stop(event, true);
1363
- this.showRemotePluginActions(item, more.element);
1364
- }));
1365
- }
1366
- layoutPluginSectionLists() {
1367
- const delegate = ( new PluginItemDelegate());
1368
- const content = this.sectionLayoutContainer;
1369
- if (!content) {
1370
- return;
1371
- }
1372
- const heights = layoutVirtualizedSections(content, ( this.sectionLists.map(section => ({
1373
- container: section.container,
1374
- contentHeight: section.entries.reduce((height, entry) => height + delegate.getHeight(entry), 0),
1375
- minimumHeight: getVirtualizedSectionMinimumHeight(section.entries, entry => delegate.getHeight(entry))
1376
- }))));
1377
- for (let index = 0; index < this.sectionLists.length; index++) {
1378
- const section = this.sectionLists[index];
1379
- const height = heights[index];
1380
- layoutVirtualizedSectionList(
1381
- section.list,
1382
- section.container,
1383
- height,
1384
- section.container.clientWidth || undefined
1385
- );
1386
- }
1387
- }
1388
- schedulePluginSectionLayout() {
1389
- this.pendingSectionLayout.value = scheduleAtNextAnimationFrame(getWindow(this.element), () => {
1390
- this.layoutPluginSectionLists();
1391
- this.cardScrollable.scanDomNode();
1392
- });
1393
- }
1394
- renderPluginHome() {
1395
- if (this.browseMode || this.searchQuery.trim()) {
1396
- return;
1397
- }
1398
- this.captureSectionScrollPositions();
1399
- this.cardDisposables.clear();
1400
- this.sectionLists = [];
1401
- this.installedCreateButton = undefined;
1402
- this.firstCardFocusElement = undefined;
1403
- clearNode(this.cardContainer);
1404
- this.showCardSurface();
1405
- const content = this.createCardScrollContent("distributed-section-layout");
1406
- const installedPlugins = this.installedItems;
1407
- const hasMarketplaceInstalledPlugins = this.pluginMarketplaceService.installedPlugins.get().length > 0;
1408
- if (shouldLoadPluginMarketplaceSnapshot(
1409
- this.visible,
1410
- this.marketplaceSnapshot.state,
1411
- this.isBrowseMarketplaceAvailable()
1412
- )) {
1413
- void this.queryMarketplaceSnapshot();
1414
- }
1415
- const installedList = this.renderCardSection(content, ( localize(7127, "Installed")), undefined, "installed-plugins-section", installedPlugins.length, header => this.renderInstalledSectionActions(header, hasMarketplaceInstalledPlugins));
1416
- installedList.classList.add("plugin-inventory-list");
1417
- if (installedPlugins.length === 0) {
1418
- const empty = append(installedList, $(".plugin-inventory-empty"));
1419
- empty.textContent = ( localize(7128, "No plugins are installed."));
1420
- } else {
1421
- this.createPluginSectionList(installedList, ( localize(7127, "Installed")), ( installedPlugins.map(item => ({
1422
- type: "plugin-item",
1423
- item
1424
- }))));
1425
- }
1426
- const installedNames = ( new Set(( this.installedItems.map(item => item.name.toLowerCase()))));
1427
- const remoteItems = this.remoteItems.filter(
1428
- item => item.groupKey !== "remote-client" && (!item.name || !( installedNames.has(item.name.toLowerCase())))
1429
- );
1430
- if (remoteItems.length > 0) {
1431
- const remoteList = this.renderCardSection(content, ( localize(7129, "Remote session plugins")), ( localize(7130, "Plugins configured directly on the active remote agent host.")), "remote-plugins-section", remoteItems.length);
1432
- remoteList.classList.add("plugin-inventory-list");
1433
- this.createPluginSectionList(remoteList, ( localize(7129, "Remote session plugins")), ( remoteItems.map(item => ({
1434
- type: "remote-item",
1435
- item
1436
- }))));
1437
- }
1438
- this.renderAvailablePlugins(
1439
- content,
1440
- this.getUninstalledMarketplaceItems(this.marketplaceSnapshot.items),
1441
- true
1442
- );
1443
- this.schedulePluginSectionLayout();
1444
- }
1445
- renderInstalledSectionActions(header, hasInstalledPlugins) {
1446
- const actions = append(header, $(".plugin-card-section-actions"));
1447
- const createLabel = ( localize(7116, "Create Plugin"));
1448
- const create = this.installedCreateButton = this.cardDisposables.add(( new Button(actions, {
1449
- ...defaultButtonStyles,
1450
- secondary: true,
1451
- ariaLabel: createLabel
1452
- })));
1453
- create.element.classList.add("plugin-installed-action");
1454
- this.updateInstalledCreateButtonLabel();
1455
- this.rememberCardFocusElement(create.element);
1456
- this.cardDisposables.add(create.onDidClick(() => this.runCreatePluginAction()));
1457
- if (hasInstalledPlugins) {
1458
- const updateLabel = ( localize(7131, "Check for and apply updates"));
1459
- const update = this.cardDisposables.add(( new Button(actions, {
1460
- ...defaultButtonStyles,
1461
- secondary: true,
1462
- supportIcons: true,
1463
- title: updateLabel,
1464
- ariaLabel: updateLabel
1465
- })));
1466
- update.element.classList.add("plugin-card-icon-button", "plugin-update-button");
1467
- update.label = `$(${Codicon.refresh.id})`;
1468
- this.cardDisposables.add(update.onDidClick(() => this.runUpdatePluginsAction(update)));
1469
- }
1470
- }
1471
- renderAvailablePlugins(
1472
- parent,
1473
- items,
1474
- showActions,
1475
- title = ( localize(7132, "Available")),
1476
- description = ( localize(7133, "Browse and install plugins from your marketplaces."))
1477
- ) {
1478
- const availableList = this.renderCardSection(
1479
- parent,
1480
- title,
1481
- description,
1482
- "available-plugins-section",
1483
- items.length,
1484
- showActions ? header => this.renderAvailableSectionActions(header) : undefined
1485
- );
1486
- availableList.classList.add("plugin-inventory-list");
1487
- if (items.length === 0) {
1488
- if (this.marketplaceSnapshot.state === "loading") {
1489
- renderVirtualizedSectionLoadingPlaceholder(availableList, ( localize(7134, "Loading marketplace...")), PLUGIN_MARKETPLACE_ITEM_HEIGHT);
1490
- } else {
1491
- const empty = append(availableList, $(".plugin-inventory-empty"));
1492
- empty.textContent = ( localize(7135, "No marketplace plugins are available."));
1493
- }
1494
- this.cardListControllers.get(availableList)?.finalize();
1495
- return;
1496
- }
1497
- this.createPluginSectionList(availableList, title, ( items.map(item => ({
1498
- type: "marketplace-item",
1499
- item
1500
- }))));
1501
- }
1502
- renderAvailableSectionActions(header) {
1503
- const actions = append(header, $(".plugin-card-section-actions"));
1504
- const installLabel = ( localize(7117, "Install from Source"));
1505
- const installTooltip = ( localize(7118, "Install Plugin from Source"));
1506
- if (this.pluginActions.length > 0) {
1507
- const install = this.cardDisposables.add(( new ButtonWithDropdown(actions, {
1508
- ...defaultButtonStyles,
1509
- secondary: true,
1510
- contextMenuProvider: this.contextMenuService,
1511
- addPrimaryActionToDropdown: false,
1512
- actions: {
1513
- getActions: () => {
1514
- this.addDropdownActions.clear();
1515
- return ( this.pluginActions.map((action, index) => this.addDropdownActions.add(( new Action(
1516
- `plugin_provider_add_${index}`,
1517
- this.formatActionLabel(action),
1518
- undefined,
1519
- action.enabled !== false,
1520
- () => this.runPluginAction(action)
1521
- )))));
1522
- }
1523
- },
1524
- title: installTooltip,
1525
- ariaLabel: installTooltip
1526
- })));
1527
- install.element.classList.add("plugin-available-action");
1528
- install.label = installLabel;
1529
- this.cardDisposables.add(install.onDidClick(() => this.runInstallFromSourceAction()));
1530
- } else {
1531
- const install = this.cardDisposables.add(( new Button(actions, {
1532
- ...defaultButtonStyles,
1533
- secondary: true,
1534
- title: installTooltip,
1535
- ariaLabel: installTooltip
1536
- })));
1537
- install.element.classList.add("plugin-available-action");
1538
- install.label = installLabel;
1539
- this.cardDisposables.add(install.onDidClick(() => this.runInstallFromSourceAction()));
1540
- }
1541
- }
1542
- appendInstalledPluginRow(parent, item) {
1543
- const row = append(parent, $(".plugin-list-item.plugin-home-row.plugin-installed-item"));
1544
- const primaryAction = this.addSurfaceActivation(row, ( localize(7136, "{0}. {1}", item.name, getPluginInclusionLabel(item.plugin))), () => this._onDidSelectPlugin.fire(item));
1545
- const details = append(primaryAction, $(".plugin-list-item-details"));
1546
- const nameRow = append(details, $(".plugin-list-item-name-row"));
1547
- const name = append(nameRow, $(".plugin-list-item-name"));
1548
- name.textContent = formatDisplayName(item.name);
1549
- name.title = item.name;
1550
- if (!item.marketplace) {
1551
- const source = append(nameRow, $(".inline-badge.plugin-source-badge"));
1552
- source.textContent = ( localize(7063, "Local"));
1553
- source.title = ( localize(7064, "Installed from a local source"));
1554
- }
1555
- const description = append(details, $(".plugin-list-item-description"));
1556
- description.textContent = truncateToFirstLine(item.description || ( localize(7137, "No description provided.")));
1557
- const metadata = append(details, $(".plugin-list-item-metadata"));
1558
- metadata.textContent = getInstalledPluginMetadata(item);
1559
- metadata.style.display = metadata.textContent ? "" : "none";
1560
- const actions = append(row, $(".plugin-list-item-action"));
1561
- const toggle = this.appendInstalledPluginToggle(actions, row, primaryAction, item);
1562
- const more = this.cardDisposables.add(( new Button(actions, {
1563
- ...getButtonStyles({
1564
- buttonSecondaryBackground: undefined,
1565
- buttonSecondaryBorder: undefined
1566
- }),
1567
- secondary: true,
1568
- supportIcons: true,
1569
- ariaLabel: ( localize(7126, "More actions for {0}", item.name))
1570
- })));
1571
- more.element.classList.add("plugin-card-icon-button");
1572
- more.label = `$(${Codicon.ellipsis.id})`;
1573
- this.cardDisposables.add(more.onDidClick(() => this.showInstalledPluginActions(item, more.element)));
1574
- this.cardListControllers.get(parent)?.addItem({
1575
- row,
1576
- primaryAction,
1577
- label: item.name,
1578
- actions: [toggle, more.element],
1579
- contextMenuAction: more.element
1580
- });
1581
- }
1582
- appendInstalledPluginToggle(parent, row, primaryAction, item) {
1583
- let renderedState = item.plugin.enablement.get();
1584
- const toggle = this.cardDisposables.add(( new Switch({
1585
- ariaLabel: item.name
1586
- })));
1587
- const switchElement = toggle.domNode;
1588
- append(parent, switchElement);
1589
- const update = (state, blocked) => {
1590
- renderedState = state;
1591
- const checked = isContributionEnabled(state);
1592
- const workspaceScope = state === ContributionEnablementState.EnabledWorkspace || state === ContributionEnablementState.DisabledWorkspace;
1593
- const toggleLabel = checked ? (workspaceScope ? ( localize(7119, "Exclude {0} from Workspace", item.name)) : ( localize(7120, "Exclude {0} from Profile", item.name))) : (workspaceScope ? ( localize(7121, "Include {0} in Workspace", item.name)) : ( localize(7122, "Include {0} for Profile", item.name)));
1594
- const accessibleLabel = blocked ? ( localize(7123, "{0} is managed by your organization", item.name)) : toggleLabel;
1595
- toggle.disabled = blocked;
1596
- toggle.checked = checked;
1597
- toggle.setAriaLabel(accessibleLabel, blocked ? ( localize(7124, "This plugin is managed by your organization.")) : toggleLabel);
1598
- row.classList.toggle("disabled", !checked || blocked);
1599
- primaryAction.setAttribute("aria-label", ( localize(7136, "{0}. {1}", item.name, getPluginInclusionLabel(item.plugin))));
1600
- };
1601
- this.cardDisposables.add(autorun(reader => {
1602
- const state = item.plugin.enablement.read(reader);
1603
- const blocked = item.plugin.policyBlocked?.read(reader) === true;
1604
- update(state, blocked);
1605
- }));
1606
- this.cardDisposables.add(toggle.onChange(() => {
1607
- const nextState = getToggledPluginEnablementState(renderedState);
1608
- update(nextState, isPluginPolicyBlocked(item.plugin));
1609
- this.agentPluginService.enablementModel.setEnabled(( item.plugin.uri.toString()), nextState);
1610
- status(( localize(7125, "{0}. {1}.", item.name, getPluginInclusionLabel(item.plugin))));
1611
- }));
1612
- return switchElement;
1613
- }
1614
- appendRemotePluginRow(parent, item) {
1615
- const row = append(parent, $(".plugin-list-item.plugin-home-row.plugin-remote-item"));
1616
- row.setAttribute("role", "listitem");
1617
- row.setAttribute("aria-label", ( localize(7138, "{0}. Remote plugin", item.name)));
1618
- row.classList.toggle("disabled", item.enabled === false);
1619
- const details = append(row, $(".plugin-list-item-details"));
1620
- const nameRow = append(details, $(".plugin-list-item-name-row"));
1621
- const name = append(nameRow, $(".plugin-list-item-name"));
1622
- name.textContent = formatDisplayName(item.name);
1623
- const source = append(nameRow, $(".inline-badge.plugin-source-badge"));
1624
- source.textContent = ( localize(7139, "Remote"));
1625
- source.title = ( localize(7067, "Remote agent host"));
1626
- const description = append(details, $(".plugin-list-item-description"));
1627
- description.textContent = item.description || ( localize(7137, "No description provided."));
1628
- const metadata = append(details, $(".plugin-list-item-metadata"));
1629
- metadata.textContent = ( localize(7140, "Configured on the active remote agent host"));
1630
- const status = append(row, $(".plugin-list-item-status"));
1631
- const statusLabel = getRemotePluginStatusLabel(item);
1632
- if (statusLabel) {
1633
- status.textContent = statusLabel;
1634
- status.classList.toggle(
1635
- "disabled",
1636
- item.enabled === false || item.status === "degraded" || item.status === "error"
1637
- );
1638
- } else {
1639
- status.style.display = "none";
1640
- }
1641
- let more;
1642
- if (item.actions?.length) {
1643
- const actions = append(row, $(".plugin-list-item-action"));
1644
- const moreButton = this.cardDisposables.add(( new Button(actions, {
1645
- ...defaultButtonStyles,
1646
- secondary: true,
1647
- supportIcons: true,
1648
- ariaLabel: ( localize(7126, "More actions for {0}", item.name))
1649
- })));
1650
- moreButton.element.classList.add("plugin-card-icon-button");
1651
- moreButton.label = `$(${Codicon.ellipsis.id})`;
1652
- this.rememberCardFocusElement(moreButton.element);
1653
- this.cardDisposables.add(
1654
- moreButton.onDidClick(() => this.showRemotePluginActions(item, moreButton.element))
1655
- );
1656
- more = moreButton;
1657
- }
1658
- this.cardListControllers.get(parent)?.addItem({
1659
- row,
1660
- primaryAction: row,
1661
- label: item.name,
1662
- actions: more ? [more.element] : [],
1663
- contextMenuAction: more?.element
1664
- });
1665
- }
1666
- appendMarketplacePluginRow(parent, item) {
1667
- const row = append(parent, $(".plugin-list-item.plugin-home-row.plugin-marketplace-home-row"));
1668
- const primaryAction = this.addSurfaceActivation(row, ( localize(7141, "{0}. Available to install from {1}.", item.name, item.marketplace)), () => this._onDidSelectPlugin.fire(item));
1669
- const details = append(primaryAction, $(".plugin-list-item-details"));
1670
- const nameRow = append(details, $(".plugin-list-item-name-row"));
1671
- const name = append(nameRow, $(".plugin-list-item-name"));
1672
- name.textContent = item.name;
1673
- name.title = item.name;
1674
- const description = append(details, $(".plugin-list-item-description"));
1675
- description.textContent = truncateToFirstLine(item.description || ( localize(7137, "No description provided.")));
1676
- const actions = append(row, $(".plugin-list-item-action"));
1677
- const install = this.cardDisposables.add(( new Button(actions, {
1678
- ...defaultButtonStyles,
1679
- ariaLabel: ( localize(7142, "Install {0}", item.name))
1680
- })));
1681
- install.element.classList.add("plugin-list-item-install-button");
1682
- install.label = ( localize(7070, "Install"));
1683
- this.cardDisposables.add(install.onDidClick(() => this.installMarketplacePlugin(item, install)));
1684
- this.cardListControllers.get(parent)?.addItem({
1685
- row,
1686
- primaryAction,
1687
- label: item.name,
1688
- actions: [install.element]
1689
- });
1690
- }
1691
- rememberCardFocusElement(element) {
1692
- this.firstCardFocusElement ??= element;
1693
- }
1694
- renderBrowseMarketplaceCards() {
1695
- this.captureSectionScrollPositions();
1696
- this.cardDisposables.clear();
1697
- this.sectionLists = [];
1698
- this.installedCreateButton = undefined;
1699
- this.firstCardFocusElement = undefined;
1700
- clearNode(this.cardContainer);
1701
- const marketplaceItems = this.getUninstalledMarketplaceItems();
1702
- if (marketplaceItems.length === 0) {
1703
- this.showEmptySurface();
1704
- this.emptyText.textContent = ( localize(7143, "No plugins available"));
1705
- this.emptySubtext.textContent = "";
1706
- return;
1707
- }
1708
- this.showCardSurface();
1709
- const content = this.createCardScrollContent("distributed-section-layout");
1710
- const recommendedKeys = this.pluginMarketplaceService.recommendedPlugins.get();
1711
- const recommended = marketplaceItems.filter(item => ( recommendedKeys.has(getMarketplaceRecommendationKey(item))));
1712
- const allPlugins = marketplaceItems.filter(item => !( recommendedKeys.has(getMarketplaceRecommendationKey(item))));
1713
- if (recommended.length > 0) {
1714
- const recommendedGrid = this.renderCardSection(content, ( localize(7144, "Recommended for this workspace")), ( localize(7145, "Plugins recommended by workspace configuration.")), "plugin-marketplace-recommended-section");
1715
- recommendedGrid.classList.add("plugin-inventory-list");
1716
- this.createPluginSectionList(recommendedGrid, ( localize(7144, "Recommended for this workspace")), ( recommended.map(item => ({
1717
- type: "marketplace-item",
1718
- item
1719
- }))));
1720
- }
1721
- const allGrid = this.renderCardSection(content, ( localize(7146, "All plugins")), ( localize(7147, "Plugins available from configured marketplaces.")), "plugin-marketplace-all-section");
1722
- allGrid.classList.add("plugin-inventory-list");
1723
- this.createPluginSectionList(allGrid, ( localize(7146, "All plugins")), ( allPlugins.map(item => ({
1724
- type: "marketplace-item",
1725
- item
1726
- }))));
1727
- this.layoutPluginSectionLists();
1728
- this.cardScrollable.scanDomNode();
1729
- this.schedulePluginSectionLayout();
1730
- }
1731
- getUninstalledMarketplaceItems(items = this.marketplaceItems) {
1732
- const installedUris = ( new Set(( this.agentPluginService.plugins.get().map(p => ( p.uri.toString())))));
1733
- return items.filter(item => {
1734
- const expectedUri = this.pluginInstallService.getPluginInstallUri({
1735
- name: item.name,
1736
- description: item.description,
1737
- version: item.version ?? "",
1738
- source: item.source,
1739
- sourceDescriptor: item.sourceDescriptor,
1740
- marketplace: item.marketplace,
1741
- marketplaceReference: item.marketplaceReference,
1742
- marketplaceType: item.marketplaceType
1743
- });
1744
- return !( installedUris.has(( expectedUri.toString())));
1745
- });
1746
- }
1747
- async installMarketplacePlugin(item, button) {
1748
- button.label = ( localize(7071, "Installing..."));
1749
- button.enabled = false;
1750
- try {
1751
- await this.pluginInstallService.installPlugin({
1752
- name: item.name,
1753
- description: item.description,
1754
- version: item.version ?? "",
1755
- sourceDescriptor: item.sourceDescriptor,
1756
- source: item.source,
1757
- marketplace: item.marketplace,
1758
- marketplaceReference: item.marketplaceReference,
1759
- marketplaceType: item.marketplaceType,
1760
- readmeUri: item.readmeUri
1761
- });
1762
- button.label = ( localize(7069, "Installed"));
1763
- void this.refresh();
1764
- } catch (error) {
1765
- button.label = ( localize(7070, "Install"));
1766
- button.enabled = true;
1767
- this.notificationService.error(( localize(7072, "Unable to install plugin: {0}", getErrorMessage(error))));
1768
- }
1769
- }
1770
- async queryMarketplaceSnapshot() {
1771
- if (!this.marketplaceSnapshot.beginLoading()) {
1772
- return;
1773
- }
1774
- this.marketplaceSnapshotCts?.dispose(true);
1775
- const cts = this.marketplaceSnapshotCts = ( new CancellationTokenSource());
1776
- try {
1777
- const plugins = await this.pluginMarketplaceService.fetchMarketplacePlugins(cts.token);
1778
- if (this.marketplaceSnapshotCts !== cts) {
1779
- return;
1780
- }
1781
- if (cts.token.isCancellationRequested) {
1782
- this.marketplaceSnapshot.reset();
1783
- return;
1784
- }
1785
- this.marketplaceSnapshot.complete(( plugins.map(marketplacePluginToItem)));
1786
- if (!this.browseMode && !this.searchQuery.trim()) {
1787
- this.renderPluginHome();
1788
- }
1789
- } catch {
1790
- if (this.marketplaceSnapshotCts === cts && !cts.token.isCancellationRequested) {
1791
- this.marketplaceSnapshot.fail();
1792
- if (!this.browseMode && !this.searchQuery.trim()) {
1793
- this.renderPluginHome();
1794
- }
1795
- }
1796
- }
1797
- }
1798
- showBrowseMarketplace() {
1799
- if (!this.isBrowseMarketplaceAvailable()) {
1800
- return;
1801
- }
1802
- if (!this.browseMode) {
1803
- this.toggleBrowseMode(true);
1804
- }
1805
- }
1806
- setVisible(visible) {
1807
- if (this.visible === visible) {
1808
- return;
1809
- }
1810
- this.visible = visible;
1811
- if (visible) {
1812
- void this.refresh();
1813
- }
1814
- }
1815
- toggleBrowseMode(browse) {
1816
- this.delayedMarketplaceSearch.cancel();
1817
- this.marketplaceCts?.dispose(true);
1818
- this.marketplaceCts = undefined;
1819
- this.browseMode = browse;
1820
- this.element.classList.toggle("browse-mode", browse);
1821
- this.searchInput.value = "";
1822
- this.searchQuery = "";
1823
- this.updateToolbarActions();
1824
- this.searchInput.setPlaceHolder(browse ? ( localize(7148, "Search plugin marketplace...")) : ( localize(7094, "Type to search...")));
1825
- if (browse) {
1826
- void this.queryMarketplace();
1827
- } else {
1828
- this.marketplaceItems = [];
1829
- void this.filterPlugins();
1830
- }
1831
- if (this.lastHeight > 0) {
1832
- this.layout(this.lastHeight, this.lastWidth);
1833
- }
1834
- }
1835
- async queryMarketplace() {
1836
- this.marketplaceCts?.dispose(true);
1837
- const cts = this.marketplaceCts = ( new CancellationTokenSource());
1838
- const query = this.searchQuery.toLowerCase().trim();
1839
- const browseMode = this.browseMode;
1840
- this.showEmptySurface();
1841
- this.emptyText.textContent = ( localize(7134, "Loading marketplace..."));
1842
- this.emptySubtext.textContent = "";
1843
- try {
1844
- const plugins = await this.pluginMarketplaceService.fetchMarketplacePlugins(cts.token);
1845
- if (!this.isCurrentMarketplaceRequest(cts, query, browseMode)) {
1846
- return;
1847
- }
1848
- if (query) {
1849
- const allPlugins = this.agentPluginService.plugins.get();
1850
- const installedItems = ( allPlugins.map(p => installedPluginToItem(p, this.labelService))).filter(
1851
- item => item.name.toLowerCase().includes(query) || item.description.toLowerCase().includes(query)
1852
- ).sort(compareInstalledPluginItems);
1853
- const remoteItems = [...(await this.getRemotePluginItems(query))];
1854
- if (!this.isCurrentMarketplaceRequest(cts, query, browseMode)) {
1855
- return;
1856
- }
1857
- this.installedItems = installedItems;
1858
- this.remoteItems = remoteItems;
1859
- }
1860
- const filtered = query ? plugins.filter(
1861
- p => p.name.toLowerCase().includes(query) || p.description.toLowerCase().includes(query) || p.marketplace.toLowerCase().includes(query)
1862
- ) : plugins;
1863
- const installedUris = ( new Set(( this.agentPluginService.plugins.get().map(p => ( p.uri.toString())))));
1864
- this.marketplaceItems = ( filtered.filter(p => {
1865
- const expectedUri = this.pluginInstallService.getPluginInstallUri(p);
1866
- return !( installedUris.has(( expectedUri.toString())));
1867
- }).map(marketplacePluginToItem));
1868
- if (query) {
1869
- this.updateSearchResultsList();
1870
- } else {
1871
- this.updateMarketplaceList();
1872
- }
1873
- } catch {
1874
- if (this.isCurrentMarketplaceRequest(cts, query, browseMode)) {
1875
- this.marketplaceItems = [];
1876
- this.showEmptySurface();
1877
- this.emptyText.textContent = ( localize(7149, "Unable to load marketplace"));
1878
- this.emptySubtext.textContent = ( localize(7150, "Check your connection and try again"));
1879
- }
1880
- }
1881
- }
1882
- async queryPluginSearch() {
1883
- if (!this.isBrowseMarketplaceAvailable()) {
1884
- this.marketplaceItems = [];
1885
- await this.filterPlugins();
1886
- return;
1887
- }
1888
- const query = this.searchQuery.toLowerCase().trim();
1889
- if (!query || this.browseMode) {
1890
- return;
1891
- }
1892
- this.marketplaceCts?.dispose(true);
1893
- const cts = this.marketplaceCts = ( new CancellationTokenSource());
1894
- try {
1895
- const plugins = await this.pluginMarketplaceService.fetchMarketplacePlugins(cts.token);
1896
- if (!this.isCurrentMarketplaceRequest(cts, query, false)) {
1897
- return;
1898
- }
1899
- const installedItems = ( this.agentPluginService.plugins.get().map(p => installedPluginToItem(p, this.labelService))).filter(
1900
- item => item.name.toLowerCase().includes(query) || item.description.toLowerCase().includes(query)
1901
- ).sort(compareInstalledPluginItems);
1902
- const remoteItems = [...(await this.getRemotePluginItems(query))];
1903
- if (!this.isCurrentMarketplaceRequest(cts, query, false)) {
1904
- return;
1905
- }
1906
- const filtered = query ? plugins.filter(
1907
- p => p.name.toLowerCase().includes(query) || p.description.toLowerCase().includes(query) || p.marketplace.toLowerCase().includes(query)
1908
- ) : plugins;
1909
- const installedUris = ( new Set(( this.agentPluginService.plugins.get().map(p => ( p.uri.toString())))));
1910
- const marketplaceItems = ( filtered.filter(p => {
1911
- const expectedUri = this.pluginInstallService.getPluginInstallUri(p);
1912
- return !( installedUris.has(( expectedUri.toString())));
1913
- }).map(marketplacePluginToItem));
1914
- if (!this.isCurrentMarketplaceRequest(cts, query, false)) {
1915
- return;
1916
- }
1917
- this.installedItems = installedItems;
1918
- this.remoteItems = remoteItems;
1919
- this.marketplaceItems = marketplaceItems;
1920
- this.searchInput.hideMessage();
1921
- } catch {
1922
- if (!this.isCurrentMarketplaceRequest(cts, query, false)) {
1923
- return;
1924
- }
1925
- this.marketplaceItems = [];
1926
- this.searchInput.showMessage({
1927
- content: ( localize(
1928
- 7151,
1929
- "Marketplace results are unavailable. Showing installed plugins only."
1930
- )),
1931
- type: MessageType.WARNING
1932
- });
1933
- await this.filterPlugins();
1934
- return;
1935
- }
1936
- if (this.isCurrentMarketplaceRequest(cts, query, false)) {
1937
- this.updateSearchResultsList();
1938
- this._onDidChangeItemCount.fire(this.itemCount);
1939
- }
1940
- }
1941
- isCurrentMarketplaceRequest(cts, query, browseMode) {
1942
- return isCurrentPluginMarketplaceRequest(
1943
- query,
1944
- this.searchQuery.toLowerCase().trim(),
1945
- browseMode,
1946
- this.browseMode,
1947
- this.marketplaceCts === cts,
1948
- cts.token.isCancellationRequested
1949
- );
1950
- }
1951
- updateMarketplaceList() {
1952
- if (this.marketplaceItems.length === 0) {
1953
- this.showEmptySurface();
1954
- if (this.searchQuery.trim()) {
1955
- this.emptyText.textContent = ( localize(7152, "No plugins match '{0}'", this.searchQuery));
1956
- this.emptySubtext.textContent = ( localize(7153, "Try a different search term"));
1957
- } else {
1958
- this.emptyText.textContent = ( localize(7143, "No plugins available"));
1959
- this.emptySubtext.textContent = "";
1960
- }
1961
- this.list.splice(0, this.list.length, []);
1962
- return;
1963
- }
1964
- const query = this.searchQuery.trim();
1965
- if (!query) {
1966
- this.renderBrowseMarketplaceCards();
1967
- this.list.splice(0, this.list.length, []);
1968
- return;
1969
- } else {
1970
- this.updateSearchResultsList();
1971
- }
1972
- }
1973
- updateSearchResultsList() {
1974
- const installedNames = ( new Set(( this.installedItems.map(item => item.name.toLowerCase()))));
1975
- const remoteItems = this.remoteItems.filter(
1976
- item => item.groupKey !== "remote-client" && (!item.name || !( installedNames.has(item.name.toLowerCase())))
1977
- );
1978
- const installedCount = this.installedItems.length + remoteItems.length;
1979
- if (installedCount === 0 && this.marketplaceItems.length === 0) {
1980
- this.showEmptySurface();
1981
- this.emptyText.textContent = ( localize(7154, "No plugins match '{0}'", this.searchQuery));
1982
- this.emptySubtext.textContent = ( localize(7153, "Try a different search term"));
1983
- this.list.splice(0, this.list.length, []);
1984
- return;
1985
- }
1986
- this.captureSectionScrollPositions();
1987
- this.cardDisposables.clear();
1988
- this.sectionLists = [];
1989
- this.installedCreateButton = undefined;
1990
- this.firstCardFocusElement = undefined;
1991
- clearNode(this.cardContainer);
1992
- this.showCardSurface();
1993
- const content = this.createCardScrollContent("plugin-search-results", "distributed-section-layout");
1994
- if (installedCount > 0) {
1995
- const installedList = this.renderCardSection(content, ( localize(7155, "Installed")), undefined, "installed-plugins-section", installedCount);
1996
- installedList.classList.add("plugin-inventory-list");
1997
- this.createPluginSectionList(installedList, ( localize(7155, "Installed")), [...( this.installedItems.map(item => ({
1998
- type: "plugin-item",
1999
- item
2000
- }))), ...( remoteItems.map(item => ({
2001
- type: "remote-item",
2002
- item
2003
- })))]);
2004
- }
2005
- if (this.marketplaceItems.length > 0) {
2006
- this.renderAvailablePlugins(content, this.marketplaceItems, false, ( localize(7156, "Available to install")), undefined);
2007
- }
2008
- this.schedulePluginSectionLayout();
2009
- this.list.splice(0, this.list.length, []);
2010
- }
2011
- async getRemotePluginItems(query) {
2012
- if (!this.harnessService.getActiveDescriptor().itemProvider) {
2013
- return [];
2014
- }
2015
- try {
2016
- const provided = await this.itemsModel.getActiveItemSource().fetchProviderItems();
2017
- return provided.filter(
2018
- item => isPluginCustomizationItem(item) && (!query || item.name.toLowerCase().includes(query) || item.description?.toLowerCase().includes(query) || item.badge?.toLowerCase().includes(query))
2019
- );
2020
- } catch {
2021
- return [];
2022
- }
2023
- }
2024
- async filterPlugins() {
2025
- const generation = ++this.filterGeneration;
2026
- const query = this.searchQuery.toLowerCase().trim();
2027
- const browseMode = this.browseMode;
2028
- const allPlugins = this.agentPluginService.plugins.get();
2029
- const remoteItems = [...(await this.getRemotePluginItems(query))];
2030
- if (generation !== this.filterGeneration || this.searchQuery.toLowerCase().trim() !== query || this.browseMode !== browseMode) {
2031
- return;
2032
- }
2033
- this.remoteItems = remoteItems;
2034
- this.installedItems = ( allPlugins.map(p => installedPluginToItem(p, this.labelService))).filter(
2035
- item => !query || item.name.toLowerCase().includes(query) || item.description.toLowerCase().includes(query)
2036
- ).sort(compareInstalledPluginItems);
2037
- if (!query) {
2038
- this.renderPluginHome();
2039
- this._onDidChangeItemCount.fire(this.itemCount);
2040
- return;
2041
- }
2042
- this.updateSearchResultsList();
2043
- this._onDidChangeItemCount.fire(this.itemCount);
2044
- }
2045
- get itemCount() {
2046
- const installedNames = ( new Set(( this.installedItems.map(item => item.name.toLowerCase()))));
2047
- const uniqueRemote = this.remoteItems.filter(item => {
2048
- if (item.groupKey === "remote-client") {
2049
- return false;
2050
- }
2051
- if (item.name && ( installedNames.has(item.name.toLowerCase()))) {
2052
- return false;
2053
- }
2054
- return true;
2055
- });
2056
- return uniqueRemote.length + this.installedItems.length;
2057
- }
2058
- fireItemCount() {
2059
- this._onDidChangeItemCount.fire(this.itemCount);
2060
- }
2061
- toggleGroup(entry) {
2062
- if (( this.collapsedGroups.has(entry.group))) {
2063
- this.collapsedGroups.delete(entry.group);
2064
- } else {
2065
- this.collapsedGroups.add(entry.group);
2066
- }
2067
- void this.filterPlugins();
2068
- }
2069
- isInBrowseMode() {
2070
- return this.browseMode;
2071
- }
2072
- exitBrowseMode() {
2073
- if (this.browseMode) {
2074
- this.toggleBrowseMode(false);
2075
- }
2076
- }
2077
- layout(height, width) {
2078
- this.lastHeight = height;
2079
- this.lastWidth = width;
2080
- if (!this.visible || this.element.parentElement?.style.display === "none") {
2081
- return;
2082
- }
2083
- this.element.style.height = `${height}px`;
2084
- this.updateResponsiveLayout(width);
2085
- const searchBarHeight = this.searchAndButtonContainer.offsetHeight;
2086
- if (searchBarHeight === 0 && !this._layoutDeferred) {
2087
- this._layoutDeferred = true;
2088
- getWindow(this.element).requestAnimationFrame(() => {
2089
- try {
2090
- this.layout(this.lastHeight, this.lastWidth);
2091
- } finally {
2092
- this._layoutDeferred = false;
2093
- }
2094
- });
2095
- return;
2096
- }
2097
- const headerHeight = this.sectionTitleHeader.offsetHeight;
2098
- this.lastHeaderHeight = headerHeight;
2099
- const backHeight = this.marketplaceBackContainer.offsetHeight;
2100
- const listHeight = Math.max(0, height - searchBarHeight - headerHeight - backHeight);
2101
- this.cardScrollableNode.style.height = `${listHeight}px`;
2102
- this.listContainer.style.height = `${listHeight}px`;
2103
- this.list.layout(listHeight, width);
2104
- this.schedulePluginSectionLayout();
2105
- }
2106
- focusSearch() {
2107
- this.searchInput.focus();
2108
- }
2109
- revealLastItem() {
2110
- if (this.cardScrollableNode.style.display !== "none") {
2111
- const reveal = () => {
2112
- const section = this.sectionLists.at(-1);
2113
- if (section?.entries.length) {
2114
- section.list.reveal(section.entries.length - 1);
2115
- }
2116
- this.cardScrollable.scanDomNode();
2117
- this.cardScrollable.setScrollPosition({
2118
- scrollTop: this.cardContainer.scrollHeight
2119
- });
2120
- };
2121
- reveal();
2122
- this.revealLastItemScheduler.value = scheduleAtNextAnimationFrame(getWindow(this.element), reveal);
2123
- return;
2124
- }
2125
- if (this.list.length > 0) {
2126
- this.list.reveal(this.list.length - 1);
2127
- }
2128
- }
2129
- focus() {
2130
- if (this.cardScrollableNode.style.display !== "none") {
2131
- if (this.firstCardFocusElement) {
2132
- this.firstCardFocusElement.focus();
2133
- } else {
2134
- const section = this.sectionLists[0];
2135
- if (section?.entries.length) {
2136
- section.list.setFocus([0]);
2137
- section.list.domFocus();
2138
- }
2139
- }
2140
- } else if (this.list.length > 0) {
2141
- this.list.domFocus();
2142
- this.list.setFocus([0]);
2143
- }
2144
- }
2145
- getInstalledPluginActions(item, disposables) {
2146
- const actions = [];
2147
- const groups = getInstalledPluginContextMenuActions(item.plugin, this.instantiationService);
2148
- for (const menuActions of groups) {
2149
- for (const menuAction of menuActions) {
2150
- actions.push(menuAction);
2151
- if (isDisposable(menuAction)) {
2152
- disposables.add(menuAction);
2153
- }
2154
- }
2155
- actions.push(( new Separator()));
2156
- }
2157
- if (actions.length > 0 && actions[actions.length - 1] instanceof Separator) {
2158
- actions.pop();
2159
- }
2160
- return actions;
2161
- }
2162
- getRemotePluginActions(item) {
2163
- const actions = [];
2164
- for (const itemAction of item.actions ?? []) {
2165
- actions.push(( new Action(
2166
- itemAction.id,
2167
- itemAction.label,
2168
- itemAction.icon ? ThemeIcon.asClassName(itemAction.icon) : undefined,
2169
- itemAction.enabled !== false,
2170
- () => itemAction.run()
2171
- )));
2172
- }
2173
- return actions;
2174
- }
2175
- showInstalledPluginActions(item, anchor) {
2176
- const disposables = ( new DisposableStore());
2177
- this.contextMenuService.showContextMenu({
2178
- getAnchor: () => anchor,
2179
- getActions: () => this.getInstalledPluginActions(item, disposables),
2180
- onHide: () => disposables.dispose()
2181
- });
2182
- }
2183
- showRemotePluginActions(item, anchor) {
2184
- this.contextMenuService.showContextMenu({
2185
- getAnchor: () => anchor,
2186
- getActions: () => this.getRemotePluginActions(item)
2187
- });
2188
- }
2189
- onContextMenu(e) {
2190
- if (!e.element || e.element.type === "group-header" || e.element.type === "search-header" || e.element.type === "marketplace-item") {
2191
- return;
2192
- }
2193
- const entry = e.element;
2194
- const disposables = ( new DisposableStore());
2195
- const actions = entry.type === "plugin-item" ? this.getInstalledPluginActions(entry.item, disposables) : this.getRemotePluginActions(entry.item);
2196
- this.contextMenuService.showContextMenu({
2197
- getAnchor: () => e.anchor,
2198
- getActions: () => actions,
2199
- onHide: () => disposables.dispose()
2200
- });
2201
- }
2202
- };
2203
- PluginListWidget = ( __decorate([( __param(1, IInstantiationService)), ( __param(2, IAgentPluginService)), ( __param(3, IPluginMarketplaceService)), ( __param(4, IPluginInstallService)), ( __param(5, IOpenerService)), ( __param(6, IContextViewService)), ( __param(7, IContextMenuService)), ( __param(8, IHoverService)), ( __param(9, ILabelService)), ( __param(10, ICommandService)), ( __param(11, ICustomizationHarnessService)), ( __param(12, IAICustomizationItemsModel)), ( __param(13, IConfigurationService)), ( __param(14, INotificationService))], PluginListWidget));
2204
-
2205
- export { PluginListWidget, PluginMarketplaceSnapshotModel, getInstalledPluginMetadata, getRemotePluginDisabledLabel, getToggledPluginEnablementState, isCurrentPluginMarketplaceRequest, shouldLoadPluginMarketplaceSnapshot };