@codingame/monaco-vscode-chat-service-override 32.0.2 → 33.0.5

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 (257) hide show
  1. package/index.d.ts +1 -1
  2. package/index.js +15 -5
  3. package/package.json +5 -5
  4. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostProtocolClient.d.ts +170 -24
  5. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostProtocolClient.js +372 -66
  6. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostServiceImpl.d.ts +18 -1
  7. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostServiceImpl.js +160 -31
  8. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.d.ts +8 -0
  9. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemService.js +19 -0
  10. package/vscode/src/vs/platform/agentHost/common/agentHostSchema.d.ts +134 -0
  11. package/vscode/src/vs/platform/agentHost/common/agentHostSchema.js +257 -0
  12. package/vscode/src/vs/platform/agentHost/common/agentService.d.ts +84 -3
  13. package/vscode/src/vs/platform/agentHost/common/agentService.js +9 -1
  14. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.d.ts +61 -1
  15. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.js +61 -1
  16. package/vscode/src/vs/platform/agentHost/common/state/protocol/errors.js +3 -1
  17. package/vscode/src/vs/platform/agentHost/common/state/protocol/reducers.js +1 -1
  18. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.d.ts +1 -1
  19. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.js +1 -1
  20. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.d.ts +4 -4
  21. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.js +1 -1
  22. package/vscode/src/vs/platform/networkFilter/common/networkFilterService.d.ts +2 -7
  23. package/vscode/src/vs/platform/networkFilter/common/networkFilterService.js +8 -29
  24. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +2 -2
  25. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +16 -16
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +8 -8
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +60 -60
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +12 -12
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +8 -8
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +7 -7
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +10 -6
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +10 -1
  35. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +180 -174
  36. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +3 -3
  37. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
  38. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  39. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +12 -12
  40. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +12 -12
  41. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +12 -12
  42. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  43. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +11 -11
  44. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  45. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
  46. package/vscode/src/vs/workbench/contrib/chat/browser/actions/createPluginAction.js +20 -20
  47. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.d.ts +64 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/actions/exportAgentHostDebugLogsAction.js +330 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/actions/openCopilotCliStateFileAction.d.ts +24 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/actions/openCopilotCliStateFileAction.js +77 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.js +8 -8
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +2 -2
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +2 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +6 -6
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +13 -13
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPermissionUiContribution.js +5 -5
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostUntitledProvisionalSessionService.d.ts +51 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostUntitledProvisionalSessionService.js +267 -0
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +4 -3
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +53 -53
  61. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +5 -5
  62. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +1 -1
  63. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +4 -4
  65. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
  66. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +4 -4
  67. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +5 -4
  68. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +30 -28
  69. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +17 -17
  70. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  71. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.js +26 -0
  72. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +14 -14
  73. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +7 -6
  74. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +150 -119
  75. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +45 -44
  76. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +0 -1
  77. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +58 -76
  78. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +1 -1
  79. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.js +25 -25
  80. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationGroupHeaderRenderer.js +2 -2
  81. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.js +2 -2
  82. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.js +3 -3
  83. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +2 -6
  84. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +88 -70
  85. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +82 -56
  86. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationWelcomePromptLaunchers.css +10 -8
  87. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +2 -6
  88. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +89 -71
  89. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +1 -1
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.d.ts +1 -1
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +2 -2843
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chat.shared.contribution.d.ts +1 -0
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chat.shared.contribution.js +2934 -0
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +32 -32
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.js +99 -99
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +6 -6
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +2 -2
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +20 -20
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +7 -7
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +4 -4
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +7 -7
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +22 -22
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +13 -13
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +17 -17
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +24 -24
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +8 -8
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +23 -23
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +33 -33
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +11 -11
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +14 -14
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +7 -7
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +4 -4
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +12 -12
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +1 -1
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +1 -1
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +53 -20
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +2 -2
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +131 -61
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -0
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +23 -3
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +91 -15
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +23 -21
  132. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +6 -6
  134. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +29 -28
  135. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +14 -14
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +19 -19
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +15 -4
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +203 -163
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.d.ts +1 -3
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +31 -54
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.d.ts +1 -0
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +88 -0
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +19 -19
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +2 -2
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +4 -4
  146. package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.js +17 -4
  147. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContext.contribution.d.ts +8 -0
  148. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContext.contribution.js +91 -0
  149. package/vscode/src/vs/workbench/contrib/chat/browser/copilotCliEventsUri.d.ts +52 -0
  150. package/vscode/src/vs/workbench/contrib/chat/browser/copilotCliEventsUri.js +82 -0
  151. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.d.ts +21 -1
  152. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +55 -18
  153. package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.js +4 -4
  154. package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.js +2 -2
  155. package/vscode/src/vs/workbench/contrib/chat/browser/hasByokModelsContribution.d.ts +51 -0
  156. package/vscode/src/vs/workbench/contrib/chat/browser/hasByokModelsContribution.js +106 -0
  157. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +4 -2
  158. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorActions.js +4 -4
  159. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorContribution.js +5 -5
  160. package/vscode/src/vs/workbench/contrib/chat/browser/pluginAutoUpdate.d.ts +38 -0
  161. package/vscode/src/vs/workbench/contrib/chat/browser/pluginAutoUpdate.js +59 -0
  162. package/vscode/src/vs/workbench/contrib/chat/browser/pluginGitCommandService.js +3 -3
  163. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +25 -25
  164. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +15 -15
  165. package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +6 -6
  166. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
  167. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +27 -27
  168. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +3 -3
  169. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  170. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileContributions.js +4 -6
  171. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +2 -2
  172. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  173. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
  174. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
  175. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +3 -3
  176. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +20 -20
  177. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +39 -39
  178. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +1 -0
  179. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +38 -28
  180. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +5 -7
  181. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolResultCompressorService.d.ts +5 -1
  182. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolResultCompressorService.js +106 -7
  183. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +6 -8
  184. package/vscode/src/vs/workbench/contrib/chat/browser/utilityModelContribution.d.ts +28 -0
  185. package/vscode/src/vs/workbench/contrib/chat/browser/utilityModelContribution.js +75 -0
  186. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  187. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/{toolInvocationParts/chatToolOutputStateCache.d.ts → chatOutputPartStateCache.d.ts} +5 -6
  188. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/{toolInvocationParts/chatToolOutputStateCache.js → chatOutputPartStateCache.js} +19 -11
  189. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +9 -9
  190. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletions.js +58 -26
  191. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +9 -9
  192. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +1 -1
  193. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
  194. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +1 -1
  195. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +1 -1
  196. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +18 -9
  197. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +2 -2
  198. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +13 -5
  199. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +6 -2
  200. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +6 -6
  201. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +19 -18
  202. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +18 -18
  203. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +1 -2
  204. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +5 -5
  205. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +6 -7
  206. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +14 -15
  207. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +155 -156
  208. package/vscode/src/vs/workbench/contrib/chat/common/tools/copilotToolIds.d.ts +6 -0
  209. package/vscode/src/vs/workbench/contrib/chat/common/tools/copilotToolIds.js +12 -0
  210. package/vscode/src/vs/workbench/contrib/chat/common/tools/toolResultCompressor.d.ts +88 -0
  211. package/vscode/src/vs/workbench/contrib/chat/common/tools/toolResultCompressor.js +25 -0
  212. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  213. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarousel.contribution.d.ts +1 -0
  214. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarousel.contribution.js +237 -0
  215. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselEditor.d.ts +66 -0
  216. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselEditor.js +600 -0
  217. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselEditorInput.d.ts +18 -0
  218. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselEditorInput.js +47 -0
  219. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselTypes.d.ts +22 -0
  220. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/imageCarouselTypes.js +7 -0
  221. package/vscode/src/vs/workbench/contrib/imageCarousel/browser/media/imageCarousel.css +298 -0
  222. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +15 -15
  223. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +2 -2
  224. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +4 -4
  225. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
  226. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  227. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
  228. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +5 -5
  229. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  230. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  231. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  232. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
  233. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
  234. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
  235. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.d.ts +12 -1
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +78 -7
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -2
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sendToTerminalTool.js +15 -11
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -9
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -16
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandParser.d.ts +60 -0
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandParser.js +286 -0
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCache.d.ts +24 -0
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCache.js +285 -0
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCompressor.d.ts +19 -12
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCompressor.js +415 -47
  252. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSystemService.d.ts +2 -7
  253. package/vscode/src/vs/workbench/services/agentHost/common/agentHostFileSystemService.js +1 -1
  254. package/vscode/src/vs/base/common/defaultAccount.d.ts +0 -69
  255. package/vscode/src/vs/base/common/defaultAccount.js +0 -12
  256. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.d.ts +0 -15
  257. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +0 -85
@@ -7,7 +7,6 @@ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
7
7
  import { MarkerSeverity, MarkerTag } from '@codingame/monaco-vscode-api/vscode/vs/platform/markers/common/markers';
8
8
  import { ChatMode } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatModes';
9
9
  import { IChatModeService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatModes.service';
10
- import { localChatSessionType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatSessionsService';
11
10
  import { ChatModeKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
12
11
  import { ILanguageModelChatMetadata } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
13
12
  import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
@@ -64,13 +63,13 @@ let PromptValidator = class PromptValidator {
64
63
  const location = this.promptsService.getAgentFileURIFromModeFile(promptAST.uri);
65
64
  if (location && (await this.fileService.canCreateFile(location))) {
66
65
  report(toMarker(( localize(
67
- 7928,
66
+ 8013,
68
67
  "Chat modes have been renamed to agents. Please move this file to {0}",
69
68
  (location.toString())
70
69
  )), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
71
70
  } else {
72
71
  report(toMarker(( localize(
73
- 7929,
72
+ 8014,
74
73
  "Chat modes have been renamed to agents. Please move the file to {0}",
75
74
  AGENTS_SOURCE_FOLDER
76
75
  )), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
@@ -83,13 +82,13 @@ let PromptValidator = class PromptValidator {
83
82
  }
84
83
  const nameAttribute = promptAST.header.getAttribute(PromptHeaderAttributes.name);
85
84
  if (!nameAttribute) {
86
- report(toMarker(( localize(7930, "Skill should provide a name.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
85
+ report(toMarker(( localize(8015, "Skill should provide a name.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
87
86
  } else if (nameAttribute.value.type === "scalar") {
88
87
  const skillName = nameAttribute.value.value.trim();
89
88
  if (skillName.length > 0) {
90
89
  if (!VALID_SKILL_NAME_REGEX.test(skillName)) {
91
90
  report(toMarker(( localize(
92
- 7931,
91
+ 8016,
93
92
  "Skill name may only contain lowercase letters, numbers, and hyphens."
94
93
  )), nameAttribute.value.range, MarkerSeverity.Error));
95
94
  }
@@ -99,7 +98,7 @@ let PromptValidator = class PromptValidator {
99
98
  const folderName = pathParts[skillIndex - 1];
100
99
  if (folderName && skillName !== folderName) {
101
100
  report(toMarker(( localize(
102
- 7932,
101
+ 8017,
103
102
  "The skill name '{0}' should match the folder name '{1}'.",
104
103
  skillName,
105
104
  folderName
@@ -110,12 +109,12 @@ let PromptValidator = class PromptValidator {
110
109
  }
111
110
  const descriptionAttribute = promptAST.header.getAttribute(PromptHeaderAttributes.description);
112
111
  if (!descriptionAttribute) {
113
- report(toMarker(( localize(7933, "Skill should provide a description.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
112
+ report(toMarker(( localize(8018, "Skill should provide a description.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
114
113
  if (promptAST.header.userInvocable === false) {
115
114
  const userInvocableAttr = promptAST.header.getAttribute(PromptHeaderAttributes.userInvocable);
116
115
  if (userInvocableAttr) {
117
116
  report(toMarker(( localize(
118
- 7934,
117
+ 8019,
119
118
  "A description is required when user-invocable is false, because the model needs a description to decide when to load the skill."
120
119
  )), userInvocableAttr.value.range, MarkerSeverity.Error));
121
120
  }
@@ -124,7 +123,7 @@ let PromptValidator = class PromptValidator {
124
123
  const disableModelInvocationAttr = promptAST.header.getAttribute(PromptHeaderAttributes.disableModelInvocation);
125
124
  if (disableModelInvocationAttr) {
126
125
  report(toMarker(( localize(
127
- 7935,
126
+ 8020,
128
127
  "A description is required when model invocation is enabled, because the model needs a description to decide when to load the skill."
129
128
  )), disableModelInvocationAttr.value.range, MarkerSeverity.Error));
130
129
  }
@@ -135,7 +134,7 @@ let PromptValidator = class PromptValidator {
135
134
  const skillToolEnabled = this.configurationService.getValue("github.copilot.chat.skillTool.enabled");
136
135
  if (!skillToolEnabled) {
137
136
  report(toMarker(( localize(
138
- 7936,
137
+ 8021,
139
138
  "The 'context: fork' attribute requires the skill tool to be enabled (github.copilot.chat.skillTool.enabled)."
140
139
  )), contextAttribute.value.range, MarkerSeverity.Warning));
141
140
  }
@@ -150,7 +149,7 @@ let PromptValidator = class PromptValidator {
150
149
  for (const ref of body.fileReferences) {
151
150
  const resolved = body.resolveFilePath(ref.content);
152
151
  if (!resolved) {
153
- report(toMarker(( localize(7937, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
152
+ report(toMarker(( localize(8022, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
154
153
  continue;
155
154
  }
156
155
  if (promptAST.uri.scheme === resolved.scheme) {
@@ -159,7 +158,7 @@ let PromptValidator = class PromptValidator {
159
158
  const exists = await this.fileService.exists(resolved);
160
159
  if (!exists) {
161
160
  const loc = this.labelService.getUriLabel(resolved);
162
- report(toMarker(( localize(7938, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
161
+ report(toMarker(( localize(8023, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
163
162
  }
164
163
  } catch (e) {
165
164
  this.logger.warn(
@@ -182,7 +181,7 @@ let PromptValidator = class PromptValidator {
182
181
  if (currentNames.size === 1) {
183
182
  const newName = Array.from(currentNames)[0];
184
183
  report(toMarker(( localize(
185
- 7939,
184
+ 8024,
186
185
  "Tool or toolset '{0}' has been renamed, use '{1}' instead.",
187
186
  variable.name,
188
187
  newName
@@ -190,7 +189,7 @@ let PromptValidator = class PromptValidator {
190
189
  } else {
191
190
  const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
192
191
  report(toMarker(( localize(
193
- 7940,
192
+ 8025,
194
193
  "Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
195
194
  variable.name,
196
195
  newNames
@@ -198,13 +197,13 @@ let PromptValidator = class PromptValidator {
198
197
  }
199
198
  }
200
199
  } else {
201
- report(toMarker(( localize(7941, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
200
+ report(toMarker(( localize(8026, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
202
201
  }
203
202
  } else if (headerToolsMap) {
204
203
  const tool = this.languageModelToolsService.getToolByFullReferenceName(variable.name);
205
204
  if (tool && headerToolsMap.get(tool) === false) {
206
205
  report(toMarker(( localize(
207
- 7942,
206
+ 8027,
208
207
  "Tool or toolset '{0}' also needs to be enabled in the header.",
209
208
  variable.name
210
209
  )), variable.range, MarkerSeverity.Warning));
@@ -227,7 +226,7 @@ let PromptValidator = class PromptValidator {
227
226
  switch (promptType) {
228
227
  case PromptsType.prompt:
229
228
  {
230
- const agent = this.validateAgent(attributes, report);
229
+ const agent = await this.validateAgent(attributes, report);
231
230
  this.validateTools(attributes, agent?.kind ?? ChatModeKind.Agent, target, report);
232
231
  this.validateModel(attributes, agent?.kind ?? ChatModeKind.Agent, report);
233
232
  break;
@@ -278,7 +277,7 @@ let PromptValidator = class PromptValidator {
278
277
  switch (promptType) {
279
278
  case PromptsType.prompt:
280
279
  report(toMarker(( localize(
281
- 7943,
280
+ 8028,
282
281
  "Attribute '{0}' is not supported in prompt files. Supported: {1}.",
283
282
  attribute.key,
284
283
  supportedNames.value
@@ -287,7 +286,7 @@ let PromptValidator = class PromptValidator {
287
286
  case PromptsType.agent:
288
287
  if (target === Target.GitHubCopilot) {
289
288
  report(toMarker(( localize(
290
- 7944,
289
+ 8029,
291
290
  "Attribute '{0}' is not supported in custom GitHub Copilot agent files. Supported: {1}.",
292
291
  attribute.key,
293
292
  supportedNames.value
@@ -296,13 +295,13 @@ let PromptValidator = class PromptValidator {
296
295
  ; else {
297
296
  if (( validGithubCopilotAttributeNames.value.has(attribute.key))) {
298
297
  report(toMarker(( localize(
299
- 7945,
298
+ 8030,
300
299
  "Attribute '{0}' is ignored when running locally in VS Code.",
301
300
  attribute.key
302
301
  )), attribute.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
303
302
  } else {
304
303
  report(toMarker(( localize(
305
- 7946,
304
+ 8031,
306
305
  "Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.",
307
306
  attribute.key,
308
307
  supportedNames.value
@@ -313,14 +312,14 @@ let PromptValidator = class PromptValidator {
313
312
  case PromptsType.instructions:
314
313
  if (target === Target.Claude) {
315
314
  report(toMarker(( localize(
316
- 7947,
315
+ 8032,
317
316
  "Attribute '{0}' is not supported in rules files by VS Code agents. Supported: {1}.",
318
317
  attribute.key,
319
318
  supportedNames.value
320
319
  )), attribute.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
321
320
  } else {
322
321
  report(toMarker(( localize(
323
- 7948,
322
+ 8033,
324
323
  "Attribute '{0}' is not supported in instructions files. Supported: {1}.",
325
324
  attribute.key,
326
325
  supportedNames.value
@@ -329,7 +328,7 @@ let PromptValidator = class PromptValidator {
329
328
  break;
330
329
  case PromptsType.skill:
331
330
  report(toMarker(( localize(
332
- 7949,
331
+ 8034,
333
332
  "Attribute '{0}' is not supported by VS Code agents. Supported: {1}.",
334
333
  attribute.key,
335
334
  supportedNames.value
@@ -345,11 +344,11 @@ let PromptValidator = class PromptValidator {
345
344
  return;
346
345
  }
347
346
  if (nameAttribute.value.type !== "scalar") {
348
- report(toMarker(( localize(7950, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
347
+ report(toMarker(( localize(8035, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
349
348
  return;
350
349
  }
351
350
  if (nameAttribute.value.value.trim().length === 0) {
352
- report(toMarker(( localize(7951, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
351
+ report(toMarker(( localize(8036, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
353
352
  return;
354
353
  }
355
354
  }
@@ -359,11 +358,11 @@ let PromptValidator = class PromptValidator {
359
358
  return;
360
359
  }
361
360
  if (descriptionAttribute.value.type !== "scalar") {
362
- report(toMarker(( localize(7952, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
361
+ report(toMarker(( localize(8037, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
363
362
  return;
364
363
  }
365
364
  if (descriptionAttribute.value.value.trim().length === 0) {
366
- report(toMarker(( localize(7953, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
365
+ report(toMarker(( localize(8038, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
367
366
  return;
368
367
  }
369
368
  }
@@ -373,11 +372,11 @@ let PromptValidator = class PromptValidator {
373
372
  return;
374
373
  }
375
374
  if (argumentHintAttribute.value.type !== "scalar") {
376
- report(toMarker(( localize(7954, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
375
+ report(toMarker(( localize(8039, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
377
376
  return;
378
377
  }
379
378
  if (argumentHintAttribute.value.value.trim().length === 0) {
380
- report(toMarker(( localize(7955, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Warning));
379
+ report(toMarker(( localize(8040, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Warning));
381
380
  return;
382
381
  }
383
382
  }
@@ -387,30 +386,30 @@ let PromptValidator = class PromptValidator {
387
386
  return;
388
387
  }
389
388
  if (attribute.value.type !== "scalar" && attribute.value.type !== "sequence") {
390
- report(toMarker(( localize(7956, "The 'model' attribute must be a string or an array of strings.")), attribute.value.range, MarkerSeverity.Error));
389
+ report(toMarker(( localize(8041, "The 'model' attribute must be a string or an array of strings.")), attribute.value.range, MarkerSeverity.Error));
391
390
  return;
392
391
  }
393
392
  const modelNames = [];
394
393
  if (attribute.value.type === "scalar") {
395
394
  const modelName = attribute.value.value.trim();
396
395
  if (modelName.length === 0) {
397
- report(toMarker(( localize(7957, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
396
+ report(toMarker(( localize(8042, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
398
397
  return;
399
398
  }
400
399
  modelNames.push([modelName, attribute.value.range]);
401
400
  } else if (attribute.value.type === "sequence") {
402
401
  if (attribute.value.items.length === 0) {
403
- report(toMarker(( localize(7958, "The 'model' array must not be empty.")), attribute.value.range, MarkerSeverity.Error));
402
+ report(toMarker(( localize(8043, "The 'model' array must not be empty.")), attribute.value.range, MarkerSeverity.Error));
404
403
  return;
405
404
  }
406
405
  for (const item of attribute.value.items) {
407
406
  if (item.type !== "scalar") {
408
- report(toMarker(( localize(7959, "The 'model' array must contain only strings.")), item.range, MarkerSeverity.Error));
407
+ report(toMarker(( localize(8044, "The 'model' array must contain only strings.")), item.range, MarkerSeverity.Error));
409
408
  return;
410
409
  }
411
410
  const modelName = item.value.trim();
412
411
  if (modelName.length === 0) {
413
- report(toMarker(( localize(7960, "Model names in the array must be non-empty strings.")), item.range, MarkerSeverity.Error));
412
+ report(toMarker(( localize(8045, "Model names in the array must be non-empty strings.")), item.range, MarkerSeverity.Error));
414
413
  return;
415
414
  }
416
415
  modelNames.push([modelName, item.range]);
@@ -423,9 +422,9 @@ let PromptValidator = class PromptValidator {
423
422
  for (const [modelName, range] of modelNames) {
424
423
  const modelMetadata = this.findModelByName(modelName);
425
424
  if (!modelMetadata) {
426
- report(toMarker(( localize(7961, "Unknown model '{0}' will be ignored.", modelName)), range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
425
+ report(toMarker(( localize(8046, "Unknown model '{0}' will be ignored.", modelName)), range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
427
426
  } else if (agentKind === ChatModeKind.Agent && !ILanguageModelChatMetadata.suitableForAgentMode(modelMetadata)) {
428
- report(toMarker(( localize(7962, "Model '{0}' is not suited for agent mode.", modelName)), range, MarkerSeverity.Warning));
427
+ report(toMarker(( localize(8047, "Model '{0}' is not suited for agent mode.", modelName)), range, MarkerSeverity.Warning));
429
428
  }
430
429
  }
431
430
  }
@@ -439,13 +438,13 @@ let PromptValidator = class PromptValidator {
439
438
  continue;
440
439
  }
441
440
  if (attribute.value.type !== "scalar") {
442
- report(toMarker(( localize(7963, "The '{0}' attribute must be a string.", claudeAttributeName)), attribute.value.range, MarkerSeverity.Error));
441
+ report(toMarker(( localize(8048, "The '{0}' attribute must be a string.", claudeAttributeName)), attribute.value.range, MarkerSeverity.Error));
443
442
  continue;
444
443
  } else {
445
444
  const modelName = attribute.value.value.trim();
446
445
  if (enumValues.every(model => model.name !== modelName)) {
447
446
  const validValues = ( enumValues.map(model => model.name)).join(", ");
448
- report(toMarker(( localize(7964, "Unknown value '{0}', valid: {1}.", modelName, validValues)), attribute.value.range, MarkerSeverity.Warning));
447
+ report(toMarker(( localize(8049, "Unknown value '{0}', valid: {1}.", modelName, validValues)), attribute.value.range, MarkerSeverity.Warning));
449
448
  }
450
449
  }
451
450
  }
@@ -458,18 +457,18 @@ let PromptValidator = class PromptValidator {
458
457
  }
459
458
  return undefined;
460
459
  }
461
- validateAgent(attributes, report) {
460
+ async validateAgent(attributes, report) {
462
461
  const agentAttribute = attributes.find(attr => attr.key === PromptHeaderAttributes.agent);
463
462
  const modeAttribute = attributes.find(attr => attr.key === PromptHeaderAttributes.mode);
464
463
  if (modeAttribute) {
465
464
  if (agentAttribute) {
466
465
  report(toMarker(( localize(
467
- 7965,
466
+ 8050,
468
467
  "The 'mode' attribute has been deprecated. The 'agent' attribute is used instead."
469
468
  )), modeAttribute.range, MarkerSeverity.Warning, [MarkerTag.Deprecated]));
470
469
  } else {
471
470
  report(toMarker(( localize(
472
- 7966,
471
+ 8051,
473
472
  "The 'mode' attribute has been deprecated. Please rename it to 'agent'."
474
473
  )), modeAttribute.range, MarkerSeverity.Warning, [MarkerTag.Deprecated]));
475
474
  }
@@ -479,18 +478,18 @@ let PromptValidator = class PromptValidator {
479
478
  return undefined;
480
479
  }
481
480
  if (attribute.value.type !== "scalar") {
482
- report(toMarker(( localize(7967, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
481
+ report(toMarker(( localize(8052, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
483
482
  return undefined;
484
483
  }
485
484
  const agentValue = attribute.value.value;
486
485
  if (agentValue.trim().length === 0) {
487
- report(toMarker(( localize(7968, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
486
+ report(toMarker(( localize(8053, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
488
487
  return undefined;
489
488
  }
490
- return this.validateAgentValue(attribute.value, report);
489
+ return await this.validateAgentValue(attribute.value, report);
491
490
  }
492
- validateAgentValue(value, report) {
493
- const agents = this.chatModeService.getModes(localChatSessionType);
491
+ async validateAgentValue(value, report) {
492
+ const agents = await this.chatModeService.getLocalModes();
494
493
  const availableAgents = [];
495
494
  for (const agent of Iterable.concat(agents.builtin, agents.custom)) {
496
495
  if (agent.name.get() === value.value) {
@@ -499,7 +498,7 @@ let PromptValidator = class PromptValidator {
499
498
  availableAgents.push(agent.name.get());
500
499
  }
501
500
  const errorMessage = ( localize(
502
- 7969,
501
+ 8054,
503
502
  "Unknown agent '{0}'. Available agents: {1}.",
504
503
  value.value,
505
504
  availableAgents.join(", ")
@@ -514,7 +513,7 @@ let PromptValidator = class PromptValidator {
514
513
  }
515
514
  if (agentKind !== ChatModeKind.Agent) {
516
515
  report(toMarker(( localize(
517
- 7970,
516
+ 8055,
518
517
  "The 'tools' attribute is only supported when using agents. Attribute will be ignored."
519
518
  )), attribute.range, MarkerSeverity.Warning));
520
519
  }
@@ -524,7 +523,7 @@ let PromptValidator = class PromptValidator {
524
523
  }
525
524
  if (value.type !== "sequence") {
526
525
  report(toMarker(( localize(
527
- 7971,
526
+ 8056,
528
527
  "The 'tools' attribute must be an array or a comma separated string."
529
528
  )), attribute.value.range, MarkerSeverity.Error));
530
529
  return;
@@ -540,7 +539,7 @@ let PromptValidator = class PromptValidator {
540
539
  const deprecatedNames = this.languageModelToolsService.getDeprecatedFullReferenceNames();
541
540
  for (const item of valueItem.items) {
542
541
  if (item.type !== "scalar") {
543
- report(toMarker(( localize(7972, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
542
+ report(toMarker(( localize(8057, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
544
543
  } else if (item.value) {
545
544
  if (!( available.has(item.value))) {
546
545
  const currentNames = deprecatedNames.get(item.value);
@@ -548,7 +547,7 @@ let PromptValidator = class PromptValidator {
548
547
  if (currentNames?.size === 1) {
549
548
  const newName = Array.from(currentNames)[0];
550
549
  report(toMarker(( localize(
551
- 7973,
550
+ 8058,
552
551
  "Tool or toolset '{0}' has been renamed, use '{1}' instead.",
553
552
  item.value,
554
553
  newName
@@ -556,14 +555,14 @@ let PromptValidator = class PromptValidator {
556
555
  } else {
557
556
  const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
558
557
  report(toMarker(( localize(
559
- 7974,
558
+ 8059,
560
559
  "Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
561
560
  item.value,
562
561
  newNames
563
562
  )), item.range, MarkerSeverity.Info, [MarkerTag.Deprecated]));
564
563
  }
565
564
  } else {
566
- report(toMarker(( localize(7975, "Unknown tool '{0}' will be ignored.", item.value)), item.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
565
+ report(toMarker(( localize(8060, "Unknown tool '{0}' will be ignored.", item.value)), item.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
567
566
  }
568
567
  }
569
568
  }
@@ -576,25 +575,25 @@ let PromptValidator = class PromptValidator {
576
575
  return;
577
576
  }
578
577
  if (attribute.value.type !== "scalar") {
579
- report(toMarker(( localize(7976, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
578
+ report(toMarker(( localize(8061, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
580
579
  return;
581
580
  }
582
581
  const pattern = attribute.value.value;
583
582
  try {
584
583
  const patterns = splitGlobAware(pattern, ",");
585
584
  if (patterns.length === 0) {
586
- report(toMarker(( localize(7977, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
585
+ report(toMarker(( localize(8062, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
587
586
  return;
588
587
  }
589
588
  for (const pattern of patterns) {
590
589
  const globPattern = parse(pattern);
591
590
  if (isEmptyPattern(globPattern)) {
592
- report(toMarker(( localize(7977, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
591
+ report(toMarker(( localize(8062, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
593
592
  return;
594
593
  }
595
594
  }
596
595
  } catch (_error) {
597
- report(toMarker(( localize(7977, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
596
+ report(toMarker(( localize(8062, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
598
597
  }
599
598
  }
600
599
  validatePaths(attributes, report) {
@@ -603,26 +602,26 @@ let PromptValidator = class PromptValidator {
603
602
  return;
604
603
  }
605
604
  if (attribute.value.type !== "sequence") {
606
- report(toMarker(( localize(7978, "The 'paths' attribute must be an array of glob patterns.")), attribute.value.range, MarkerSeverity.Error));
605
+ report(toMarker(( localize(8063, "The 'paths' attribute must be an array of glob patterns.")), attribute.value.range, MarkerSeverity.Error));
607
606
  return;
608
607
  }
609
608
  for (const item of attribute.value.items) {
610
609
  if (item.type !== "scalar") {
611
- report(toMarker(( localize(7979, "Each entry in the 'paths' attribute must be a string.")), item.range, MarkerSeverity.Error));
610
+ report(toMarker(( localize(8064, "Each entry in the 'paths' attribute must be a string.")), item.range, MarkerSeverity.Error));
612
611
  continue;
613
612
  }
614
613
  const pattern = item.value.trim();
615
614
  if (pattern.length === 0) {
616
- report(toMarker(( localize(7980, "Path entries must be non-empty glob patterns.")), item.range, MarkerSeverity.Error));
615
+ report(toMarker(( localize(8065, "Path entries must be non-empty glob patterns.")), item.range, MarkerSeverity.Error));
617
616
  continue;
618
617
  }
619
618
  try {
620
619
  const globPattern = parse(pattern);
621
620
  if (isEmptyPattern(globPattern)) {
622
- report(toMarker(( localize(7981, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
621
+ report(toMarker(( localize(8066, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
623
622
  }
624
623
  } catch (_error) {
625
- report(toMarker(( localize(7981, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
624
+ report(toMarker(( localize(8066, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
626
625
  }
627
626
  }
628
627
  }
@@ -632,7 +631,7 @@ let PromptValidator = class PromptValidator {
632
631
  return;
633
632
  }
634
633
  if (attribute.value.type !== "sequence" && attribute.value.type !== "scalar") {
635
- report(toMarker(( localize(7982, "The 'excludeAgent' attribute must be an string or array.")), attribute.value.range, MarkerSeverity.Error));
634
+ report(toMarker(( localize(8067, "The 'excludeAgent' attribute must be an string or array.")), attribute.value.range, MarkerSeverity.Error));
636
635
  return;
637
636
  }
638
637
  }
@@ -643,7 +642,7 @@ let PromptValidator = class PromptValidator {
643
642
  }
644
643
  if (attribute.value.type !== "map") {
645
644
  report(toMarker(( localize(
646
- 7983,
645
+ 8068,
647
646
  "The 'hooks' attribute must be a map of hook event types to command arrays."
648
647
  )), attribute.value.range, MarkerSeverity.Error));
649
648
  return;
@@ -652,7 +651,7 @@ let PromptValidator = class PromptValidator {
652
651
  for (const prop of attribute.value.properties) {
653
652
  if (!( validHookNames.has(prop.key.value))) {
654
653
  report(toMarker(( localize(
655
- 7984,
654
+ 8069,
656
655
  "Unknown hook event type '{0}'. Supported: {1}.",
657
656
  prop.key.value,
658
657
  Array.from(validHookNames).join(", ")
@@ -660,7 +659,7 @@ let PromptValidator = class PromptValidator {
660
659
  }
661
660
  if (prop.value.type !== "sequence") {
662
661
  report(toMarker(( localize(
663
- 7985,
662
+ 8070,
664
663
  "Hook event '{0}' must have an array of command objects as its value.",
665
664
  prop.key.value
666
665
  )), prop.value.range, MarkerSeverity.Error));
@@ -673,19 +672,19 @@ let PromptValidator = class PromptValidator {
673
672
  }
674
673
  validateHookCommand(item, target, report) {
675
674
  if (item.type !== "map") {
676
- report(toMarker(( localize(7986, "Each hook command must be an object.")), item.range, MarkerSeverity.Error));
675
+ report(toMarker(( localize(8071, "Each hook command must be an object.")), item.range, MarkerSeverity.Error));
677
676
  return;
678
677
  }
679
678
  const hooksProperty = item.properties.find(p => p.key.value === "hooks");
680
679
  if (hooksProperty) {
681
680
  for (const prop of item.properties) {
682
681
  if (prop.key.value !== "hooks" && prop.key.value !== "matcher") {
683
- report(toMarker(( localize(7987, "Unknown property '{0}' in hook matcher.", prop.key.value)), prop.key.range, MarkerSeverity.Warning));
682
+ report(toMarker(( localize(8072, "Unknown property '{0}' in hook matcher.", prop.key.value)), prop.key.range, MarkerSeverity.Warning));
684
683
  }
685
684
  }
686
685
  if (hooksProperty.value.type !== "sequence") {
687
686
  report(toMarker(( localize(
688
- 7988,
687
+ 8073,
689
688
  "The 'hooks' property in a matcher must be an array of command objects."
690
689
  )), hooksProperty.value.range, MarkerSeverity.Error));
691
690
  return;
@@ -714,37 +713,37 @@ let PromptValidator = class PromptValidator {
714
713
  for (const prop of item.properties) {
715
714
  const key = prop.key.value;
716
715
  if (!( validProperties.has(key))) {
717
- report(toMarker(( localize(7989, "Unknown property '{0}' in hook command.", key)), prop.key.range, MarkerSeverity.Warning));
716
+ report(toMarker(( localize(8074, "Unknown property '{0}' in hook command.", key)), prop.key.range, MarkerSeverity.Warning));
718
717
  }
719
718
  if (key === "type") {
720
719
  hasType = true;
721
720
  if (prop.value.type !== "scalar" || prop.value.value !== "command") {
722
- report(toMarker(( localize(7990, "The 'type' property in a hook command must be 'command'.")), prop.value.range, MarkerSeverity.Error));
721
+ report(toMarker(( localize(8075, "The 'type' property in a hook command must be 'command'.")), prop.value.range, MarkerSeverity.Error));
723
722
  }
724
723
  } else if (( validCommandFields.has(key))) {
725
724
  hasCommandField = true;
726
725
  if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
727
726
  report(toMarker(( localize(
728
- 7991,
727
+ 8076,
729
728
  "The '{0}' property in a hook command must be a non-empty string.",
730
729
  key
731
730
  )), prop.value.range, MarkerSeverity.Error));
732
731
  }
733
732
  } else if (key === "cwd") {
734
733
  if (prop.value.type !== "scalar") {
735
- report(toMarker(( localize(7992, "The 'cwd' property in a hook command must be a string.")), prop.value.range, MarkerSeverity.Error));
734
+ report(toMarker(( localize(8077, "The 'cwd' property in a hook command must be a string.")), prop.value.range, MarkerSeverity.Error));
736
735
  }
737
736
  } else if (key === "env") {
738
737
  if (prop.value.type !== "map") {
739
738
  report(toMarker(( localize(
740
- 7993,
739
+ 8078,
741
740
  "The 'env' property in a hook command must be a map of string values."
742
741
  )), prop.value.range, MarkerSeverity.Error));
743
742
  } else {
744
743
  for (const envProp of prop.value.properties) {
745
744
  if (envProp.value.type !== "scalar") {
746
745
  report(toMarker(( localize(
747
- 7994,
746
+ 8079,
748
747
  "Environment variable '{0}' must have a string value.",
749
748
  envProp.key.value
750
749
  )), envProp.value.range, MarkerSeverity.Error));
@@ -753,19 +752,19 @@ let PromptValidator = class PromptValidator {
753
752
  }
754
753
  } else if (key === "timeout" || key === "timeoutSec") {
755
754
  if (prop.value.type !== "scalar" || isNaN(Number(prop.value.value))) {
756
- report(toMarker(( localize(7995, "The '{0}' property in a hook command must be a number.", key)), prop.value.range, MarkerSeverity.Error));
755
+ report(toMarker(( localize(8080, "The '{0}' property in a hook command must be a number.", key)), prop.value.range, MarkerSeverity.Error));
757
756
  }
758
757
  }
759
758
  }
760
759
  if (!hasType) {
761
- report(toMarker(( localize(7996, "Hook command is missing required property 'type'.")), item.range, MarkerSeverity.Error));
760
+ report(toMarker(( localize(8081, "Hook command is missing required property 'type'.")), item.range, MarkerSeverity.Error));
762
761
  }
763
762
  if (!hasCommandField) {
764
763
  if (isCopilotCli) {
765
- report(toMarker(( localize(7997, "Hook command must specify at least one of 'bash' or 'powershell'.")), item.range, MarkerSeverity.Error));
764
+ report(toMarker(( localize(8082, "Hook command must specify at least one of 'bash' or 'powershell'.")), item.range, MarkerSeverity.Error));
766
765
  } else {
767
766
  report(toMarker(( localize(
768
- 7998,
767
+ 8083,
769
768
  "Hook command must specify at least one of 'command', 'windows', 'linux', or 'osx'."
770
769
  )), item.range, MarkerSeverity.Error));
771
770
  }
@@ -777,14 +776,14 @@ let PromptValidator = class PromptValidator {
777
776
  return;
778
777
  }
779
778
  if (attribute.value.type !== "sequence") {
780
- report(toMarker(( localize(7999, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
779
+ report(toMarker(( localize(8084, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
781
780
  return;
782
781
  }
783
782
  const seenLabels = ( new Map());
784
783
  for (const item of attribute.value.items) {
785
784
  if (item.type !== "map") {
786
785
  report(toMarker(( localize(
787
- 8000,
786
+ 8085,
788
787
  "Each handoff in the 'handoffs' attribute must be an object with 'label', 'agent', 'prompt' and optional 'send'."
789
788
  )), item.range, MarkerSeverity.Error));
790
789
  continue;
@@ -794,44 +793,44 @@ let PromptValidator = class PromptValidator {
794
793
  switch (prop.key.value) {
795
794
  case "label":
796
795
  if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
797
- report(toMarker(( localize(8001, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
796
+ report(toMarker(( localize(8086, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
798
797
  } else if (!/[a-zA-Z0-9]/.test(prop.value.value)) {
799
798
  report(toMarker(( localize(
800
- 8002,
799
+ 8087,
801
800
  "The 'label' property in a handoff must contain at least one alphanumeric character."
802
801
  )), prop.value.range, MarkerSeverity.Error));
803
802
  }
804
803
  break;
805
804
  case "agent":
806
805
  if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
807
- report(toMarker(( localize(8003, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
806
+ report(toMarker(( localize(8088, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
808
807
  } else {
809
808
  this.validateAgentValue(prop.value, report);
810
809
  }
811
810
  break;
812
811
  case "prompt":
813
812
  if (prop.value.type !== "scalar") {
814
- report(toMarker(( localize(8004, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
813
+ report(toMarker(( localize(8089, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
815
814
  }
816
815
  break;
817
816
  case "send":
818
817
  if (!isTrueOrFalse(prop.value)) {
819
- report(toMarker(( localize(8005, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
818
+ report(toMarker(( localize(8090, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
820
819
  }
821
820
  break;
822
821
  case "showContinueOn":
823
822
  if (!isTrueOrFalse(prop.value)) {
824
- report(toMarker(( localize(8006, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
823
+ report(toMarker(( localize(8091, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
825
824
  }
826
825
  break;
827
826
  case "model":
828
827
  if (prop.value.type !== "scalar") {
829
- report(toMarker(( localize(8007, "The 'model' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
828
+ report(toMarker(( localize(8092, "The 'model' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
830
829
  }
831
830
  break;
832
831
  default:
833
832
  report(toMarker(( localize(
834
- 8008,
833
+ 8093,
835
834
  "Unknown property '{0}' in handoff object. Supported properties are 'label', 'agent', 'prompt' and optional 'send', 'showContinueOn', 'model'.",
836
835
  prop.key.value
837
836
  )), prop.value.range, MarkerSeverity.Warning));
@@ -840,7 +839,7 @@ let PromptValidator = class PromptValidator {
840
839
  }
841
840
  if (required.size > 0) {
842
841
  report(toMarker(( localize(
843
- 8009,
842
+ 8094,
844
843
  "Missing required properties {0} in handoff object.",
845
844
  ( Array.from(required).map(s => `'${s}'`)).join(", ")
846
845
  )), item.range, MarkerSeverity.Error));
@@ -850,7 +849,7 @@ let PromptValidator = class PromptValidator {
850
849
  const normalizedLabel = labelProp.value.value.toLowerCase();
851
850
  if (normalizedLabel && ( seenLabels.has(normalizedLabel))) {
852
851
  report(toMarker(( localize(
853
- 8010,
852
+ 8095,
854
853
  "Duplicate handoff label '{0}'. Each handoff must have a unique label.",
855
854
  labelProp.value.value
856
855
  )), labelProp.value.range, MarkerSeverity.Error));
@@ -866,7 +865,7 @@ let PromptValidator = class PromptValidator {
866
865
  return;
867
866
  }
868
867
  report(toMarker(( localize(
869
- 8011,
868
+ 8096,
870
869
  "The 'infer' attribute is deprecated in favour of 'user-invocable' and 'disable-model-invocation'."
871
870
  )), attribute.value.range, MarkerSeverity.Error));
872
871
  }
@@ -876,18 +875,18 @@ let PromptValidator = class PromptValidator {
876
875
  return;
877
876
  }
878
877
  if (attribute.value.type !== "scalar") {
879
- report(toMarker(( localize(8012, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
878
+ report(toMarker(( localize(8097, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
880
879
  return;
881
880
  }
882
881
  const targetValue = attribute.value.value.trim();
883
882
  if (targetValue.length === 0) {
884
- report(toMarker(( localize(8013, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
883
+ report(toMarker(( localize(8098, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
885
884
  return;
886
885
  }
887
886
  const validTargets = ["github-copilot", "vscode"];
888
887
  if (!validTargets.includes(targetValue)) {
889
888
  report(toMarker(( localize(
890
- 8014,
889
+ 8099,
891
890
  "The 'target' attribute must be one of: {0}.",
892
891
  validTargets.join(", ")
893
892
  )), attribute.value.range, MarkerSeverity.Error));
@@ -899,7 +898,7 @@ let PromptValidator = class PromptValidator {
899
898
  return;
900
899
  }
901
900
  if (!isTrueOrFalse(attribute.value)) {
902
- report(toMarker(( localize(8015, "The 'user-invocable' attribute must be 'true' or 'false'.")), attribute.value.range, MarkerSeverity.Error));
901
+ report(toMarker(( localize(8100, "The 'user-invocable' attribute must be 'true' or 'false'.")), attribute.value.range, MarkerSeverity.Error));
903
902
  return;
904
903
  }
905
904
  }
@@ -910,7 +909,7 @@ let PromptValidator = class PromptValidator {
910
909
  }
911
910
  if (!isTrueOrFalse(attribute.value)) {
912
911
  report(toMarker(( localize(
913
- 8016,
912
+ 8101,
914
913
  "The 'disable-model-invocation' attribute must be 'true' or 'false'."
915
914
  )), attribute.value.range, MarkerSeverity.Error));
916
915
  return;
@@ -922,7 +921,7 @@ let PromptValidator = class PromptValidator {
922
921
  return;
923
922
  }
924
923
  if (attribute.value.type !== "sequence") {
925
- report(toMarker(( localize(8017, "The 'agents' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
924
+ report(toMarker(( localize(8102, "The 'agents' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
926
925
  return;
927
926
  }
928
927
  const agents = (await this.promptsService.getCustomAgents(CancellationToken.None)).filter(a => a.enabled);
@@ -931,12 +930,12 @@ let PromptValidator = class PromptValidator {
931
930
  const agentNames = [];
932
931
  for (const item of attribute.value.items) {
933
932
  if (item.type !== "scalar") {
934
- report(toMarker(( localize(8018, "Each agent name in the 'agents' attribute must be a string.")), item.range, MarkerSeverity.Error));
933
+ report(toMarker(( localize(8103, "Each agent name in the 'agents' attribute must be a string.")), item.range, MarkerSeverity.Error));
935
934
  } else if (item.value) {
936
935
  agentNames.push(item.value);
937
936
  if (item.value !== "*" && !( availableAgentNames.has(item.value))) {
938
937
  report(toMarker(( localize(
939
- 8019,
938
+ 8104,
940
939
  "Unknown agent '{0}' will be ignored. Available agents: {1}.",
941
940
  item.value,
942
941
  Array.from(availableAgentNames).join(", ")
@@ -948,7 +947,7 @@ let PromptValidator = class PromptValidator {
948
947
  const tools = header.tools;
949
948
  if (tools && !tools.includes(SpecedToolAliases.agent)) {
950
949
  report(toMarker(( localize(
951
- 8020,
950
+ 8105,
952
951
  "When 'agents' and 'tools' are specified, the 'agent' tool must be included in the 'tools' attribute."
953
952
  )), attribute.value.range, MarkerSeverity.Warning));
954
953
  }
@@ -960,20 +959,20 @@ let PromptValidator = class PromptValidator {
960
959
  return;
961
960
  }
962
961
  if (attribute.value.type !== "map") {
963
- report(toMarker(( localize(8021, "The 'github' attribute must be an object.")), attribute.value.range, MarkerSeverity.Error));
962
+ report(toMarker(( localize(8106, "The 'github' attribute must be an object.")), attribute.value.range, MarkerSeverity.Error));
964
963
  return;
965
964
  }
966
965
  for (const prop of attribute.value.properties) {
967
966
  if (prop.key.value !== "permissions") {
968
967
  report(toMarker(( localize(
969
- 8022,
968
+ 8107,
970
969
  "Unknown property '{0}' in 'github' object. Supported: 'permissions'.",
971
970
  prop.key.value
972
971
  )), prop.key.range, MarkerSeverity.Warning));
973
972
  continue;
974
973
  }
975
974
  if (prop.value.type !== "map") {
976
- report(toMarker(( localize(8023, "The 'permissions' property must be an object.")), prop.value.range, MarkerSeverity.Error));
975
+ report(toMarker(( localize(8108, "The 'permissions' property must be an object.")), prop.value.range, MarkerSeverity.Error));
977
976
  continue;
978
977
  }
979
978
  for (const permProp of prop.value.properties) {
@@ -982,7 +981,7 @@ let PromptValidator = class PromptValidator {
982
981
  if (!scopeInfo) {
983
982
  const validScopes = ( Object.keys(githubPermissionScopes)).sort().join(", ");
984
983
  report(toMarker(( localize(
985
- 8024,
984
+ 8109,
986
985
  "Unknown permission scope '{0}'. Valid scopes: {1}.",
987
986
  scope,
988
987
  validScopes
@@ -990,13 +989,13 @@ let PromptValidator = class PromptValidator {
990
989
  continue;
991
990
  }
992
991
  if (permProp.value.type !== "scalar") {
993
- report(toMarker(( localize(8025, "The permission value for '{0}' must be a string.", scope)), permProp.value.range, MarkerSeverity.Error));
992
+ report(toMarker(( localize(8110, "The permission value for '{0}' must be a string.", scope)), permProp.value.range, MarkerSeverity.Error));
994
993
  continue;
995
994
  }
996
995
  const value = permProp.value.value;
997
996
  if (!scopeInfo.allowedValues.includes(value)) {
998
997
  report(toMarker(( localize(
999
- 8026,
998
+ 8111,
1000
999
  "Invalid permission value '{0}' for scope '{1}'. Allowed values: {2}.",
1001
1000
  value,
1002
1001
  scope,
@@ -1011,39 +1010,39 @@ PromptValidator = ( __decorate([( __param(0, ILanguageModelsService)), ( __param
1011
1010
  const githubPermissionScopes = {
1012
1011
  "actions": {
1013
1012
  allowedValues: ["read", "write", "none"],
1014
- description: ( localize(8027, "Access to GitHub Actions workflows and runs"))
1013
+ description: ( localize(8112, "Access to GitHub Actions workflows and runs"))
1015
1014
  },
1016
1015
  "checks": {
1017
1016
  allowedValues: ["read", "none"],
1018
- description: ( localize(8028, "Access to check runs and statuses"))
1017
+ description: ( localize(8113, "Access to check runs and statuses"))
1019
1018
  },
1020
1019
  "contents": {
1021
1020
  allowedValues: ["read", "write", "none"],
1022
- description: ( localize(8029, "Access to repository contents (files, commits, branches)"))
1021
+ description: ( localize(8114, "Access to repository contents (files, commits, branches)"))
1023
1022
  },
1024
1023
  "discussions": {
1025
1024
  allowedValues: ["read", "write", "none"],
1026
- description: ( localize(8030, "Access to discussions"))
1025
+ description: ( localize(8115, "Access to discussions"))
1027
1026
  },
1028
1027
  "issues": {
1029
1028
  allowedValues: ["read", "write", "none"],
1030
- description: ( localize(8031, "Access to issues (read, create, update, comment)"))
1029
+ description: ( localize(8116, "Access to issues (read, create, update, comment)"))
1031
1030
  },
1032
1031
  "metadata": {
1033
1032
  allowedValues: ["read"],
1034
- description: ( localize(8032, "Repository metadata (always read-only)"))
1033
+ description: ( localize(8117, "Repository metadata (always read-only)"))
1035
1034
  },
1036
1035
  "pull-requests": {
1037
1036
  allowedValues: ["read", "write", "none"],
1038
- description: ( localize(8033, "Access to pull requests (read, create, update, review)"))
1037
+ description: ( localize(8118, "Access to pull requests (read, create, update, review)"))
1039
1038
  },
1040
1039
  "security-events": {
1041
1040
  allowedValues: ["read", "none"],
1042
- description: ( localize(8034, "Access to security-related events"))
1041
+ description: ( localize(8119, "Access to security-related events"))
1043
1042
  },
1044
1043
  "workflows": {
1045
1044
  allowedValues: ["write", "none"],
1046
- description: ( localize(8035, "Access to modify workflow files"))
1045
+ description: ( localize(8120, "Access to modify workflow files"))
1047
1046
  }
1048
1047
  };
1049
1048
  function isTrueOrFalse(value) {
@@ -1131,103 +1130,103 @@ function isNonRecommendedAttribute(attributeName) {
1131
1130
  }
1132
1131
  const knownClaudeTools = [{
1133
1132
  name: "Bash",
1134
- description: ( localize(8036, "Execute shell commands")),
1133
+ description: ( localize(8121, "Execute shell commands")),
1135
1134
  toolEquivalent: [SpecedToolAliases.execute]
1136
1135
  }, {
1137
1136
  name: "Edit",
1138
- description: ( localize(8037, "Make targeted file edits")),
1137
+ description: ( localize(8122, "Make targeted file edits")),
1139
1138
  toolEquivalent: ["edit/editNotebook", "edit/editFiles"]
1140
1139
  }, {
1141
1140
  name: "Glob",
1142
- description: ( localize(8038, "Find files by pattern")),
1141
+ description: ( localize(8123, "Find files by pattern")),
1143
1142
  toolEquivalent: ["search/fileSearch"]
1144
1143
  }, {
1145
1144
  name: "Grep",
1146
- description: ( localize(8039, "Search file contents with regex")),
1145
+ description: ( localize(8124, "Search file contents with regex")),
1147
1146
  toolEquivalent: ["search/textSearch"]
1148
1147
  }, {
1149
1148
  name: "Read",
1150
- description: ( localize(8040, "Read file contents")),
1149
+ description: ( localize(8125, "Read file contents")),
1151
1150
  toolEquivalent: ["read/readFile", "read/getNotebookSummary"]
1152
1151
  }, {
1153
1152
  name: "Write",
1154
- description: ( localize(8041, "Create/overwrite files")),
1153
+ description: ( localize(8126, "Create/overwrite files")),
1155
1154
  toolEquivalent: ["edit/createDirectory", "edit/createFile", "edit/createJupyterNotebook"]
1156
1155
  }, {
1157
1156
  name: "WebFetch",
1158
- description: ( localize(8042, "Fetch URL content")),
1157
+ description: ( localize(8127, "Fetch URL content")),
1159
1158
  toolEquivalent: [SpecedToolAliases.web]
1160
1159
  }, {
1161
1160
  name: "WebSearch",
1162
- description: ( localize(8043, "Perform web searches")),
1161
+ description: ( localize(8128, "Perform web searches")),
1163
1162
  toolEquivalent: [SpecedToolAliases.web]
1164
1163
  }, {
1165
1164
  name: "Task",
1166
- description: ( localize(8044, "Run subagents for complex tasks")),
1165
+ description: ( localize(8129, "Run subagents for complex tasks")),
1167
1166
  toolEquivalent: [SpecedToolAliases.agent]
1168
1167
  }, {
1169
1168
  name: "Skill",
1170
- description: ( localize(8045, "Execute skills")),
1169
+ description: ( localize(8130, "Execute skills")),
1171
1170
  toolEquivalent: []
1172
1171
  }, {
1173
1172
  name: "LSP",
1174
- description: ( localize(8046, "Code intelligence (requires plugin)")),
1173
+ description: ( localize(8131, "Code intelligence (requires plugin)")),
1175
1174
  toolEquivalent: []
1176
1175
  }, {
1177
1176
  name: "NotebookEdit",
1178
- description: ( localize(8047, "Modify Jupyter notebooks")),
1177
+ description: ( localize(8132, "Modify Jupyter notebooks")),
1179
1178
  toolEquivalent: ["edit/editNotebook"]
1180
1179
  }, {
1181
1180
  name: "AskUserQuestion",
1182
- description: ( localize(8048, "Ask multiple-choice questions")),
1181
+ description: ( localize(8133, "Ask multiple-choice questions")),
1183
1182
  toolEquivalent: ["vscode/askQuestions"]
1184
1183
  }, {
1185
1184
  name: "MCPSearch",
1186
- description: ( localize(8049, "Searches for MCP tools when tool search is enabled")),
1185
+ description: ( localize(8134, "Searches for MCP tools when tool search is enabled")),
1187
1186
  toolEquivalent: []
1188
1187
  }];
1189
1188
  const knownClaudeModels = [{
1190
1189
  name: "sonnet",
1191
- description: ( localize(8050, "Latest Claude Sonnet")),
1190
+ description: ( localize(8135, "Latest Claude Sonnet")),
1192
1191
  modelEquivalent: "Claude Sonnet 4.5 (copilot)"
1193
1192
  }, {
1194
1193
  name: "opus",
1195
- description: ( localize(8051, "Latest Claude Opus")),
1194
+ description: ( localize(8136, "Latest Claude Opus")),
1196
1195
  modelEquivalent: "Claude Opus 4.6 (copilot)"
1197
1196
  }, {
1198
1197
  name: "haiku",
1199
- description: ( localize(8052, "Latest Claude Haiku, fast for simple tasks")),
1198
+ description: ( localize(8137, "Latest Claude Haiku, fast for simple tasks")),
1200
1199
  modelEquivalent: "Claude Haiku 4.5 (copilot)"
1201
1200
  }, {
1202
1201
  name: "inherit",
1203
- description: ( localize(8053, "Inherit model from parent agent or prompt")),
1202
+ description: ( localize(8138, "Inherit model from parent agent or prompt")),
1204
1203
  modelEquivalent: undefined
1205
1204
  }];
1206
1205
  const claudeAgentAttributes = {
1207
1206
  "name": {
1208
1207
  type: "scalar",
1209
- description: ( localize(8054, "Unique identifier using lowercase letters and hyphens (required)"))
1208
+ description: ( localize(8139, "Unique identifier using lowercase letters and hyphens (required)"))
1210
1209
  },
1211
1210
  "description": {
1212
1211
  type: "scalar",
1213
- description: ( localize(8055, "When to delegate to this subagent (required)"))
1212
+ description: ( localize(8140, "When to delegate to this subagent (required)"))
1214
1213
  },
1215
1214
  "tools": {
1216
1215
  type: "sequence",
1217
- description: ( localize(8056, "Array of tools the subagent can use. Inherits all tools if omitted")),
1216
+ description: ( localize(8141, "Array of tools the subagent can use. Inherits all tools if omitted")),
1218
1217
  defaults: ["Read, Edit, Bash"],
1219
1218
  items: knownClaudeTools
1220
1219
  },
1221
1220
  "disallowedTools": {
1222
1221
  type: "sequence",
1223
- description: ( localize(8057, "Tools to deny, removed from inherited or specified list")),
1222
+ description: ( localize(8142, "Tools to deny, removed from inherited or specified list")),
1224
1223
  defaults: ["Write, Edit, Bash"],
1225
1224
  items: knownClaudeTools
1226
1225
  },
1227
1226
  "model": {
1228
1227
  type: "scalar",
1229
1228
  description: ( localize(
1230
- 8058,
1229
+ 8143,
1231
1230
  "Model to use: sonnet, opus, haiku, or inherit. Defaults to inherit."
1232
1231
  )),
1233
1232
  defaults: ["sonnet", "opus", "haiku", "inherit"],
@@ -1236,77 +1235,77 @@ const claudeAgentAttributes = {
1236
1235
  "permissionMode": {
1237
1236
  type: "scalar",
1238
1237
  description: ( localize(
1239
- 8059,
1238
+ 8144,
1240
1239
  "Permission mode: default, acceptEdits, dontAsk, bypassPermissions, or plan."
1241
1240
  )),
1242
1241
  defaults: ["default", "acceptEdits", "dontAsk", "bypassPermissions", "plan"],
1243
1242
  enums: [{
1244
1243
  name: "default",
1245
1244
  description: ( localize(
1246
- 8060,
1245
+ 8145,
1247
1246
  "Standard behavior: prompts for permission on first use of each tool."
1248
1247
  ))
1249
1248
  }, {
1250
1249
  name: "acceptEdits",
1251
- description: ( localize(8061, "Automatically accepts file edit permissions for the session."))
1250
+ description: ( localize(8146, "Automatically accepts file edit permissions for the session."))
1252
1251
  }, {
1253
1252
  name: "plan",
1254
1253
  description: ( localize(
1255
- 8062,
1254
+ 8147,
1256
1255
  "Plan Mode: Claude can analyze but not modify files or execute commands."
1257
1256
  ))
1258
1257
  }, {
1259
1258
  name: "delegate",
1260
1259
  description: ( localize(
1261
- 8063,
1260
+ 8148,
1262
1261
  "Coordination-only mode for agent team leads. Only available when an agent team is active."
1263
1262
  ))
1264
1263
  }, {
1265
1264
  name: "dontAsk",
1266
1265
  description: ( localize(
1267
- 8064,
1266
+ 8149,
1268
1267
  "Auto-denies tools unless pre-approved via /permissions or permissions.allow rules."
1269
1268
  ))
1270
1269
  }, {
1271
1270
  name: "bypassPermissions",
1272
1271
  description: ( localize(
1273
- 8065,
1272
+ 8150,
1274
1273
  "Skips all permission prompts (requires safe environment like containers)."
1275
1274
  ))
1276
1275
  }]
1277
1276
  },
1278
1277
  "skills": {
1279
1278
  type: "sequence",
1280
- description: ( localize(8066, "Skills to load into the subagent's context at startup."))
1279
+ description: ( localize(8151, "Skills to load into the subagent's context at startup."))
1281
1280
  },
1282
1281
  "mcpServers": {
1283
1282
  type: "sequence",
1284
- description: ( localize(8067, "MCP servers available to this subagent."))
1283
+ description: ( localize(8152, "MCP servers available to this subagent."))
1285
1284
  },
1286
1285
  "hooks": {
1287
1286
  type: "object",
1288
- description: ( localize(8068, "Lifecycle hooks scoped to this subagent."))
1287
+ description: ( localize(8153, "Lifecycle hooks scoped to this subagent."))
1289
1288
  },
1290
1289
  "memory": {
1291
1290
  type: "scalar",
1292
1291
  description: ( localize(
1293
- 8069,
1292
+ 8154,
1294
1293
  "Persistent memory scope: user, project, or local. Enables cross-session learning."
1295
1294
  )),
1296
1295
  defaults: ["user", "project", "local"],
1297
1296
  enums: [{
1298
1297
  name: "user",
1299
- description: ( localize(8070, "Remember learnings across all projects."))
1298
+ description: ( localize(8155, "Remember learnings across all projects."))
1300
1299
  }, {
1301
1300
  name: "project",
1302
1301
  description: ( localize(
1303
- 8071,
1302
+ 8156,
1304
1303
  "The subagent's knowledge is project-specific and shareable via version control."
1305
1304
  ))
1306
1305
  }, {
1307
1306
  name: "local",
1308
1307
  description: ( localize(
1309
- 8072,
1308
+ 8157,
1310
1309
  "The subagent's knowledge is project-specific but should not be checked into version control."
1311
1310
  ))
1312
1311
  }]
@@ -1316,14 +1315,14 @@ const claudeRulesAttributes = {
1316
1315
  "description": {
1317
1316
  type: "scalar",
1318
1317
  description: ( localize(
1319
- 8073,
1318
+ 8158,
1320
1319
  "A description of what this rule covers, used to provide context about when it applies."
1321
1320
  ))
1322
1321
  },
1323
1322
  "paths": {
1324
1323
  type: "sequence",
1325
1324
  description: ( localize(
1326
- 8074,
1325
+ 8159,
1327
1326
  "Array of glob patterns that describe for which files the rule applies. Based on these patterns, the file is automatically included in the prompt when the context contains a file that matches.\nExample: `['src/**/*.ts', 'test/**']`"
1328
1327
  ))
1329
1328
  }