@codingame/monaco-vscode-chat-service-override 31.0.0 → 32.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 (341) hide show
  1. package/index.d.ts +1 -1
  2. package/index.js +21 -5
  3. package/package.json +5 -5
  4. package/vscode/src/vs/base/common/defaultAccount.d.ts +69 -0
  5. package/vscode/src/vs/base/common/defaultAccount.js +12 -0
  6. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostProtocolClient.d.ts +91 -22
  7. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostProtocolClient.js +301 -68
  8. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostServiceImpl.d.ts +24 -5
  9. package/vscode/src/vs/platform/agentHost/browser/remoteAgentHostServiceImpl.js +89 -16
  10. package/vscode/src/vs/platform/agentHost/browser/webSocketClientTransport.d.ts +17 -5
  11. package/vscode/src/vs/platform/agentHost/browser/webSocketClientTransport.js +73 -10
  12. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemProvider.d.ts +32 -6
  13. package/vscode/src/vs/platform/agentHost/common/agentHostFileSystemProvider.js +32 -20
  14. package/vscode/src/vs/platform/agentHost/common/agentHostPermissionService.d.ts +37 -0
  15. package/vscode/src/vs/platform/agentHost/common/agentHostPermissionService.js +15 -0
  16. package/vscode/src/vs/platform/agentHost/common/agentService.d.ts +242 -201
  17. package/vscode/src/vs/platform/agentHost/common/agentService.js +3 -1
  18. package/vscode/src/vs/platform/agentHost/common/ahpJsonlLogger.d.ts +35 -0
  19. package/vscode/src/vs/platform/agentHost/common/ahpJsonlLogger.js +106 -0
  20. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.d.ts +38 -30
  21. package/vscode/src/vs/platform/agentHost/common/state/agentSubscription.js +2 -1
  22. package/vscode/src/vs/platform/agentHost/common/state/protocol/errors.d.ts +114 -4
  23. package/vscode/src/vs/platform/agentHost/common/state/protocol/reducers.d.ts +10 -10
  24. package/vscode/src/vs/platform/agentHost/common/state/protocol/reducers.js +52 -19
  25. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.d.ts +42 -0
  26. package/vscode/src/vs/platform/agentHost/common/state/protocol/version/registry.js +7 -0
  27. package/vscode/src/vs/platform/agentHost/common/state/sessionActions.d.ts +42 -41
  28. package/vscode/src/vs/platform/agentHost/common/state/sessionTransport.d.ts +6 -6
  29. package/vscode/src/vs/platform/agentHost/common/transportConstants.d.ts +15 -0
  30. package/vscode/src/vs/platform/agentHost/common/transportConstants.js +6 -0
  31. package/vscode/src/vs/platform/agentPlugins/common/pluginParsers.d.ts +4 -3
  32. package/vscode/src/vs/platform/agentPlugins/common/pluginParsers.js +4 -3
  33. package/vscode/src/vs/platform/networkFilter/common/networkFilterService.d.ts +4 -2
  34. package/vscode/src/vs/platform/networkFilter/common/networkFilterService.js +15 -7
  35. package/vscode/src/vs/workbench/contrib/browserView/common/browserChatToolReferenceNames.d.ts +19 -0
  36. package/vscode/src/vs/workbench/contrib/browserView/common/browserChatToolReferenceNames.js +17 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +2 -2
  38. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +2 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +16 -16
  40. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -10
  41. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +64 -59
  42. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
  43. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +31 -16
  44. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +18 -9
  45. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.d.ts +16 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +8 -8
  47. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +30 -5
  48. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  49. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +8 -7
  50. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +3 -3
  51. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
  52. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  53. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +12 -12
  54. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +12 -12
  55. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +27 -18
  56. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  57. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +11 -11
  58. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  59. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +21 -20
  60. package/vscode/src/vs/workbench/contrib/chat/browser/actions/createPluginAction.js +22 -22
  61. package/vscode/src/vs/workbench/contrib/chat/browser/actions/reviewEdits.d.ts +12 -0
  62. package/vscode/src/vs/workbench/contrib/chat/browser/actions/reviewEdits.js +171 -0
  63. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.d.ts +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginActions.js +8 -8
  65. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +4 -4
  66. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +2 -2
  67. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +1 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +3 -2
  69. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +12 -10
  70. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPermissionUiContribution.d.ts +28 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPermissionUiContribution.js +99 -0
  72. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionWorkingDirectoryResolver.d.ts +2 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionWorkingDirectoryResolver.js +11 -4
  74. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +9 -3
  75. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +63 -53
  76. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +2 -0
  77. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +10 -7
  78. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +3 -3
  79. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
  80. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +4 -4
  81. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
  82. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +5 -4
  83. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +25 -48
  84. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +17 -17
  85. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  86. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsController.js +5 -0
  87. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +8 -4
  88. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +99 -39
  89. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +2 -2
  90. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +17 -30
  91. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.d.ts +78 -0
  92. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemsModel.js +38 -0
  93. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +35 -37
  94. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +347 -326
  95. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.d.ts +6 -2
  96. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidgetUtils.js +1 -11
  97. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +113 -109
  98. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +37 -15
  99. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +436 -134
  100. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +1 -1
  101. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.d.ts +2 -0
  102. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.js +52 -26
  103. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +7 -1
  104. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.d.ts +2 -1
  105. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationHarnessService.js +13 -5
  106. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.d.ts +23 -0
  107. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.js +60 -0
  108. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.d.ts +25 -0
  109. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.js +93 -0
  110. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +9 -2
  111. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +73 -104
  112. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +272 -41
  113. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationWelcomePromptLaunchers.css +12 -2
  114. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +30 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +430 -185
  116. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +5 -2
  117. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +44 -3
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +480 -279
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +32 -32
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheDiff.d.ts +138 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheDiff.js +221 -0
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.d.ts +84 -0
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.js +1216 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +6 -6
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +2 -1
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +32 -4
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +2 -2
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +26 -19
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +7 -7
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +4 -4
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +7 -7
  132. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +28 -25
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +13 -13
  134. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +17 -17
  135. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +25 -24
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +8 -8
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +23 -23
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +2 -1
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +68 -33
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +11 -11
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.d.ts +3 -2
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +1 -0
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +650 -6
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +2 -2
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +46 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +533 -0
  147. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +29 -0
  148. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +390 -0
  149. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +3 -3
  150. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.d.ts +101 -0
  151. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +509 -0
  152. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
  153. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +18 -3
  154. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
  155. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +11 -11
  156. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +3 -2
  157. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +130 -0
  158. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingExplanationWidget.css +276 -0
  159. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
  160. package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +1 -1
  161. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +8 -7
  162. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +2 -2
  163. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +1 -7
  164. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +6 -87
  165. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +1 -1
  166. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +116 -182
  167. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +12 -39
  168. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
  169. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +31 -31
  170. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
  171. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +61 -41
  172. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
  173. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +6 -6
  174. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +27 -27
  175. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +2 -0
  176. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +16 -13
  177. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +20 -0
  178. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +106 -36
  179. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +25 -7
  180. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +629 -425
  181. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.d.ts +9 -1
  182. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +105 -29
  183. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.d.ts +1 -0
  184. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +175 -148
  185. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +20 -33
  186. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +9 -2
  187. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +4 -4
  188. package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.js +2 -2
  189. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +4 -4
  190. package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.js +4 -4
  191. package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.js +2 -2
  192. package/vscode/src/vs/workbench/contrib/chat/browser/githubRepoFetcher.d.ts +58 -0
  193. package/vscode/src/vs/workbench/contrib/chat/browser/githubRepoFetcher.js +339 -0
  194. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +1 -1
  195. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/media/planReviewFeedback.css +160 -0
  196. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorActions.d.ts +9 -0
  197. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorActions.js +123 -0
  198. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorContribution.d.ts +37 -0
  199. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorContribution.js +572 -0
  200. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackService.d.ts +36 -0
  201. package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackService.js +167 -0
  202. package/vscode/src/vs/workbench/contrib/chat/browser/pluginGitCommandService.d.ts +49 -7
  203. package/vscode/src/vs/workbench/contrib/chat/browser/pluginGitCommandService.js +315 -19
  204. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +45 -24
  205. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +15 -15
  206. package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +6 -6
  207. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
  208. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +44 -40
  209. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +5 -5
  210. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  211. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileContributions.js +4 -1
  212. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +2 -2
  213. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  214. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
  215. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
  216. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +3 -3
  217. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +20 -20
  218. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +39 -39
  219. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +9 -1
  220. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +111 -52
  221. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +3 -7
  222. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +13 -47
  223. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.d.ts +3 -2
  224. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +4 -8
  225. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolResultCompressorService.d.ts +18 -0
  226. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolResultCompressorService.js +56 -0
  227. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +3 -7
  228. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +14 -52
  229. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  230. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.d.ts +3 -1
  231. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +17 -2
  232. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.d.ts +2 -0
  233. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +23 -12
  234. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletions.d.ts +39 -0
  235. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletions.js +136 -0
  236. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletionsBase.d.ts +72 -0
  237. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/agentHostInputCompletionsBase.js +56 -0
  238. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.d.ts +7 -0
  239. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletionUtils.js +14 -1
  240. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +41 -26
  241. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +30 -12
  242. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
  243. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +1 -1
  244. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +2 -5
  245. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +25 -6
  246. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +2 -2
  247. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +2 -2
  248. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +5 -4
  249. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +1 -0
  250. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +108 -45
  251. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +7 -3
  252. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +3 -1
  253. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +20 -1
  254. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +65 -26
  255. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +5 -3
  256. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +38 -11
  257. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +17 -1
  258. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +165 -16
  259. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +1 -0
  260. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +62 -1
  261. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +18 -18
  262. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -1
  263. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +5 -5
  264. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -3
  265. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +15 -21
  266. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.d.ts +1 -3
  267. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +18 -24
  268. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +4 -2
  269. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +203 -180
  270. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  271. package/vscode/src/vs/workbench/contrib/chat/common/workingDirectory.d.ts +30 -0
  272. package/vscode/src/vs/workbench/contrib/chat/common/workingDirectory.js +35 -0
  273. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.d.ts +2 -1
  274. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +27 -2
  275. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
  276. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +14 -49
  277. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +0 -16
  278. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +35 -177
  279. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +2 -8
  280. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.d.ts +1 -2
  281. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +2 -3
  282. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +4 -4
  283. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +11 -11
  284. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
  285. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  286. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +13 -13
  287. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +5 -5
  288. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  289. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  290. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  291. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
  292. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +29 -3
  293. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +129 -3
  294. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +3 -2
  295. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.d.ts +2 -1
  296. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +14 -6
  297. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  298. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.d.ts +1 -4
  299. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +12 -38
  300. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  301. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +4 -4
  302. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -2
  303. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sendToTerminalTool.d.ts +12 -7
  304. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sendToTerminalTool.js +77 -70
  305. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
  306. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
  307. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
  308. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  309. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCompressor.d.ts +32 -0
  310. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalOutputCompressor.js +232 -0
  311. package/vscode/src/vs/workbench/services/agentHost/common/agentHostPermissionService.d.ts +83 -0
  312. package/vscode/src/vs/workbench/services/agentHost/common/agentHostPermissionService.js +243 -0
  313. package/vscode/src/vs/platform/agentHost/common/state/protocol/commands.d.ts +0 -749
  314. package/vscode/src/vs/platform/agentHost/common/state/protocol/commands.js +0 -14
  315. package/vscode/src/vs/platform/agentHost/common/state/sessionCapabilities.d.ts +0 -17
  316. package/vscode/src/vs/platform/agentHost/common/state/sessionCapabilities.js +0 -5
  317. package/vscode/src/vs/platform/agentHost/common/state/sessionProtocol.d.ts +0 -40
  318. package/vscode/src/vs/platform/agentHost/common/state/sessionProtocol.js +0 -14
  319. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +0 -61
  320. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +0 -638
  321. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.d.ts +0 -131
  322. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationItemSource.js +0 -363
  323. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.d.ts +0 -24
  324. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/promptsServiceCustomizationItemProvider.js +0 -306
  325. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -23
  326. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +0 -97
  327. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/media/chatStatusWidget.css +0 -57
  328. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +0 -50
  329. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +0 -29
  330. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +0 -50
  331. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +0 -78
  332. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +0 -77
  333. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +0 -120
  334. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +0 -10
  335. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +0 -23
  336. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +0 -242
  337. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +0 -1701
  338. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +0 -191
  339. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +0 -728
  340. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatHistoryService.d.ts +0 -14
  341. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatHistoryService.js +0 -69
@@ -4,10 +4,10 @@ import { splitGlobAware, parse, isEmptyPattern } from '@codingame/monaco-vscode-
4
4
  import { Iterable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/iterator';
5
5
  import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
6
6
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
7
- import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
8
7
  import { MarkerSeverity, MarkerTag } from '@codingame/monaco-vscode-api/vscode/vs/platform/markers/common/markers';
9
8
  import { ChatMode } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatModes';
10
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
11
  import { ChatModeKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
12
12
  import { ILanguageModelChatMetadata } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
13
13
  import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
@@ -16,16 +16,17 @@ import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/
16
16
  import { PromptsType, Target } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
17
17
  import { PromptHeaderAttributes, parseCommaSeparatedList } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptFileParser';
18
18
  import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
19
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
19
20
  import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
20
21
  import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
21
- import { LEGACY_MODE_FILE_EXTENSION, AGENTS_SOURCE_FOLDER, VALID_SKILL_NAME_REGEX, CLAUDE_AGENTS_SOURCE_FOLDER, isInClaudeRulesFolder } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
22
+ import { LEGACY_MODE_FILE_EXTENSION, AGENTS_SOURCE_FOLDER, VALID_SKILL_NAME_REGEX, isSkillFilename, CLAUDE_AGENTS_SOURCE_FOLDER, isInClaudeRulesFolder } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/promptFileLocations';
22
23
  import { Lazy } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lazy';
23
24
  import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
24
25
  import { dirname } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
25
26
  import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
26
27
  import { HOOKS_BY_TARGET } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookTypes';
27
- import { PromptsConfig } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/config/config';
28
28
  import { GithubPromptHeaderAttributes } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptFileAttributes';
29
+ import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
29
30
 
30
31
  const MARKERS_OWNER_ID = "prompts-diagnostics-provider";
31
32
  let PromptValidator = class PromptValidator {
@@ -36,6 +37,7 @@ let PromptValidator = class PromptValidator {
36
37
  fileService,
37
38
  labelService,
38
39
  promptsService,
40
+ logger,
39
41
  configurationService
40
42
  ) {
41
43
  this.languageModelsService = languageModelsService;
@@ -44,6 +46,7 @@ let PromptValidator = class PromptValidator {
44
46
  this.fileService = fileService;
45
47
  this.labelService = labelService;
46
48
  this.promptsService = promptsService;
49
+ this.logger = logger;
47
50
  this.configurationService = configurationService;
48
51
  }
49
52
  async validate(promptAST, promptType, report) {
@@ -61,13 +64,13 @@ let PromptValidator = class PromptValidator {
61
64
  const location = this.promptsService.getAgentFileURIFromModeFile(promptAST.uri);
62
65
  if (location && (await this.fileService.canCreateFile(location))) {
63
66
  report(toMarker(( localize(
64
- 7602,
67
+ 7917,
65
68
  "Chat modes have been renamed to agents. Please move this file to {0}",
66
69
  (location.toString())
67
70
  )), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
68
71
  } else {
69
72
  report(toMarker(( localize(
70
- 7603,
73
+ 7918,
71
74
  "Chat modes have been renamed to agents. Please move the file to {0}",
72
75
  AGENTS_SOURCE_FOLDER
73
76
  )), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
@@ -75,35 +78,28 @@ let PromptValidator = class PromptValidator {
75
78
  }
76
79
  }
77
80
  async validateSkillAttributes(promptAST, promptType, report) {
78
- if (promptType !== PromptsType.skill) {
81
+ if (promptType !== PromptsType.skill || !promptAST.header) {
79
82
  return;
80
83
  }
81
- const nameAttribute = promptAST.header?.attributes.find(attr => attr.key === PromptHeaderAttributes.name);
84
+ const nameAttribute = promptAST.header.getAttribute(PromptHeaderAttributes.name);
82
85
  if (!nameAttribute) {
83
- report(toMarker(( localize(7604, "Skill must provide a name.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Error));
84
- return;
85
- }
86
- const descriptionAttribute = promptAST.header?.attributes.find(attr => attr.key === PromptHeaderAttributes.description);
87
- if (!descriptionAttribute) {
88
- report(toMarker(( localize(7605, "Skill must provide a description.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Error));
89
- return;
90
- }
91
- if (nameAttribute.value.type === "scalar") {
86
+ report(toMarker(( localize(7919, "Skill should provide a name.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
87
+ } else if (nameAttribute.value.type === "scalar") {
92
88
  const skillName = nameAttribute.value.value.trim();
93
89
  if (skillName.length > 0) {
94
90
  if (!VALID_SKILL_NAME_REGEX.test(skillName)) {
95
91
  report(toMarker(( localize(
96
- 7606,
92
+ 7920,
97
93
  "Skill name may only contain lowercase letters, numbers, and hyphens."
98
94
  )), nameAttribute.value.range, MarkerSeverity.Error));
99
95
  }
100
96
  const pathParts = promptAST.uri.path.split("/");
101
- const skillIndex = pathParts.findIndex(part => part === "SKILL.md");
97
+ const skillIndex = pathParts.findIndex(part => isSkillFilename(part));
102
98
  if (skillIndex > 0) {
103
99
  const folderName = pathParts[skillIndex - 1];
104
100
  if (folderName && skillName !== folderName) {
105
101
  report(toMarker(( localize(
106
- 7607,
102
+ 7921,
107
103
  "The skill name '{0}' should match the folder name '{1}'.",
108
104
  skillName,
109
105
  folderName
@@ -112,6 +108,38 @@ let PromptValidator = class PromptValidator {
112
108
  }
113
109
  }
114
110
  }
111
+ const descriptionAttribute = promptAST.header.getAttribute(PromptHeaderAttributes.description);
112
+ if (!descriptionAttribute) {
113
+ report(toMarker(( localize(7922, "Skill should provide a description.")), ( new Range(1, 1, 1, 4)), MarkerSeverity.Warning));
114
+ if (promptAST.header.userInvocable === false) {
115
+ const userInvocableAttr = promptAST.header.getAttribute(PromptHeaderAttributes.userInvocable);
116
+ if (userInvocableAttr) {
117
+ report(toMarker(( localize(
118
+ 7923,
119
+ "A description is required when user-invocable is false, because the model needs a description to decide when to load the skill."
120
+ )), userInvocableAttr.value.range, MarkerSeverity.Error));
121
+ }
122
+ }
123
+ if (promptAST.header.disableModelInvocation === false) {
124
+ const disableModelInvocationAttr = promptAST.header.getAttribute(PromptHeaderAttributes.disableModelInvocation);
125
+ if (disableModelInvocationAttr) {
126
+ report(toMarker(( localize(
127
+ 7924,
128
+ "A description is required when model invocation is enabled, because the model needs a description to decide when to load the skill."
129
+ )), disableModelInvocationAttr.value.range, MarkerSeverity.Error));
130
+ }
131
+ }
132
+ }
133
+ const contextAttribute = promptAST.header?.getAttribute(PromptHeaderAttributes.context);
134
+ if (contextAttribute && contextAttribute.value.type === "scalar" && contextAttribute.value.value.trim() === "fork") {
135
+ const skillToolEnabled = this.configurationService.getValue("github.copilot.chat.skillTool.enabled");
136
+ if (!skillToolEnabled) {
137
+ report(toMarker(( localize(
138
+ 7925,
139
+ "The 'context: fork' attribute requires the skill tool to be enabled (github.copilot.chat.skillTool.enabled)."
140
+ )), contextAttribute.value.range, MarkerSeverity.Warning));
141
+ }
142
+ }
115
143
  }
116
144
  async validateBody(promptAST, target, report) {
117
145
  const body = promptAST.body;
@@ -122,19 +150,22 @@ let PromptValidator = class PromptValidator {
122
150
  for (const ref of body.fileReferences) {
123
151
  const resolved = body.resolveFilePath(ref.content);
124
152
  if (!resolved) {
125
- report(toMarker(( localize(7608, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
153
+ report(toMarker(( localize(7926, "Invalid file reference '{0}'.", ref.content)), ref.range, MarkerSeverity.Warning));
126
154
  continue;
127
155
  }
128
156
  if (promptAST.uri.scheme === resolved.scheme) {
129
157
  fileReferenceChecks.push((async () => {
130
158
  try {
131
159
  const exists = await this.fileService.exists(resolved);
132
- if (exists) {
133
- return;
160
+ if (!exists) {
161
+ const loc = this.labelService.getUriLabel(resolved);
162
+ report(toMarker(( localize(7927, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
134
163
  }
135
- } catch {}
136
- const loc = this.labelService.getUriLabel(resolved);
137
- report(toMarker(( localize(7609, "File '{0}' not found at '{1}'.", ref.content, loc)), ref.range, MarkerSeverity.Warning));
164
+ } catch (e) {
165
+ this.logger.warn(
166
+ `Error checking existence of file reference '${ref.content}' resolved to '${( resolved.toString())}' in prompt file '${( promptAST.uri.toString())}': ${e.message}`
167
+ );
168
+ }
138
169
  })());
139
170
  }
140
171
  }
@@ -151,7 +182,7 @@ let PromptValidator = class PromptValidator {
151
182
  if (currentNames.size === 1) {
152
183
  const newName = Array.from(currentNames)[0];
153
184
  report(toMarker(( localize(
154
- 7610,
185
+ 7928,
155
186
  "Tool or toolset '{0}' has been renamed, use '{1}' instead.",
156
187
  variable.name,
157
188
  newName
@@ -159,7 +190,7 @@ let PromptValidator = class PromptValidator {
159
190
  } else {
160
191
  const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
161
192
  report(toMarker(( localize(
162
- 7611,
193
+ 7929,
163
194
  "Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
164
195
  variable.name,
165
196
  newNames
@@ -167,13 +198,13 @@ let PromptValidator = class PromptValidator {
167
198
  }
168
199
  }
169
200
  } else {
170
- report(toMarker(( localize(7612, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
201
+ report(toMarker(( localize(7930, "Unknown tool or toolset '{0}'.", variable.name)), variable.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
171
202
  }
172
203
  } else if (headerToolsMap) {
173
204
  const tool = this.languageModelToolsService.getToolByFullReferenceName(variable.name);
174
205
  if (tool && headerToolsMap.get(tool) === false) {
175
206
  report(toMarker(( localize(
176
- 7613,
207
+ 7931,
177
208
  "Tool or toolset '{0}' also needs to be enabled in the header.",
178
209
  variable.name
179
210
  )), variable.range, MarkerSeverity.Warning));
@@ -216,9 +247,7 @@ let PromptValidator = class PromptValidator {
216
247
  this.validateUserInvocable(attributes, report);
217
248
  this.validateDisableModelInvocation(attributes, report);
218
249
  this.validateTools(attributes, ChatModeKind.Agent, target, report);
219
- if (this.configurationService.getValue(PromptsConfig.USE_CUSTOM_AGENT_HOOKS)) {
220
- this.validateHooks(attributes, target, report);
221
- }
250
+ this.validateHooks(attributes, target, report);
222
251
  if (isVSCodeOrDefaultTarget(target)) {
223
252
  this.validateModel(attributes, ChatModeKind.Agent, report);
224
253
  this.validateHandoffs(attributes, report);
@@ -238,25 +267,18 @@ let PromptValidator = class PromptValidator {
238
267
  }
239
268
  }
240
269
  checkForInvalidArguments(attributes, promptType, target, report) {
241
- let validAttributeNames = getValidAttributeNames(promptType, true, target);
242
- if (!this.configurationService.getValue(PromptsConfig.USE_CUSTOM_AGENT_HOOKS)) {
243
- validAttributeNames = validAttributeNames.filter(name => name !== PromptHeaderAttributes.hooks);
244
- }
245
- const useCustomAgentHooks = this.configurationService.getValue(PromptsConfig.USE_CUSTOM_AGENT_HOOKS);
270
+ const validAttributeNames = getValidAttributeNames(promptType, true, target);
246
271
  const validGithubCopilotAttributeNames = ( new Lazy(() => ( new Set(getValidAttributeNames(promptType, false, Target.GitHubCopilot)))));
247
272
  for (const attribute of attributes) {
248
273
  if (!validAttributeNames.includes(attribute.key)) {
249
274
  const supportedNames = ( new Lazy(() => {
250
- let names = getValidAttributeNames(promptType, false, target);
251
- if (!useCustomAgentHooks) {
252
- names = names.filter(name => name !== PromptHeaderAttributes.hooks);
253
- }
275
+ const names = getValidAttributeNames(promptType, false, target);
254
276
  return names.sort().join(", ");
255
277
  }));
256
278
  switch (promptType) {
257
279
  case PromptsType.prompt:
258
280
  report(toMarker(( localize(
259
- 7614,
281
+ 7932,
260
282
  "Attribute '{0}' is not supported in prompt files. Supported: {1}.",
261
283
  attribute.key,
262
284
  supportedNames.value
@@ -265,7 +287,7 @@ let PromptValidator = class PromptValidator {
265
287
  case PromptsType.agent:
266
288
  if (target === Target.GitHubCopilot) {
267
289
  report(toMarker(( localize(
268
- 7615,
290
+ 7933,
269
291
  "Attribute '{0}' is not supported in custom GitHub Copilot agent files. Supported: {1}.",
270
292
  attribute.key,
271
293
  supportedNames.value
@@ -274,13 +296,13 @@ let PromptValidator = class PromptValidator {
274
296
  ; else {
275
297
  if (( validGithubCopilotAttributeNames.value.has(attribute.key))) {
276
298
  report(toMarker(( localize(
277
- 7616,
299
+ 7934,
278
300
  "Attribute '{0}' is ignored when running locally in VS Code.",
279
301
  attribute.key
280
302
  )), attribute.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
281
303
  } else {
282
304
  report(toMarker(( localize(
283
- 7617,
305
+ 7935,
284
306
  "Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.",
285
307
  attribute.key,
286
308
  supportedNames.value
@@ -291,14 +313,14 @@ let PromptValidator = class PromptValidator {
291
313
  case PromptsType.instructions:
292
314
  if (target === Target.Claude) {
293
315
  report(toMarker(( localize(
294
- 7618,
316
+ 7936,
295
317
  "Attribute '{0}' is not supported in rules files by VS Code agents. Supported: {1}.",
296
318
  attribute.key,
297
319
  supportedNames.value
298
320
  )), attribute.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
299
321
  } else {
300
322
  report(toMarker(( localize(
301
- 7619,
323
+ 7937,
302
324
  "Attribute '{0}' is not supported in instructions files. Supported: {1}.",
303
325
  attribute.key,
304
326
  supportedNames.value
@@ -307,7 +329,7 @@ let PromptValidator = class PromptValidator {
307
329
  break;
308
330
  case PromptsType.skill:
309
331
  report(toMarker(( localize(
310
- 7620,
332
+ 7938,
311
333
  "Attribute '{0}' is not supported by VS Code agents. Supported: {1}.",
312
334
  attribute.key,
313
335
  supportedNames.value
@@ -323,11 +345,11 @@ let PromptValidator = class PromptValidator {
323
345
  return;
324
346
  }
325
347
  if (nameAttribute.value.type !== "scalar") {
326
- report(toMarker(( localize(7621, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
348
+ report(toMarker(( localize(7939, "The 'name' attribute must be a string.")), nameAttribute.range, MarkerSeverity.Error));
327
349
  return;
328
350
  }
329
351
  if (nameAttribute.value.value.trim().length === 0) {
330
- report(toMarker(( localize(7622, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
352
+ report(toMarker(( localize(7940, "The 'name' attribute must not be empty.")), nameAttribute.value.range, MarkerSeverity.Error));
331
353
  return;
332
354
  }
333
355
  }
@@ -337,11 +359,11 @@ let PromptValidator = class PromptValidator {
337
359
  return;
338
360
  }
339
361
  if (descriptionAttribute.value.type !== "scalar") {
340
- report(toMarker(( localize(7623, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
362
+ report(toMarker(( localize(7941, "The 'description' attribute must be a string.")), descriptionAttribute.range, MarkerSeverity.Error));
341
363
  return;
342
364
  }
343
365
  if (descriptionAttribute.value.value.trim().length === 0) {
344
- report(toMarker(( localize(7624, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
366
+ report(toMarker(( localize(7942, "The 'description' attribute should not be empty.")), descriptionAttribute.value.range, MarkerSeverity.Error));
345
367
  return;
346
368
  }
347
369
  }
@@ -351,11 +373,11 @@ let PromptValidator = class PromptValidator {
351
373
  return;
352
374
  }
353
375
  if (argumentHintAttribute.value.type !== "scalar") {
354
- report(toMarker(( localize(7625, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
376
+ report(toMarker(( localize(7943, "The 'argument-hint' attribute must be a string.")), argumentHintAttribute.range, MarkerSeverity.Error));
355
377
  return;
356
378
  }
357
379
  if (argumentHintAttribute.value.value.trim().length === 0) {
358
- report(toMarker(( localize(7626, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Warning));
380
+ report(toMarker(( localize(7944, "The 'argument-hint' attribute should not be empty.")), argumentHintAttribute.value.range, MarkerSeverity.Warning));
359
381
  return;
360
382
  }
361
383
  }
@@ -365,30 +387,30 @@ let PromptValidator = class PromptValidator {
365
387
  return;
366
388
  }
367
389
  if (attribute.value.type !== "scalar" && attribute.value.type !== "sequence") {
368
- report(toMarker(( localize(7627, "The 'model' attribute must be a string or an array of strings.")), attribute.value.range, MarkerSeverity.Error));
390
+ report(toMarker(( localize(7945, "The 'model' attribute must be a string or an array of strings.")), attribute.value.range, MarkerSeverity.Error));
369
391
  return;
370
392
  }
371
393
  const modelNames = [];
372
394
  if (attribute.value.type === "scalar") {
373
395
  const modelName = attribute.value.value.trim();
374
396
  if (modelName.length === 0) {
375
- report(toMarker(( localize(7628, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
397
+ report(toMarker(( localize(7946, "The 'model' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
376
398
  return;
377
399
  }
378
400
  modelNames.push([modelName, attribute.value.range]);
379
401
  } else if (attribute.value.type === "sequence") {
380
402
  if (attribute.value.items.length === 0) {
381
- report(toMarker(( localize(7629, "The 'model' array must not be empty.")), attribute.value.range, MarkerSeverity.Error));
403
+ report(toMarker(( localize(7947, "The 'model' array must not be empty.")), attribute.value.range, MarkerSeverity.Error));
382
404
  return;
383
405
  }
384
406
  for (const item of attribute.value.items) {
385
407
  if (item.type !== "scalar") {
386
- report(toMarker(( localize(7630, "The 'model' array must contain only strings.")), item.range, MarkerSeverity.Error));
408
+ report(toMarker(( localize(7948, "The 'model' array must contain only strings.")), item.range, MarkerSeverity.Error));
387
409
  return;
388
410
  }
389
411
  const modelName = item.value.trim();
390
412
  if (modelName.length === 0) {
391
- report(toMarker(( localize(7631, "Model names in the array must be non-empty strings.")), item.range, MarkerSeverity.Error));
413
+ report(toMarker(( localize(7949, "Model names in the array must be non-empty strings.")), item.range, MarkerSeverity.Error));
392
414
  return;
393
415
  }
394
416
  modelNames.push([modelName, item.range]);
@@ -401,9 +423,9 @@ let PromptValidator = class PromptValidator {
401
423
  for (const [modelName, range] of modelNames) {
402
424
  const modelMetadata = this.findModelByName(modelName);
403
425
  if (!modelMetadata) {
404
- report(toMarker(( localize(7632, "Unknown model '{0}' will be ignored.", modelName)), range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
426
+ report(toMarker(( localize(7950, "Unknown model '{0}' will be ignored.", modelName)), range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
405
427
  } else if (agentKind === ChatModeKind.Agent && !ILanguageModelChatMetadata.suitableForAgentMode(modelMetadata)) {
406
- report(toMarker(( localize(7633, "Model '{0}' is not suited for agent mode.", modelName)), range, MarkerSeverity.Warning));
428
+ report(toMarker(( localize(7951, "Model '{0}' is not suited for agent mode.", modelName)), range, MarkerSeverity.Warning));
407
429
  }
408
430
  }
409
431
  }
@@ -417,13 +439,13 @@ let PromptValidator = class PromptValidator {
417
439
  continue;
418
440
  }
419
441
  if (attribute.value.type !== "scalar") {
420
- report(toMarker(( localize(7634, "The '{0}' attribute must be a string.", claudeAttributeName)), attribute.value.range, MarkerSeverity.Error));
442
+ report(toMarker(( localize(7952, "The '{0}' attribute must be a string.", claudeAttributeName)), attribute.value.range, MarkerSeverity.Error));
421
443
  continue;
422
444
  } else {
423
445
  const modelName = attribute.value.value.trim();
424
446
  if (enumValues.every(model => model.name !== modelName)) {
425
447
  const validValues = ( enumValues.map(model => model.name)).join(", ");
426
- report(toMarker(( localize(7635, "Unknown value '{0}', valid: {1}.", modelName, validValues)), attribute.value.range, MarkerSeverity.Warning));
448
+ report(toMarker(( localize(7953, "Unknown value '{0}', valid: {1}.", modelName, validValues)), attribute.value.range, MarkerSeverity.Warning));
427
449
  }
428
450
  }
429
451
  }
@@ -442,12 +464,12 @@ let PromptValidator = class PromptValidator {
442
464
  if (modeAttribute) {
443
465
  if (agentAttribute) {
444
466
  report(toMarker(( localize(
445
- 7636,
467
+ 7954,
446
468
  "The 'mode' attribute has been deprecated. The 'agent' attribute is used instead."
447
469
  )), modeAttribute.range, MarkerSeverity.Warning, [MarkerTag.Deprecated]));
448
470
  } else {
449
471
  report(toMarker(( localize(
450
- 7637,
472
+ 7955,
451
473
  "The 'mode' attribute has been deprecated. Please rename it to 'agent'."
452
474
  )), modeAttribute.range, MarkerSeverity.Warning, [MarkerTag.Deprecated]));
453
475
  }
@@ -457,18 +479,18 @@ let PromptValidator = class PromptValidator {
457
479
  return undefined;
458
480
  }
459
481
  if (attribute.value.type !== "scalar") {
460
- report(toMarker(( localize(7638, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
482
+ report(toMarker(( localize(7956, "The '{0}' attribute must be a string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
461
483
  return undefined;
462
484
  }
463
485
  const agentValue = attribute.value.value;
464
486
  if (agentValue.trim().length === 0) {
465
- report(toMarker(( localize(7639, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
487
+ report(toMarker(( localize(7957, "The '{0}' attribute must be a non-empty string.", attribute.key)), attribute.value.range, MarkerSeverity.Error));
466
488
  return undefined;
467
489
  }
468
490
  return this.validateAgentValue(attribute.value, report);
469
491
  }
470
492
  validateAgentValue(value, report) {
471
- const agents = this.chatModeService.getModes();
493
+ const agents = this.chatModeService.getModes(localChatSessionType);
472
494
  const availableAgents = [];
473
495
  for (const agent of Iterable.concat(agents.builtin, agents.custom)) {
474
496
  if (agent.name.get() === value.value) {
@@ -477,7 +499,7 @@ let PromptValidator = class PromptValidator {
477
499
  availableAgents.push(agent.name.get());
478
500
  }
479
501
  const errorMessage = ( localize(
480
- 7640,
502
+ 7958,
481
503
  "Unknown agent '{0}'. Available agents: {1}.",
482
504
  value.value,
483
505
  availableAgents.join(", ")
@@ -492,7 +514,7 @@ let PromptValidator = class PromptValidator {
492
514
  }
493
515
  if (agentKind !== ChatModeKind.Agent) {
494
516
  report(toMarker(( localize(
495
- 7641,
517
+ 7959,
496
518
  "The 'tools' attribute is only supported when using agents. Attribute will be ignored."
497
519
  )), attribute.range, MarkerSeverity.Warning));
498
520
  }
@@ -502,7 +524,7 @@ let PromptValidator = class PromptValidator {
502
524
  }
503
525
  if (value.type !== "sequence") {
504
526
  report(toMarker(( localize(
505
- 7642,
527
+ 7960,
506
528
  "The 'tools' attribute must be an array or a comma separated string."
507
529
  )), attribute.value.range, MarkerSeverity.Error));
508
530
  return;
@@ -518,7 +540,7 @@ let PromptValidator = class PromptValidator {
518
540
  const deprecatedNames = this.languageModelToolsService.getDeprecatedFullReferenceNames();
519
541
  for (const item of valueItem.items) {
520
542
  if (item.type !== "scalar") {
521
- report(toMarker(( localize(7643, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
543
+ report(toMarker(( localize(7961, "Each tool name in the 'tools' attribute must be a string.")), item.range, MarkerSeverity.Error));
522
544
  } else if (item.value) {
523
545
  if (!( available.has(item.value))) {
524
546
  const currentNames = deprecatedNames.get(item.value);
@@ -526,7 +548,7 @@ let PromptValidator = class PromptValidator {
526
548
  if (currentNames?.size === 1) {
527
549
  const newName = Array.from(currentNames)[0];
528
550
  report(toMarker(( localize(
529
- 7644,
551
+ 7962,
530
552
  "Tool or toolset '{0}' has been renamed, use '{1}' instead.",
531
553
  item.value,
532
554
  newName
@@ -534,14 +556,14 @@ let PromptValidator = class PromptValidator {
534
556
  } else {
535
557
  const newNames = Array.from(currentNames).sort((a, b) => a.localeCompare(b)).join(", ");
536
558
  report(toMarker(( localize(
537
- 7645,
559
+ 7963,
538
560
  "Tool or toolset '{0}' has been renamed, use the following tools instead: {1}",
539
561
  item.value,
540
562
  newNames
541
563
  )), item.range, MarkerSeverity.Info, [MarkerTag.Deprecated]));
542
564
  }
543
565
  } else {
544
- report(toMarker(( localize(7646, "Unknown tool '{0}' will be ignored.", item.value)), item.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
566
+ report(toMarker(( localize(7964, "Unknown tool '{0}' will be ignored.", item.value)), item.range, MarkerSeverity.Hint, [MarkerTag.Unnecessary]));
545
567
  }
546
568
  }
547
569
  }
@@ -554,25 +576,25 @@ let PromptValidator = class PromptValidator {
554
576
  return;
555
577
  }
556
578
  if (attribute.value.type !== "scalar") {
557
- report(toMarker(( localize(7647, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
579
+ report(toMarker(( localize(7965, "The 'applyTo' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
558
580
  return;
559
581
  }
560
582
  const pattern = attribute.value.value;
561
583
  try {
562
584
  const patterns = splitGlobAware(pattern, ",");
563
585
  if (patterns.length === 0) {
564
- report(toMarker(( localize(7648, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
586
+ report(toMarker(( localize(7966, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
565
587
  return;
566
588
  }
567
589
  for (const pattern of patterns) {
568
590
  const globPattern = parse(pattern);
569
591
  if (isEmptyPattern(globPattern)) {
570
- report(toMarker(( localize(7648, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
592
+ report(toMarker(( localize(7966, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
571
593
  return;
572
594
  }
573
595
  }
574
596
  } catch (_error) {
575
- report(toMarker(( localize(7648, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
597
+ report(toMarker(( localize(7966, "The 'applyTo' attribute must be a valid glob pattern.")), attribute.value.range, MarkerSeverity.Error));
576
598
  }
577
599
  }
578
600
  validatePaths(attributes, report) {
@@ -581,26 +603,26 @@ let PromptValidator = class PromptValidator {
581
603
  return;
582
604
  }
583
605
  if (attribute.value.type !== "sequence") {
584
- report(toMarker(( localize(7649, "The 'paths' attribute must be an array of glob patterns.")), attribute.value.range, MarkerSeverity.Error));
606
+ report(toMarker(( localize(7967, "The 'paths' attribute must be an array of glob patterns.")), attribute.value.range, MarkerSeverity.Error));
585
607
  return;
586
608
  }
587
609
  for (const item of attribute.value.items) {
588
610
  if (item.type !== "scalar") {
589
- report(toMarker(( localize(7650, "Each entry in the 'paths' attribute must be a string.")), item.range, MarkerSeverity.Error));
611
+ report(toMarker(( localize(7968, "Each entry in the 'paths' attribute must be a string.")), item.range, MarkerSeverity.Error));
590
612
  continue;
591
613
  }
592
614
  const pattern = item.value.trim();
593
615
  if (pattern.length === 0) {
594
- report(toMarker(( localize(7651, "Path entries must be non-empty glob patterns.")), item.range, MarkerSeverity.Error));
616
+ report(toMarker(( localize(7969, "Path entries must be non-empty glob patterns.")), item.range, MarkerSeverity.Error));
595
617
  continue;
596
618
  }
597
619
  try {
598
620
  const globPattern = parse(pattern);
599
621
  if (isEmptyPattern(globPattern)) {
600
- report(toMarker(( localize(7652, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
622
+ report(toMarker(( localize(7970, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
601
623
  }
602
624
  } catch (_error) {
603
- report(toMarker(( localize(7652, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
625
+ report(toMarker(( localize(7970, "'{0}' is not a valid glob pattern.", pattern)), item.range, MarkerSeverity.Error));
604
626
  }
605
627
  }
606
628
  }
@@ -610,7 +632,7 @@ let PromptValidator = class PromptValidator {
610
632
  return;
611
633
  }
612
634
  if (attribute.value.type !== "sequence" && attribute.value.type !== "scalar") {
613
- report(toMarker(( localize(7653, "The 'excludeAgent' attribute must be an string or array.")), attribute.value.range, MarkerSeverity.Error));
635
+ report(toMarker(( localize(7971, "The 'excludeAgent' attribute must be an string or array.")), attribute.value.range, MarkerSeverity.Error));
614
636
  return;
615
637
  }
616
638
  }
@@ -621,7 +643,7 @@ let PromptValidator = class PromptValidator {
621
643
  }
622
644
  if (attribute.value.type !== "map") {
623
645
  report(toMarker(( localize(
624
- 7654,
646
+ 7972,
625
647
  "The 'hooks' attribute must be a map of hook event types to command arrays."
626
648
  )), attribute.value.range, MarkerSeverity.Error));
627
649
  return;
@@ -630,7 +652,7 @@ let PromptValidator = class PromptValidator {
630
652
  for (const prop of attribute.value.properties) {
631
653
  if (!( validHookNames.has(prop.key.value))) {
632
654
  report(toMarker(( localize(
633
- 7655,
655
+ 7973,
634
656
  "Unknown hook event type '{0}'. Supported: {1}.",
635
657
  prop.key.value,
636
658
  Array.from(validHookNames).join(", ")
@@ -638,7 +660,7 @@ let PromptValidator = class PromptValidator {
638
660
  }
639
661
  if (prop.value.type !== "sequence") {
640
662
  report(toMarker(( localize(
641
- 7656,
663
+ 7974,
642
664
  "Hook event '{0}' must have an array of command objects as its value.",
643
665
  prop.key.value
644
666
  )), prop.value.range, MarkerSeverity.Error));
@@ -651,19 +673,19 @@ let PromptValidator = class PromptValidator {
651
673
  }
652
674
  validateHookCommand(item, target, report) {
653
675
  if (item.type !== "map") {
654
- report(toMarker(( localize(7657, "Each hook command must be an object.")), item.range, MarkerSeverity.Error));
676
+ report(toMarker(( localize(7975, "Each hook command must be an object.")), item.range, MarkerSeverity.Error));
655
677
  return;
656
678
  }
657
679
  const hooksProperty = item.properties.find(p => p.key.value === "hooks");
658
680
  if (hooksProperty) {
659
681
  for (const prop of item.properties) {
660
682
  if (prop.key.value !== "hooks" && prop.key.value !== "matcher") {
661
- report(toMarker(( localize(7658, "Unknown property '{0}' in hook matcher.", prop.key.value)), prop.key.range, MarkerSeverity.Warning));
683
+ report(toMarker(( localize(7976, "Unknown property '{0}' in hook matcher.", prop.key.value)), prop.key.range, MarkerSeverity.Warning));
662
684
  }
663
685
  }
664
686
  if (hooksProperty.value.type !== "sequence") {
665
687
  report(toMarker(( localize(
666
- 7659,
688
+ 7977,
667
689
  "The 'hooks' property in a matcher must be an array of command objects."
668
690
  )), hooksProperty.value.range, MarkerSeverity.Error));
669
691
  return;
@@ -692,37 +714,37 @@ let PromptValidator = class PromptValidator {
692
714
  for (const prop of item.properties) {
693
715
  const key = prop.key.value;
694
716
  if (!( validProperties.has(key))) {
695
- report(toMarker(( localize(7660, "Unknown property '{0}' in hook command.", key)), prop.key.range, MarkerSeverity.Warning));
717
+ report(toMarker(( localize(7978, "Unknown property '{0}' in hook command.", key)), prop.key.range, MarkerSeverity.Warning));
696
718
  }
697
719
  if (key === "type") {
698
720
  hasType = true;
699
721
  if (prop.value.type !== "scalar" || prop.value.value !== "command") {
700
- report(toMarker(( localize(7661, "The 'type' property in a hook command must be 'command'.")), prop.value.range, MarkerSeverity.Error));
722
+ report(toMarker(( localize(7979, "The 'type' property in a hook command must be 'command'.")), prop.value.range, MarkerSeverity.Error));
701
723
  }
702
724
  } else if (( validCommandFields.has(key))) {
703
725
  hasCommandField = true;
704
726
  if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
705
727
  report(toMarker(( localize(
706
- 7662,
728
+ 7980,
707
729
  "The '{0}' property in a hook command must be a non-empty string.",
708
730
  key
709
731
  )), prop.value.range, MarkerSeverity.Error));
710
732
  }
711
733
  } else if (key === "cwd") {
712
734
  if (prop.value.type !== "scalar") {
713
- report(toMarker(( localize(7663, "The 'cwd' property in a hook command must be a string.")), prop.value.range, MarkerSeverity.Error));
735
+ report(toMarker(( localize(7981, "The 'cwd' property in a hook command must be a string.")), prop.value.range, MarkerSeverity.Error));
714
736
  }
715
737
  } else if (key === "env") {
716
738
  if (prop.value.type !== "map") {
717
739
  report(toMarker(( localize(
718
- 7664,
740
+ 7982,
719
741
  "The 'env' property in a hook command must be a map of string values."
720
742
  )), prop.value.range, MarkerSeverity.Error));
721
743
  } else {
722
744
  for (const envProp of prop.value.properties) {
723
745
  if (envProp.value.type !== "scalar") {
724
746
  report(toMarker(( localize(
725
- 7665,
747
+ 7983,
726
748
  "Environment variable '{0}' must have a string value.",
727
749
  envProp.key.value
728
750
  )), envProp.value.range, MarkerSeverity.Error));
@@ -731,19 +753,19 @@ let PromptValidator = class PromptValidator {
731
753
  }
732
754
  } else if (key === "timeout" || key === "timeoutSec") {
733
755
  if (prop.value.type !== "scalar" || isNaN(Number(prop.value.value))) {
734
- report(toMarker(( localize(7666, "The '{0}' property in a hook command must be a number.", key)), prop.value.range, MarkerSeverity.Error));
756
+ report(toMarker(( localize(7984, "The '{0}' property in a hook command must be a number.", key)), prop.value.range, MarkerSeverity.Error));
735
757
  }
736
758
  }
737
759
  }
738
760
  if (!hasType) {
739
- report(toMarker(( localize(7667, "Hook command is missing required property 'type'.")), item.range, MarkerSeverity.Error));
761
+ report(toMarker(( localize(7985, "Hook command is missing required property 'type'.")), item.range, MarkerSeverity.Error));
740
762
  }
741
763
  if (!hasCommandField) {
742
764
  if (isCopilotCli) {
743
- report(toMarker(( localize(7668, "Hook command must specify at least one of 'bash' or 'powershell'.")), item.range, MarkerSeverity.Error));
765
+ report(toMarker(( localize(7986, "Hook command must specify at least one of 'bash' or 'powershell'.")), item.range, MarkerSeverity.Error));
744
766
  } else {
745
767
  report(toMarker(( localize(
746
- 7669,
768
+ 7987,
747
769
  "Hook command must specify at least one of 'command', 'windows', 'linux', or 'osx'."
748
770
  )), item.range, MarkerSeverity.Error));
749
771
  }
@@ -755,14 +777,14 @@ let PromptValidator = class PromptValidator {
755
777
  return;
756
778
  }
757
779
  if (attribute.value.type !== "sequence") {
758
- report(toMarker(( localize(7670, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
780
+ report(toMarker(( localize(7988, "The 'handoffs' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
759
781
  return;
760
782
  }
761
783
  const seenLabels = ( new Map());
762
784
  for (const item of attribute.value.items) {
763
785
  if (item.type !== "map") {
764
786
  report(toMarker(( localize(
765
- 7671,
787
+ 7989,
766
788
  "Each handoff in the 'handoffs' attribute must be an object with 'label', 'agent', 'prompt' and optional 'send'."
767
789
  )), item.range, MarkerSeverity.Error));
768
790
  continue;
@@ -772,44 +794,44 @@ let PromptValidator = class PromptValidator {
772
794
  switch (prop.key.value) {
773
795
  case "label":
774
796
  if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
775
- report(toMarker(( localize(7672, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
797
+ report(toMarker(( localize(7990, "The 'label' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
776
798
  } else if (!/[a-zA-Z0-9]/.test(prop.value.value)) {
777
799
  report(toMarker(( localize(
778
- 7673,
800
+ 7991,
779
801
  "The 'label' property in a handoff must contain at least one alphanumeric character."
780
802
  )), prop.value.range, MarkerSeverity.Error));
781
803
  }
782
804
  break;
783
805
  case "agent":
784
806
  if (prop.value.type !== "scalar" || prop.value.value.trim().length === 0) {
785
- report(toMarker(( localize(7674, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
807
+ report(toMarker(( localize(7992, "The 'agent' property in a handoff must be a non-empty string.")), prop.value.range, MarkerSeverity.Error));
786
808
  } else {
787
809
  this.validateAgentValue(prop.value, report);
788
810
  }
789
811
  break;
790
812
  case "prompt":
791
813
  if (prop.value.type !== "scalar") {
792
- report(toMarker(( localize(7675, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
814
+ report(toMarker(( localize(7993, "The 'prompt' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
793
815
  }
794
816
  break;
795
817
  case "send":
796
818
  if (!isTrueOrFalse(prop.value)) {
797
- report(toMarker(( localize(7676, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
819
+ report(toMarker(( localize(7994, "The 'send' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
798
820
  }
799
821
  break;
800
822
  case "showContinueOn":
801
823
  if (!isTrueOrFalse(prop.value)) {
802
- report(toMarker(( localize(7677, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
824
+ report(toMarker(( localize(7995, "The 'showContinueOn' property in a handoff must be a boolean.")), prop.value.range, MarkerSeverity.Error));
803
825
  }
804
826
  break;
805
827
  case "model":
806
828
  if (prop.value.type !== "scalar") {
807
- report(toMarker(( localize(7678, "The 'model' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
829
+ report(toMarker(( localize(7996, "The 'model' property in a handoff must be a string.")), prop.value.range, MarkerSeverity.Error));
808
830
  }
809
831
  break;
810
832
  default:
811
833
  report(toMarker(( localize(
812
- 7679,
834
+ 7997,
813
835
  "Unknown property '{0}' in handoff object. Supported properties are 'label', 'agent', 'prompt' and optional 'send', 'showContinueOn', 'model'.",
814
836
  prop.key.value
815
837
  )), prop.value.range, MarkerSeverity.Warning));
@@ -818,7 +840,7 @@ let PromptValidator = class PromptValidator {
818
840
  }
819
841
  if (required.size > 0) {
820
842
  report(toMarker(( localize(
821
- 7680,
843
+ 7998,
822
844
  "Missing required properties {0} in handoff object.",
823
845
  ( Array.from(required).map(s => `'${s}'`)).join(", ")
824
846
  )), item.range, MarkerSeverity.Error));
@@ -828,7 +850,7 @@ let PromptValidator = class PromptValidator {
828
850
  const normalizedLabel = labelProp.value.value.toLowerCase();
829
851
  if (normalizedLabel && ( seenLabels.has(normalizedLabel))) {
830
852
  report(toMarker(( localize(
831
- 7681,
853
+ 7999,
832
854
  "Duplicate handoff label '{0}'. Each handoff must have a unique label.",
833
855
  labelProp.value.value
834
856
  )), labelProp.value.range, MarkerSeverity.Error));
@@ -844,7 +866,7 @@ let PromptValidator = class PromptValidator {
844
866
  return;
845
867
  }
846
868
  report(toMarker(( localize(
847
- 7682,
869
+ 8000,
848
870
  "The 'infer' attribute is deprecated in favour of 'user-invocable' and 'disable-model-invocation'."
849
871
  )), attribute.value.range, MarkerSeverity.Error));
850
872
  }
@@ -854,18 +876,18 @@ let PromptValidator = class PromptValidator {
854
876
  return;
855
877
  }
856
878
  if (attribute.value.type !== "scalar") {
857
- report(toMarker(( localize(7683, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
879
+ report(toMarker(( localize(8001, "The 'target' attribute must be a string.")), attribute.value.range, MarkerSeverity.Error));
858
880
  return;
859
881
  }
860
882
  const targetValue = attribute.value.value.trim();
861
883
  if (targetValue.length === 0) {
862
- report(toMarker(( localize(7684, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
884
+ report(toMarker(( localize(8002, "The 'target' attribute must be a non-empty string.")), attribute.value.range, MarkerSeverity.Error));
863
885
  return;
864
886
  }
865
887
  const validTargets = ["github-copilot", "vscode"];
866
888
  if (!validTargets.includes(targetValue)) {
867
889
  report(toMarker(( localize(
868
- 7685,
890
+ 8003,
869
891
  "The 'target' attribute must be one of: {0}.",
870
892
  validTargets.join(", ")
871
893
  )), attribute.value.range, MarkerSeverity.Error));
@@ -877,7 +899,7 @@ let PromptValidator = class PromptValidator {
877
899
  return;
878
900
  }
879
901
  if (!isTrueOrFalse(attribute.value)) {
880
- report(toMarker(( localize(7686, "The 'user-invocable' attribute must be 'true' or 'false'.")), attribute.value.range, MarkerSeverity.Error));
902
+ report(toMarker(( localize(8004, "The 'user-invocable' attribute must be 'true' or 'false'.")), attribute.value.range, MarkerSeverity.Error));
881
903
  return;
882
904
  }
883
905
  }
@@ -888,7 +910,7 @@ let PromptValidator = class PromptValidator {
888
910
  }
889
911
  if (!isTrueOrFalse(attribute.value)) {
890
912
  report(toMarker(( localize(
891
- 7687,
913
+ 8005,
892
914
  "The 'disable-model-invocation' attribute must be 'true' or 'false'."
893
915
  )), attribute.value.range, MarkerSeverity.Error));
894
916
  return;
@@ -900,21 +922,21 @@ let PromptValidator = class PromptValidator {
900
922
  return;
901
923
  }
902
924
  if (attribute.value.type !== "sequence") {
903
- report(toMarker(( localize(7688, "The 'agents' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
925
+ report(toMarker(( localize(8006, "The 'agents' attribute must be an array.")), attribute.value.range, MarkerSeverity.Error));
904
926
  return;
905
927
  }
906
- const agents = await this.promptsService.getCustomAgents(CancellationToken.None);
928
+ const agents = (await this.promptsService.getCustomAgents(CancellationToken.None)).filter(a => a.enabled);
907
929
  const availableAgentNames = ( new Set(( agents.map(agent => agent.name))));
908
930
  availableAgentNames.add(ChatMode.Agent.name.get());
909
931
  const agentNames = [];
910
932
  for (const item of attribute.value.items) {
911
933
  if (item.type !== "scalar") {
912
- report(toMarker(( localize(7689, "Each agent name in the 'agents' attribute must be a string.")), item.range, MarkerSeverity.Error));
934
+ report(toMarker(( localize(8007, "Each agent name in the 'agents' attribute must be a string.")), item.range, MarkerSeverity.Error));
913
935
  } else if (item.value) {
914
936
  agentNames.push(item.value);
915
937
  if (item.value !== "*" && !( availableAgentNames.has(item.value))) {
916
938
  report(toMarker(( localize(
917
- 7690,
939
+ 8008,
918
940
  "Unknown agent '{0}' will be ignored. Available agents: {1}.",
919
941
  item.value,
920
942
  Array.from(availableAgentNames).join(", ")
@@ -926,7 +948,7 @@ let PromptValidator = class PromptValidator {
926
948
  const tools = header.tools;
927
949
  if (tools && !tools.includes(SpecedToolAliases.agent)) {
928
950
  report(toMarker(( localize(
929
- 7691,
951
+ 8009,
930
952
  "When 'agents' and 'tools' are specified, the 'agent' tool must be included in the 'tools' attribute."
931
953
  )), attribute.value.range, MarkerSeverity.Warning));
932
954
  }
@@ -938,20 +960,20 @@ let PromptValidator = class PromptValidator {
938
960
  return;
939
961
  }
940
962
  if (attribute.value.type !== "map") {
941
- report(toMarker(( localize(7692, "The 'github' attribute must be an object.")), attribute.value.range, MarkerSeverity.Error));
963
+ report(toMarker(( localize(8010, "The 'github' attribute must be an object.")), attribute.value.range, MarkerSeverity.Error));
942
964
  return;
943
965
  }
944
966
  for (const prop of attribute.value.properties) {
945
967
  if (prop.key.value !== "permissions") {
946
968
  report(toMarker(( localize(
947
- 7693,
969
+ 8011,
948
970
  "Unknown property '{0}' in 'github' object. Supported: 'permissions'.",
949
971
  prop.key.value
950
972
  )), prop.key.range, MarkerSeverity.Warning));
951
973
  continue;
952
974
  }
953
975
  if (prop.value.type !== "map") {
954
- report(toMarker(( localize(7694, "The 'permissions' property must be an object.")), prop.value.range, MarkerSeverity.Error));
976
+ report(toMarker(( localize(8012, "The 'permissions' property must be an object.")), prop.value.range, MarkerSeverity.Error));
955
977
  continue;
956
978
  }
957
979
  for (const permProp of prop.value.properties) {
@@ -960,7 +982,7 @@ let PromptValidator = class PromptValidator {
960
982
  if (!scopeInfo) {
961
983
  const validScopes = ( Object.keys(githubPermissionScopes)).sort().join(", ");
962
984
  report(toMarker(( localize(
963
- 7695,
985
+ 8013,
964
986
  "Unknown permission scope '{0}'. Valid scopes: {1}.",
965
987
  scope,
966
988
  validScopes
@@ -968,13 +990,13 @@ let PromptValidator = class PromptValidator {
968
990
  continue;
969
991
  }
970
992
  if (permProp.value.type !== "scalar") {
971
- report(toMarker(( localize(7696, "The permission value for '{0}' must be a string.", scope)), permProp.value.range, MarkerSeverity.Error));
993
+ report(toMarker(( localize(8014, "The permission value for '{0}' must be a string.", scope)), permProp.value.range, MarkerSeverity.Error));
972
994
  continue;
973
995
  }
974
996
  const value = permProp.value.value;
975
997
  if (!scopeInfo.allowedValues.includes(value)) {
976
998
  report(toMarker(( localize(
977
- 7697,
999
+ 8015,
978
1000
  "Invalid permission value '{0}' for scope '{1}'. Allowed values: {2}.",
979
1001
  value,
980
1002
  scope,
@@ -985,43 +1007,43 @@ let PromptValidator = class PromptValidator {
985
1007
  }
986
1008
  }
987
1009
  };
988
- PromptValidator = ( __decorate([( __param(0, ILanguageModelsService)), ( __param(1, ILanguageModelToolsService)), ( __param(2, IChatModeService)), ( __param(3, IFileService)), ( __param(4, ILabelService)), ( __param(5, IPromptsService)), ( __param(6, IConfigurationService))], PromptValidator));
1010
+ PromptValidator = ( __decorate([( __param(0, ILanguageModelsService)), ( __param(1, ILanguageModelToolsService)), ( __param(2, IChatModeService)), ( __param(3, IFileService)), ( __param(4, ILabelService)), ( __param(5, IPromptsService)), ( __param(6, ILogService)), ( __param(7, IConfigurationService))], PromptValidator));
989
1011
  const githubPermissionScopes = {
990
1012
  "actions": {
991
1013
  allowedValues: ["read", "write", "none"],
992
- description: ( localize(7698, "Access to GitHub Actions workflows and runs"))
1014
+ description: ( localize(8016, "Access to GitHub Actions workflows and runs"))
993
1015
  },
994
1016
  "checks": {
995
1017
  allowedValues: ["read", "none"],
996
- description: ( localize(7699, "Access to check runs and statuses"))
1018
+ description: ( localize(8017, "Access to check runs and statuses"))
997
1019
  },
998
1020
  "contents": {
999
1021
  allowedValues: ["read", "write", "none"],
1000
- description: ( localize(7700, "Access to repository contents (files, commits, branches)"))
1022
+ description: ( localize(8018, "Access to repository contents (files, commits, branches)"))
1001
1023
  },
1002
1024
  "discussions": {
1003
1025
  allowedValues: ["read", "write", "none"],
1004
- description: ( localize(7701, "Access to discussions"))
1026
+ description: ( localize(8019, "Access to discussions"))
1005
1027
  },
1006
1028
  "issues": {
1007
1029
  allowedValues: ["read", "write", "none"],
1008
- description: ( localize(7702, "Access to issues (read, create, update, comment)"))
1030
+ description: ( localize(8020, "Access to issues (read, create, update, comment)"))
1009
1031
  },
1010
1032
  "metadata": {
1011
1033
  allowedValues: ["read"],
1012
- description: ( localize(7703, "Repository metadata (always read-only)"))
1034
+ description: ( localize(8021, "Repository metadata (always read-only)"))
1013
1035
  },
1014
1036
  "pull-requests": {
1015
1037
  allowedValues: ["read", "write", "none"],
1016
- description: ( localize(7704, "Access to pull requests (read, create, update, review)"))
1038
+ description: ( localize(8022, "Access to pull requests (read, create, update, review)"))
1017
1039
  },
1018
1040
  "security-events": {
1019
1041
  allowedValues: ["read", "none"],
1020
- description: ( localize(7705, "Access to security-related events"))
1042
+ description: ( localize(8023, "Access to security-related events"))
1021
1043
  },
1022
1044
  "workflows": {
1023
1045
  allowedValues: ["write", "none"],
1024
- description: ( localize(7706, "Access to modify workflow files"))
1046
+ description: ( localize(8024, "Access to modify workflow files"))
1025
1047
  }
1026
1048
  };
1027
1049
  function isTrueOrFalse(value) {
@@ -1070,7 +1092,8 @@ const allAttributeNames = {
1070
1092
  PromptHeaderAttributes.metadata,
1071
1093
  PromptHeaderAttributes.argumentHint,
1072
1094
  PromptHeaderAttributes.userInvocable,
1073
- PromptHeaderAttributes.disableModelInvocation
1095
+ PromptHeaderAttributes.disableModelInvocation,
1096
+ PromptHeaderAttributes.context
1074
1097
  ],
1075
1098
  [PromptsType.hook]: []
1076
1099
  };
@@ -1108,103 +1131,103 @@ function isNonRecommendedAttribute(attributeName) {
1108
1131
  }
1109
1132
  const knownClaudeTools = [{
1110
1133
  name: "Bash",
1111
- description: ( localize(7707, "Execute shell commands")),
1134
+ description: ( localize(8025, "Execute shell commands")),
1112
1135
  toolEquivalent: [SpecedToolAliases.execute]
1113
1136
  }, {
1114
1137
  name: "Edit",
1115
- description: ( localize(7708, "Make targeted file edits")),
1138
+ description: ( localize(8026, "Make targeted file edits")),
1116
1139
  toolEquivalent: ["edit/editNotebook", "edit/editFiles"]
1117
1140
  }, {
1118
1141
  name: "Glob",
1119
- description: ( localize(7709, "Find files by pattern")),
1142
+ description: ( localize(8027, "Find files by pattern")),
1120
1143
  toolEquivalent: ["search/fileSearch"]
1121
1144
  }, {
1122
1145
  name: "Grep",
1123
- description: ( localize(7710, "Search file contents with regex")),
1146
+ description: ( localize(8028, "Search file contents with regex")),
1124
1147
  toolEquivalent: ["search/textSearch"]
1125
1148
  }, {
1126
1149
  name: "Read",
1127
- description: ( localize(7711, "Read file contents")),
1150
+ description: ( localize(8029, "Read file contents")),
1128
1151
  toolEquivalent: ["read/readFile", "read/getNotebookSummary"]
1129
1152
  }, {
1130
1153
  name: "Write",
1131
- description: ( localize(7712, "Create/overwrite files")),
1154
+ description: ( localize(8030, "Create/overwrite files")),
1132
1155
  toolEquivalent: ["edit/createDirectory", "edit/createFile", "edit/createJupyterNotebook"]
1133
1156
  }, {
1134
1157
  name: "WebFetch",
1135
- description: ( localize(7713, "Fetch URL content")),
1158
+ description: ( localize(8031, "Fetch URL content")),
1136
1159
  toolEquivalent: [SpecedToolAliases.web]
1137
1160
  }, {
1138
1161
  name: "WebSearch",
1139
- description: ( localize(7714, "Perform web searches")),
1162
+ description: ( localize(8032, "Perform web searches")),
1140
1163
  toolEquivalent: [SpecedToolAliases.web]
1141
1164
  }, {
1142
1165
  name: "Task",
1143
- description: ( localize(7715, "Run subagents for complex tasks")),
1166
+ description: ( localize(8033, "Run subagents for complex tasks")),
1144
1167
  toolEquivalent: [SpecedToolAliases.agent]
1145
1168
  }, {
1146
1169
  name: "Skill",
1147
- description: ( localize(7716, "Execute skills")),
1170
+ description: ( localize(8034, "Execute skills")),
1148
1171
  toolEquivalent: []
1149
1172
  }, {
1150
1173
  name: "LSP",
1151
- description: ( localize(7717, "Code intelligence (requires plugin)")),
1174
+ description: ( localize(8035, "Code intelligence (requires plugin)")),
1152
1175
  toolEquivalent: []
1153
1176
  }, {
1154
1177
  name: "NotebookEdit",
1155
- description: ( localize(7718, "Modify Jupyter notebooks")),
1178
+ description: ( localize(8036, "Modify Jupyter notebooks")),
1156
1179
  toolEquivalent: ["edit/editNotebook"]
1157
1180
  }, {
1158
1181
  name: "AskUserQuestion",
1159
- description: ( localize(7719, "Ask multiple-choice questions")),
1182
+ description: ( localize(8037, "Ask multiple-choice questions")),
1160
1183
  toolEquivalent: ["vscode/askQuestions"]
1161
1184
  }, {
1162
1185
  name: "MCPSearch",
1163
- description: ( localize(7720, "Searches for MCP tools when tool search is enabled")),
1186
+ description: ( localize(8038, "Searches for MCP tools when tool search is enabled")),
1164
1187
  toolEquivalent: []
1165
1188
  }];
1166
1189
  const knownClaudeModels = [{
1167
1190
  name: "sonnet",
1168
- description: ( localize(7721, "Latest Claude Sonnet")),
1191
+ description: ( localize(8039, "Latest Claude Sonnet")),
1169
1192
  modelEquivalent: "Claude Sonnet 4.5 (copilot)"
1170
1193
  }, {
1171
1194
  name: "opus",
1172
- description: ( localize(7722, "Latest Claude Opus")),
1195
+ description: ( localize(8040, "Latest Claude Opus")),
1173
1196
  modelEquivalent: "Claude Opus 4.6 (copilot)"
1174
1197
  }, {
1175
1198
  name: "haiku",
1176
- description: ( localize(7723, "Latest Claude Haiku, fast for simple tasks")),
1199
+ description: ( localize(8041, "Latest Claude Haiku, fast for simple tasks")),
1177
1200
  modelEquivalent: "Claude Haiku 4.5 (copilot)"
1178
1201
  }, {
1179
1202
  name: "inherit",
1180
- description: ( localize(7724, "Inherit model from parent agent or prompt")),
1203
+ description: ( localize(8042, "Inherit model from parent agent or prompt")),
1181
1204
  modelEquivalent: undefined
1182
1205
  }];
1183
1206
  const claudeAgentAttributes = {
1184
1207
  "name": {
1185
1208
  type: "scalar",
1186
- description: ( localize(7725, "Unique identifier using lowercase letters and hyphens (required)"))
1209
+ description: ( localize(8043, "Unique identifier using lowercase letters and hyphens (required)"))
1187
1210
  },
1188
1211
  "description": {
1189
1212
  type: "scalar",
1190
- description: ( localize(7726, "When to delegate to this subagent (required)"))
1213
+ description: ( localize(8044, "When to delegate to this subagent (required)"))
1191
1214
  },
1192
1215
  "tools": {
1193
1216
  type: "sequence",
1194
- description: ( localize(7727, "Array of tools the subagent can use. Inherits all tools if omitted")),
1217
+ description: ( localize(8045, "Array of tools the subagent can use. Inherits all tools if omitted")),
1195
1218
  defaults: ["Read, Edit, Bash"],
1196
1219
  items: knownClaudeTools
1197
1220
  },
1198
1221
  "disallowedTools": {
1199
1222
  type: "sequence",
1200
- description: ( localize(7728, "Tools to deny, removed from inherited or specified list")),
1223
+ description: ( localize(8046, "Tools to deny, removed from inherited or specified list")),
1201
1224
  defaults: ["Write, Edit, Bash"],
1202
1225
  items: knownClaudeTools
1203
1226
  },
1204
1227
  "model": {
1205
1228
  type: "scalar",
1206
1229
  description: ( localize(
1207
- 7729,
1230
+ 8047,
1208
1231
  "Model to use: sonnet, opus, haiku, or inherit. Defaults to inherit."
1209
1232
  )),
1210
1233
  defaults: ["sonnet", "opus", "haiku", "inherit"],
@@ -1213,77 +1236,77 @@ const claudeAgentAttributes = {
1213
1236
  "permissionMode": {
1214
1237
  type: "scalar",
1215
1238
  description: ( localize(
1216
- 7730,
1239
+ 8048,
1217
1240
  "Permission mode: default, acceptEdits, dontAsk, bypassPermissions, or plan."
1218
1241
  )),
1219
1242
  defaults: ["default", "acceptEdits", "dontAsk", "bypassPermissions", "plan"],
1220
1243
  enums: [{
1221
1244
  name: "default",
1222
1245
  description: ( localize(
1223
- 7731,
1246
+ 8049,
1224
1247
  "Standard behavior: prompts for permission on first use of each tool."
1225
1248
  ))
1226
1249
  }, {
1227
1250
  name: "acceptEdits",
1228
- description: ( localize(7732, "Automatically accepts file edit permissions for the session."))
1251
+ description: ( localize(8050, "Automatically accepts file edit permissions for the session."))
1229
1252
  }, {
1230
1253
  name: "plan",
1231
1254
  description: ( localize(
1232
- 7733,
1255
+ 8051,
1233
1256
  "Plan Mode: Claude can analyze but not modify files or execute commands."
1234
1257
  ))
1235
1258
  }, {
1236
1259
  name: "delegate",
1237
1260
  description: ( localize(
1238
- 7734,
1261
+ 8052,
1239
1262
  "Coordination-only mode for agent team leads. Only available when an agent team is active."
1240
1263
  ))
1241
1264
  }, {
1242
1265
  name: "dontAsk",
1243
1266
  description: ( localize(
1244
- 7735,
1267
+ 8053,
1245
1268
  "Auto-denies tools unless pre-approved via /permissions or permissions.allow rules."
1246
1269
  ))
1247
1270
  }, {
1248
1271
  name: "bypassPermissions",
1249
1272
  description: ( localize(
1250
- 7736,
1273
+ 8054,
1251
1274
  "Skips all permission prompts (requires safe environment like containers)."
1252
1275
  ))
1253
1276
  }]
1254
1277
  },
1255
1278
  "skills": {
1256
1279
  type: "sequence",
1257
- description: ( localize(7737, "Skills to load into the subagent's context at startup."))
1280
+ description: ( localize(8055, "Skills to load into the subagent's context at startup."))
1258
1281
  },
1259
1282
  "mcpServers": {
1260
1283
  type: "sequence",
1261
- description: ( localize(7738, "MCP servers available to this subagent."))
1284
+ description: ( localize(8056, "MCP servers available to this subagent."))
1262
1285
  },
1263
1286
  "hooks": {
1264
1287
  type: "object",
1265
- description: ( localize(7739, "Lifecycle hooks scoped to this subagent."))
1288
+ description: ( localize(8057, "Lifecycle hooks scoped to this subagent."))
1266
1289
  },
1267
1290
  "memory": {
1268
1291
  type: "scalar",
1269
1292
  description: ( localize(
1270
- 7740,
1293
+ 8058,
1271
1294
  "Persistent memory scope: user, project, or local. Enables cross-session learning."
1272
1295
  )),
1273
1296
  defaults: ["user", "project", "local"],
1274
1297
  enums: [{
1275
1298
  name: "user",
1276
- description: ( localize(7741, "Remember learnings across all projects."))
1299
+ description: ( localize(8059, "Remember learnings across all projects."))
1277
1300
  }, {
1278
1301
  name: "project",
1279
1302
  description: ( localize(
1280
- 7742,
1303
+ 8060,
1281
1304
  "The subagent's knowledge is project-specific and shareable via version control."
1282
1305
  ))
1283
1306
  }, {
1284
1307
  name: "local",
1285
1308
  description: ( localize(
1286
- 7743,
1309
+ 8061,
1287
1310
  "The subagent's knowledge is project-specific but should not be checked into version control."
1288
1311
  ))
1289
1312
  }]
@@ -1293,14 +1316,14 @@ const claudeRulesAttributes = {
1293
1316
  "description": {
1294
1317
  type: "scalar",
1295
1318
  description: ( localize(
1296
- 7744,
1319
+ 8062,
1297
1320
  "A description of what this rule covers, used to provide context about when it applies."
1298
1321
  ))
1299
1322
  },
1300
1323
  "paths": {
1301
1324
  type: "sequence",
1302
1325
  description: ( localize(
1303
- 7745,
1326
+ 8063,
1304
1327
  "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/**']`"
1305
1328
  ))
1306
1329
  }