@codingame/monaco-vscode-chat-service-override 23.2.2 → 24.1.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 (273) hide show
  1. package/index.js +13 -10
  2. package/package.json +5 -41
  3. package/vscode/src/vs/platform/domWidget/browser/domWidget.d.ts +52 -0
  4. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +53 -0
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +10 -10
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +61 -50
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.d.ts +18 -0
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +152 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +2 -2
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +14 -14
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +37 -28
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +9 -9
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -5
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +7 -11
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +10 -10
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +12 -14
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +21 -18
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +27 -18
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +4 -4
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.d.ts +1 -1
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +11 -11
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.d.ts +6 -27
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.js +44 -208
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -17
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +17 -17
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +1 -1
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +23 -24
  30. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -0
  31. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +140 -0
  32. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +85 -0
  33. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +358 -0
  34. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +55 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +222 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +37 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +241 -0
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.d.ts +13 -0
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +27 -0
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsView.d.ts +11 -19
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsView.js +67 -230
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +65 -33
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +186 -62
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +23 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +140 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsview.css +2 -7
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +115 -29
  48. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +389 -166
  49. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.d.ts +9 -6
  50. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +22 -16
  51. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.d.ts +1 -1
  52. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +8 -8
  53. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownAnchorService.d.ts +1 -1
  54. package/vscode/src/vs/workbench/contrib/chat/browser/chatContextService.d.ts +10 -3
  55. package/vscode/src/vs/workbench/contrib/chat/browser/chatContextService.js +63 -3
  56. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimeline.d.ts +7 -3
  57. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +14 -5
  58. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +173 -32
  59. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +1 -0
  60. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +66 -17
  61. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +32 -29
  62. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +12 -12
  63. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -2
  64. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +9 -6
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +2 -2
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +6 -4
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +4 -4
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +8 -18
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.d.ts +1 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +12 -1
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +5 -6
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +15 -24
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +13 -11
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +66 -50
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.d.ts +3 -2
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +6 -5
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +3 -1
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +7 -0
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.d.ts +2 -2
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +6 -7
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.d.ts +3 -3
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +4 -4
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +2 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +1 -1
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +15 -4
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.d.ts +1 -1
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +3 -4
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +30 -37
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +13 -10
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +23 -32
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +8 -9
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +20 -19
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +47 -15
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +270 -143
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +3 -2
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +310 -170
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +10 -10
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +12 -2
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +1 -1
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +4 -4
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +42 -42
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +3 -1
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +35 -25
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.d.ts +1 -1
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +4 -4
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/chatSessionsView.d.ts +1 -4
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/chatSessionsView.js +22 -26
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsTreeRenderer.d.ts +18 -14
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsTreeRenderer.js +80 -72
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsViewPane.d.ts +2 -8
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsViewPane.js +48 -77
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +16 -17
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +257 -77
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +55 -0
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +34 -0
  119. package/vscode/src/vs/workbench/contrib/chat/browser/{chatSetup.d.ts → chatSetup/chatSetupContributions.d.ts} +4 -11
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +622 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +53 -0
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +359 -0
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +89 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +667 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +37 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +260 -0
  127. package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/chatSetup.css +4 -6
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +4 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +21 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +55 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatus.js → chatStatus/chatStatusDashboard.js} +193 -325
  132. package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatus.d.ts → chatStatus/chatStatusEntry.d.ts} +1 -1
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +190 -0
  134. package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatusItemService.d.ts → chatStatus/chatStatusItemService.d.ts} +1 -1
  135. package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatStatus/media}/chatStatus.css +22 -1
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatusWidget.d.ts +25 -0
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatusWidget.js +108 -0
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatTerminalOutputAccessibleView.d.ts +10 -0
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatTerminalOutputAccessibleView.js +34 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +1 -1
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +57 -18
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +478 -146
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewTitleControl.d.ts +43 -0
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewTitleControl.js +204 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatWidgetService.d.ts +44 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/chatWidgetService.js +187 -0
  147. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockContextProviderService.d.ts +1 -1
  148. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +108 -62
  149. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.d.ts +1 -1
  150. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +3 -3
  151. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsConfirmationService.d.ts +1 -1
  152. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsConfirmationService.js +37 -32
  153. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +37 -20
  154. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +232 -97
  155. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatStatusWidget.css +57 -0
  156. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatViewPane.css +142 -0
  157. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatViewTitleControl.css +39 -0
  158. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +51 -35
  159. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +1 -1
  160. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +5 -4
  161. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -2
  162. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +5 -5
  163. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +12 -12
  164. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +19 -21
  165. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.d.ts +1 -1
  166. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +8 -8
  167. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +16 -16
  168. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +6 -6
  169. package/vscode/src/vs/workbench/contrib/chat/common/chatCodeMapperService.d.ts +1 -1
  170. package/vscode/src/vs/workbench/contrib/chat/common/chatModelStore.d.ts +49 -0
  171. package/vscode/src/vs/workbench/contrib/chat/common/chatModelStore.js +100 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +1 -0
  173. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +2 -1
  174. package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.js +3 -4
  175. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +41 -15
  176. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +208 -162
  177. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.d.ts +3 -3
  178. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.d.ts +15 -7
  179. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +61 -7
  180. package/vscode/src/vs/workbench/contrib/chat/common/chatSlashCommands.d.ts +3 -2
  181. package/vscode/src/vs/workbench/contrib/chat/common/chatSlashCommands.js +2 -2
  182. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +1 -1
  183. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +10 -10
  184. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -2
  185. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +3 -3
  186. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.d.ts +5 -1
  187. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +60 -43
  188. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +1 -1
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +27 -4
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +37 -47
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -3
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +120 -87
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +49 -42
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +293 -187
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +17 -5
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +43 -9
  198. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +2 -0
  199. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +48 -29
  200. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.d.ts +1 -1
  201. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +2 -2
  202. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +8 -13
  203. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
  204. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +2 -2
  205. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +3 -3
  206. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +36 -41
  207. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +3 -3
  208. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +2 -2
  209. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
  210. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  211. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.js +1 -1
  212. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +18 -18
  213. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +1 -1
  214. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +142 -38
  215. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +1 -1
  216. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +3 -7
  217. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +1 -1
  218. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +19 -2
  219. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +78 -6
  220. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +7 -11
  221. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +26 -44
  222. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +3 -3
  223. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +1 -1
  224. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +9 -0
  225. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +0 -1
  226. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +23 -17
  227. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +1 -1
  228. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +4 -2
  229. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +2 -0
  230. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +26 -5
  231. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +3 -1
  232. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +32 -4
  233. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +15 -29
  234. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +10 -7
  235. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +12 -0
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.d.ts +3 -1
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +38 -19
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.d.ts +1 -0
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +32 -7
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +5 -4
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +4 -3
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +4 -3
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +1 -0
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +128 -62
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +2 -2
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +12 -2
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +5 -2
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +68 -22
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +20 -22
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +13 -12
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +20 -19
  252. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.d.ts +1 -1
  253. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  254. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +12 -0
  255. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +72 -0
  256. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +1 -2
  257. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +5 -17
  258. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionViewModel.d.ts +0 -53
  259. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionViewModel.js +0 -154
  260. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.d.ts +0 -7
  261. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.js +0 -13
  262. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionTracker.d.ts +0 -25
  263. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionTracker.js +0 -135
  264. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/localChatSessionsProvider.d.ts +0 -35
  265. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/localChatSessionsProvider.js +0 -216
  266. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +0 -1617
  267. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.d.ts +0 -44
  268. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +0 -313
  269. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/apple-dark.svg +0 -0
  270. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/apple-light.svg +0 -0
  271. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/github.svg +0 -0
  272. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/google.svg +0 -0
  273. /package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatusItemService.js → chatStatus/chatStatusItemService.js} +0 -0
@@ -1,20 +1,18 @@
1
1
 
2
2
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
- import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
- import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
5
3
  import { CancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
6
- import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
7
- import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
4
+ import { Event, Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
5
+ import { Disposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
8
6
  import { ResourceMap, ResourceSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
9
- import { basename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
10
7
  import { isEqual, dirname } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
11
8
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
12
9
  import { OffsetRange } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/ranges/offsetRange';
13
- import { ILanguageService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/languages/language.service';
14
10
  import { IModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/model.service';
15
11
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
16
12
  import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
13
+ import { FileOperationError, FileOperationResult } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files';
17
14
  import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
15
+ import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
18
16
  import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
19
17
  import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
20
18
  import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
@@ -22,102 +20,160 @@ import { IFilesConfigurationService } from '@codingame/monaco-vscode-api/vscode/
22
20
  import { StorageScope, StorageTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
23
21
  import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service';
24
22
  import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
25
- import { PromptsConfig } from '@codingame/monaco-vscode-8d4ef243-d8c1-540d-9f11-38df46f54c9f-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
26
- import { getCleanPromptName, PROMPT_FILE_EXTENSION } from '@codingame/monaco-vscode-8d4ef243-d8c1-540d-9f11-38df46f54c9f-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
27
- import { PromptsType, getPromptsTypeForLanguageId, PROMPT_LANGUAGE_ID, getLanguageIdForPromptsType } from '@codingame/monaco-vscode-8d4ef243-d8c1-540d-9f11-38df46f54c9f-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
23
+ import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
24
+ import { getCleanPromptName } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
25
+ import { PromptsType, PROMPT_LANGUAGE_ID, getPromptsTypeForLanguageId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
28
26
  import { PromptFilesLocator } from '../utils/promptFilesLocator.js';
29
- import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vscode-8d4ef243-d8c1-540d-9f11-38df46f54c9f-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
30
- import { PromptsStorage } from '@codingame/monaco-vscode-2339d6ac-d6bb-53cd-95ee-81911735d1c7-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
27
+ import { PromptFileParser, PromptHeaderAttributes } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
28
+ import { PromptsStorage, CUSTOM_AGENTS_PROVIDER_ACTIVATION_EVENT, ExtensionAgentSourceType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
29
+ import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
30
+ import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
31
31
 
32
- var UpdateTracker_1;
33
32
  let PromptsService = class PromptsService extends Disposable {
34
- constructor(logger, labelService, modelService, instantiationService, userDataService, languageService, configurationService, fileService, filesConfigService, storageService) {
33
+ constructor(logger, labelService, modelService, instantiationService, userDataService, configurationService, fileService, filesConfigService, storageService, extensionService) {
35
34
  super();
36
35
  this.logger = logger;
37
36
  this.labelService = labelService;
38
37
  this.modelService = modelService;
39
38
  this.instantiationService = instantiationService;
40
39
  this.userDataService = userDataService;
41
- this.languageService = languageService;
42
40
  this.configurationService = configurationService;
43
41
  this.fileService = fileService;
44
42
  this.filesConfigService = filesConfigService;
45
43
  this.storageService = storageService;
46
- this.parsedPromptFileCache = ( new ResourceMap());
47
- this.promptFileByCommandCache = ( new Map());
48
- this.onDidChangeParsedPromptFilesCacheEmitter = ( new Emitter());
44
+ this.extensionService = extensionService;
45
+ this.cachedParsedPromptFromModels = ( new ResourceMap());
46
+ this.cachedFileLocations = {};
47
+ this.fileLocatorEvents = {};
49
48
  this.contributedFiles = {
50
49
  [PromptsType.prompt]: ( new ResourceMap()),
51
50
  [PromptsType.instructions]: ( new ResourceMap()),
52
51
  [PromptsType.agent]: ( new ResourceMap()),
53
52
  };
53
+ this.customAgentsProviders = [];
54
54
  this.disabledPromptsStorageKeyPrefix = 'chat.disabledPromptFiles.';
55
- this.onDidChangeParsedPromptFilesCacheEmitter = this._register(( new Emitter()));
56
- this.fileLocator = this._register(this.instantiationService.createInstance(PromptFilesLocator));
57
- const promptUpdateTracker = this._register(( new UpdateTracker(this.fileLocator, PromptsType.prompt, this.modelService)));
58
- this._register(promptUpdateTracker.onDidPromptChange((event) => {
59
- if (event.kind === 'fileSystem') {
60
- this.promptFileByCommandCache.clear();
61
- }
62
- else {
63
- const pendingDeletes = [];
64
- for (const [key, value] of this.promptFileByCommandCache) {
65
- if (isEqual(value.value?.uri, event.uri)) {
66
- pendingDeletes.push(key);
67
- }
68
- }
69
- for (const key of pendingDeletes) {
70
- this.promptFileByCommandCache.delete(key);
71
- }
72
- }
73
- this.onDidChangeParsedPromptFilesCacheEmitter.fire();
74
- }));
55
+ this.fileLocator = this.instantiationService.createInstance(PromptFilesLocator);
75
56
  this._register(this.modelService.onModelRemoved((model) => {
76
- this.parsedPromptFileCache.delete(model.uri);
57
+ this.cachedParsedPromptFromModels.delete(model.uri);
77
58
  }));
78
- }
79
- get onDidChangeCustomAgents() {
80
- if (!this.onDidChangeCustomAgentsEmitter) {
81
- const emitter = this.onDidChangeCustomAgentsEmitter = this._register(( new Emitter()));
82
- const updateTracker = this._register(( new UpdateTracker(this.fileLocator, PromptsType.agent, this.modelService)));
83
- this._register(updateTracker.onDidPromptChange((event) => {
84
- this.cachedCustomAgents = undefined;
85
- emitter.fire();
59
+ const modelChangeEvent = this._register(( new ModelChangeTracker(this.modelService))).onDidPromptChange;
60
+ this.cachedCustomAgents = this._register(( new CachedPromise(
61
+ (token) => this.computeCustomAgents(token),
62
+ () => Event.any(this.getFileLocatorEvent(PromptsType.agent), Event.filter(modelChangeEvent, e => e.promptType === PromptsType.agent))
63
+ )));
64
+ this.cachedSlashCommands = this._register(( new CachedPromise(
65
+ (token) => this.computePromptSlashCommands(token),
66
+ () => Event.any(this.getFileLocatorEvent(PromptsType.prompt), Event.filter(modelChangeEvent, e => e.promptType === PromptsType.prompt))
67
+ )));
68
+ }
69
+ getFileLocatorEvent(type) {
70
+ let event = this.fileLocatorEvents[type];
71
+ if (!event) {
72
+ event = this.fileLocatorEvents[type] = this._register(this.fileLocator.createFilesUpdatedEvent(type)).event;
73
+ this._register(event(() => {
74
+ this.cachedFileLocations[type] = undefined;
86
75
  }));
87
76
  }
88
- return this.onDidChangeCustomAgentsEmitter.event;
89
- }
90
- get onDidChangeParsedPromptFilesCache() {
91
- return this.onDidChangeParsedPromptFilesCacheEmitter.event;
92
- }
93
- getPromptFileType(uri) {
94
- const model = this.modelService.getModel(uri);
95
- const languageId = model ? model.getLanguageId() : this.languageService.guessLanguageIdByFilepathOrFirstLine(uri);
96
- return languageId ? getPromptsTypeForLanguageId(languageId) : undefined;
77
+ return event;
97
78
  }
98
79
  getParsedPromptFile(textModel) {
99
- const cached = this.parsedPromptFileCache.get(textModel.uri);
80
+ const cached = this.cachedParsedPromptFromModels.get(textModel.uri);
100
81
  if (cached && cached[0] === textModel.getVersionId()) {
101
82
  return cached[1];
102
83
  }
103
84
  const ast = ( new PromptFileParser()).parse(textModel.uri, textModel.getValue());
104
85
  if (!cached || cached[0] < textModel.getVersionId()) {
105
- this.parsedPromptFileCache.set(textModel.uri, [textModel.getVersionId(), ast]);
86
+ this.cachedParsedPromptFromModels.set(textModel.uri, [textModel.getVersionId(), ast]);
106
87
  }
107
88
  return ast;
108
89
  }
109
90
  async listPromptFiles(type, token) {
91
+ let listPromise = this.cachedFileLocations[type];
92
+ if (!listPromise) {
93
+ listPromise = this.computeListPromptFiles(type, token);
94
+ if (!this.fileLocatorEvents[type]) {
95
+ return listPromise;
96
+ }
97
+ this.cachedFileLocations[type] = listPromise;
98
+ return listPromise;
99
+ }
100
+ return listPromise;
101
+ }
102
+ async computeListPromptFiles(type, token) {
110
103
  const prompts = await Promise.all([
111
104
  this.fileLocator.listFiles(type, PromptsStorage.user, token).then(uris => ( uris.map(uri => ({ uri, storage: PromptsStorage.user, type })))),
112
105
  this.fileLocator.listFiles(type, PromptsStorage.local, token).then(uris => ( uris.map(uri => ({ uri, storage: PromptsStorage.local, type })))),
113
- this.getExtensionContributions(type)
106
+ this.getExtensionPromptFiles(type, token),
114
107
  ]);
115
108
  return [...prompts.flat()];
116
109
  }
110
+ registerCustomAgentsProvider(extension, provider) {
111
+ const providerEntry = { extension, ...provider };
112
+ this.customAgentsProviders.push(providerEntry);
113
+ const disposables = ( new DisposableStore());
114
+ if (provider.onDidChangeCustomAgents) {
115
+ disposables.add(provider.onDidChangeCustomAgents(() => {
116
+ this.cachedFileLocations[PromptsType.agent] = undefined;
117
+ this.cachedCustomAgents.refresh();
118
+ }));
119
+ }
120
+ this.cachedFileLocations[PromptsType.agent] = undefined;
121
+ this.cachedCustomAgents.refresh();
122
+ disposables.add({
123
+ dispose: () => {
124
+ const index = this.customAgentsProviders.findIndex((p) => p === providerEntry);
125
+ if (index >= 0) {
126
+ this.customAgentsProviders.splice(index, 1);
127
+ this.cachedFileLocations[PromptsType.agent] = undefined;
128
+ this.cachedCustomAgents.refresh();
129
+ }
130
+ }
131
+ });
132
+ return disposables;
133
+ }
134
+ async listCustomAgentsFromProvider(token) {
135
+ const result = [];
136
+ if (this.customAgentsProviders.length === 0) {
137
+ return result;
138
+ }
139
+ await this.extensionService.activateByEvent(CUSTOM_AGENTS_PROVIDER_ACTIVATION_EVENT);
140
+ for (const providerEntry of this.customAgentsProviders) {
141
+ try {
142
+ const agents = await providerEntry.provideCustomAgents({}, token);
143
+ if (!agents || token.isCancellationRequested) {
144
+ continue;
145
+ }
146
+ for (const agent of agents) {
147
+ if (!agent.isEditable) {
148
+ try {
149
+ await this.filesConfigService.updateReadonly(agent.uri, true);
150
+ }
151
+ catch (e) {
152
+ const msg = e instanceof Error ? e.message : String(e);
153
+ this.logger.error(`[listCustomAgentsFromProvider] Failed to make agent file readonly: ${agent.uri}`, msg);
154
+ }
155
+ }
156
+ result.push({
157
+ uri: agent.uri,
158
+ name: agent.name,
159
+ description: agent.description,
160
+ storage: PromptsStorage.extension,
161
+ type: PromptsType.agent,
162
+ extension: providerEntry.extension,
163
+ source: ExtensionAgentSourceType.provider
164
+ });
165
+ }
166
+ }
167
+ catch (e) {
168
+ this.logger.error(`[listCustomAgentsFromProvider] Failed to get custom agents from provider`, e instanceof Error ? e.message : String(e));
169
+ }
170
+ }
171
+ return result;
172
+ }
117
173
  async listPromptFilesForStorage(type, storage, token) {
118
174
  switch (storage) {
119
175
  case PromptsStorage.extension:
120
- return this.getExtensionContributions(type);
176
+ return this.getExtensionPromptFiles(type, token);
121
177
  case PromptsStorage.local:
122
178
  return this.fileLocator.listFiles(type, PromptsStorage.local, token).then(uris => ( uris.map(uri => ({ uri, storage: PromptsStorage.local, type }))));
123
179
  case PromptsStorage.user:
@@ -126,8 +182,14 @@ let PromptsService = class PromptsService extends Disposable {
126
182
  throw ( new Error(`[listPromptFilesForStorage] Unsupported prompt storage type: ${storage}`));
127
183
  }
128
184
  }
129
- async getExtensionContributions(type) {
130
- return Promise.all(( this.contributedFiles[type].values()));
185
+ async getExtensionPromptFiles(type, token) {
186
+ await this.extensionService.whenInstalledExtensionsRegistered();
187
+ const contributedFiles = await Promise.all(( this.contributedFiles[type].values()));
188
+ if (type === PromptsType.agent) {
189
+ const providerAgents = await this.listCustomAgentsFromProvider(token);
190
+ return [...contributedFiles, ...providerAgents];
191
+ }
192
+ return contributedFiles;
131
193
  }
132
194
  getSourceFolders(type) {
133
195
  const result = [];
@@ -146,110 +208,77 @@ let PromptsService = class PromptsService extends Disposable {
146
208
  result.push({ uri: userHome, storage: PromptsStorage.user, type });
147
209
  return result;
148
210
  }
149
- asPromptSlashCommand(command) {
150
- if (command.match(/^[\p{L}\d_\-\.]+$/u)) {
151
- return { command, detail: ( localize(5945, 'Prompt file: {0}', command)) };
152
- }
153
- return undefined;
211
+ get onDidChangeSlashCommands() {
212
+ return this.cachedSlashCommands.onDidChange;
154
213
  }
155
- async resolvePromptSlashCommand(data, token) {
156
- const promptUri = data.promptPath?.uri ?? (await this.getPromptPath(data.command));
157
- if (!promptUri) {
158
- return undefined;
159
- }
160
- try {
161
- return await this.parseNew(promptUri, token);
162
- }
163
- catch (error) {
164
- this.logger.error(`[resolvePromptSlashCommand] Failed to parse prompt file: ${promptUri}`, error);
165
- return undefined;
166
- }
214
+ async getPromptSlashCommands(token) {
215
+ return this.cachedSlashCommands.get(token);
167
216
  }
168
- async populatePromptCommandCache(command) {
169
- let cache = this.promptFileByCommandCache.get(command);
170
- if (cache && cache.pendingPromise) {
171
- return cache.pendingPromise;
172
- }
173
- const newPromise = this.resolvePromptSlashCommand({ command, detail: '' }, CancellationToken.None);
174
- if (cache) {
175
- cache.pendingPromise = newPromise;
217
+ async computePromptSlashCommands(token) {
218
+ const promptFiles = await this.listPromptFiles(PromptsType.prompt, token);
219
+ const details = await Promise.all(( promptFiles.map(async (promptPath) => {
220
+ try {
221
+ const parsedPromptFile = await this.parseNew(promptPath.uri, token);
222
+ return this.asChatPromptSlashCommand(parsedPromptFile, promptPath);
223
+ }
224
+ catch (e) {
225
+ this.logger.error(`[computePromptSlashCommands] Failed to parse prompt file for slash command: ${promptPath.uri}`, e instanceof Error ? e.message : String(e));
226
+ return undefined;
227
+ }
228
+ })));
229
+ const result = [];
230
+ const seen = ( new ResourceSet());
231
+ for (const detail of details) {
232
+ if (detail) {
233
+ result.push(detail);
234
+ seen.add(detail.promptPath.uri);
235
+ }
176
236
  }
177
- else {
178
- cache = { value: undefined, pendingPromise: newPromise };
179
- this.promptFileByCommandCache.set(command, cache);
237
+ for (const model of this.modelService.getModels()) {
238
+ if (model.getLanguageId() === PROMPT_LANGUAGE_ID && model.uri.scheme === Schemas.untitled && !( seen.has(model.uri))) {
239
+ const parsedPromptFile = this.getParsedPromptFile(model);
240
+ result.push(this.asChatPromptSlashCommand(parsedPromptFile, { uri: model.uri, storage: PromptsStorage.local, type: PromptsType.prompt }));
241
+ }
180
242
  }
181
- const newValue = await newPromise.finally(() => cache.pendingPromise = undefined);
182
- cache.value = newValue;
183
- this.onDidChangeParsedPromptFilesCacheEmitter.fire();
184
- return newValue;
243
+ return result;
185
244
  }
186
- resolvePromptSlashCommandFromCache(command) {
187
- const cache = this.promptFileByCommandCache.get(command);
188
- const value = cache?.value;
189
- if (value === undefined) {
190
- void this.populatePromptCommandCache(command).catch((error) => { });
191
- }
192
- return value;
245
+ isValidSlashCommandName(command) {
246
+ return command.match(/^[\p{L}\d_\-\.]+$/u) !== null;
193
247
  }
194
- async getPromptDetails(promptPath) {
195
- const parsedPromptFile = await this.parseNew(promptPath.uri, CancellationToken.None).catch(() => undefined);
248
+ async resolvePromptSlashCommand(name, token) {
249
+ const commands = await this.getPromptSlashCommands(token);
250
+ return commands.find(cmd => cmd.name === name);
251
+ }
252
+ asChatPromptSlashCommand(parsedPromptFile, promptPath) {
253
+ let name = parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri);
254
+ name = name.replace(/[^\p{L}\d_\-\.]+/gu, '-');
196
255
  return {
197
- name: parsedPromptFile?.header?.name ?? promptPath.name ?? getCleanPromptName(promptPath.uri),
198
- description: parsedPromptFile?.header?.description ?? promptPath.description
256
+ name: name,
257
+ description: parsedPromptFile?.header?.description ?? promptPath.description,
258
+ argumentHint: parsedPromptFile?.header?.argumentHint,
259
+ parsedPromptFile,
260
+ promptPath
199
261
  };
200
262
  }
201
- async getPromptPath(command) {
202
- const promptPaths = await this.listPromptFiles(PromptsType.prompt, CancellationToken.None);
203
- for (const promptPath of promptPaths) {
204
- const details = await this.getPromptDetails(promptPath);
205
- if (details.name === command) {
206
- return promptPath.uri;
207
- }
208
- }
209
- const textModel = this.modelService.getModels().find(model => model.getLanguageId() === PROMPT_LANGUAGE_ID && getCommandNameFromURI(model.uri) === command);
210
- if (textModel) {
211
- return textModel.uri;
212
- }
213
- return undefined;
214
- }
215
- async getPromptCommandName(uri) {
216
- const promptPaths = await this.listPromptFiles(PromptsType.prompt, CancellationToken.None);
217
- let promptPath = promptPaths.find(promptPath => isEqual(promptPath.uri, uri));
218
- if (!promptPath) {
219
- promptPath = { uri, storage: PromptsStorage.local, type: PromptsType.prompt };
263
+ async getPromptSlashCommandName(uri, token) {
264
+ const slashCommands = await this.getPromptSlashCommands(token);
265
+ const slashCommand = slashCommands.find(c => isEqual(c.promptPath.uri, uri));
266
+ if (!slashCommand) {
267
+ return getCleanPromptName(uri);
220
268
  }
221
- const { name } = await this.getPromptDetails(promptPath);
222
- return name;
269
+ return slashCommand.name;
223
270
  }
224
- async findPromptSlashCommands() {
225
- const promptFiles = await this.listPromptFiles(PromptsType.prompt, CancellationToken.None);
226
- return Promise.all(( promptFiles.map(async (promptPath) => {
227
- const { name } = await this.getPromptDetails(promptPath);
228
- return {
229
- command: name,
230
- detail: ( localize(
231
- 5945,
232
- 'Prompt file: {0}',
233
- this.labelService.getUriLabel(promptPath.uri, { relative: true })
234
- )),
235
- promptPath
236
- };
237
- })));
271
+ get onDidChangeCustomAgents() {
272
+ return this.cachedCustomAgents.onDidChange;
238
273
  }
239
274
  async getCustomAgents(token) {
240
- let customAgents = this.cachedCustomAgents;
241
- if (!customAgents) {
242
- customAgents = this.computeCustomAgents(token);
243
- if (this.onDidChangeCustomAgentsEmitter) {
244
- this.cachedCustomAgents = customAgents;
245
- }
246
- }
247
- const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
248
- return (await customAgents).filter(agent => !( disabledAgents.has(agent.uri)));
275
+ return this.cachedCustomAgents.get(token);
249
276
  }
250
277
  async computeCustomAgents(token) {
251
- const agentFiles = await this.listPromptFiles(PromptsType.agent, token);
252
- const customAgents = await Promise.all(( agentFiles.map(async (promptPath) => {
278
+ let agentFiles = await this.listPromptFiles(PromptsType.agent, token);
279
+ const disabledAgents = this.getDisabledPromptFiles(PromptsType.agent);
280
+ agentFiles = agentFiles.filter(promptPath => !( disabledAgents.has(promptPath.uri)));
281
+ const customAgentsResults = await Promise.allSettled(( agentFiles.map(async (promptPath) => {
253
282
  const uri = promptPath.uri;
254
283
  const ast = await this.parseNew(uri, token);
255
284
  let metadata;
@@ -284,9 +313,26 @@ let PromptsService = class PromptsService extends Disposable {
284
313
  if (!ast.header) {
285
314
  return { uri, name, agentInstructions, source };
286
315
  }
287
- const { description, model, tools, handOffs, argumentHint, target } = ast.header;
288
- return { uri, name, description, model, tools, handOffs, argumentHint, target, agentInstructions, source };
316
+ const { description, model, tools, handOffs, argumentHint, target, infer } = ast.header;
317
+ return { uri, name, description, model, tools, handOffs, argumentHint, target, infer, agentInstructions, source };
289
318
  })));
319
+ const customAgents = [];
320
+ for (let i = 0; i < customAgentsResults.length; i++) {
321
+ const result = customAgentsResults[i];
322
+ if (result.status === 'fulfilled') {
323
+ customAgents.push(result.value);
324
+ }
325
+ else {
326
+ const uri = agentFiles[i].uri;
327
+ const error = result.reason;
328
+ if (error instanceof FileOperationError && error.fileOperationResult === FileOperationResult.FILE_NOT_FOUND) {
329
+ this.logger.warn(`[computeCustomAgents] Skipping agent file that does not exist: ${uri}`, error.message);
330
+ }
331
+ else {
332
+ this.logger.error(`[computeCustomAgents] Failed to parse agent file: ${uri}`, error);
333
+ }
334
+ }
335
+ }
290
336
  return customAgents;
291
337
  }
292
338
  async parseNew(uri, token) {
@@ -313,30 +359,35 @@ let PromptsService = class PromptsService extends Disposable {
313
359
  const msg = e instanceof Error ? e.message : String(e);
314
360
  this.logger.error(`[registerContributedFile] Failed to make prompt file readonly: ${uri}`, msg);
315
361
  }
316
- return { uri, name, description, storage: PromptsStorage.extension, type, extension };
362
+ return { uri, name, description, storage: PromptsStorage.extension, type, extension, source: ExtensionAgentSourceType.contribution };
317
363
  })();
318
364
  bucket.set(uri, entryPromise);
319
- const updateAgentsIfRequired = () => {
320
- if (type === PromptsType.agent) {
321
- this.cachedCustomAgents = undefined;
322
- this.onDidChangeCustomAgentsEmitter?.fire();
365
+ const flushCachesIfRequired = () => {
366
+ this.cachedFileLocations[type] = undefined;
367
+ switch (type) {
368
+ case PromptsType.agent:
369
+ this.cachedCustomAgents.refresh();
370
+ break;
371
+ case PromptsType.prompt:
372
+ this.cachedSlashCommands.refresh();
373
+ break;
323
374
  }
324
375
  };
325
- updateAgentsIfRequired();
376
+ flushCachesIfRequired();
326
377
  return {
327
378
  dispose: () => {
328
379
  bucket.delete(uri);
329
- updateAgentsIfRequired();
380
+ flushCachesIfRequired();
330
381
  }
331
382
  };
332
383
  }
333
384
  getPromptLocationLabel(promptPath) {
334
385
  switch (promptPath.storage) {
335
386
  case PromptsStorage.local: return this.labelService.getUriLabel(dirname(promptPath.uri), { relative: true });
336
- case PromptsStorage.user: return localize(5946, 'User Data');
387
+ case PromptsStorage.user: return localize(6066, 'User Data');
337
388
  case PromptsStorage.extension: {
338
389
  return localize(
339
- 5947,
390
+ 6067,
340
391
  'Extension: {0}',
341
392
  promptPath.extension.displayName ?? promptPath.extension.id
342
393
  );
@@ -393,8 +444,35 @@ let PromptsService = class PromptsService extends Disposable {
393
444
  const disabled = ( Array.from(uris).map(uri => uri.toJSON()));
394
445
  this.storageService.store(this.disabledPromptsStorageKeyPrefix + type, JSON.stringify(disabled), StorageScope.PROFILE, StorageTarget.USER);
395
446
  if (type === PromptsType.agent) {
396
- this.onDidChangeCustomAgentsEmitter?.fire();
447
+ this.cachedCustomAgents.refresh();
448
+ }
449
+ }
450
+ async findClaudeSkills(token) {
451
+ const useClaudeSkills = this.configurationService.getValue(PromptsConfig.USE_CLAUDE_SKILLS);
452
+ if (useClaudeSkills) {
453
+ const result = [];
454
+ const process = async (uri, type) => {
455
+ try {
456
+ const parsedFile = await this.parseNew(uri, token);
457
+ const name = parsedFile.header?.name;
458
+ if (name) {
459
+ result.push({ uri, type, name, description: parsedFile.header?.description });
460
+ }
461
+ else {
462
+ this.logger.error(`[findClaudeSkills] Claude skill file missing name attribute: ${uri}`);
463
+ }
464
+ }
465
+ catch (e) {
466
+ this.logger.error(`[findClaudeSkills] Failed to parse Claude skill file: ${uri}`, e instanceof Error ? e.message : String(e));
467
+ }
468
+ };
469
+ const workspaceSkills = await this.fileLocator.findClaudeSkillsInWorkspace(token);
470
+ await Promise.all(( workspaceSkills.map(uri => process(uri, 'project'))));
471
+ const userSkills = await this.fileLocator.findClaudeSkillsInUserHome(token);
472
+ await Promise.all(( userSkills.map(uri => process(uri, 'personal'))));
473
+ return result;
397
474
  }
475
+ return undefined;
398
476
  }
399
477
  };
400
478
  PromptsService = ( __decorate([
@@ -403,39 +481,69 @@ PromptsService = ( __decorate([
403
481
  ( __param(2, IModelService)),
404
482
  ( __param(3, IInstantiationService)),
405
483
  ( __param(4, IUserDataProfileService)),
406
- ( __param(5, ILanguageService)),
407
- ( __param(6, IConfigurationService)),
408
- ( __param(7, IFileService)),
409
- ( __param(8, IFilesConfigurationService)),
410
- ( __param(9, IStorageService))
484
+ ( __param(5, IConfigurationService)),
485
+ ( __param(6, IFileService)),
486
+ ( __param(7, IFilesConfigurationService)),
487
+ ( __param(8, IStorageService)),
488
+ ( __param(9, IExtensionService))
411
489
  ], PromptsService));
412
- function getCommandNameFromURI(uri) {
413
- return basename(uri.fsPath, PROMPT_FILE_EXTENSION);
490
+ class CachedPromise extends Disposable {
491
+ constructor(computeFn, getEvent, delay = 0) {
492
+ super();
493
+ this.computeFn = computeFn;
494
+ this.getEvent = getEvent;
495
+ this.delay = delay;
496
+ this.cachedPromise = undefined;
497
+ this.onDidUpdatePromiseEmitter = undefined;
498
+ }
499
+ get onDidChange() {
500
+ if (!this.onDidUpdatePromiseEmitter) {
501
+ const emitter = this.onDidUpdatePromiseEmitter = this._register(( new Emitter()));
502
+ const delayer = this._register(( new Delayer(this.delay)));
503
+ this._register(this.getEvent()(() => {
504
+ this.cachedPromise = undefined;
505
+ delayer.trigger(() => emitter.fire());
506
+ }));
507
+ }
508
+ return this.onDidUpdatePromiseEmitter.event;
509
+ }
510
+ get(token) {
511
+ if (this.cachedPromise !== undefined) {
512
+ return this.cachedPromise;
513
+ }
514
+ const result = this.computeFn(token);
515
+ if (!this.onDidUpdatePromiseEmitter) {
516
+ return result;
517
+ }
518
+ this.cachedPromise = result;
519
+ this.onDidUpdatePromiseEmitter.fire();
520
+ return result;
521
+ }
522
+ refresh() {
523
+ this.cachedPromise = undefined;
524
+ this.onDidUpdatePromiseEmitter?.fire();
525
+ }
414
526
  }
415
- let UpdateTracker = class UpdateTracker extends Disposable {
416
- static { UpdateTracker_1 = this; }
417
- static { this.PROMPT_UPDATE_DELAY_MS = 200; }
527
+ class ModelChangeTracker extends Disposable {
418
528
  get onDidPromptChange() {
419
529
  return this.onDidPromptModelChange.event;
420
530
  }
421
- constructor(fileLocator, promptType, modelService) {
531
+ constructor(modelService) {
422
532
  super();
423
533
  this.listeners = ( new ResourceMap());
424
534
  this.onDidPromptModelChange = this._register(( new Emitter()));
425
- const delayer = this._register(( new Delayer(UpdateTracker_1.PROMPT_UPDATE_DELAY_MS)));
426
- const trigger = (event) => delayer.trigger(() => this.onDidPromptModelChange.fire(event));
427
- const filesUpdatedEventRegistration = this._register(fileLocator.createFilesUpdatedEvent(promptType));
428
- this._register(filesUpdatedEventRegistration.event(() => trigger({ kind: 'fileSystem' })));
429
535
  const onAdd = (model) => {
430
- if (model.getLanguageId() === getLanguageIdForPromptsType(promptType)) {
431
- this.listeners.set(model.uri, model.onDidChangeContent(() => trigger({ kind: 'textModel', uri: model.uri })));
536
+ const promptType = getPromptsTypeForLanguageId(model.getLanguageId());
537
+ if (promptType !== undefined) {
538
+ this.listeners.set(model.uri, model.onDidChangeContent(() => this.onDidPromptModelChange.fire({ uri: model.uri, promptType })));
432
539
  }
433
540
  };
434
541
  const onRemove = (languageId, uri) => {
435
- if (languageId === getLanguageIdForPromptsType(promptType)) {
542
+ const promptType = getPromptsTypeForLanguageId(languageId);
543
+ if (promptType !== undefined) {
436
544
  this.listeners.get(uri)?.dispose();
437
545
  this.listeners.delete(uri);
438
- trigger({ kind: 'textModel', uri });
546
+ this.onDidPromptModelChange.fire({ uri, promptType });
439
547
  }
440
548
  };
441
549
  this._register(modelService.onModelAdded(model => onAdd(model)));
@@ -450,17 +558,15 @@ let UpdateTracker = class UpdateTracker extends Disposable {
450
558
  this.listeners.forEach(listener => listener.dispose());
451
559
  this.listeners.clear();
452
560
  }
453
- };
454
- UpdateTracker = UpdateTracker_1 = ( __decorate([
455
- ( __param(2, IModelService))
456
- ], UpdateTracker));
561
+ }
457
562
  var IAgentSource;
458
563
  (function (IAgentSource) {
459
564
  function fromPromptPath(promptPath) {
460
565
  if (promptPath.storage === PromptsStorage.extension) {
461
566
  return {
462
567
  storage: PromptsStorage.extension,
463
- extensionId: promptPath.extension.identifier
568
+ extensionId: promptPath.extension.identifier,
569
+ type: promptPath.source
464
570
  };
465
571
  }
466
572
  else {
@@ -472,4 +578,4 @@ var IAgentSource;
472
578
  IAgentSource.fromPromptPath = fromPromptPath;
473
579
  })(IAgentSource || (IAgentSource = {}));
474
580
 
475
- export { PromptsService, UpdateTracker };
581
+ export { PromptsService };