@codingame/monaco-vscode-chat-service-override 26.2.2 → 28.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 (356) hide show
  1. package/index.js +35 -2
  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 +89 -0
  7. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +251 -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 +278 -0
  10. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +76 -0
  11. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +299 -0
  12. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.d.ts +67 -0
  13. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.js +263 -0
  14. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +85 -0
  15. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +397 -0
  16. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -2
  17. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +27 -40
  18. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +9 -3
  19. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +74 -18
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +1 -0
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +54 -8
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +87 -53
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +71 -15
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +43 -21
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +13 -5
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +22 -3
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +1 -0
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +154 -0
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -8
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +53 -43
  35. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.d.ts +4 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +85 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +8 -0
  38. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +33 -0
  39. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  40. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +18 -32
  41. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  42. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +13 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -17
  44. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +49 -13
  45. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.d.ts +58 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +537 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.d.ts +17 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +55 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +26 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.js +9 -0
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/media/agentPluginEditor.css +32 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +48 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +282 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +55 -0
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +634 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +10 -11
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +74 -67
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +7 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +27 -18
  61. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.d.ts +1 -0
  62. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +4 -2
  63. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +5 -5
  65. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +2 -0
  66. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +90 -51
  67. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +20 -5
  68. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +3 -1
  69. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +43 -27
  70. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +7 -2
  71. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +3 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +84 -22
  73. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  74. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.d.ts → localAgentSessionsController.d.ts} +7 -4
  75. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.js → localAgentSessionsController.js} +24 -17
  76. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +23 -0
  77. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +171 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +52 -0
  79. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +20 -0
  80. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +179 -0
  81. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +987 -0
  82. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.d.ts +1 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +246 -0
  84. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +56 -0
  85. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +26 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +130 -0
  87. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +878 -0
  88. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +22 -0
  89. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +38 -0
  90. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +1 -0
  91. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +83 -0
  92. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +45 -0
  93. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +165 -0
  94. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +75 -0
  95. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +692 -0
  96. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +936 -0
  97. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +62 -0
  98. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +702 -0
  99. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +2 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +30 -1
  101. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.d.ts +32 -0
  102. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.js +26 -0
  103. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +36 -26
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +622 -391
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +18 -0
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +419 -0
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.d.ts +12 -0
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.js +46 -0
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +34 -0
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +198 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +55 -0
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +314 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.d.ts +23 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +64 -0
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +5 -0
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +84 -0
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +27 -0
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +110 -0
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.d.ts +46 -0
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +170 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.d.ts +71 -0
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +611 -0
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +125 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +504 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.d.ts +10 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +914 -0
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.d.ts +19 -0
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +128 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +61 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +467 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +31 -0
  132. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +113 -0
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +14 -0
  134. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +126 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +38 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +279 -0
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +18 -0
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +122 -0
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.d.ts +47 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +85 -0
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +788 -0
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +2 -5
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +32 -36
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +6 -24
  146. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
  147. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
  148. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
  149. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
  150. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +3 -3
  151. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +2 -1
  152. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +2 -2
  153. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
  154. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +12 -12
  155. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  156. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +16 -15
  157. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
  158. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
  159. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +63 -76
  160. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +26 -15
  161. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatManagementEditor.css +2 -2
  162. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
  163. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
  164. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +24 -7
  165. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +40 -413
  166. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +10 -0
  167. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +38 -6
  168. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +5 -1
  169. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +56 -46
  170. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +15 -11
  171. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +52 -0
  172. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +138 -0
  173. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +11 -1
  174. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +166 -41
  175. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +6 -0
  176. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +37 -23
  177. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +17 -0
  178. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +394 -0
  179. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  180. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +118 -63
  181. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
  182. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +28 -0
  183. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.d.ts +66 -0
  184. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +245 -0
  185. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.d.ts +78 -0
  186. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.js +234 -0
  187. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +88 -14
  188. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +624 -68
  189. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.d.ts +41 -0
  190. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.js +22 -0
  191. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -0
  192. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +88 -24
  193. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +28 -19
  194. package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.d.ts +14 -0
  195. package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.js +62 -0
  196. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.d.ts +36 -0
  197. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +110 -0
  198. package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.d.ts +10 -0
  199. package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.js +39 -0
  200. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +3 -3
  201. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +6 -6
  202. package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.d.ts +10 -0
  203. package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.js +39 -0
  204. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +26 -0
  205. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +175 -0
  206. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.d.ts +99 -0
  207. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +489 -0
  208. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
  209. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +19 -1
  210. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +364 -279
  211. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.d.ts +18 -1
  212. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +69 -6
  213. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  214. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +9 -9
  215. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  216. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.d.ts +4 -0
  217. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
  218. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
  219. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  220. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +4 -4
  221. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.d.ts +22 -0
  222. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +76 -0
  223. package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.d.ts +5 -0
  224. package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.js +30 -0
  225. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.d.ts +2 -0
  226. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +67 -38
  227. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +20 -1
  228. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +187 -74
  229. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +31 -0
  230. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +242 -0
  231. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.d.ts +34 -0
  232. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +45 -0
  233. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
  234. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +33 -0
  235. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +311 -0
  236. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  237. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.d.ts +4 -0
  238. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +10 -1
  239. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.d.ts +2 -0
  240. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +29 -14
  241. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +8 -9
  242. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +126 -30
  243. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +9 -5
  244. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
  245. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +2 -2
  246. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.d.ts +15 -4
  247. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +46 -9
  248. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +8 -1
  249. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +65 -37
  250. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +6 -5
  251. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -20
  252. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +15 -6
  253. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +40 -0
  254. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +28 -0
  255. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +190 -0
  256. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +11 -0
  257. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +44 -0
  258. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +208 -0
  259. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +19 -9
  260. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +261 -105
  261. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +21 -2
  262. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +7 -2
  263. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -6
  264. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +16 -8
  265. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +13 -4
  266. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +144 -11
  267. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +36 -3
  268. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +5 -3
  269. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +2 -2
  270. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +57 -0
  271. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +29 -0
  272. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +119 -0
  273. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +748 -0
  274. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +146 -0
  275. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +672 -0
  276. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
  277. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +3 -16
  278. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +7 -50
  279. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +2 -1
  280. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +2 -2
  281. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +1 -6
  282. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +4 -8
  283. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -2
  284. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +10 -9
  285. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +1 -1
  286. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +26 -1
  287. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +293 -94
  288. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.d.ts +10 -1
  289. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +86 -30
  290. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +121 -0
  291. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +1422 -0
  292. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
  293. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +48 -14
  294. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +404 -132
  295. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +17 -2
  296. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +40 -28
  297. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +3 -0
  298. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +13 -0
  299. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  300. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.d.ts +14 -2
  301. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +54 -5
  302. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +12 -5
  303. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +27 -4
  304. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +265 -25
  305. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +6 -11
  306. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +18 -81
  307. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +2 -3
  308. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +10 -10
  309. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
  310. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  311. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
  312. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +6 -6
  313. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  314. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  315. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +6 -2
  316. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  317. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +35 -26
  318. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +0 -1
  319. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +1 -5
  320. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +3 -3
  321. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
  322. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +4 -1
  323. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +13 -11
  324. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
  325. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +3 -1
  326. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
  327. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
  328. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
  329. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
  330. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  331. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
  332. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  333. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
  334. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +17 -0
  335. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +302 -69
  336. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +3 -1
  337. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +8 -0
  338. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -10
  339. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +7 -0
  340. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +63 -21
  341. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +8 -0
  342. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +31 -0
  343. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
  344. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
  345. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
  346. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  347. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +7 -1
  348. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +46 -17
  349. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +0 -72
  350. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +0 -587
  351. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.d.ts +0 -12
  352. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +0 -51
  353. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +0 -71
  354. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +0 -293
  355. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +0 -2
  356. 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';
@@ -25,17 +26,25 @@ import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platfo
25
26
  import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
26
27
  import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
27
28
  import { getCleanPromptName, AGENT_MD_FILENAME, CLAUDE_CONFIG_FOLDER, CLAUDE_MD_FILENAME, CLAUDE_LOCAL_MD_FILENAME, PromptFileSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
28
- import { PromptsType, PROMPT_LANGUAGE_ID, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
29
+ import { PromptsType, PROMPT_LANGUAGE_ID, Target, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
29
30
  import { PromptFilesLocator } from '../utils/promptFilesLocator.js';
30
31
  import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
31
- 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
+ import { PromptsStorage, ExtensionAgentSourceType, SKILL_PROVIDER_ACTIVATION_EVENT, PROMPT_FILE_PROVIDER_ACTIVATION_EVENT, INSTRUCTIONS_PROVIDER_ACTIVATION_EVENT, CUSTOM_AGENT_PROVIDER_ACTIVATION_EVENT, AgentFileType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
32
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
- import { HookType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
35
+ import { parseSubagentHooksFromYaml } 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 { IWorkspaceTrustManagementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspaceTrust.service';
39
+ import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
40
+ import { getTarget, mapClaudeModels, mapClaudeTools } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptFileAttributes';
41
+ import { StopWatch } from '@codingame/monaco-vscode-api/vscode/vs/base/common/stopwatch';
42
+ import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
43
+ import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
44
+ import { getCanonicalPluginCommandId } from '../../plugins/agentPluginService.js';
45
+ import { IAgentPluginService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/plugins/agentPluginService.service';
46
+ import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
47
+ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
39
48
 
40
49
  class SkillMissingNameError extends Error {
41
50
  constructor(uri) {
@@ -73,7 +82,10 @@ let PromptsService = class PromptsService extends Disposable {
73
82
  extensionService,
74
83
  telemetryService,
75
84
  workspaceService,
76
- pathService
85
+ pathService,
86
+ contextKeyService,
87
+ agentPluginService,
88
+ workspaceTrustService
77
89
  ) {
78
90
  super();
79
91
  this.logger = logger;
@@ -89,7 +101,12 @@ let PromptsService = class PromptsService extends Disposable {
89
101
  this.telemetryService = telemetryService;
90
102
  this.workspaceService = workspaceService;
91
103
  this.pathService = pathService;
104
+ this.contextKeyService = contextKeyService;
105
+ this.agentPluginService = agentPluginService;
106
+ this.workspaceTrustService = workspaceTrustService;
92
107
  this.cachedParsedPromptFromModels = ( new ResourceMap());
108
+ this._onDidLogDiscovery = this._register(( new Emitter()));
109
+ this.onDidLogDiscovery = this._onDidLogDiscovery.event;
93
110
  this.cachedFileLocations = {};
94
111
  this.fileLocatorEvents = {};
95
112
  this.contributedFiles = {
@@ -99,39 +116,100 @@ let PromptsService = class PromptsService extends Disposable {
99
116
  [PromptsType.skill]: ( new ResourceMap()),
100
117
  [PromptsType.hook]: ( new ResourceMap())
101
118
  };
119
+ this._contributedWhenKeys = ( new Set());
120
+ this._contributedWhenClauses = ( new Map());
121
+ this._onDidContributedWhenChange = this._register(( new Emitter()));
122
+ this._onDidChangeInstructions = this._register(( new Emitter()));
123
+ this._onDidPluginPromptFilesChange = this._register(( new Emitter()));
124
+ this._onDidPluginHooksChange = this._register(( new Emitter()));
125
+ this._pluginPromptFilesByType = ( new Map());
102
126
  this.promptFileProviders = [];
103
127
  this.disabledPromptsStorageKeyPrefix = "chat.disabledPromptFiles.";
104
- this.fileLocator = this.instantiationService.createInstance(PromptFilesLocator);
128
+ this.fileLocator = this.createPromptFilesLocator();
105
129
  this._register(this.modelService.onModelRemoved(model => {
106
130
  this.cachedParsedPromptFromModels.delete(model.uri);
107
131
  }));
132
+ this._register(this.contextKeyService.onDidChangeContext(e => {
133
+ if (e.affectsSome(this._contributedWhenKeys)) {
134
+ for (const type of ( Object.keys(this.cachedFileLocations))) {
135
+ this.cachedFileLocations[type] = undefined;
136
+ }
137
+ this._onDidContributedWhenChange.fire();
138
+ }
139
+ }));
108
140
  const modelChangeEvent = this._register(( new ModelChangeTracker(this.modelService))).onDidPromptChange;
109
141
  this.cachedCustomAgents = this._register(( new CachedPromise(token => this.computeCustomAgents(token), () => Event.any(
110
142
  this.getFileLocatorEvent(PromptsType.agent),
111
- Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent)
143
+ Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent),
144
+ this._onDidContributedWhenChange.event,
145
+ Event.filter(
146
+ this.configurationService.onDidChangeConfiguration,
147
+ e => e.affectsConfiguration(PromptsConfig.USE_CUSTOM_AGENT_HOOKS)
148
+ )
112
149
  ))));
113
150
  this.cachedSlashCommands = this._register(( new CachedPromise(token => this.computePromptSlashCommands(token), () => Event.any(
114
151
  this.getFileLocatorEvent(PromptsType.prompt),
115
152
  this.getFileLocatorEvent(PromptsType.skill),
116
153
  Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt),
117
- Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
154
+ Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
155
+ this._onDidContributedWhenChange.event,
156
+ this._onDidPluginPromptFilesChange.event
118
157
  ))));
119
158
  this.cachedSkills = this._register(( new CachedPromise(token => this.computeAgentSkills(token), () => Event.any(
120
159
  this.getFileLocatorEvent(PromptsType.skill),
121
- Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill)
160
+ Event.filter(modelChangeEvent, e => e.promptType === PromptsType.skill),
161
+ this._onDidContributedWhenChange.event,
162
+ this._onDidPluginPromptFilesChange.event
122
163
  ))));
123
164
  this.cachedHooks = this._register(( new CachedPromise(
124
165
  token => this.computeHooks(token),
125
166
  () => Event.any(this.getFileLocatorEvent(PromptsType.hook), Event.filter(
126
167
  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
- ))
168
+ e => e.affectsConfiguration(PromptsConfig.USE_CHAT_HOOKS) || e.affectsConfiguration(PromptsConfig.USE_CLAUDE_HOOKS)
169
+ ), this._onDidPluginHooksChange.event, this.workspaceTrustService.onDidChangeTrust)
132
170
  )));
133
- this._register(this.cachedHooks.onDidChange(() => {}));
134
171
  this._register(this.cachedSkills.onDidChange(() => {}));
172
+ this._register(this.cachedHooks.onDidChange(() => {}));
173
+ this._register(
174
+ this.watchPluginPromptFilesForType(PromptsType.prompt, (plugin, reader) => plugin.commands.read(reader))
175
+ );
176
+ this._register(
177
+ this.watchPluginPromptFilesForType(PromptsType.skill, (plugin, reader) => plugin.skills.read(reader))
178
+ );
179
+ this._register(
180
+ this.watchPluginPromptFilesForType(PromptsType.agent, (plugin, reader) => plugin.agents.read(reader))
181
+ );
182
+ this._register(autorun(reader => {
183
+ const plugins = this.agentPluginService.plugins.read(reader);
184
+ for (const plugin of plugins) {
185
+ plugin.hooks.read(reader);
186
+ }
187
+ this._onDidPluginHooksChange.fire();
188
+ }));
189
+ }
190
+ watchPluginPromptFilesForType(type, getItems) {
191
+ return autorun(reader => {
192
+ const plugins = this.agentPluginService.plugins.read(reader);
193
+ const nextFiles = [];
194
+ for (const plugin of plugins) {
195
+ for (const item of getItems(plugin, reader)) {
196
+ nextFiles.push({
197
+ uri: item.uri,
198
+ storage: PromptsStorage.plugin,
199
+ type,
200
+ name: getCanonicalPluginCommandId(plugin, item.name),
201
+ pluginUri: plugin.uri
202
+ });
203
+ }
204
+ }
205
+ nextFiles.sort((a, b) => `${a.name ?? ""}|${( a.uri.toString())}`.localeCompare(`${b.name ?? ""}|${( b.uri.toString())}`));
206
+ this._pluginPromptFilesByType.set(type, nextFiles);
207
+ this.cachedFileLocations[type] = undefined;
208
+ this._onDidPluginPromptFilesChange.fire();
209
+ });
210
+ }
211
+ createPromptFilesLocator() {
212
+ return this.instantiationService.createInstance(PromptFilesLocator);
135
213
  }
136
214
  getFileLocatorEvent(type) {
137
215
  let event = this.fileLocatorEvents[type];
@@ -178,10 +256,41 @@ let PromptsService = class PromptsService extends Disposable {
178
256
  storage: PromptsStorage.local,
179
257
  type
180
258
  })))),
181
- this.getExtensionPromptFiles(type, token)
259
+ this.getExtensionPromptFiles(type, token),
260
+ this._pluginPromptFilesByType.get(type) ?? []
182
261
  ]);
183
262
  return [...prompts.flat()];
184
263
  }
264
+ async _collectSourceFolderDiagnostics(type, foundFiles) {
265
+ const resolvedFolders = await this.fileLocator.getSourceFoldersInDiscoveryOrder(type);
266
+ const results = [];
267
+ for (const folder of resolvedFolders) {
268
+ const fileCount = foundFiles.filter(f => f.uri.path.startsWith(folder.uri.path + "/")).length;
269
+ let exists = fileCount > 0;
270
+ let errorMessage;
271
+ if (!exists) {
272
+ try {
273
+ const stat = await this.fileService.stat(folder.uri);
274
+ exists = stat.isDirectory;
275
+ } catch (e) {
276
+ if (e instanceof FileOperationError && e.fileOperationResult === FileOperationResult.FILE_NOT_FOUND) {
277
+ exists = false;
278
+ } else {
279
+ exists = false;
280
+ errorMessage = e instanceof Error ? e.message : String(e);
281
+ }
282
+ }
283
+ }
284
+ results.push({
285
+ uri: folder.uri,
286
+ storage: folder.storage,
287
+ exists,
288
+ fileCount,
289
+ errorMessage
290
+ });
291
+ }
292
+ return results;
293
+ }
185
294
  registerPromptFileProvider(extension, type, provider) {
186
295
  const providerEntry = {
187
296
  extension,
@@ -192,26 +301,28 @@ let PromptsService = class PromptsService extends Disposable {
192
301
  const disposables = ( new DisposableStore());
193
302
  if (provider.onDidChangePromptFiles) {
194
303
  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
- }
304
+ this.invalidatePromptFileCache(type);
208
305
  }));
209
306
  }
307
+ this.invalidatePromptFileCache(type);
308
+ disposables.add({
309
+ dispose: () => {
310
+ const index = this.promptFileProviders.findIndex(p => p === providerEntry);
311
+ if (index >= 0) {
312
+ this.promptFileProviders.splice(index, 1);
313
+ this.invalidatePromptFileCache(type);
314
+ }
315
+ }
316
+ });
317
+ return disposables;
318
+ }
319
+ invalidatePromptFileCache(type) {
210
320
  if (type === PromptsType.agent) {
211
321
  this.cachedFileLocations[PromptsType.agent] = undefined;
212
322
  this.cachedCustomAgents.refresh();
213
323
  } else if (type === PromptsType.instructions) {
214
324
  this.cachedFileLocations[PromptsType.instructions] = undefined;
325
+ this._onDidChangeInstructions.fire();
215
326
  } else if (type === PromptsType.prompt) {
216
327
  this.cachedFileLocations[PromptsType.prompt] = undefined;
217
328
  this.cachedSlashCommands.refresh();
@@ -220,28 +331,6 @@ let PromptsService = class PromptsService extends Disposable {
220
331
  this.cachedSkills.refresh();
221
332
  this.cachedSlashCommands.refresh();
222
333
  }
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
334
  }
246
335
  async listFromProviders(type, activationEvent, token) {
247
336
  const result = [];
@@ -268,7 +357,9 @@ let PromptsService = class PromptsService extends Disposable {
268
357
  storage: PromptsStorage.extension,
269
358
  type,
270
359
  extension: providerEntry.extension,
271
- source: ExtensionAgentSourceType.provider
360
+ source: ExtensionAgentSourceType.provider,
361
+ name: file.name,
362
+ description: file.description
272
363
  });
273
364
  }
274
365
  } catch (e) {
@@ -296,6 +387,8 @@ let PromptsService = class PromptsService extends Disposable {
296
387
  storage: PromptsStorage.user,
297
388
  type
298
389
  }))));
390
+ case PromptsStorage.plugin:
391
+ return this._pluginPromptFilesByType.get(type) ?? [];
299
392
  default:
300
393
  throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
301
394
  }
@@ -303,7 +396,19 @@ let PromptsService = class PromptsService extends Disposable {
303
396
  async getExtensionPromptFiles(type, token) {
304
397
  await this.extensionService.whenInstalledExtensionsRegistered();
305
398
  const settledResults = await Promise.allSettled(( this.contributedFiles[type].values()));
306
- const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value));
399
+ const contributedFiles = ( settledResults.filter(result => result.status === "fulfilled").map(result => result.value)).filter(file => {
400
+ if (!file.when) {
401
+ return true;
402
+ }
403
+ const expr = ContextKeyExpr.deserialize(file.when);
404
+ if (!expr) {
405
+ this.logger.warn(
406
+ `[getExtensionPromptFiles] Ignoring contributed prompt file with invalid when clause: ${file.when}`
407
+ );
408
+ return false;
409
+ }
410
+ return this.contextKeyService.contextMatchesRules(expr);
411
+ });
307
412
  const activationEvent = this.getProviderActivationEvent(type);
308
413
  if (!activationEvent) {
309
414
  return contributedFiles;
@@ -327,16 +432,7 @@ let PromptsService = class PromptsService extends Disposable {
327
432
  }
328
433
  async getSourceFolders(type) {
329
434
  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) {
435
+ if (type === PromptsType.hook) {
340
436
  const hooksFolders = await this.fileLocator.getHookSourceFolders();
341
437
  for (const uri of hooksFolders) {
342
438
  result.push({
@@ -370,8 +466,8 @@ let PromptsService = class PromptsService extends Disposable {
370
466
  get onDidChangeSlashCommands() {
371
467
  return this.cachedSlashCommands.onDidChange;
372
468
  }
373
- async getPromptSlashCommands(token) {
374
- return this.cachedSlashCommands.get(token);
469
+ async getPromptSlashCommands(token, sessionResource) {
470
+ return await this.cachedSlashCommands.get(token);
375
471
  }
376
472
  async computePromptSlashCommands(token) {
377
473
  const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
@@ -411,7 +507,7 @@ let PromptsService = class PromptsService extends Disposable {
411
507
  return result;
412
508
  }
413
509
  isValidSlashCommandName(command) {
414
- return command.match(/^[\p{L}\d_\-\.]+$/u) !== null;
510
+ return command.match(/^[\p{L}\d_\-\.:]+$/u) !== null;
415
511
  }
416
512
  async resolvePromptSlashCommand(name, token) {
417
513
  const commands = await this.getPromptSlashCommands(token);
@@ -419,7 +515,7 @@ let PromptsService = class PromptsService extends Disposable {
419
515
  }
420
516
  asChatPromptSlashCommand(parsedPromptFile, promptPath) {
421
517
  let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
422
- name = name.replace(/[^\p{L}\d_\-\.]+/gu, "-");
518
+ name = name.replace(/[^\p{L}\d_\-\.:]+/gu, "-");
423
519
  return {
424
520
  name: name,
425
521
  description: parsedPromptFile?.header?.description ?? promptPath.description,
@@ -439,23 +535,47 @@ let PromptsService = class PromptsService extends Disposable {
439
535
  get onDidChangeCustomAgents() {
440
536
  return this.cachedCustomAgents.onDidChange;
441
537
  }
442
- async getCustomAgents(token) {
443
- return this.cachedCustomAgents.get(token);
538
+ get onDidChangeInstructions() {
539
+ return Event.any(
540
+ this.getFileLocatorEvent(PromptsType.instructions),
541
+ this._onDidContributedWhenChange.event,
542
+ this._onDidChangeInstructions.event
543
+ );
544
+ }
545
+ async getCustomAgents(token, sessionResource) {
546
+ const sw = StopWatch.create();
547
+ const result = await this.cachedCustomAgents.get(token);
548
+ if (sessionResource) {
549
+ const elapsed = sw.elapsed();
550
+ const discoveryInfo = await this.getAgentDiscoveryInfo(token);
551
+ const details = result.length === 1 ? ( localize(7327, "Resolved {0} agent in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7328, "Resolved {0} agents in {1}ms", result.length, elapsed.toFixed(1)));
552
+ this._onDidLogDiscovery.fire({
553
+ sessionResource,
554
+ name: ( localize(7329, "Load Agents")),
555
+ details,
556
+ discoveryInfo,
557
+ category: "discovery"
558
+ });
559
+ }
560
+ return result;
444
561
  }
445
562
  async computeCustomAgents(token) {
446
563
  let agentFiles = await this.listPromptFiles(PromptsType.agent, token);
447
564
  const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
448
565
  agentFiles = agentFiles.filter(promptPath => !( disabledAgents.has(promptPath.uri)));
566
+ const userHomeUri = await this.pathService.userHome();
567
+ const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
568
+ const defaultFolder = this.workspaceService.getWorkspace().folders[0];
449
569
  const customAgentsResults = await Promise.allSettled(( agentFiles.map(async promptPath => {
450
570
  const uri = promptPath.uri;
451
571
  const ast = await this.parseNew(uri, token);
452
572
  let metadata;
453
573
  if (ast.header) {
454
574
  const advanced = ast.header.getAttribute(PromptHeaderAttributes.advancedOptions);
455
- if (advanced && advanced.value.type === "object") {
575
+ if (advanced && advanced.value.type === "map") {
456
576
  metadata = {};
457
577
  for (const [key, value] of Object.entries(advanced.value)) {
458
- if (["string", "number", "boolean"].includes(value.type)) {
578
+ if (value.type === "scalar") {
459
579
  metadata[key] = value;
460
580
  }
461
581
  }
@@ -493,14 +613,14 @@ let PromptsService = class PromptsService extends Disposable {
493
613
  source,
494
614
  target,
495
615
  visibility: {
496
- userInvokable: true,
497
- agentInvokable: true
616
+ userInvocable: true,
617
+ agentInvocable: true
498
618
  }
499
619
  };
500
620
  }
501
621
  const visibility = {
502
- userInvokable: ast.header.userInvokable !== false,
503
- agentInvokable: ast.header.infer === true || ast.header.disableModelInvocation !== true
622
+ userInvocable: ast.header.userInvocable !== false,
623
+ agentInvocable: ast.header.infer !== undefined ? ast.header.infer === true : ast.header.disableModelInvocation !== true
504
624
  };
505
625
  let model = ast.header.model;
506
626
  if (target === Target.Claude && model) {
@@ -516,6 +636,14 @@ let PromptsService = class PromptsService extends Disposable {
516
636
  if (target === Target.Claude && tools) {
517
637
  tools = mapClaudeTools(tools);
518
638
  }
639
+ let hooks;
640
+ const useCustomAgentHooks = this.configurationService.getValue(PromptsConfig.USE_CUSTOM_AGENT_HOOKS);
641
+ const hooksRaw = ast.header.hooksRaw;
642
+ if (useCustomAgentHooks && hooksRaw) {
643
+ const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(uri) ?? defaultFolder;
644
+ const workspaceRootUri = hookWorkspaceFolder?.uri;
645
+ hooks = parseSubagentHooksFromYaml(hooksRaw, workspaceRootUri, userHome, target);
646
+ }
519
647
  return {
520
648
  uri,
521
649
  name,
@@ -527,6 +655,7 @@ let PromptsService = class PromptsService extends Disposable {
527
655
  target,
528
656
  visibility,
529
657
  agents,
658
+ hooks,
530
659
  agentInstructions,
531
660
  source
532
661
  };
@@ -562,7 +691,7 @@ let PromptsService = class PromptsService extends Disposable {
562
691
  }
563
692
  return ( new PromptFileParser()).parse(uri, ( fileContent.value.toString()));
564
693
  }
565
- registerContributedFile(type, uri, extension, name, description) {
694
+ registerContributedFile(type, uri, extension, name, description, when) {
566
695
  const bucket = this.contributedFiles[type];
567
696
  if (( bucket.has(uri))) {
568
697
  return Disposable.None;
@@ -595,6 +724,7 @@ let PromptsService = class PromptsService extends Disposable {
595
724
  uri,
596
725
  name,
597
726
  description,
727
+ when,
598
728
  storage: PromptsStorage.extension,
599
729
  type,
600
730
  extension,
@@ -602,7 +732,11 @@ let PromptsService = class PromptsService extends Disposable {
602
732
  };
603
733
  })();
604
734
  bucket.set(uri, entryPromise);
735
+ if (when) {
736
+ this._contributedWhenClauses.set(`${type}/${( uri.toString())}`, when);
737
+ }
605
738
  const flushCachesIfRequired = () => {
739
+ this._updateContributedWhenKeys();
606
740
  this.cachedFileLocations[type] = undefined;
607
741
  switch (type) {
608
742
  case PromptsType.agent:
@@ -621,10 +755,20 @@ let PromptsService = class PromptsService extends Disposable {
621
755
  return {
622
756
  dispose: () => {
623
757
  bucket.delete(uri);
758
+ this._contributedWhenClauses.delete(`${type}/${( uri.toString())}`);
624
759
  flushCachesIfRequired();
625
760
  }
626
761
  };
627
762
  }
763
+ _updateContributedWhenKeys() {
764
+ this._contributedWhenKeys.clear();
765
+ for (const whenClause of ( this._contributedWhenClauses.values())) {
766
+ const expr = ContextKeyExpr.deserialize(whenClause);
767
+ for (const key of expr?.keys() ?? []) {
768
+ this._contributedWhenKeys.add(key);
769
+ }
770
+ }
771
+ }
628
772
  getPromptLocationLabel(promptPath) {
629
773
  switch (promptPath.storage) {
630
774
  case PromptsStorage.local:
@@ -632,17 +776,19 @@ let PromptsService = class PromptsService extends Disposable {
632
776
  relative: true
633
777
  });
634
778
  case PromptsStorage.user:
635
- return localize(6569, "User Data");
779
+ return localize(7330, "User Data");
636
780
  case PromptsStorage.extension:
637
781
  {
638
782
  return localize(
639
- 6570,
783
+ 7331,
640
784
  "Extension: {0}",
641
785
  promptPath.extension.displayName ?? promptPath.extension.id
642
786
  );
643
787
  }
788
+ case PromptsStorage.plugin:
789
+ return localize(7332, "Plugin");
644
790
  default:
645
- throw ( new Error("Unknown prompt storage type"));
791
+ assertNever(promptPath, "Unknown prompt storage type");
646
792
  }
647
793
  }
648
794
  async listNestedAgentMDs(token) {
@@ -843,12 +989,26 @@ let PromptsService = class PromptsService extends Disposable {
843
989
  get onDidChangeSkills() {
844
990
  return this.cachedSkills.onDidChange;
845
991
  }
846
- async findAgentSkills(token) {
992
+ async findAgentSkills(token, sessionResource) {
847
993
  const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
848
994
  if (!useAgentSkills) {
849
995
  return undefined;
850
996
  }
851
- return this.cachedSkills.get(token);
997
+ const sw = StopWatch.create();
998
+ const result = await this.cachedSkills.get(token);
999
+ if (sessionResource) {
1000
+ const elapsed = sw.elapsed();
1001
+ const discoveryInfo = await this.getSkillDiscoveryInfo(token);
1002
+ const details = result.length === 1 ? ( localize(7333, "Resolved {0} skill in {1}ms", result.length, elapsed.toFixed(1))) : ( localize(7334, "Resolved {0} skills in {1}ms", result.length, elapsed.toFixed(1)));
1003
+ this._onDidLogDiscovery.fire({
1004
+ sessionResource,
1005
+ name: ( localize(7335, "Load Skills")),
1006
+ details,
1007
+ discoveryInfo,
1008
+ category: "discovery"
1009
+ });
1010
+ }
1011
+ return result;
852
1012
  }
853
1013
  async computeAgentSkills(token) {
854
1014
  const {
@@ -865,7 +1025,7 @@ let PromptsService = class PromptsService extends Disposable {
865
1025
  name: file.name,
866
1026
  description: sanitizedDescription,
867
1027
  disableModelInvocation: file.disableModelInvocation ?? false,
868
- userInvokable: file.userInvokable ?? true
1028
+ userInvocable: file.userInvocable ?? true
869
1029
  });
870
1030
  }
871
1031
  }
@@ -907,6 +1067,7 @@ let PromptsService = class PromptsService extends Disposable {
907
1067
  configPersonal: skillsBySource.get(PromptFileSource.ConfigPersonal) ?? 0,
908
1068
  extensionContribution: skillsBySource.get(PromptFileSource.ExtensionContribution) ?? 0,
909
1069
  extensionAPI: skillsBySource.get(PromptFileSource.ExtensionAPI) ?? 0,
1070
+ plugin: skillsBySource.get(PromptFileSource.Plugin) ?? 0,
910
1071
  skippedDuplicateName,
911
1072
  skippedMissingName,
912
1073
  skippedMissingDescription,
@@ -915,40 +1076,73 @@ let PromptsService = class PromptsService extends Disposable {
915
1076
  });
916
1077
  return result;
917
1078
  }
918
- async getHooks(token) {
919
- return this.cachedHooks.get(token);
1079
+ async getHooks(token, sessionResource) {
1080
+ const sw = StopWatch.create();
1081
+ const result = await this.cachedHooks.get(token);
1082
+ if (sessionResource) {
1083
+ const elapsed = sw.elapsed();
1084
+ const hookCount = result ? ( Object.values(result.hooks)).reduce((sum, arr) => sum + arr.length, 0) : 0;
1085
+ const discoveryInfo = await this.getHookDiscoveryInfo(token);
1086
+ const details = hookCount === 1 ? ( localize(7336, "Resolved {0} hook in {1}ms", hookCount, elapsed.toFixed(1))) : ( localize(7337, "Resolved {0} hooks in {1}ms", hookCount, elapsed.toFixed(1)));
1087
+ this._onDidLogDiscovery.fire({
1088
+ sessionResource,
1089
+ name: ( localize(7338, "Load Hooks")),
1090
+ details,
1091
+ discoveryInfo,
1092
+ category: "discovery"
1093
+ });
1094
+ }
1095
+ return result;
1096
+ }
1097
+ async getInstructionFiles(token, sessionResource) {
1098
+ const sw = StopWatch.create();
1099
+ const result = await this.listPromptFiles(PromptsType.instructions, token);
1100
+ if (sessionResource) {
1101
+ const elapsed = sw.elapsed();
1102
+ const discoveryInfo = await this.getInstructionsDiscoveryInfo(token);
1103
+ const details = result.length === 1 ? ( localize(
1104
+ 7339,
1105
+ "Resolved {0} instruction in {1}ms",
1106
+ result.length,
1107
+ elapsed.toFixed(1)
1108
+ )) : ( localize(
1109
+ 7340,
1110
+ "Resolved {0} instructions in {1}ms",
1111
+ result.length,
1112
+ elapsed.toFixed(1)
1113
+ ));
1114
+ this._onDidLogDiscovery.fire({
1115
+ sessionResource,
1116
+ name: ( localize(7341, "Load Instructions")),
1117
+ details,
1118
+ discoveryInfo,
1119
+ category: "discovery"
1120
+ });
1121
+ }
1122
+ return result;
920
1123
  }
921
1124
  async computeHooks(token) {
922
1125
  const useChatHooks = this.configurationService.getValue(PromptsConfig.USE_CHAT_HOOKS);
923
1126
  if (!useChatHooks) {
924
1127
  return undefined;
925
1128
  }
926
- const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
927
- const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
928
- if (hookFiles.length === 0) {
929
- this.logger.trace("[PromptsService] No hook files found.");
1129
+ if (!this.workspaceTrustService.isWorkspaceTrusted()) {
930
1130
  return undefined;
931
1131
  }
1132
+ const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
1133
+ const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
932
1134
  this.logger.trace(`[PromptsService] Found ${hookFiles.length} hook file(s).`);
933
1135
  const userHomeUri = await this.pathService.userHome();
934
1136
  const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
935
- const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
936
- const workspaceRootUri = workspaceFolder?.uri;
937
1137
  let hasDisabledClaudeHooks = false;
938
- const collectedHooks = {
939
- [HookType.SessionStart]: [],
940
- [HookType.UserPromptSubmit]: [],
941
- [HookType.PreToolUse]: [],
942
- [HookType.PostToolUse]: [],
943
- [HookType.PreCompact]: [],
944
- [HookType.SubagentStart]: [],
945
- [HookType.SubagentStop]: [],
946
- [HookType.Stop]: []
947
- };
1138
+ const collectedHooks = ( new Map());
1139
+ const defaultFolder = this.workspaceService.getWorkspace().folders[0];
948
1140
  for (const hookFile of hookFiles) {
949
1141
  try {
950
1142
  const content = await this.fileService.readFile(hookFile.uri);
951
1143
  const json = parse(( content.value.toString()));
1144
+ const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(hookFile.uri) ?? defaultFolder;
1145
+ const workspaceRootUri = hookWorkspaceFolder?.uri;
952
1146
  const {
953
1147
  format,
954
1148
  hooks,
@@ -978,7 +1172,12 @@ let PromptsService = class PromptsService extends Disposable {
978
1172
  hooks: commands
979
1173
  }] of hooks) {
980
1174
  for (const command of commands) {
981
- collectedHooks[hookType].push(command);
1175
+ let bucket = collectedHooks.get(hookType);
1176
+ if (!bucket) {
1177
+ bucket = [];
1178
+ collectedHooks.set(hookType, bucket);
1179
+ }
1180
+ bucket.push(command);
982
1181
  this.logger.trace(
983
1182
  `[PromptsService] Collected ${hookType} hook from ${hookFile.uri} (format: ${format})`
984
1183
  );
@@ -988,37 +1187,74 @@ let PromptsService = class PromptsService extends Disposable {
988
1187
  this.logger.warn(`[PromptsService] Failed to parse hook file: ${hookFile.uri}`, error);
989
1188
  }
990
1189
  }
991
- const hasHooks = ( ( Object.values(collectedHooks)).some(arr => arr.length > 0));
992
- if (!hasHooks) {
1190
+ const plugins = this.agentPluginService.plugins.get();
1191
+ for (const plugin of plugins) {
1192
+ for (const hook of plugin.hooks.get()) {
1193
+ let bucket = collectedHooks.get(hook.type);
1194
+ if (!bucket) {
1195
+ bucket = [];
1196
+ collectedHooks.set(hook.type, bucket);
1197
+ }
1198
+ bucket.push(...hook.hooks);
1199
+ }
1200
+ }
1201
+ if (collectedHooks.size === 0) {
993
1202
  this.logger.trace("[PromptsService] No valid hooks collected.");
994
1203
  return undefined;
995
1204
  }
996
- const result = Object.fromEntries(
997
- Object.entries(collectedHooks).filter(([_, commands]) => commands.length > 0)
998
- );
1205
+ const result = Object.fromEntries(collectedHooks);
999
1206
  this.logger.trace(`[PromptsService] Collected hooks: ${JSON.stringify(( Object.keys(result)))}`);
1000
1207
  return {
1001
1208
  hooks: result,
1002
1209
  hasDisabledClaudeHooks
1003
1210
  };
1004
1211
  }
1005
- async getPromptDiscoveryInfo(type, token) {
1212
+ async getPromptDiscoveryInfo(type, token, sessionResource) {
1213
+ if (sessionResource) {
1214
+ this._onDidLogDiscovery.fire({
1215
+ sessionResource,
1216
+ name: ( localize(7342, "Discovery {0} (Start)", type)),
1217
+ category: "discovery"
1218
+ });
1219
+ }
1006
1220
  const files = [];
1221
+ let result;
1007
1222
  if (type === PromptsType.skill) {
1008
- return this.getSkillDiscoveryInfo(token);
1223
+ result = await this.getSkillDiscoveryInfo(token);
1009
1224
  } else if (type === PromptsType.agent) {
1010
- return this.getAgentDiscoveryInfo(token);
1225
+ result = await this.getAgentDiscoveryInfo(token);
1011
1226
  } else if (type === PromptsType.prompt) {
1012
- return this.getPromptSlashCommandDiscoveryInfo(token);
1227
+ result = await this.getPromptSlashCommandDiscoveryInfo(token);
1013
1228
  } else if (type === PromptsType.instructions) {
1014
- return this.getInstructionsDiscoveryInfo(token);
1229
+ result = await this.getInstructionsDiscoveryInfo(token);
1015
1230
  } else if (type === PromptsType.hook) {
1016
- return this.getHookDiscoveryInfo(token);
1231
+ result = await this.getHookDiscoveryInfo(token);
1232
+ } else {
1233
+ result = {
1234
+ type,
1235
+ files
1236
+ };
1017
1237
  }
1018
- return {
1019
- type,
1020
- files
1021
- };
1238
+ const loadedCount = result.files.filter(f => f.status === "loaded").length;
1239
+ const skippedCount = result.files.filter(f => f.status === "skipped").length;
1240
+ if (!result.sourceFolders) {
1241
+ const sourceFolders = await this._collectSourceFolderDiagnostics(type, result.files.filter(f => f.status === "loaded"));
1242
+ result = {
1243
+ ...result,
1244
+ sourceFolders
1245
+ };
1246
+ }
1247
+ if (sessionResource) {
1248
+ const details = ( localize(7343, "{0} loaded, {1} skipped", loadedCount, skippedCount));
1249
+ this._onDidLogDiscovery.fire({
1250
+ sessionResource,
1251
+ name: ( localize(7344, "Discovery {0} (End)", type)),
1252
+ details,
1253
+ discoveryInfo: result,
1254
+ category: "discovery"
1255
+ });
1256
+ }
1257
+ return result;
1022
1258
  }
1023
1259
  async getSkillDiscoveryInfo(token) {
1024
1260
  const useAgentSkills = this.configurationService.getValue(PromptsConfig.USE_AGENT_SKILLS);
@@ -1031,17 +1267,21 @@ let PromptsService = class PromptsService extends Disposable {
1031
1267
  skipReason: "disabled",
1032
1268
  extensionId: promptPath.extension?.identifier?.value
1033
1269
  })));
1270
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, []);
1034
1271
  return {
1035
1272
  type: PromptsType.skill,
1036
- files
1273
+ files,
1274
+ sourceFolders
1037
1275
  };
1038
1276
  }
1039
1277
  const {
1040
1278
  files
1041
1279
  } = await this.computeSkillDiscoveryInfo(token);
1280
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.skill, files.filter(f => f.status === "loaded"));
1042
1281
  return {
1043
1282
  type: PromptsType.skill,
1044
- files
1283
+ files,
1284
+ sourceFolders
1045
1285
  };
1046
1286
  }
1047
1287
  async computeSkillDiscoveryInfo(token) {
@@ -1052,10 +1292,15 @@ let PromptsService = class PromptsService extends Disposable {
1052
1292
  const allSkills = [];
1053
1293
  const discoveredSkills = await this.fileLocator.findAgentSkills(token);
1054
1294
  const extensionSkills = await this.getExtensionPromptFiles(PromptsType.skill, token);
1295
+ const pluginSkills = this._pluginPromptFilesByType.get(PromptsType.skill) ?? [];
1055
1296
  allSkills.push(...discoveredSkills, ...( extensionSkills.map(extPath => ({
1056
1297
  fileUri: extPath.uri,
1057
1298
  storage: extPath.storage,
1058
1299
  source: extPath.source === ExtensionAgentSourceType.contribution ? PromptFileSource.ExtensionContribution : PromptFileSource.ExtensionAPI
1300
+ }))), ...( pluginSkills.map(p => ({
1301
+ fileUri: p.uri,
1302
+ storage: p.storage,
1303
+ source: PromptFileSource.Plugin
1059
1304
  }))));
1060
1305
  const getPriority = skill => {
1061
1306
  if (skill.storage === PromptsStorage.local) {
@@ -1064,13 +1309,16 @@ let PromptsService = class PromptsService extends Disposable {
1064
1309
  if (skill.storage === PromptsStorage.user) {
1065
1310
  return 1;
1066
1311
  }
1067
- if (skill.source === PromptFileSource.ExtensionAPI) {
1312
+ if (skill.storage === PromptsStorage.plugin) {
1068
1313
  return 2;
1069
1314
  }
1070
- if (skill.source === PromptFileSource.ExtensionContribution) {
1315
+ if (skill.source === PromptFileSource.ExtensionAPI) {
1071
1316
  return 3;
1072
1317
  }
1073
- return 4;
1318
+ if (skill.source === PromptFileSource.ExtensionContribution) {
1319
+ return 4;
1320
+ }
1321
+ return 5;
1074
1322
  };
1075
1323
  allSkills.sort((a, b) => getPriority(a) - getPriority(b));
1076
1324
  const extensionIdByUri = ( new Map());
@@ -1152,7 +1400,7 @@ let PromptsService = class PromptsService extends Disposable {
1152
1400
  seenNames.add(sanitizedName);
1153
1401
  nameToUri.set(sanitizedName, uri);
1154
1402
  const disableModelInvocation = parsedFile.header?.disableModelInvocation === true;
1155
- const userInvokable = parsedFile.header?.userInvokable !== false;
1403
+ const userInvocable = parsedFile.header?.userInvocable !== false;
1156
1404
  files.push({
1157
1405
  uri,
1158
1406
  storage,
@@ -1162,7 +1410,7 @@ let PromptsService = class PromptsService extends Disposable {
1162
1410
  extensionId,
1163
1411
  source,
1164
1412
  disableModelInvocation,
1165
- userInvokable
1413
+ userInvocable
1166
1414
  });
1167
1415
  skillsBySource.set(source, (skillsBySource.get(source) || 0) + 1);
1168
1416
  } catch (e) {
@@ -1226,9 +1474,11 @@ let PromptsService = class PromptsService extends Disposable {
1226
1474
  });
1227
1475
  }
1228
1476
  }
1477
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.agent, files.filter(f => f.status === "loaded"));
1229
1478
  return {
1230
1479
  type: PromptsType.agent,
1231
- files
1480
+ files,
1481
+ sourceFolders
1232
1482
  };
1233
1483
  }
1234
1484
  async getPromptSlashCommandDiscoveryInfo(token) {
@@ -1259,9 +1509,11 @@ let PromptsService = class PromptsService extends Disposable {
1259
1509
  });
1260
1510
  }
1261
1511
  }
1512
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.prompt, files.filter(f => f.status === "loaded"));
1262
1513
  return {
1263
1514
  type: PromptsType.prompt,
1264
- files
1515
+ files,
1516
+ sourceFolders
1265
1517
  };
1266
1518
  }
1267
1519
  async getInstructionsDiscoveryInfo(token) {
@@ -1292,17 +1544,17 @@ let PromptsService = class PromptsService extends Disposable {
1292
1544
  });
1293
1545
  }
1294
1546
  }
1547
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.instructions, files.filter(f => f.status === "loaded"));
1295
1548
  return {
1296
1549
  type: PromptsType.instructions,
1297
- files
1550
+ files,
1551
+ sourceFolders
1298
1552
  };
1299
1553
  }
1300
1554
  async getHookDiscoveryInfo(token) {
1301
1555
  const files = [];
1302
1556
  const userHomeUri = await this.pathService.userHome();
1303
1557
  const userHome = userHomeUri.scheme === Schemas.file ? userHomeUri.fsPath : userHomeUri.path;
1304
- const workspaceFolder = this.workspaceService.getWorkspace().folders[0];
1305
- const workspaceRootUri = workspaceFolder?.uri;
1306
1558
  const useClaudeHooks = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_HOOKS);
1307
1559
  const hookFiles = await this.listPromptFiles(PromptsType.hook, token);
1308
1560
  for (const promptPath of hookFiles) {
@@ -1310,6 +1562,17 @@ let PromptsService = class PromptsService extends Disposable {
1310
1562
  const storage = promptPath.storage;
1311
1563
  const extensionId = promptPath.extension?.identifier?.value;
1312
1564
  const name = basename(uri);
1565
+ if (!this.workspaceTrustService.isWorkspaceTrusted()) {
1566
+ files.push({
1567
+ uri: promptPath.uri,
1568
+ storage: promptPath.storage,
1569
+ status: "skipped",
1570
+ skipReason: "workspace-untrusted",
1571
+ name: basename(promptPath.uri),
1572
+ extensionId: promptPath.extension?.identifier?.value
1573
+ });
1574
+ continue;
1575
+ }
1313
1576
  if (getHookSourceFormat(uri) === HookSourceFormat.Claude && useClaudeHooks === false) {
1314
1577
  files.push({
1315
1578
  uri,
@@ -1336,6 +1599,8 @@ let PromptsService = class PromptsService extends Disposable {
1336
1599
  });
1337
1600
  continue;
1338
1601
  }
1602
+ const hookWorkspaceFolder = this.workspaceService.getWorkspaceFolder(uri) ?? this.workspaceService.getWorkspace().folders[0];
1603
+ const workspaceRootUri = hookWorkspaceFolder?.uri;
1339
1604
  const {
1340
1605
  disabledAllHooks
1341
1606
  } = parseHooksFromFile(uri, json, workspaceRootUri, userHome);
@@ -1369,13 +1634,15 @@ let PromptsService = class PromptsService extends Disposable {
1369
1634
  });
1370
1635
  }
1371
1636
  }
1637
+ const sourceFolders = await this._collectSourceFolderDiagnostics(PromptsType.hook, files.filter(f => f.status === "loaded"));
1372
1638
  return {
1373
1639
  type: PromptsType.hook,
1374
- files
1640
+ files,
1641
+ sourceFolders
1375
1642
  };
1376
1643
  }
1377
1644
  };
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));
1645
+ 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)), ( __param(15, IWorkspaceTrustManagementService))], PromptsService));
1379
1646
  class CachedPromise extends Disposable {
1380
1647
  constructor(computeFn, getEvent, delay = 0) {
1381
1648
  super();
@@ -1468,6 +1735,11 @@ var IAgentSource;
1468
1735
  extensionId: promptPath.extension.identifier,
1469
1736
  type: promptPath.source
1470
1737
  };
1738
+ } else if (promptPath.storage === PromptsStorage.plugin) {
1739
+ return {
1740
+ storage: PromptsStorage.plugin,
1741
+ pluginUri: promptPath.pluginUri
1742
+ };
1471
1743
  } else {
1472
1744
  return {
1473
1745
  storage: promptPath.storage