@codingame/monaco-vscode-chat-service-override 26.2.2 → 27.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/index.js +31 -1
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +15 -0
  4. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.d.ts +53 -0
  5. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.js +219 -0
  6. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.d.ts +39 -0
  7. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +83 -0
  8. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +123 -0
  9. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +274 -0
  10. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +71 -0
  11. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +284 -0
  12. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +79 -0
  13. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +378 -0
  14. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -2
  15. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +27 -40
  16. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +9 -3
  17. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +74 -18
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +1 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +54 -8
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +87 -53
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +71 -15
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +43 -21
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +3 -3
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +22 -3
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +1 -0
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +154 -0
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -8
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +53 -43
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.d.ts +4 -0
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +84 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +1 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +33 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  38. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +15 -29
  39. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  40. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +13 -0
  41. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +16 -16
  42. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +12 -12
  43. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +33 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +204 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +77 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +541 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +10 -11
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +70 -65
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +7 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +27 -18
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.d.ts +1 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +4 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +5 -5
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +2 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +90 -51
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +20 -5
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +3 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +43 -27
  61. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +7 -2
  62. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +3 -1
  63. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +84 -22
  64. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  65. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.d.ts → localAgentSessionsController.d.ts} +7 -4
  66. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.js → localAgentSessionsController.js} +24 -17
  67. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +23 -0
  68. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +171 -0
  69. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +48 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +19 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +181 -0
  72. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +943 -0
  73. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.d.ts +1 -0
  74. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +248 -0
  75. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +57 -0
  76. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +27 -0
  77. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +118 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +727 -0
  79. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +22 -0
  80. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +38 -0
  81. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +1 -0
  82. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +72 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +45 -0
  84. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +165 -0
  85. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +75 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +623 -0
  87. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +858 -0
  88. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +2 -0
  89. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +30 -1
  90. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.d.ts +32 -0
  91. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.js +26 -0
  92. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +19 -3
  93. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +36 -26
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +529 -363
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +18 -0
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +419 -0
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.d.ts +12 -0
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.js +46 -0
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +34 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +198 -0
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +55 -0
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +305 -0
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.d.ts +23 -0
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +64 -0
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +5 -0
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +84 -0
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +27 -0
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +110 -0
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.d.ts +34 -0
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +111 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.d.ts +71 -0
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +611 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +125 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +504 -0
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.d.ts +10 -0
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +914 -0
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.d.ts +19 -0
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +128 -0
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +58 -0
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +429 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +31 -0
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +113 -0
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +14 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +126 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +38 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +279 -0
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +18 -0
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +122 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.d.ts +45 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +85 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +781 -0
  132. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +5 -22
  134. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
  135. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +3 -3
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +2 -1
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +12 -12
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +16 -15
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
  146. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +63 -76
  147. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +26 -15
  148. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatManagementEditor.css +2 -2
  149. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
  150. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
  151. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +15 -7
  152. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +40 -413
  153. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +10 -0
  154. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +38 -6
  155. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +5 -1
  156. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +56 -46
  157. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +15 -11
  158. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +52 -0
  159. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +138 -0
  160. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +11 -1
  161. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +166 -41
  162. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +6 -0
  163. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +37 -23
  164. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +15 -0
  165. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +351 -0
  166. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  167. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +118 -63
  168. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
  169. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +28 -0
  170. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +182 -13
  171. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +892 -41
  172. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -1
  173. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +55 -25
  174. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +28 -19
  175. package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.d.ts +14 -0
  176. package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.js +62 -0
  177. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.d.ts +36 -0
  178. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +110 -0
  179. package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.d.ts +10 -0
  180. package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.js +39 -0
  181. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +3 -3
  182. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +6 -6
  183. package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.d.ts +10 -0
  184. package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.js +39 -0
  185. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +27 -0
  186. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +102 -0
  187. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
  188. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +16 -1
  189. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +69 -47
  190. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +2 -41
  191. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  192. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +7 -7
  193. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  194. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.d.ts +4 -0
  195. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
  196. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
  197. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  198. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +4 -4
  199. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.d.ts +22 -0
  200. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +76 -0
  201. package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.d.ts +5 -0
  202. package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.js +30 -0
  203. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +43 -31
  204. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +67 -42
  205. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +31 -0
  206. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +242 -0
  207. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.d.ts +34 -0
  208. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +45 -0
  209. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
  210. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +33 -0
  211. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +311 -0
  212. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  213. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.d.ts +4 -0
  214. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +10 -1
  215. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +10 -10
  216. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +8 -9
  217. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +64 -26
  218. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +4 -2
  219. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
  220. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +2 -2
  221. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.d.ts +15 -4
  222. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +42 -8
  223. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +8 -1
  224. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +58 -31
  225. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +6 -5
  226. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +8 -20
  227. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +15 -6
  228. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +39 -0
  229. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +27 -0
  230. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +190 -0
  231. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +11 -0
  232. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +36 -0
  233. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +188 -0
  234. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +18 -8
  235. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +192 -85
  236. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +2 -1
  237. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +2 -1
  238. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -6
  239. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +16 -8
  240. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +8 -4
  241. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +111 -7
  242. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +2 -0
  243. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +52 -0
  244. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +29 -0
  245. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +73 -0
  246. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +622 -0
  247. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +64 -0
  248. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +478 -0
  249. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
  250. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +1 -30
  251. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +0 -5
  252. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +2 -8
  253. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +1 -1
  254. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +8 -8
  255. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +9 -9
  256. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +23 -22
  257. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +44 -14
  258. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +345 -113
  259. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +14 -1
  260. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +34 -24
  261. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +3 -0
  262. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +13 -0
  263. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  264. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +11 -5
  265. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +23 -0
  266. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +248 -24
  267. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +6 -11
  268. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +18 -81
  269. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +2 -3
  270. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +10 -10
  271. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
  272. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  273. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
  274. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +6 -6
  275. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  276. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  277. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +6 -2
  278. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  279. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +35 -26
  280. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +0 -1
  281. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +1 -5
  282. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +3 -3
  283. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
  284. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +4 -1
  285. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +13 -11
  286. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
  287. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +3 -1
  288. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
  289. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
  290. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
  291. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
  292. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  293. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
  294. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  295. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
  296. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +9 -0
  297. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +280 -65
  298. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +3 -1
  299. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +8 -0
  300. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -10
  301. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +1 -0
  302. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +47 -19
  303. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +8 -0
  304. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +31 -0
  305. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
  306. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
  307. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
  308. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  309. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +6 -1
  310. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +38 -16
  311. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +0 -72
  312. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +0 -587
  313. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +0 -71
  314. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +0 -293
  315. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +0 -2
  316. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.js +0 -31
@@ -2,9 +2,10 @@
2
2
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
3
  import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
4
4
  import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
5
- import { Event, Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
5
+ import { Emitter, Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
6
6
  import { parse } from '@codingame/monaco-vscode-api/vscode/vs/base/common/json';
7
7
  import { Disposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
8
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
8
9
  import { ResourceMap, ResourceSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
9
10
  import { isEqual, dirname, joinPath, basename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
10
11
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
@@ -31,11 +32,18 @@ import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vsco
31
32
  import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT, Target, AgentFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
32
33
  import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
33
34
  import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
34
- import { getTarget, mapClaudeModels, mapClaudeTools } from '@codingame/monaco-vscode-xterm-addons-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator';
35
- import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
36
35
  import { HookType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
37
36
  import { parseHooksFromFile, HookSourceFormat, getHookSourceFormat } from '../hookCompatibility.js';
38
37
  import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
38
+ import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
39
+ import { getTarget, mapClaudeModels, mapClaudeTools } from '@codingame/monaco-vscode-xterm-addons-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator';
40
+ import { StopWatch } from '@codingame/monaco-vscode-api/vscode/vs/base/common/stopwatch';
41
+ import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
42
+ import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
43
+ import { getCanonicalPluginCommandId } from '../../plugins/agentPluginService.js';
44
+ import { IAgentPluginService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginService.service';
45
+ import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
46
+ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
39
47
 
40
48
  class SkillMissingNameError extends Error {
41
49
  constructor(uri) {
@@ -73,7 +81,9 @@ let PromptsService = class PromptsService extends Disposable {
73
81
  extensionService,
74
82
  telemetryService,
75
83
  workspaceService,
76
- pathService
84
+ pathService,
85
+ contextKeyService,
86
+ agentPluginService
77
87
  ) {
78
88
  super();
79
89
  this.logger = logger;
@@ -89,7 +99,11 @@ let PromptsService = class PromptsService extends Disposable {
89
99
  this.telemetryService = telemetryService;
90
100
  this.workspaceService = workspaceService;
91
101
  this.pathService = pathService;
102
+ this.contextKeyService = contextKeyService;
103
+ this.agentPluginService = agentPluginService;
92
104
  this.cachedParsedPromptFromModels = ( new ResourceMap());
105
+ this._onDidLogDiscovery = this._register(( new Emitter()));
106
+ this.onDidLogDiscovery = this._onDidLogDiscovery.event;
93
107
  this.cachedFileLocations = {};
94
108
  this.fileLocatorEvents = {};
95
109
  this.contributedFiles = {
@@ -99,39 +113,95 @@ let PromptsService = class PromptsService extends Disposable {
99
113
  [PromptsType.skill]: ( new ResourceMap()),
100
114
  [PromptsType.hook]: ( new ResourceMap())
101
115
  };
116
+ this._contributedWhenKeys = ( new Set());
117
+ this._contributedWhenClauses = ( new Map());
118
+ this._onDidContributedWhenChange = this._register(( new Emitter()));
119
+ this._onDidPluginPromptFilesChange = this._register(( new Emitter()));
120
+ this._onDidPluginHooksChange = this._register(( new Emitter()));
121
+ this._pluginPromptFilesByType = ( new Map());
102
122
  this.promptFileProviders = [];
103
123
  this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
104
- this.fileLocator = this.instantiationService.createInstance(PromptFilesLocator);
124
+ this.fileLocator = this.createPromptFilesLocator();
105
125
  this._register(this.modelService.onModelRemoved(model => {
106
126
  this.cachedParsedPromptFromModels.delete(model.uri);
107
127
  }));
128
+ this._register(this.contextKeyService.onDidChangeContext(e => {
129
+ if (e.affectsSome(this._contributedWhenKeys)) {
130
+ for (const type of ( Object.keys(this.cachedFileLocations))) {
131
+ this.cachedFileLocations[type] = undefined;
132
+ }
133
+ this._onDidContributedWhenChange.fire();
134
+ }
135
+ }));
108
136
  const modelChangeEvent = this._register(( new ModelChangeTracker(this.modelService))).onDidPromptChange;
109
137
  this.cachedCustomAgents = this._register(( new CachedPromise(token => this.computeCustomAgents(token), () => Event.any(
110
138
  this.getFileLocatorEvent(PromptsType.agent),
111
- Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent)
139
+ Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent),
140
+ this._onDidContributedWhenChange.event
112
141
  ))));
113
142
  this.cachedSlashCommands = this._register(( new CachedPromise(token => this.computePromptSlashCommands(token), () => Event.any(
114
143
  this.getFileLocatorEvent(PromptsType.prompt),
115
144
  this.getFileLocatorEvent(PromptsType.skill),
116
145
  Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt),
117
- Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
146
+ Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
147
+ this._onDidContributedWhenChange.event,
148
+ this._onDidPluginPromptFilesChange.event
118
149
  ))));
119
150
  this.cachedSkills = this._register(( new CachedPromise(token => this.computeAgentSkills(token), () => Event.any(
120
151
  this.getFileLocatorEvent(PromptsType.skill),
121
- Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
152
+ Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
153
+ this._onDidContributedWhenChange.event,
154
+ this._onDidPluginPromptFilesChange.event
122
155
  ))));
123
156
  this.cachedHooks = this._register(( new CachedPromise(
124
157
  token => this.computeHooks(token),
125
158
  () => Event.any(this.getFileLocatorEvent(PromptsType.hook), Event.filter(
126
159
  this.configurationService.onDidChangeConfiguration,
127
- e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS)
128
- ), Event.filter(
129
- this.configurationService.onDidChangeConfiguration,
130
- e => e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
131
- ))
160
+ e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS) || e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
161
+ ), this._onDidPluginHooksChange.event)
132
162
  )));
133
- this._register(this.cachedHooks.onDidChange(() => {}));
134
163
  this._register(this.cachedSkills.onDidChange(() => {}));
164
+ this._register(this.cachedHooks.onDidChange(() => {}));
165
+ this._register(
166
+ this.watchPluginPromptFilesForType(PromptsType.prompt, (plugin, reader) => plugin.commands.read(reader))
167
+ );
168
+ this._register(
169
+ this.watchPluginPromptFilesForType(PromptsType.skill, (plugin, reader) => plugin.skills.read(reader))
170
+ );
171
+ this._register(
172
+ this.watchPluginPromptFilesForType(PromptsType.agent, (plugin, reader) => plugin.agents.read(reader))
173
+ );
174
+ this._register(autorun(reader => {
175
+ const plugins = this.agentPluginService.plugins.read(reader);
176
+ for (const plugin of plugins) {
177
+ plugin.hooks.read(reader);
178
+ }
179
+ this._onDidPluginHooksChange.fire();
180
+ }));
181
+ }
182
+ watchPluginPromptFilesForType(type, getItems) {
183
+ return autorun(reader => {
184
+ const plugins = this.agentPluginService.plugins.read(reader);
185
+ const nextFiles = [];
186
+ for (const plugin of plugins) {
187
+ for (const item of getItems(plugin, reader)) {
188
+ nextFiles.push({
189
+ uri: item.uri,
190
+ storage: PromptsStorage.plugin,
191
+ type,
192
+ name: getCanonicalPluginCommandId(plugin, item.name),
193
+ pluginUri: plugin.uri
194
+ });
195
+ }
196
+ }
197
+ nextFiles.sort((a, b) => `${a.name ?? ""}|${( a.uri.toString())}`.localeCompare(`${b.name ?? ""}|${( b.uri.toString())}`));
198
+ this._pluginPromptFilesByType.set(type, nextFiles);
199
+ this.cachedFileLocations[type] = undefined;
200
+ this._onDidPluginPromptFilesChange.fire();
201
+ });
202
+ }
203
+ createPromptFilesLocator() {
204
+ return this.instantiationService.createInstance(PromptFilesLocator);
135
205
  }
136
206
  getFileLocatorEvent(type) {
137
207
  let event = this.fileLocatorEvents[type];
@@ -178,10 +248,41 @@ let PromptsService = class PromptsService extends Disposable {
178
248
  storage: PromptsStorage.local,
179
249
  type
180
250
  })))),
181
- this.getExtensionPromptFiles(type, token)
251
+ this.getExtensionPromptFiles(type, token),
252
+ this._pluginPromptFilesByType.get(type) ?? []
182
253
  ]);
183
254
  return [...prompts.flat()];
184
255
  }
256
+ async _collectSourceFolderDiagnostics(type, foundFiles) {
257
+ const resolvedFolders = await this.fileLocator.getSourceFoldersInDiscoveryOrder(type);
258
+ const results = [];
259
+ for (const folder of resolvedFolders) {
260
+ const fileCount = foundFiles.filter(f => f.uri.path.startsWith(folder.uri.path + "/")).length;
261
+ let exists = fileCount > 0;
262
+ let errorMessage;
263
+ if (!exists) {
264
+ try {
265
+ const stat = await this.fileService.stat(folder.uri);
266
+ exists = stat.isDirectory;
267
+ } catch (e) {
268
+ if (e instanceof FileOperationError && e.fileOperationResult === FileOperationResult.FILE_NOT_FOUND) {
269
+ exists = false;
270
+ } else {
271
+ exists = false;
272
+ errorMessage = e instanceof Error ? e.message : String(e);
273
+ }
274
+ }
275
+ }
276
+ results.push({
277
+ uri: folder.uri,
278
+ storage: folder.storage,
279
+ exists,
280
+ fileCount,
281
+ errorMessage
282
+ });
283
+ }
284
+ return results;
285
+ }
185
286
  registerPromptFileProvider(extension, type, provider) {
186
287
  const providerEntry = {
187
288
  extension,
@@ -192,21 +293,22 @@ let PromptsService = class PromptsService extends Disposable {
192
293
  const disposables = ( new DisposableStore());
193
294
  if (provider.onDidChangePromptFiles) {
194
295
  disposables.add(provider.onDidChangePromptFiles(() => {
195
- if (type === PromptsType.agent) {
196
- this.cachedFileLocations[PromptsType.agent] = undefined;
197
- this.cachedCustomAgents.refresh();
198
- } else if (type === PromptsType.instructions) {
199
- this.cachedFileLocations[PromptsType.instructions] = undefined;
200
- } else if (type === PromptsType.prompt) {
201
- this.cachedFileLocations[PromptsType.prompt] = undefined;
202
- this.cachedSlashCommands.refresh();
203
- } else if (type === PromptsType.skill) {
204
- this.cachedFileLocations[PromptsType.skill] = undefined;
205
- this.cachedSkills.refresh();
206
- this.cachedSlashCommands.refresh();
207
- }
296
+ this.invalidatePromptFileCache(type);
208
297
  }));
209
298
  }
299
+ this.invalidatePromptFileCache(type);
300
+ disposables.add({
301
+ dispose: () => {
302
+ const index = this.promptFileProviders.findIndex(p => p === providerEntry);
303
+ if (index >= 0) {
304
+ this.promptFileProviders.splice(index, 1);
305
+ this.invalidatePromptFileCache(type);
306
+ }
307
+ }
308
+ });
309
+ return disposables;
310
+ }
311
+ invalidatePromptFileCache(type) {
210
312
  if (type === PromptsType.agent) {
211
313
  this.cachedFileLocations[PromptsType.agent] = undefined;
212
314
  this.cachedCustomAgents.refresh();
@@ -220,28 +322,6 @@ let PromptsService = class PromptsService extends Disposable {
220
322
  this.cachedSkills.refresh();
221
323
  this.cachedSlashCommands.refresh();
222
324
  }
223
- disposables.add({
224
- dispose: () => {
225
- const index = this.promptFileProviders.findIndex(p => p === providerEntry);
226
- if (index >= 0) {
227
- this.promptFileProviders.splice(index, 1);
228
- if (type === PromptsType.agent) {
229
- this.cachedFileLocations[PromptsType.agent] = undefined;
230
- this.cachedCustomAgents.refresh();
231
- } else if (type === PromptsType.instructions) {
232
- this.cachedFileLocations[PromptsType.instructions] = undefined;
233
- } else if (type === PromptsType.prompt) {
234
- this.cachedFileLocations[PromptsType.prompt] = undefined;
235
- this.cachedSlashCommands.refresh();
236
- } else if (type === PromptsType.skill) {
237
- this.cachedFileLocations[PromptsType.skill] = undefined;
238
- this.cachedSkills.refresh();
239
- this.cachedSlashCommands.refresh();
240
- }
241
- }
242
- }
243
- });
244
- return disposables;
245
325
  }
246
326
  async listFromProviders(type, activationEvent, token) {
247
327
  const result = [];
@@ -268,7 +348,9 @@ let PromptsService = class PromptsService extends Disposable {
268
348
  storage: PromptsStorage.extension,
269
349
  type,
270
350
  extension: providerEntry.extension,
271
- source: ExtensionAgentSourceType.provider
351
+ source: ExtensionAgentSourceType.provider,
352
+ name: file.name,
353
+ description: file.description
272
354
  });
273
355
  }
274
356
  } catch (e) {
@@ -296,6 +378,8 @@ let PromptsService = class PromptsService extends Disposable {
296
378
  storage: PromptsStorage.user,
297
379
  type
298
380
  }))));
381
+ case PromptsStorage.plugin:
382
+ return this._pluginPromptFilesByType.get(type) ?? [];
299
383
  default:
300
384
  throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
301
385
  }
@@ -303,7 +387,19 @@ let PromptsService = class PromptsService extends Disposable {
303
387
  async getExtensionPromptFiles(type, token) {
304
388
  await this.extensionService.whenInstalledExtensionsRegistered();
305
389
  const settledResults = await Promise.allSettled(( this.contributedFiles[type].values()));
306
- const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value));
390
+ const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value)).filter(file => {
391
+ if (!file.when) {
392
+ return true;
393
+ }
394
+ const expr = ContextKeyExpr.deserialize(file.when);
395
+ if (!expr) {
396
+ this.logger.warn(
397
+ `[getExtensionPromptFiles] Ignoring contributed prompt file with invalid when clause: ${file.when}`
398
+ );
399
+ return false;
400
+ }
401
+ return this.contextKeyService.contextMatchesRules(expr);
402
+ });
307
403
  const activationEvent = this.getProviderActivationEvent(type);
308
404
  if (!activationEvent) {
309
405
  return contributedFiles;
@@ -327,16 +423,7 @@ let PromptsService = class PromptsService extends Disposable {
327
423
  }
328
424
  async getSourceFolders(type) {
329
425
  const result = [];
330
- if (type === PromptsType.agent) {
331
- const folders = await this.fileLocator.getAgentSourceFolders();
332
- for (const uri of folders) {
333
- result.push({
334
- uri,
335
- storage: PromptsStorage.local,
336
- type
337
- });
338
- }
339
- } else if (type === PromptsType.hook) {
426
+ if (type === PromptsType.hook) {
340
427
  const hooksFolders = await this.fileLocator.getHookSourceFolders();
341
428
  for (const uri of hooksFolders) {
342
429
  result.push({
@@ -370,8 +457,8 @@ let PromptsService = class PromptsService extends Disposable {
370
457
  get onDidChangeSlashCommands() {
371
458
  return this.cachedSlashCommands.onDidChange;
372
459
  }
373
- async getPromptSlashCommands(token) {
374
- return this.cachedSlashCommands.get(token);
460
+ async getPromptSlashCommands(token, sessionResource) {
461
+ return await this.cachedSlashCommands.get(token);
375
462
  }
376
463
  async computePromptSlashCommands(token) {
377
464
  const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
@@ -411,7 +498,7 @@ let PromptsService = class PromptsService extends Disposable {
411
498
  return result;
412
499
  }
413
500
  isValidSlashCommandName(command) {
414
- return command.match(/^[\p{L}\d_\-\.]+$/u) !== null;
501
+ return command.match(/^[\p{L}\d_\-\.:]+$/u) !== null;
415
502
  }
416
503
  async resolvePromptSlashCommand(name, token) {
417
504
  const commands = await this.getPromptSlashCommands(token);
@@ -419,7 +506,7 @@ let PromptsService = class PromptsService extends Disposable {
419
506
  }
420
507
  asChatPromptSlashCommand(parsedPromptFile, promptPath) {
421
508
  let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
422
- name = name.replace(/[^\p{L}\d_\-\.]+/gu, "-");
509
+ name = name.replace(/[^\p{L}\d_\-\.:]+/gu, "-");
423
510
  return {
424
511
  name: name,
425
512
  description: parsedPromptFile?.header?.description ?? promptPath.description,
@@ -439,8 +526,22 @@ let PromptsService = class PromptsService extends Disposable {
439
526
  get onDidChangeCustomAgents() {
440
527
  return this.cachedCustomAgents.onDidChange;
441
528
  }
442
- async getCustomAgents(token) {
443
- return this.cachedCustomAgents.get(token);
529
+ async getCustomAgents(token, sessionResource) {
530
+ const sw = StopWatch.create();
531
+ const result = await this.cachedCustomAgents.get(token);
532
+ if (sessionResource) {
533
+ const elapsed = sw.elapsed();
534
+ const discoveryInfo = await this.getAgentDiscoveryInfo(token);
535
+ const details = result.length === 1 ? ( localize(7150, "Resolved {0} agent in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7151, "Resolved {0} agents in {1}ms", result.length, elapsed.toFixed(1)));
536
+ this._onDidLogDiscovery.fire({
537
+ sessionResource,
538
+ name: ( localize(7152, "Load Agents")),
539
+ details,
540
+ discoveryInfo,
541
+ category: "discovery"
542
+ });
543
+ }
544
+ return result;
444
545
  }
445
546
  async computeCustomAgents(token) {
446
547
  let agentFiles = await this.listPromptFiles(PromptsType.agent, token);
@@ -452,10 +553,10 @@ let PromptsService = class PromptsService extends Disposable {
452
553
  let metadata;
453
554
  if (ast.header) {
454
555
  const advanced = ast.header.getAttribute(PromptHeaderAttributes.advancedOptions);
455
- if (advanced && advanced.value.type === "object") {
556
+ if (advanced && advanced.value.type === "map") {
456
557
  metadata = {};
457
558
  for (const [key, value] of Object.entries(advanced.value)) {
458
- if (["string", "number", "boolean"].includes(value.type)) {
559
+ if (value.type === "scalar") {
459
560
  metadata[key] = value;
460
561
  }
461
562
  }
@@ -493,14 +594,14 @@ let PromptsService = class PromptsService extends Disposable {
493
594
  source,
494
595
  target,
495
596
  visibility: {
496
- userInvokable: true,
497
- agentInvokable: true
597
+ userInvocable: true,
598
+ agentInvocable: true
498
599
  }
499
600
  };
500
601
  }
501
602
  const visibility = {
502
- userInvokable: ast.header.userInvokable !== false,
503
- agentInvokable: ast.header.infer === true || ast.header.disableModelInvocation !== true
603
+ userInvocable: ast.header.userInvocable !== false,
604
+ agentInvocable: ast.header.infer === true || ast.header.disableModelInvocation !== true
504
605
  };
505
606
  let model = ast.header.model;
506
607
  if (target === Target.Claude && model) {
@@ -562,7 +663,7 @@ let PromptsService = class PromptsService extends Disposable {
562
663
  }
563
664
  return ( new PromptFileParser()).parse(uri, ( fileContent.value.toString()));
564
665
  }
565
- registerContributedFile(type, uri, extension, name, description) {
666
+ registerContributedFile(type, uri, extension, name, description, when) {
566
667
  const bucket = this.contributedFiles[type];
567
668
  if (( bucket.has(uri))) {
568
669
  return Disposable.None;
@@ -595,6 +696,7 @@ let PromptsService = class PromptsService extends Disposable {
595
696
  uri,
596
697
  name,
597
698
  description,
699
+ when,
598
700
  storage: PromptsStorage.extension,
599
701
  type,
600
702
  extension,
@@ -602,7 +704,11 @@ let PromptsService = class PromptsService extends Disposable {
602
704
  };
603
705
  })();
604
706
  bucket.set(uri, entryPromise);
707
+ if (when) {
708
+ this._contributedWhenClauses.set(`${type}/${( uri.toString())}`, when);
709
+ }
605
710
  const flushCachesIfRequired = () => {
711
+ this._updateContributedWhenKeys();
606
712
  this.cachedFileLocations[type] = undefined;
607
713
  switch (type) {
608
714
  case PromptsType.agent:
@@ -621,10 +727,20 @@ let PromptsService = class PromptsService extends Disposable {
621
727
  return {
622
728
  dispose: () => {
623
729
  bucket.delete(uri);
730
+ this._contributedWhenClauses.delete(`${type}/${( uri.toString())}`);
624
731
  flushCachesIfRequired();
625
732
  }
626
733
  };
627
734
  }
735
+ _updateContributedWhenKeys() {
736
+ this._contributedWhenKeys.clear();
737
+ for (const whenClause of ( this._contributedWhenClauses.values())) {
738
+ const expr = ContextKeyExpr.deserialize(whenClause);
739
+ for (const key of expr?.keys() ?? []) {
740
+ this._contributedWhenKeys.add(key);
741
+ }
742
+ }
743
+ }
628
744
  getPromptLocationLabel(promptPath) {
629
745
  switch (promptPath.storage) {
630
746
  case PromptsStorage.local:
@@ -632,17 +748,19 @@ let PromptsService = class PromptsService extends Disposable {
632
748
  relative: true
633
749
  });
634
750
  case PromptsStorage.user:
635
- return localize(6569, "User Data");
751
+ return localize(7153, "User Data");
636
752
  case PromptsStorage.extension:
637
753
  {
638
754
  return localize(
639
- 6570,
755
+ 7154,
640
756
  "Extension: {0}",
641
757
  promptPath.extension.displayName ?? promptPath.extension.id
642
758
  );
643
759
  }
760
+ case PromptsStorage.plugin:
761
+ return localize(7155, "Plugin");
644
762
  default:
645
- throw ( new Error("Unknown prompt storage type"));
763
+ assertNever(promptPath, "Unknown prompt storage type");
646
764
  }
647
765
  }
648
766
  async listNestedAgentMDs(token) {
@@ -843,12 +961,26 @@ let PromptsService = class PromptsService extends Disposable {
843
961
  get onDidChangeSkills() {
844
962
  return this.cachedSkills.onDidChange;
845
963
  }
846
- async findAgentSkills(token) {
964
+ async findAgentSkills(token, sessionResource) {
847
965
  const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
848
966
  if (!useAgentSkills) {
849
967
  return undefined;
850
968
  }
851
- return this.cachedSkills.get(token);
969
+ const sw = StopWatch.create();
970
+ const result = await this.cachedSkills.get(token);
971
+ if (sessionResource) {
972
+ const elapsed = sw.elapsed();
973
+ const discoveryInfo = await this.getSkillDiscoveryInfo(token);
974
+ const details = result.length === 1 ? ( localize(7156, "Resolved {0} skill in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7157, "Resolved {0} skills in {1}ms", result.length, elapsed.toFixed(1)));
975
+ this._onDidLogDiscovery.fire({
976
+ sessionResource,
977
+ name: ( localize(7158, "Load Skills")),
978
+ details,
979
+ discoveryInfo,
980
+ category: "discovery"
981
+ });
982
+ }
983
+ return result;
852
984
  }
853
985
  async computeAgentSkills(token) {
854
986
  const {
@@ -865,7 +997,7 @@ let PromptsService = class PromptsService extends Disposable {
865
997
  name: file.name,
866
998
  description: sanitizedDescription,
867
999
  disableModelInvocation: file.disableModelInvocation ?? false,
868
- userInvokable: file.userInvokable ?? true
1000
+ userInvocable: file.userInvocable ?? true
869
1001
  });
870
1002
  }
871
1003
  }
@@ -907,6 +1039,7 @@ let PromptsService = class PromptsService extends Disposable {
907
1039
  configPersonal: skillsBySource.get(PromptFileSource.ConfigPersonal) ?? 0,
908
1040
  extensionContribution: skillsBySource.get(PromptFileSource.ExtensionContribution) ?? 0,
909
1041
  extensionAPI: skillsBySource.get(PromptFileSource.ExtensionAPI) ?? 0,
1042
+ plugin: skillsBySource.get(PromptFileSource.Plugin) ?? 0,
910
1043
  skippedDuplicateName,
911
1044
  skippedMissingName,
912
1045
  skippedMissingDescription,
@@ -915,8 +1048,50 @@ let PromptsService = class PromptsService extends Disposable {
915
1048
  });
916
1049
  return result;
917
1050
  }
918
- async getHooks(token) {
919
- return this.cachedHooks.get(token);
1051
+ async getHooks(token, sessionResource) {
1052
+ const sw = StopWatch.create();
1053
+ const result = await this.cachedHooks.get(token);
1054
+ if (sessionResource) {
1055
+ const elapsed = sw.elapsed();
1056
+ const hookCount = result ? ( Object.values(result.hooks)).reduce((sum, arr) => sum + arr.length, 0) : 0;
1057
+ const discoveryInfo = await this.getHookDiscoveryInfo(token);
1058
+ const details = hookCount === 1 ? ( localize(7159, "Resolved {0} hook in {1}ms", hookCount, elapsed.toFixed(1))) : ( localize(7160, "Resolved {0} hooks in {1}ms", hookCount, elapsed.toFixed(1)));
1059
+ this._onDidLogDiscovery.fire({
1060
+ sessionResource,
1061
+ name: ( localize(7161, "Load Hooks")),
1062
+ details,
1063
+ discoveryInfo,
1064
+ category: "discovery"
1065
+ });
1066
+ }
1067
+ return result;
1068
+ }
1069
+ async getInstructionFiles(token, sessionResource) {
1070
+ const sw = StopWatch.create();
1071
+ const result = await this.listPromptFiles(PromptsType.instructions, token);
1072
+ if (sessionResource) {
1073
+ const elapsed = sw.elapsed();
1074
+ const discoveryInfo = await this.getInstructionsDiscoveryInfo(token);
1075
+ const details = result.length === 1 ? ( localize(
1076
+ 7162,
1077
+ "Resolved {0} instruction in {1}ms",
1078
+ result.length,
1079
+ elapsed.toFixed(1)
1080
+ )) : ( localize(
1081
+ 7163,
1082
+ "Resolved {0} instructions in {1}ms",
1083
+ result.length,
1084
+ elapsed.toFixed(1)
1085
+ ));
1086
+ this._onDidLogDiscovery.fire({
1087
+ sessionResource,
1088
+ name: ( localize(7164, "Load Instructions")),
1089
+ details,
1090
+ discoveryInfo,
1091
+ category: "discovery"
1092
+ });
1093
+ }
1094
+ return result;
920
1095
  }
921
1096
  async computeHooks(token) {
922
1097
  const useChatHooks = this.configurationService.getValue(PromptsConfig.USE_CHAT_HOOKS);
@@ -925,15 +1100,9 @@ let PromptsService = class PromptsService extends Disposable {
925
1100
  }
926
1101
  const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
927
1102
  const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
928
- if (hookFiles.length === 0) {
929
- this.logger.trace("[PromptsService] No hook files found.");
930
- return undefined;
931
- }
932
1103
  this.logger.trace(`[PromptsService] Found ${hookFiles.length} hook file(s).`);
933
1104
  const userHomeUri = await this.pathService.userHome();
934
1105
  const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
935
- const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
936
- const workspaceRootUri = workspaceFolder?.uri;
937
1106
  let hasDisabledClaudeHooks = false;
938
1107
  const collectedHooks = {
939
1108
  [HookType.SessionStart]: [],
@@ -945,10 +1114,13 @@ let PromptsService = class PromptsService extends Disposable {
945
1114
  [HookType.SubagentStop]: [],
946
1115
  [HookType.Stop]: []
947
1116
  };
1117
+ const defaultFolder = this.workspaceService.getWorkspace().folders[0];
948
1118
  for (const hookFile of hookFiles) {
949
1119
  try {
950
1120
  const content = await this.fileService.readFile(hookFile.uri);
951
1121
  const json = parse(( content.value.toString()));
1122
+ const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(hookFile.uri) ?? defaultFolder;
1123
+ const workspaceRootUri = hookWorkspaceFolder?.uri;
952
1124
  const {
953
1125
  format,
954
1126
  hooks,
@@ -988,6 +1160,12 @@ let PromptsService = class PromptsService extends Disposable {
988
1160
  this.logger.warn(`[PromptsService] Failed to parse hook file: ${hookFile.uri}`, error);
989
1161
  }
990
1162
  }
1163
+ const plugins = this.agentPluginService.plugins.get();
1164
+ for (const plugin of plugins) {
1165
+ for (const hook of plugin.hooks.get()) {
1166
+ collectedHooks[hook.type].push(...hook.hooks);
1167
+ }
1168
+ }
991
1169
  const hasHooks = ( ( Object.values(collectedHooks)).some(arr => arr.length > 0));
992
1170
  if (!hasHooks) {
993
1171
  this.logger.trace("[PromptsService] No valid hooks collected.");
@@ -1002,23 +1180,52 @@ let PromptsService = class PromptsService extends Disposable {
1002
1180
  hasDisabledClaudeHooks
1003
1181
  };
1004
1182
  }
1005
- async getPromptDiscoveryInfo(type, token) {
1183
+ async getPromptDiscoveryInfo(type, token, sessionResource) {
1184
+ if (sessionResource) {
1185
+ this._onDidLogDiscovery.fire({
1186
+ sessionResource,
1187
+ name: ( localize(7165, "Discovery {0} (Start)", type)),
1188
+ category: "discovery"
1189
+ });
1190
+ }
1006
1191
  const files = [];
1192
+ let result;
1007
1193
  if (type === PromptsType.skill) {
1008
- return this.getSkillDiscoveryInfo(token);
1194
+ result = await this.getSkillDiscoveryInfo(token);
1009
1195
  } else if (type === PromptsType.agent) {
1010
- return this.getAgentDiscoveryInfo(token);
1196
+ result = await this.getAgentDiscoveryInfo(token);
1011
1197
  } else if (type === PromptsType.prompt) {
1012
- return this.getPromptSlashCommandDiscoveryInfo(token);
1198
+ result = await this.getPromptSlashCommandDiscoveryInfo(token);
1013
1199
  } else if (type === PromptsType.instructions) {
1014
- return this.getInstructionsDiscoveryInfo(token);
1200
+ result = await this.getInstructionsDiscoveryInfo(token);
1015
1201
  } else if (type === PromptsType.hook) {
1016
- return this.getHookDiscoveryInfo(token);
1202
+ result = await this.getHookDiscoveryInfo(token);
1203
+ } else {
1204
+ result = {
1205
+ type,
1206
+ files
1207
+ };
1017
1208
  }
1018
- return {
1019
- type,
1020
- files
1021
- };
1209
+ const loadedCount = result.files.filter(f => f.status === "loaded").length;
1210
+ const skippedCount = result.files.filter(f => f.status === "skipped").length;
1211
+ if (!result.sourceFolders) {
1212
+ const sourceFolders = await this._collectSourceFolderDiagnostics(type, result.files.filter(f => f.status === "loaded"));
1213
+ result = {
1214
+ ...result,
1215
+ sourceFolders
1216
+ };
1217
+ }
1218
+ if (sessionResource) {
1219
+ const details = ( localize(7166, "{0} loaded, {1} skipped", loadedCount, skippedCount));
1220
+ this._onDidLogDiscovery.fire({
1221
+ sessionResource,
1222
+ name: ( localize(7167, "Discovery {0} (End)", type)),
1223
+ details,
1224
+ discoveryInfo: result,
1225
+ category: "discovery"
1226
+ });
1227
+ }
1228
+ return result;
1022
1229
  }
1023
1230
  async getSkillDiscoveryInfo(token) {
1024
1231
  const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
@@ -1031,17 +1238,21 @@ let PromptsService = class PromptsService extends Disposable {
1031
1238
  skipReason: "disabled",
1032
1239
  extensionId: promptPath.extension?.identifier?.value
1033
1240
  })));
1241
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, []);
1034
1242
  return {
1035
1243
  type: PromptsType.skill,
1036
- files
1244
+ files,
1245
+ sourceFolders
1037
1246
  };
1038
1247
  }
1039
1248
  const {
1040
1249
  files
1041
1250
  } = await this.computeSkillDiscoveryInfo(token);
1251
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, files.filter(f => f.status === "loaded"));
1042
1252
  return {
1043
1253
  type: PromptsType.skill,
1044
- files
1254
+ files,
1255
+ sourceFolders
1045
1256
  };
1046
1257
  }
1047
1258
  async computeSkillDiscoveryInfo(token) {
@@ -1052,10 +1263,15 @@ let PromptsService = class PromptsService extends Disposable {
1052
1263
  const allSkills = [];
1053
1264
  const discoveredSkills = await this.fileLocator.findAgentSkills(token);
1054
1265
  const extensionSkills = await this.getExtensionPromptFiles(PromptsType.skill, token);
1266
+ const pluginSkills = this._pluginPromptFilesByType.get(PromptsType.skill) ?? [];
1055
1267
  allSkills.push(...discoveredSkills, ...( extensionSkills.map(extPath => ({
1056
1268
  fileUri: extPath.uri,
1057
1269
  storage: extPath.storage,
1058
1270
  source: extPath.source === ExtensionAgentSourceType.contribution ? PromptFileSource.ExtensionContribution : PromptFileSource.ExtensionAPI
1271
+ }))), ...( pluginSkills.map(p => ({
1272
+ fileUri: p.uri,
1273
+ storage: p.storage,
1274
+ source: PromptFileSource.Plugin
1059
1275
  }))));
1060
1276
  const getPriority = skill => {
1061
1277
  if (skill.storage === PromptsStorage.local) {
@@ -1064,13 +1280,16 @@ let PromptsService = class PromptsService extends Disposable {
1064
1280
  if (skill.storage === PromptsStorage.user) {
1065
1281
  return 1;
1066
1282
  }
1067
- if (skill.source === PromptFileSource.ExtensionAPI) {
1283
+ if (skill.storage === PromptsStorage.plugin) {
1068
1284
  return 2;
1069
1285
  }
1070
- if (skill.source === PromptFileSource.ExtensionContribution) {
1286
+ if (skill.source === PromptFileSource.ExtensionAPI) {
1071
1287
  return 3;
1072
1288
  }
1073
- return 4;
1289
+ if (skill.source === PromptFileSource.ExtensionContribution) {
1290
+ return 4;
1291
+ }
1292
+ return 5;
1074
1293
  };
1075
1294
  allSkills.sort((a, b) => getPriority(a) - getPriority(b));
1076
1295
  const extensionIdByUri = ( new Map());
@@ -1152,7 +1371,7 @@ let PromptsService = class PromptsService extends Disposable {
1152
1371
  seenNames.add(sanitizedName);
1153
1372
  nameToUri.set(sanitizedName, uri);
1154
1373
  const disableModelInvocation = parsedFile.header?.disableModelInvocation === true;
1155
- const userInvokable = parsedFile.header?.userInvokable !== false;
1374
+ const userInvocable = parsedFile.header?.userInvocable !== false;
1156
1375
  files.push({
1157
1376
  uri,
1158
1377
  storage,
@@ -1162,7 +1381,7 @@ let PromptsService = class PromptsService extends Disposable {
1162
1381
  extensionId,
1163
1382
  source,
1164
1383
  disableModelInvocation,
1165
- userInvokable
1384
+ userInvocable
1166
1385
  });
1167
1386
  skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
1168
1387
  } catch (e) {
@@ -1226,9 +1445,11 @@ let PromptsService = class PromptsService extends Disposable {
1226
1445
  });
1227
1446
  }
1228
1447
  }
1448
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.agent, files.filter(f => f.status === "loaded"));
1229
1449
  return {
1230
1450
  type: PromptsType.agent,
1231
- files
1451
+ files,
1452
+ sourceFolders
1232
1453
  };
1233
1454
  }
1234
1455
  async getPromptSlashCommandDiscoveryInfo(token) {
@@ -1259,9 +1480,11 @@ let PromptsService = class PromptsService extends Disposable {
1259
1480
  });
1260
1481
  }
1261
1482
  }
1483
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.prompt, files.filter(f => f.status === "loaded"));
1262
1484
  return {
1263
1485
  type: PromptsType.prompt,
1264
- files
1486
+ files,
1487
+ sourceFolders
1265
1488
  };
1266
1489
  }
1267
1490
  async getInstructionsDiscoveryInfo(token) {
@@ -1292,17 +1515,17 @@ let PromptsService = class PromptsService extends Disposable {
1292
1515
  });
1293
1516
  }
1294
1517
  }
1518
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.instructions, files.filter(f => f.status === "loaded"));
1295
1519
  return {
1296
1520
  type: PromptsType.instructions,
1297
- files
1521
+ files,
1522
+ sourceFolders
1298
1523
  };
1299
1524
  }
1300
1525
  async getHookDiscoveryInfo(token) {
1301
1526
  const files = [];
1302
1527
  const userHomeUri = await this.pathService.userHome();
1303
1528
  const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
1304
- const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
1305
- const workspaceRootUri = workspaceFolder?.uri;
1306
1529
  const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
1307
1530
  const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
1308
1531
  for (const promptPath of hookFiles) {
@@ -1336,6 +1559,8 @@ let PromptsService = class PromptsService extends Disposable {
1336
1559
  });
1337
1560
  continue;
1338
1561
  }
1562
+ const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(uri) ?? this.workspaceService.getWorkspace().folders[0];
1563
+ const workspaceRootUri = hookWorkspaceFolder?.uri;
1339
1564
  const {
1340
1565
  disabledAllHooks
1341
1566
  } = parseHooksFromFile(uri, json, workspaceRootUri, userHome);
@@ -1369,13 +1594,15 @@ let PromptsService = class PromptsService extends Disposable {
1369
1594
  });
1370
1595
  }
1371
1596
  }
1597
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.hook, files.filter(f => f.status === "loaded"));
1372
1598
  return {
1373
1599
  type: PromptsType.hook,
1374
- files
1600
+ files,
1601
+ sourceFolders
1375
1602
  };
1376
1603
  }
1377
1604
  };
1378
- PromptsService = ( __decorate([( __param(0, ILogService)), ( __param(1, ILabelService)), ( __param(2, IModelService)), ( __param(3, IInstantiationService)), ( __param(4, IUserDataProfileService)), ( __param(5, IConfigurationService)), ( __param(6, IFileService)), ( __param(7, IFilesConfigurationService)), ( __param(8, IStorageService)), ( __param(9, IExtensionService)), ( __param(10, ITelemetryService)), ( __param(11, IWorkspaceContextService)), ( __param(12, IPathService))], PromptsService));
1605
+ PromptsService = ( __decorate([( __param(0, ILogService)), ( __param(1, ILabelService)), ( __param(2, IModelService)), ( __param(3, IInstantiationService)), ( __param(4, IUserDataProfileService)), ( __param(5, IConfigurationService)), ( __param(6, IFileService)), ( __param(7, IFilesConfigurationService)), ( __param(8, IStorageService)), ( __param(9, IExtensionService)), ( __param(10, ITelemetryService)), ( __param(11, IWorkspaceContextService)), ( __param(12, IPathService)), ( __param(13, IContextKeyService)), ( __param(14, IAgentPluginService))], PromptsService));
1379
1606
  class CachedPromise extends Disposable {
1380
1607
  constructor(computeFn, getEvent, delay = 0) {
1381
1608
  super();
@@ -1468,6 +1695,11 @@ var IAgentSource;
1468
1695
  extensionId: promptPath.extension.identifier,
1469
1696
  type: promptPath.source
1470
1697
  };
1698
+ } else if (promptPath.storage === PromptsStorage.plugin) {
1699
+ return {
1700
+ storage: PromptsStorage.plugin,
1701
+ pluginUri: promptPath.pluginUri
1702
+ };
1471
1703
  } else {
1472
1704
  return {
1473
1705
  storage: promptPath.storage