@codingame/monaco-vscode-chat-service-override 25.1.2 → 26.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 (334) hide show
  1. package/index.js +24 -3
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +23 -3
  4. package/vscode/src/vs/platform/browserElements/common/browserElements.js +13 -6
  5. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +4 -4
  6. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -1
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +42 -27
  8. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +14 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +218 -74
  10. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatTerminalOutputAccessibleView.js +6 -8
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -9
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +165 -168
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +27 -25
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +141 -140
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +189 -121
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +14 -15
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +60 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +435 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +28 -12
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +10 -12
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -1
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +37 -16
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.d.ts +11 -0
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +54 -24
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +73 -34
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +71 -30
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +151 -89
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +12 -15
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +39 -40
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +90 -125
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +5 -2
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +263 -143
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +4 -4
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +188 -126
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -1
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +37 -28
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +21 -9
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +392 -226
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +31 -27
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +25 -23
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -3
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.d.ts +2 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +13 -0
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +20 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +83 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +68 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +319 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.d.ts +1 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +215 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +179 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +951 -0
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agentsessionprojection.css +20 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +388 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/unifiedQuickAccess.css +195 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +120 -0
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +394 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.d.ts +38 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +95 -0
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +31 -29
  61. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +49 -47
  62. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +4 -6
  63. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/media/simpleBrowserOverlay.css +0 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +188 -151
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +1012 -639
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +256 -151
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +8 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +182 -101
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +79 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +193 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +9 -7
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.d.ts +68 -0
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +253 -0
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -5
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +69 -50
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -4
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +52 -33
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +5 -6
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +274 -155
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +2 -10
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +130 -104
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +12 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +385 -160
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +53 -36
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +112 -75
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +19 -10
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +31 -11
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +39 -17
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNewNotebookContentEdits.js +10 -14
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +0 -2
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +25 -16
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +265 -203
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +29 -26
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +114 -60
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +16 -19
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +44 -30
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +119 -45
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +152 -136
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +12 -8
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +51 -31
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +323 -217
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -3
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +653 -401
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +52 -40
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -3
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +5 -2
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +43 -28
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +182 -136
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +33 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +548 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +0 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +222 -138
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +3 -3
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +151 -113
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +6 -4
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +453 -217
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +162 -88
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/media/chatSetup.css +2 -1
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +1 -13
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +309 -233
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +55 -53
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.js +3 -1
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +37 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +109 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +35 -23
  132. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.d.ts +9 -4
  133. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +73 -33
  134. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +47 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +333 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +39 -25
  137. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +9 -5
  138. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +23 -20
  139. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +20 -16
  141. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +65 -57
  142. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +48 -36
  143. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +20 -12
  144. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +52 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +155 -159
  147. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -14
  148. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +521 -246
  149. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +107 -76
  150. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +28 -24
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.js +10 -6
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.d.ts +16 -0
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.js +57 -0
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatLayoutService.js +4 -6
  155. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +56 -44
  156. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -3
  157. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +37 -47
  158. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatEditorInputContentProvider.js +5 -7
  159. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +10 -0
  160. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +1284 -0
  161. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +179 -125
  162. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +9 -11
  163. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +7 -6
  164. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +96 -78
  165. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +58 -53
  166. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +25 -11
  167. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +484 -292
  168. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.d.ts +1 -6
  169. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +65 -92
  170. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -19
  171. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +1 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +9 -1
  173. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +331 -189
  174. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +81 -93
  175. package/vscode/src/vs/workbench/contrib/chat/common/ignoredFiles.js +1 -3
  176. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -3
  177. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +6 -7
  178. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +36 -8
  179. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +169 -31
  180. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.d.ts +6 -0
  181. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +141 -0
  182. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +6 -4
  183. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +218 -144
  184. package/vscode/src/vs/workbench/contrib/chat/common/model/chatTransferService.js +20 -10
  185. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.d.ts +109 -0
  186. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +349 -0
  187. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +9 -8
  188. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +9 -0
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +139 -36
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +3 -6
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +64 -51
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +49 -34
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +21 -13
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -1
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +125 -97
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +91 -131
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkProvider.js +8 -5
  198. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -0
  199. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +488 -222
  200. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +32 -12
  201. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +58 -13
  202. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +717 -200
  203. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +79 -18
  204. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +371 -130
  205. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +0 -1
  206. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +3 -7
  207. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +79 -61
  208. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +27 -21
  209. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +7 -10
  210. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
  211. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +26 -32
  212. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +2 -2
  213. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -60
  214. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +115 -426
  215. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +15 -0
  216. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +127 -0
  217. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -37
  218. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +16 -0
  219. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +21 -0
  220. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +51 -0
  221. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +334 -0
  222. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.d.ts +41 -0
  223. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +424 -0
  224. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.d.ts +4 -0
  225. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +58 -0
  226. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.d.ts +7 -0
  227. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +195 -0
  228. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.d.ts +8 -0
  229. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +368 -0
  230. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.d.ts +2 -0
  231. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +7 -0
  232. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  233. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +1 -1
  234. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +23 -25
  235. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +7 -8
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +34 -38
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +8 -12
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +103 -95
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +28 -16
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +4 -5
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +12 -8
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +65 -54
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +86 -60
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +13 -26
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +2 -1
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +56 -46
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +2 -2
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +63 -31
  252. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +2 -1
  253. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +35 -30
  254. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +2 -1
  255. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +44 -37
  256. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +3 -4
  257. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +3 -3
  258. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +11 -0
  259. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +70 -50
  260. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +26 -394
  261. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +85 -49
  262. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +68 -27
  263. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +1 -0
  264. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +67 -45
  265. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.d.ts +12 -0
  266. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +106 -0
  267. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +2 -2
  268. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +177 -97
  269. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +136 -49
  270. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +2 -1
  271. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +128 -112
  272. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +51 -49
  273. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +8 -0
  274. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +25 -0
  275. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
  276. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
  277. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
  278. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
  279. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
  280. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
  281. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
  282. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +12 -0
  283. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +21 -0
  284. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +5 -14
  285. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +2 -4
  286. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +1 -0
  287. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
  288. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +29 -0
  289. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +30 -31
  290. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -17
  291. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +19 -20
  292. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.d.ts +11 -0
  293. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +58 -0
  294. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +31 -3
  295. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +325 -199
  296. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +1 -1
  297. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +1 -1
  298. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +33 -38
  299. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +45 -5
  300. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +746 -456
  301. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +145 -98
  302. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +88 -37
  303. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +120 -51
  304. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +25 -28
  305. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +5 -0
  306. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +58 -12
  307. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +12 -0
  308. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.js +17 -0
  309. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +8 -1
  310. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +47 -28
  311. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +37 -0
  312. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +171 -0
  313. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +0 -58
  314. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +0 -213
  315. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +0 -39
  316. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +0 -243
  317. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +0 -7
  318. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +0 -41
  319. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +0 -166
  320. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +0 -607
  321. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +0 -255
  322. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +0 -46
  323. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +0 -396
  324. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +0 -9
  325. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +0 -379
  326. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +0 -117
  327. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -141
  328. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -961
  329. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +0 -36
  330. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +0 -447
  331. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +0 -6
  332. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +0 -251
  333. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.d.ts +0 -10
  334. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -42
@@ -8,6 +8,7 @@ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
8
8
  import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
9
9
  import { MarkerSeverity } from '@codingame/monaco-vscode-api/vscode/vs/platform/markers/common/markers';
10
10
  import { IMarkerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/markers/common/markers.service';
11
+ import { ChatMode } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatModes';
11
12
  import { IChatModeService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatModes.service';
12
13
  import { ChatModeKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
13
14
  import { ILanguageModelChatMetadata } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
@@ -24,10 +25,18 @@ import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbenc
24
25
  import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
25
26
  import { LEGACY_MODE_FILE_EXTENSION, AGENTS_SOURCE_FOLDER } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
26
27
  import { Lazy } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lazy';
28
+ import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
27
29
 
28
- const MARKERS_OWNER_ID = 'prompts-diagnostics-provider';
30
+ const MARKERS_OWNER_ID = "prompts-diagnostics-provider";
29
31
  let PromptValidator = class PromptValidator {
30
- constructor(languageModelsService, languageModelToolsService, chatModeService, fileService, labelService, promptsService) {
32
+ constructor(
33
+ languageModelsService,
34
+ languageModelToolsService,
35
+ chatModeService,
36
+ fileService,
37
+ labelService,
38
+ promptsService
39
+ ) {
31
40
  this.languageModelsService = languageModelsService;
32
41
  this.languageModelToolsService = languageModelToolsService;
33
42
  this.chatModeService = chatModeService;
@@ -36,30 +45,58 @@ let PromptValidator = class PromptValidator {
36
45
  this.promptsService = promptsService;
37
46
  }
38
47
  async validate(promptAST, promptType, report) {
39
- promptAST.header?.errors.forEach(error => report(toMarker(error.message, error.range, MarkerSeverity.Error)));
40
- this.validateHeader(promptAST, promptType, report);
48
+ promptAST.header?.errors.forEach(
49
+ error => report(toMarker(error.message, error.range, MarkerSeverity.Error))
50
+ );
51
+ await this.validateHeader(promptAST, promptType, report);
41
52
  await this.validateBody(promptAST, promptType, report);
42
53
  await this.validateFileName(promptAST, promptType, report);
54
+ await this.validateSkillFolderName(promptAST, promptType, report);
43
55
  }
44
56
  async validateFileName(promptAST, promptType, report) {
45
57
  if (promptType === PromptsType.agent && promptAST.uri.path.endsWith(LEGACY_MODE_FILE_EXTENSION)) {
46
58
  const location = this.promptsService.getAgentFileURIFromModeFile(promptAST.uri);
47
59
  if (location && (await this.fileService.canCreateFile(location))) {
48
60
  report(toMarker(( localize(
49
- 6018,
61
+ 6296,
50
62
  "Chat modes have been renamed to agents. Please move this file to {0}",
51
63
  (location.toString())
52
64
  )), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
53
- }
54
- else {
65
+ } else {
55
66
  report(toMarker(( localize(
56
- 6019,
67
+ 6297,
57
68
  "Chat modes have been renamed to agents. Please move the file to {0}",
58
69
  AGENTS_SOURCE_FOLDER
59
70
  )), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
60
71
  }
61
72
  }
62
73
  }
74
+ async validateSkillFolderName(promptAST, promptType, report) {
75
+ if (promptType !== PromptsType.skill) {
76
+ return;
77
+ }
78
+ const nameAttribute = promptAST.header?.attributes.find(attr => attr.key === PromptHeaderAttributes.name);
79
+ if (!nameAttribute || nameAttribute.value.type !== "string") {
80
+ return;
81
+ }
82
+ const skillName = nameAttribute.value.value.trim();
83
+ if (!skillName) {
84
+ return;
85
+ }
86
+ const pathParts = promptAST.uri.path.split("/");
87
+ const skillIndex = pathParts.findIndex(part => part === "SKILL.md");
88
+ if (skillIndex > 0) {
89
+ const folderName = pathParts[skillIndex - 1];
90
+ if (folderName && skillName !== folderName) {
91
+ report(toMarker(( localize(
92
+ 6298,
93
+ "The skill name '{0}' should match the folder name '{1}'.",
94
+ skillName,
95
+ folderName
96
+ )), nameAttribute.value.range, MarkerSeverity.Warning));
97
+ }
98
+ }
99
+ }
63
100
  async validateBody(promptAST, promptType, report) {
64
101
  const body = promptAST.body;
65
102
  if (!body) {
@@ -69,7 +106,7 @@ let PromptValidator = class PromptValidator {
69
106
  for (const ref of body.fileReferences) {
70
107
  const resolved = body.resolveFilePath(ref.content);
71
108
  if (!resolved) {
72
- report(toMarker(( localize(6020, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
109
+ report(toMarker(( localize(6299, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
73
110
  continue;
74
111
  }
75
112
  if (promptAST.uri.scheme === resolved.scheme) {
@@ -79,11 +116,9 @@ let PromptValidator = class PromptValidator {
79
116
  if (exists) {
80
117
  return;
81
118
  }
82
- }
83
- catch {
84
- }
119
+ } catch {}
85
120
  const loc = this.labelService.getUriLabel(resolved);
86
- report(toMarker(( localize(6021, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
121
+ report(toMarker(( localize(6300, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
87
122
  })());
88
123
  }
89
124
  }
@@ -91,7 +126,7 @@ let PromptValidator = class PromptValidator {
91
126
  if (body.variableReferences.length && !isGitHubTarget) {
92
127
  const headerTools = promptAST.header?.tools;
93
128
  const headerTarget = promptAST.header?.target;
94
- const headerToolsMap = headerTools ? this.languageModelToolsService.toToolAndToolSetEnablementMap(headerTools, headerTarget) : undefined;
129
+ const headerToolsMap = headerTools ? this.languageModelToolsService.toToolAndToolSetEnablementMap(headerTools, headerTarget, undefined) : undefined;
95
130
  const available = ( new Set(this.languageModelToolsService.getFullReferenceNames()));
96
131
  const deprecatedNames = this.languageModelToolsService.getDeprecatedFullReferenceNames();
97
132
  for (const variable of body.variableReferences) {
@@ -102,32 +137,29 @@ let PromptValidator = class PromptValidator {
102
137
  if (currentNames.size === 1) {
103
138
  const newName = Array.from(currentNames)[0];
104
139
  report(toMarker(( localize(
105
- 6022,
140
+ 6301,
106
141
  "Tool or toolset '{0}' has been renamed, use '{1}' instead.",
107
142
  variable.name,
108
143
  newName
109
144
  )), variable.range, MarkerSeverity.Info));
110
- }
111
- else {
112
- const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(', ');
145
+ } else {
146
+ const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
113
147
  report(toMarker(( localize(
114
- 6023,
148
+ 6302,
115
149
  "Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
116
150
  variable.name,
117
151
  newNames
118
152
  )), variable.range, MarkerSeverity.Info));
119
153
  }
120
154
  }
155
+ } else {
156
+ report(toMarker(( localize(6303, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Warning));
121
157
  }
122
- else {
123
- report(toMarker(( localize(6024, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Warning));
124
- }
125
- }
126
- else if (headerToolsMap) {
158
+ } else if (headerToolsMap) {
127
159
  const tool = this.languageModelToolsService.getToolByFullReferenceName(variable.name);
128
160
  if (tool && headerToolsMap.get(tool) === false) {
129
161
  report(toMarker(( localize(
130
- 6025,
162
+ 6304,
131
163
  "Tool or toolset '{0}' also needs to be enabled in the header.",
132
164
  variable.name
133
165
  )), variable.range, MarkerSeverity.Warning));
@@ -137,7 +169,7 @@ let PromptValidator = class PromptValidator {
137
169
  }
138
170
  await Promise.all(fileReferenceChecks);
139
171
  }
140
- validateHeader(promptAST, promptType, report) {
172
+ async validateHeader(promptAST, promptType, report) {
141
173
  const header = promptAST.header;
142
174
  if (!header) {
143
175
  return;
@@ -149,23 +181,28 @@ let PromptValidator = class PromptValidator {
149
181
  this.validateDescription(attributes, report);
150
182
  this.validateArgumentHint(attributes, report);
151
183
  switch (promptType) {
152
- case PromptsType.prompt: {
184
+ case PromptsType.prompt:
185
+ {
153
186
  const agent = this.validateAgent(attributes, report);
154
187
  this.validateTools(attributes, agent?.kind ?? ChatModeKind.Agent, header.target, report);
155
188
  this.validateModel(attributes, agent?.kind ?? ChatModeKind.Agent, report);
156
189
  break;
157
190
  }
158
- case PromptsType.instructions:
159
- this.validateApplyTo(attributes, report);
160
- this.validateExcludeAgent(attributes, report);
161
- break;
162
- case PromptsType.agent: {
191
+ case PromptsType.instructions:
192
+ this.validateApplyTo(attributes, report);
193
+ this.validateExcludeAgent(attributes, report);
194
+ break;
195
+ case PromptsType.agent:
196
+ {
163
197
  this.validateTarget(attributes, report);
164
198
  this.validateInfer(attributes, report);
199
+ this.validateUserInvokable(attributes, report);
200
+ this.validateDisableModelInvocation(attributes, report);
165
201
  this.validateTools(attributes, ChatModeKind.Agent, header.target, report);
166
202
  if (!isGitHubTarget) {
167
203
  this.validateModel(attributes, ChatModeKind.Agent, report);
168
204
  this.validateHandoffs(attributes, report);
205
+ await this.validateAgentsAttribute(attributes, header, report);
169
206
  }
170
207
  break;
171
208
  }
@@ -177,52 +214,58 @@ let PromptValidator = class PromptValidator {
177
214
  for (const attribute of attributes) {
178
215
  if (!validAttributeNames.includes(attribute.key)) {
179
216
  const supportedNames = ( new Lazy(
180
- () => getValidAttributeNames(promptType, false, isGitHubTarget).sort().join(', ')
217
+ () => getValidAttributeNames(promptType, false, isGitHubTarget).sort().join(", ")
181
218
  ));
182
219
  switch (promptType) {
183
- case PromptsType.prompt:
220
+ case PromptsType.prompt:
221
+ report(toMarker(( localize(
222
+ 6305,
223
+ "Attribute '{0}' is not supported in prompt files. Supported: {1}.",
224
+ attribute.key,
225
+ supportedNames.value
226
+ )), attribute.range, MarkerSeverity.Warning));
227
+ break;
228
+ case PromptsType.agent:
229
+ if (isGitHubTarget) {
184
230
  report(toMarker(( localize(
185
- 6026,
186
- "Attribute '{0}' is not supported in prompt files. Supported: {1}.",
231
+ 6306,
232
+ "Attribute '{0}' is not supported in custom GitHub Copilot agent files. Supported: {1}.",
187
233
  attribute.key,
188
234
  supportedNames.value
189
235
  )), attribute.range, MarkerSeverity.Warning));
190
- break;
191
- case PromptsType.agent:
192
- if (isGitHubTarget) {
236
+ } else {
237
+ if (( validGithubCopilotAttributeNames.value.has(attribute.key))) {
238
+ report(toMarker(( localize(
239
+ 6307,
240
+ "Attribute '{0}' is ignored when running locally in VS Code.",
241
+ attribute.key
242
+ )), attribute.range, MarkerSeverity.Info));
243
+ } else {
193
244
  report(toMarker(( localize(
194
- 6027,
195
- "Attribute '{0}' is not supported in custom GitHub Copilot agent files. Supported: {1}.",
245
+ 6308,
246
+ "Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.",
196
247
  attribute.key,
197
248
  supportedNames.value
198
249
  )), attribute.range, MarkerSeverity.Warning));
199
250
  }
200
- else {
201
- if (( validGithubCopilotAttributeNames.value.has(attribute.key))) {
202
- report(toMarker(( localize(
203
- 6028,
204
- "Attribute '{0}' is ignored when running locally in VS Code.",
205
- attribute.key
206
- )), attribute.range, MarkerSeverity.Info));
207
- }
208
- else {
209
- report(toMarker(( localize(
210
- 6029,
211
- "Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.",
212
- attribute.key,
213
- supportedNames.value
214
- )), attribute.range, MarkerSeverity.Warning));
215
- }
216
- }
217
- break;
218
- case PromptsType.instructions:
219
- report(toMarker(( localize(
220
- 6030,
221
- "Attribute '{0}' is not supported in instructions files. Supported: {1}.",
222
- attribute.key,
223
- supportedNames.value
224
- )), attribute.range, MarkerSeverity.Warning));
225
- break;
251
+ }
252
+ break;
253
+ case PromptsType.instructions:
254
+ report(toMarker(( localize(
255
+ 6309,
256
+ "Attribute '{0}' is not supported in instructions files. Supported: {1}.",
257
+ attribute.key,
258
+ supportedNames.value
259
+ )), attribute.range, MarkerSeverity.Warning));
260
+ break;
261
+ case PromptsType.skill:
262
+ report(toMarker(( localize(
263
+ 6310,
264
+ "Attribute '{0}' is not supported in skill files. Supported: {1}.",
265
+ attribute.key,
266
+ supportedNames.value
267
+ )), attribute.range, MarkerSeverity.Warning));
268
+ break;
226
269
  }
227
270
  }
228
271
  }
@@ -232,12 +275,12 @@ let PromptValidator = class PromptValidator {
232
275
  if (!nameAttribute) {
233
276
  return;
234
277
  }
235
- if (nameAttribute.value.type !== 'string') {
236
- report(toMarker(( localize(6031, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
278
+ if (nameAttribute.value.type !== "string") {
279
+ report(toMarker(( localize(6311, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
237
280
  return;
238
281
  }
239
282
  if (nameAttribute.value.value.trim().length === 0) {
240
- report(toMarker(( localize(6032, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
283
+ report(toMarker(( localize(6312, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
241
284
  return;
242
285
  }
243
286
  }
@@ -246,12 +289,12 @@ let PromptValidator = class PromptValidator {
246
289
  if (!descriptionAttribute) {
247
290
  return;
248
291
  }
249
- if (descriptionAttribute.value.type !== 'string') {
250
- report(toMarker(( localize(6033, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
292
+ if (descriptionAttribute.value.type !== "string") {
293
+ report(toMarker(( localize(6313, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
251
294
  return;
252
295
  }
253
296
  if (descriptionAttribute.value.value.trim().length === 0) {
254
- report(toMarker(( localize(6034, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
297
+ report(toMarker(( localize(6314, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
255
298
  return;
256
299
  }
257
300
  }
@@ -260,12 +303,12 @@ let PromptValidator = class PromptValidator {
260
303
  if (!argumentHintAttribute) {
261
304
  return;
262
305
  }
263
- if (argumentHintAttribute.value.type !== 'string') {
264
- report(toMarker(( localize(6035, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
306
+ if (argumentHintAttribute.value.type !== "string") {
307
+ report(toMarker(( localize(6315, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
265
308
  return;
266
309
  }
267
310
  if (argumentHintAttribute.value.value.trim().length === 0) {
268
- report(toMarker(( localize(6036, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Error));
311
+ report(toMarker(( localize(6316, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Error));
269
312
  return;
270
313
  }
271
314
  }
@@ -274,33 +317,53 @@ let PromptValidator = class PromptValidator {
274
317
  if (!attribute) {
275
318
  return;
276
319
  }
277
- if (attribute.value.type !== 'string') {
278
- report(toMarker(( localize(6037, "The 'model' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
320
+ if (attribute.value.type !== "string" && attribute.value.type !== "array") {
321
+ report(toMarker(( localize(6317, "The 'model' attribute must be a string or an array of strings.")), attribute.value.range, MarkerSeverity.Error));
279
322
  return;
280
323
  }
281
- const modelName = attribute.value.value.trim();
282
- if (modelName.length === 0) {
283
- report(toMarker(( localize(6038, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
284
- return;
324
+ const modelNames = [];
325
+ if (attribute.value.type === "string") {
326
+ const modelName = attribute.value.value.trim();
327
+ if (modelName.length === 0) {
328
+ report(toMarker(( localize(6318, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
329
+ return;
330
+ }
331
+ modelNames.push([modelName, attribute.value.range]);
332
+ } else if (attribute.value.type === "array") {
333
+ if (attribute.value.items.length === 0) {
334
+ report(toMarker(( localize(6319, "The 'model' array must not be empty.")), attribute.value.range, MarkerSeverity.Error));
335
+ return;
336
+ }
337
+ for (const item of attribute.value.items) {
338
+ if (item.type !== "string") {
339
+ report(toMarker(( localize(6320, "The 'model' array must contain only strings.")), item.range, MarkerSeverity.Error));
340
+ return;
341
+ }
342
+ const modelName = item.value.trim();
343
+ if (modelName.length === 0) {
344
+ report(toMarker(( localize(6321, "Model names in the array must be non-empty strings.")), item.range, MarkerSeverity.Error));
345
+ return;
346
+ }
347
+ modelNames.push([modelName, item.range]);
348
+ }
285
349
  }
286
- const languageModes = this.languageModelsService.getLanguageModelIds();
287
- if (languageModes.length === 0) {
350
+ const languageModels = this.languageModelsService.getLanguageModelIds();
351
+ if (languageModels.length === 0) {
288
352
  return;
289
353
  }
290
- const modelMetadata = this.findModelByName(languageModes, modelName);
291
- if (!modelMetadata) {
292
- report(toMarker(( localize(6039, "Unknown model '{0}'.", modelName)), attribute.value.range, MarkerSeverity.Warning));
293
- }
294
- else if (agentKind === ChatModeKind.Agent && !ILanguageModelChatMetadata.suitableForAgentMode(modelMetadata)) {
295
- report(toMarker(( localize(6040, "Model '{0}' is not suited for agent mode.", modelName)), attribute.value.range, MarkerSeverity.Warning));
354
+ for (const [modelName, range] of modelNames) {
355
+ const modelMetadata = this.findModelByName(modelName);
356
+ if (!modelMetadata) {
357
+ report(toMarker(( localize(6322, "Unknown model '{0}'.", modelName)), range, MarkerSeverity.Warning));
358
+ } else if (agentKind === ChatModeKind.Agent && !ILanguageModelChatMetadata.suitableForAgentMode(modelMetadata)) {
359
+ report(toMarker(( localize(6323, "Model '{0}' is not suited for agent mode.", modelName)), range, MarkerSeverity.Warning));
360
+ }
296
361
  }
297
362
  }
298
- findModelByName(languageModes, modelName) {
299
- for (const model of languageModes) {
300
- const metadata = this.languageModelsService.lookupLanguageModel(model);
301
- if (metadata && metadata.isUserSelectable !== false && ILanguageModelChatMetadata.matchesQualifiedName(modelName, metadata)) {
302
- return metadata;
303
- }
363
+ findModelByName(modelName) {
364
+ const metadata = this.languageModelsService.lookupLanguageModelByQualifiedName(modelName);
365
+ if (metadata && metadata.isUserSelectable !== false) {
366
+ return metadata;
304
367
  }
305
368
  return undefined;
306
369
  }
@@ -310,13 +373,12 @@ let PromptValidator = class PromptValidator {
310
373
  if (modeAttribute) {
311
374
  if (agentAttribute) {
312
375
  report(toMarker(( localize(
313
- 6041,
376
+ 6324,
314
377
  "The 'mode' attribute has been deprecated. The 'agent' attribute is used instead."
315
378
  )), modeAttribute.range, MarkerSeverity.Warning));
316
- }
317
- else {
379
+ } else {
318
380
  report(toMarker(( localize(
319
- 6042,
381
+ 6325,
320
382
  "The 'mode' attribute has been deprecated. Please rename it to 'agent'."
321
383
  )), modeAttribute.range, MarkerSeverity.Error));
322
384
  }
@@ -325,13 +387,13 @@ let PromptValidator = class PromptValidator {
325
387
  if (!attribute) {
326
388
  return undefined;
327
389
  }
328
- if (attribute.value.type !== 'string') {
329
- report(toMarker(( localize(6043, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
390
+ if (attribute.value.type !== "string") {
391
+ report(toMarker(( localize(6326, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
330
392
  return undefined;
331
393
  }
332
394
  const agentValue = attribute.value.value;
333
395
  if (agentValue.trim().length === 0) {
334
- report(toMarker(( localize(6044, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
396
+ report(toMarker(( localize(6327, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
335
397
  return undefined;
336
398
  }
337
399
  return this.validateAgentValue(attribute.value, report);
@@ -346,10 +408,10 @@ let PromptValidator = class PromptValidator {
346
408
  availableAgents.push(agent.name.get());
347
409
  }
348
410
  const errorMessage = ( localize(
349
- 6045,
411
+ 6328,
350
412
  "Unknown agent '{0}'. Available agents: {1}.",
351
413
  value.value,
352
- availableAgents.join(', ')
414
+ availableAgents.join(", ")
353
415
  ));
354
416
  report(toMarker(errorMessage, value.range, MarkerSeverity.Warning));
355
417
  return undefined;
@@ -361,19 +423,19 @@ let PromptValidator = class PromptValidator {
361
423
  }
362
424
  if (agentKind !== ChatModeKind.Agent) {
363
425
  report(toMarker(( localize(
364
- 6046,
426
+ 6329,
365
427
  "The 'tools' attribute is only supported when using agents. Attribute will be ignored."
366
428
  )), attribute.range, MarkerSeverity.Warning));
367
429
  }
368
430
  switch (attribute.value.type) {
369
- case 'array':
370
- if (target === Target.GitHubCopilot) ;
371
- else {
372
- this.validateVSCodeTools(attribute.value, target, report);
373
- }
374
- break;
375
- default:
376
- report(toMarker(( localize(6047, "The 'tools' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
431
+ case "array":
432
+ if (target === Target.GitHubCopilot)
433
+ ; else {
434
+ this.validateVSCodeTools(attribute.value, target, report);
435
+ }
436
+ break;
437
+ default:
438
+ report(toMarker(( localize(6330, "The 'tools' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
377
439
  }
378
440
  }
379
441
  validateVSCodeTools(valueItem, target, report) {
@@ -381,34 +443,31 @@ let PromptValidator = class PromptValidator {
381
443
  const available = ( new Set(this.languageModelToolsService.getFullReferenceNames()));
382
444
  const deprecatedNames = this.languageModelToolsService.getDeprecatedFullReferenceNames();
383
445
  for (const item of valueItem.items) {
384
- if (item.type !== 'string') {
385
- report(toMarker(( localize(6048, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
386
- }
387
- else if (item.value) {
446
+ if (item.type !== "string") {
447
+ report(toMarker(( localize(6331, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
448
+ } else if (item.value) {
388
449
  if (!( available.has(item.value))) {
389
450
  const currentNames = deprecatedNames.get(item.value);
390
451
  if (currentNames) {
391
452
  if (currentNames?.size === 1) {
392
453
  const newName = Array.from(currentNames)[0];
393
454
  report(toMarker(( localize(
394
- 6049,
455
+ 6332,
395
456
  "Tool or toolset '{0}' has been renamed, use '{1}' instead.",
396
457
  item.value,
397
458
  newName
398
459
  )), item.range, MarkerSeverity.Info));
399
- }
400
- else {
401
- const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(', ');
460
+ } else {
461
+ const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
402
462
  report(toMarker(( localize(
403
- 6050,
463
+ 6333,
404
464
  "Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
405
465
  item.value,
406
466
  newNames
407
467
  )), item.range, MarkerSeverity.Info));
408
468
  }
409
- }
410
- else {
411
- report(toMarker(( localize(6051, "Unknown tool '{0}'.", item.value)), item.range, MarkerSeverity.Warning));
469
+ } else {
470
+ report(toMarker(( localize(6334, "Unknown tool '{0}'.", item.value)), item.range, MarkerSeverity.Warning));
412
471
  }
413
472
  }
414
473
  }
@@ -420,27 +479,26 @@ let PromptValidator = class PromptValidator {
420
479
  if (!attribute) {
421
480
  return;
422
481
  }
423
- if (attribute.value.type !== 'string') {
424
- report(toMarker(( localize(6052, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
482
+ if (attribute.value.type !== "string") {
483
+ report(toMarker(( localize(6335, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
425
484
  return;
426
485
  }
427
486
  const pattern = attribute.value.value;
428
487
  try {
429
- const patterns = splitGlobAware(pattern, ',');
488
+ const patterns = splitGlobAware(pattern, ",");
430
489
  if (patterns.length === 0) {
431
- report(toMarker(( localize(6053, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
490
+ report(toMarker(( localize(6336, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
432
491
  return;
433
492
  }
434
493
  for (const pattern of patterns) {
435
494
  const globPattern = parse(pattern);
436
495
  if (isEmptyPattern(globPattern)) {
437
- report(toMarker(( localize(6053, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
496
+ report(toMarker(( localize(6336, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
438
497
  return;
439
498
  }
440
499
  }
441
- }
442
- catch (_error) {
443
- report(toMarker(( localize(6053, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
500
+ } catch (_error) {
501
+ report(toMarker(( localize(6336, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
444
502
  }
445
503
  }
446
504
  validateExcludeAgent(attributes, report) {
@@ -448,8 +506,8 @@ let PromptValidator = class PromptValidator {
448
506
  if (!attribute) {
449
507
  return;
450
508
  }
451
- if (attribute.value.type !== 'array') {
452
- report(toMarker(( localize(6054, "The 'excludeAgent' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
509
+ if (attribute.value.type !== "array" && attribute.value.type !== "string") {
510
+ report(toMarker(( localize(6337, "The 'excludeAgent' attribute must be an string or array.")), attribute.value.range, MarkerSeverity.Error));
453
511
  return;
454
512
  }
455
513
  }
@@ -458,63 +516,67 @@ let PromptValidator = class PromptValidator {
458
516
  if (!attribute) {
459
517
  return;
460
518
  }
461
- if (attribute.value.type !== 'array') {
462
- report(toMarker(( localize(6055, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
519
+ if (attribute.value.type !== "array") {
520
+ report(toMarker(( localize(6338, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
463
521
  return;
464
522
  }
465
523
  for (const item of attribute.value.items) {
466
- if (item.type !== 'object') {
524
+ if (item.type !== "object") {
467
525
  report(toMarker(( localize(
468
- 6056,
526
+ 6339,
469
527
  "Each handoff in the 'handoffs' attribute must be an object with 'label', 'agent', 'prompt' and optional 'send'."
470
528
  )), item.range, MarkerSeverity.Error));
471
529
  continue;
472
530
  }
473
- const required = ( new Set(['label', 'agent', 'prompt']));
531
+ const required = ( new Set(["label", "agent", "prompt"]));
474
532
  for (const prop of item.properties) {
475
533
  switch (prop.key.value) {
476
- case 'label':
477
- if (prop.value.type !== 'string' || prop.value.value.trim().length === 0) {
478
- report(toMarker(( localize(6057, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
479
- }
480
- break;
481
- case 'agent':
482
- if (prop.value.type !== 'string' || prop.value.value.trim().length === 0) {
483
- report(toMarker(( localize(6058, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
484
- }
485
- else {
486
- this.validateAgentValue(prop.value, report);
487
- }
488
- break;
489
- case 'prompt':
490
- if (prop.value.type !== 'string') {
491
- report(toMarker(( localize(6059, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
492
- }
493
- break;
494
- case 'send':
495
- if (prop.value.type !== 'boolean') {
496
- report(toMarker(( localize(6060, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
497
- }
498
- break;
499
- case 'showContinueOn':
500
- if (prop.value.type !== 'boolean') {
501
- report(toMarker(( localize(6061, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
502
- }
503
- break;
504
- default:
505
- report(toMarker(( localize(
506
- 6062,
507
- "Unknown property '{0}' in handoff object. Supported properties are 'label', 'agent', 'prompt' and optional 'send', 'showContinueOn'.",
508
- prop.key.value
509
- )), prop.value.range, MarkerSeverity.Warning));
534
+ case "label":
535
+ if (prop.value.type !== "string" || prop.value.value.trim().length === 0) {
536
+ report(toMarker(( localize(6340, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
537
+ }
538
+ break;
539
+ case "agent":
540
+ if (prop.value.type !== "string" || prop.value.value.trim().length === 0) {
541
+ report(toMarker(( localize(6341, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
542
+ } else {
543
+ this.validateAgentValue(prop.value, report);
544
+ }
545
+ break;
546
+ case "prompt":
547
+ if (prop.value.type !== "string") {
548
+ report(toMarker(( localize(6342, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
549
+ }
550
+ break;
551
+ case "send":
552
+ if (prop.value.type !== "boolean") {
553
+ report(toMarker(( localize(6343, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
554
+ }
555
+ break;
556
+ case "showContinueOn":
557
+ if (prop.value.type !== "boolean") {
558
+ report(toMarker(( localize(6344, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
559
+ }
560
+ break;
561
+ case "model":
562
+ if (prop.value.type !== "string") {
563
+ report(toMarker(( localize(6345, "The 'model' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
564
+ }
565
+ break;
566
+ default:
567
+ report(toMarker(( localize(
568
+ 6346,
569
+ "Unknown property '{0}' in handoff object. Supported properties are 'label', 'agent', 'prompt' and optional 'send', 'showContinueOn', 'model'.",
570
+ prop.key.value
571
+ )), prop.value.range, MarkerSeverity.Warning));
510
572
  }
511
573
  required.delete(prop.key.value);
512
574
  }
513
575
  if (required.size > 0) {
514
576
  report(toMarker(( localize(
515
- 6063,
577
+ 6347,
516
578
  "Missing required properties {0} in handoff object.",
517
- ( Array.from(required).map(s => `'${s}'`)).join(', ')
579
+ ( Array.from(required).map(s => `'${s}'`)).join(", ")
518
580
  )), item.range, MarkerSeverity.Error));
519
581
  }
520
582
  }
@@ -524,53 +586,145 @@ let PromptValidator = class PromptValidator {
524
586
  if (!attribute) {
525
587
  return;
526
588
  }
527
- if (attribute.value.type !== 'boolean') {
528
- report(toMarker(( localize(6064, "The 'infer' attribute must be a boolean.")), attribute.value.range, MarkerSeverity.Error));
529
- return;
530
- }
589
+ report(toMarker(( localize(
590
+ 6348,
591
+ "The 'infer' attribute is deprecated in favour of 'user-invokable' and 'disable-model-invocation'."
592
+ )), attribute.value.range, MarkerSeverity.Error));
531
593
  }
532
594
  validateTarget(attributes, report) {
533
595
  const attribute = attributes.find(attr => attr.key === PromptHeaderAttributes.target);
534
596
  if (!attribute) {
535
597
  return;
536
598
  }
537
- if (attribute.value.type !== 'string') {
538
- report(toMarker(( localize(6065, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
599
+ if (attribute.value.type !== "string") {
600
+ report(toMarker(( localize(6349, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
539
601
  return;
540
602
  }
541
603
  const targetValue = attribute.value.value.trim();
542
604
  if (targetValue.length === 0) {
543
- report(toMarker(( localize(6066, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
605
+ report(toMarker(( localize(6350, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
544
606
  return;
545
607
  }
546
- const validTargets = ['github-copilot', 'vscode'];
608
+ const validTargets = ["github-copilot", "vscode"];
547
609
  if (!validTargets.includes(targetValue)) {
548
610
  report(toMarker(( localize(
549
- 6067,
611
+ 6351,
550
612
  "The 'target' attribute must be one of: {0}.",
551
- validTargets.join(', ')
613
+ validTargets.join(", ")
552
614
  )), attribute.value.range, MarkerSeverity.Error));
553
615
  }
554
616
  }
617
+ validateUserInvokable(attributes, report) {
618
+ const attribute = attributes.find(attr => attr.key === PromptHeaderAttributes.userInvokable);
619
+ if (!attribute) {
620
+ return;
621
+ }
622
+ if (attribute.value.type !== "boolean") {
623
+ report(toMarker(( localize(6352, "The 'user-invokable' attribute must be a boolean.")), attribute.value.range, MarkerSeverity.Error));
624
+ return;
625
+ }
626
+ }
627
+ validateDisableModelInvocation(attributes, report) {
628
+ const attribute = attributes.find(attr => attr.key === PromptHeaderAttributes.disableModelInvocation);
629
+ if (!attribute) {
630
+ return;
631
+ }
632
+ if (attribute.value.type !== "boolean") {
633
+ report(toMarker(( localize(6353, "The 'disable-model-invocation' attribute must be a boolean.")), attribute.value.range, MarkerSeverity.Error));
634
+ return;
635
+ }
636
+ }
637
+ async validateAgentsAttribute(attributes, header, report) {
638
+ const attribute = attributes.find(attr => attr.key === PromptHeaderAttributes.agents);
639
+ if (!attribute) {
640
+ return;
641
+ }
642
+ if (attribute.value.type !== "array") {
643
+ report(toMarker(( localize(6354, "The 'agents' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
644
+ return;
645
+ }
646
+ const agents = await this.promptsService.getCustomAgents(CancellationToken.None);
647
+ const availableAgentNames = ( new Set(( agents.map(agent => agent.name))));
648
+ availableAgentNames.add(ChatMode.Agent.name.get());
649
+ const agentNames = [];
650
+ for (const item of attribute.value.items) {
651
+ if (item.type !== "string") {
652
+ report(toMarker(( localize(6355, "Each agent name in the 'agents' attribute must be a string.")), item.range, MarkerSeverity.Error));
653
+ } else if (item.value) {
654
+ agentNames.push(item.value);
655
+ if (item.value !== "*" && !( availableAgentNames.has(item.value))) {
656
+ report(toMarker(( localize(
657
+ 6356,
658
+ "Unknown agent '{0}'. Available agents: {1}.",
659
+ item.value,
660
+ Array.from(availableAgentNames).join(", ")
661
+ )), item.range, MarkerSeverity.Warning));
662
+ }
663
+ }
664
+ }
665
+ if (agentNames.length > 0) {
666
+ const tools = header.tools;
667
+ if (tools && !tools.includes(SpecedToolAliases.agent)) {
668
+ report(toMarker(( localize(
669
+ 6357,
670
+ "When 'agents' and 'tools' are specified, the 'agent' tool must be included in the 'tools' attribute."
671
+ )), attribute.value.range, MarkerSeverity.Warning));
672
+ }
673
+ }
674
+ }
555
675
  };
556
- PromptValidator = ( __decorate([
557
- ( __param(0, ILanguageModelsService)),
558
- ( __param(1, ILanguageModelToolsService)),
559
- ( __param(2, IChatModeService)),
560
- ( __param(3, IFileService)),
561
- ( __param(4, ILabelService)),
562
- ( __param(5, IPromptsService))
563
- ], PromptValidator));
676
+ PromptValidator = ( __decorate([( __param(0, ILanguageModelsService)), ( __param(1, ILanguageModelToolsService)), ( __param(2, IChatModeService)), ( __param(3, IFileService)), ( __param(4, ILabelService)), ( __param(5, IPromptsService))], PromptValidator));
564
677
  const allAttributeNames = {
565
- [PromptsType.prompt]: [PromptHeaderAttributes.name, PromptHeaderAttributes.description, PromptHeaderAttributes.model, PromptHeaderAttributes.tools, PromptHeaderAttributes.mode, PromptHeaderAttributes.agent, PromptHeaderAttributes.argumentHint],
566
- [PromptsType.instructions]: [PromptHeaderAttributes.name, PromptHeaderAttributes.description, PromptHeaderAttributes.applyTo, PromptHeaderAttributes.excludeAgent],
567
- [PromptsType.agent]: [PromptHeaderAttributes.name, PromptHeaderAttributes.description, PromptHeaderAttributes.model, PromptHeaderAttributes.tools, PromptHeaderAttributes.advancedOptions, PromptHeaderAttributes.handOffs, PromptHeaderAttributes.argumentHint, PromptHeaderAttributes.target, PromptHeaderAttributes.infer]
678
+ [PromptsType.prompt]: [
679
+ PromptHeaderAttributes.name,
680
+ PromptHeaderAttributes.description,
681
+ PromptHeaderAttributes.model,
682
+ PromptHeaderAttributes.tools,
683
+ PromptHeaderAttributes.mode,
684
+ PromptHeaderAttributes.agent,
685
+ PromptHeaderAttributes.argumentHint
686
+ ],
687
+ [PromptsType.instructions]: [
688
+ PromptHeaderAttributes.name,
689
+ PromptHeaderAttributes.description,
690
+ PromptHeaderAttributes.applyTo,
691
+ PromptHeaderAttributes.excludeAgent
692
+ ],
693
+ [PromptsType.agent]: [
694
+ PromptHeaderAttributes.name,
695
+ PromptHeaderAttributes.description,
696
+ PromptHeaderAttributes.model,
697
+ PromptHeaderAttributes.tools,
698
+ PromptHeaderAttributes.advancedOptions,
699
+ PromptHeaderAttributes.handOffs,
700
+ PromptHeaderAttributes.argumentHint,
701
+ PromptHeaderAttributes.target,
702
+ PromptHeaderAttributes.infer,
703
+ PromptHeaderAttributes.agents,
704
+ PromptHeaderAttributes.userInvokable,
705
+ PromptHeaderAttributes.disableModelInvocation
706
+ ],
707
+ [PromptsType.skill]: [
708
+ PromptHeaderAttributes.name,
709
+ PromptHeaderAttributes.description,
710
+ PromptHeaderAttributes.license,
711
+ PromptHeaderAttributes.compatibility,
712
+ PromptHeaderAttributes.metadata
713
+ ]
568
714
  };
569
- const githubCopilotAgentAttributeNames = [PromptHeaderAttributes.name, PromptHeaderAttributes.description, PromptHeaderAttributes.tools, PromptHeaderAttributes.target, GithubPromptHeaderAttributes.mcpServers, PromptHeaderAttributes.infer];
715
+ const githubCopilotAgentAttributeNames = [
716
+ PromptHeaderAttributes.name,
717
+ PromptHeaderAttributes.description,
718
+ PromptHeaderAttributes.tools,
719
+ PromptHeaderAttributes.target,
720
+ GithubPromptHeaderAttributes.mcpServers,
721
+ PromptHeaderAttributes.infer
722
+ ];
570
723
  const recommendedAttributeNames = {
571
724
  [PromptsType.prompt]: allAttributeNames[PromptsType.prompt].filter(name => !isNonRecommendedAttribute(name)),
572
725
  [PromptsType.instructions]: allAttributeNames[PromptsType.instructions].filter(name => !isNonRecommendedAttribute(name)),
573
- [PromptsType.agent]: allAttributeNames[PromptsType.agent].filter(name => !isNonRecommendedAttribute(name))
726
+ [PromptsType.agent]: allAttributeNames[PromptsType.agent].filter(name => !isNonRecommendedAttribute(name)),
727
+ [PromptsType.skill]: allAttributeNames[PromptsType.skill].filter(name => !isNonRecommendedAttribute(name))
574
728
  };
575
729
  function getValidAttributeNames(promptType, includeNonRecommended, isGitHubTarget) {
576
730
  if (isGitHubTarget && promptType === PromptsType.agent) {
@@ -579,19 +733,140 @@ function getValidAttributeNames(promptType, includeNonRecommended, isGitHubTarge
579
733
  return includeNonRecommended ? allAttributeNames[promptType] : recommendedAttributeNames[promptType];
580
734
  }
581
735
  function isNonRecommendedAttribute(attributeName) {
582
- return attributeName === PromptHeaderAttributes.advancedOptions || attributeName === PromptHeaderAttributes.excludeAgent || attributeName === PromptHeaderAttributes.mode;
736
+ return attributeName === PromptHeaderAttributes.advancedOptions || attributeName === PromptHeaderAttributes.excludeAgent || attributeName === PromptHeaderAttributes.mode || attributeName === PromptHeaderAttributes.infer;
737
+ }
738
+ function getAttributeDescription(attributeName, promptType) {
739
+ switch (promptType) {
740
+ case PromptsType.instructions:
741
+ switch (attributeName) {
742
+ case PromptHeaderAttributes.name:
743
+ return localize(
744
+ 6358,
745
+ "The name of the instruction file as shown in the UI. If not set, the name is derived from the file name."
746
+ );
747
+ case PromptHeaderAttributes.description:
748
+ return localize(
749
+ 6359,
750
+ "The description of the instruction file. It can be used to provide additional context or information about the instructions and is passed to the language model as part of the prompt."
751
+ );
752
+ case PromptHeaderAttributes.applyTo:
753
+ return localize(
754
+ 6360,
755
+ "One or more glob pattern (separated by comma) that describe for which files the instructions apply to. Based on these patterns, the file is automatically included in the prompt, when the context contains a file that matches one or more of these patterns. Use `**` when you want this file to always be added.\nExample: `**/*.ts`, `**/*.js`, `client/**`"
756
+ );
757
+ }
758
+ break;
759
+ case PromptsType.skill:
760
+ switch (attributeName) {
761
+ case PromptHeaderAttributes.name:
762
+ return localize(6361, "The name of the skill.");
763
+ case PromptHeaderAttributes.description:
764
+ return localize(
765
+ 6362,
766
+ "The description of the skill. The description is added to every request and will be used by the agent to decide when to load the skill."
767
+ );
768
+ }
769
+ break;
770
+ case PromptsType.agent:
771
+ switch (attributeName) {
772
+ case PromptHeaderAttributes.name:
773
+ return localize(6363, "The name of the agent as shown in the UI.");
774
+ case PromptHeaderAttributes.description:
775
+ return localize(
776
+ 6364,
777
+ "The description of the custom agent, what it does and when to use it."
778
+ );
779
+ case PromptHeaderAttributes.argumentHint:
780
+ return localize(
781
+ 6365,
782
+ "The argument-hint describes what inputs the custom agent expects or supports."
783
+ );
784
+ case PromptHeaderAttributes.model:
785
+ return localize(
786
+ 6366,
787
+ "Specify the model that runs this custom agent. Can also be a list of models. The first available model will be used."
788
+ );
789
+ case PromptHeaderAttributes.tools:
790
+ return localize(6367, "The set of tools that the custom agent has access to.");
791
+ case PromptHeaderAttributes.handOffs:
792
+ return localize(6368, "Possible handoff actions when the agent has completed its task.");
793
+ case PromptHeaderAttributes.target:
794
+ return localize(
795
+ 6369,
796
+ "The target to which the header attributes like tools apply to. Possible values are `github-copilot` and `vscode`."
797
+ );
798
+ case PromptHeaderAttributes.infer:
799
+ return localize(6370, "Controls visibility of the agent.");
800
+ case PromptHeaderAttributes.agents:
801
+ return localize(
802
+ 6371,
803
+ "One or more agents that this agent can use as subagents. Use '*' to specify all available agents."
804
+ );
805
+ case PromptHeaderAttributes.userInvokable:
806
+ return localize(6372, "Whether the agent can be selected and invoked by users in the UI.");
807
+ case PromptHeaderAttributes.disableModelInvocation:
808
+ return localize(6373, "If true, prevents the agent from being invoked as a subagent.");
809
+ }
810
+ break;
811
+ case PromptsType.prompt:
812
+ switch (attributeName) {
813
+ case PromptHeaderAttributes.name:
814
+ return localize(
815
+ 6374,
816
+ "The name of the prompt. This is also the name of the slash command that will run this prompt."
817
+ );
818
+ case PromptHeaderAttributes.description:
819
+ return localize(
820
+ 6375,
821
+ "The description of the reusable prompt, what it does and when to use it."
822
+ );
823
+ case PromptHeaderAttributes.argumentHint:
824
+ return localize(
825
+ 6376,
826
+ "The argument-hint describes what inputs the prompt expects or supports."
827
+ );
828
+ case PromptHeaderAttributes.model:
829
+ return localize(
830
+ 6377,
831
+ "The model to use in this prompt. Can also be a list of models. The first available model will be used."
832
+ );
833
+ case PromptHeaderAttributes.tools:
834
+ return localize(6378, "The tools to use in this prompt.");
835
+ case PromptHeaderAttributes.agent:
836
+ case PromptHeaderAttributes.mode:
837
+ return localize(6379, "The agent to use when running this prompt.");
838
+ }
839
+ break;
840
+ }
841
+ return undefined;
583
842
  }
584
843
  const knownGithubCopilotTools = [
585
- SpecedToolAliases.execute, SpecedToolAliases.read, SpecedToolAliases.edit, SpecedToolAliases.search, SpecedToolAliases.agent,
844
+ SpecedToolAliases.execute,
845
+ SpecedToolAliases.read,
846
+ SpecedToolAliases.edit,
847
+ SpecedToolAliases.search,
848
+ SpecedToolAliases.agent
586
849
  ];
587
850
  function isGithubTarget(promptType, target) {
588
851
  return promptType === PromptsType.agent && target === Target.GitHubCopilot;
589
852
  }
590
853
  function toMarker(message, range, severity = MarkerSeverity.Error) {
591
- return { severity, message, ...range };
854
+ return {
855
+ severity,
856
+ message,
857
+ ...range
858
+ };
592
859
  }
593
860
  let PromptValidatorContribution = class PromptValidatorContribution extends Disposable {
594
- constructor(modelService, instantiationService, markerService, promptsService, languageModelsService, languageModelToolsService, chatModeService) {
861
+ constructor(
862
+ modelService,
863
+ instantiationService,
864
+ markerService,
865
+ promptsService,
866
+ languageModelsService,
867
+ languageModelToolsService,
868
+ chatModeService
869
+ ) {
595
870
  super();
596
871
  this.modelService = modelService;
597
872
  this.markerService = markerService;
@@ -616,21 +891,23 @@ let PromptValidatorContribution = class PromptValidatorContribution extends Disp
616
891
  trackers.set(model.uri, ( new ModelTracker(model, promptType, this.validator, this.promptsService, this.markerService)));
617
892
  }
618
893
  });
619
- this.localDisposables.add(this.modelService.onModelAdded((model) => {
894
+ this.localDisposables.add(this.modelService.onModelAdded(model => {
620
895
  const promptType = getPromptsTypeForLanguageId(model.getLanguageId());
621
896
  if (promptType && !( trackers.has(model.uri))) {
622
897
  trackers.set(model.uri, ( new ModelTracker(model, promptType, this.validator, this.promptsService, this.markerService)));
623
898
  }
624
899
  }));
625
- this.localDisposables.add(this.modelService.onModelRemoved((model) => {
900
+ this.localDisposables.add(this.modelService.onModelRemoved(model => {
626
901
  const tracker = trackers.get(model.uri);
627
902
  if (tracker) {
628
903
  tracker.dispose();
629
904
  trackers.delete(model.uri);
630
905
  }
631
906
  }));
632
- this.localDisposables.add(this.modelService.onModelLanguageChanged((event) => {
633
- const { model } = event;
907
+ this.localDisposables.add(this.modelService.onModelLanguageChanged(event => {
908
+ const {
909
+ model
910
+ } = event;
634
911
  const tracker = trackers.get(model.uri);
635
912
  if (tracker) {
636
913
  tracker.dispose();
@@ -647,15 +924,7 @@ let PromptValidatorContribution = class PromptValidatorContribution extends Disp
647
924
  this.localDisposables.add(this.languageModelsService.onDidChangeLanguageModels(() => validateAll()));
648
925
  }
649
926
  };
650
- PromptValidatorContribution = ( __decorate([
651
- ( __param(0, IModelService)),
652
- ( __param(1, IInstantiationService)),
653
- ( __param(2, IMarkerService)),
654
- ( __param(3, IPromptsService)),
655
- ( __param(4, ILanguageModelsService)),
656
- ( __param(5, ILanguageModelToolsService)),
657
- ( __param(6, IChatModeService))
658
- ], PromptValidatorContribution));
927
+ PromptValidatorContribution = ( __decorate([( __param(0, IModelService)), ( __param(1, IInstantiationService)), ( __param(2, IMarkerService)), ( __param(3, IPromptsService)), ( __param(4, ILanguageModelsService)), ( __param(5, ILanguageModelToolsService)), ( __param(6, IChatModeService))], PromptValidatorContribution));
659
928
  let ModelTracker = class ModelTracker extends Disposable {
660
929
  constructor(textModel, promptType, validator, promptsService, markerService) {
661
930
  super();
@@ -681,9 +950,6 @@ let ModelTracker = class ModelTracker extends Disposable {
681
950
  super.dispose();
682
951
  }
683
952
  };
684
- ModelTracker = ( __decorate([
685
- ( __param(3, IPromptsService)),
686
- ( __param(4, IMarkerService))
687
- ], ModelTracker));
953
+ ModelTracker = ( __decorate([( __param(3, IPromptsService)), ( __param(4, IMarkerService))], ModelTracker));
688
954
 
689
- export { MARKERS_OWNER_ID, PromptValidator, PromptValidatorContribution, getValidAttributeNames, isGithubTarget, isNonRecommendedAttribute, knownGithubCopilotTools };
955
+ export { MARKERS_OWNER_ID, PromptValidator, PromptValidatorContribution, getAttributeDescription, getValidAttributeNames, isGithubTarget, isNonRecommendedAttribute, knownGithubCopilotTools };