@codingame/monaco-vscode-chat-service-override 32.0.0 → 32.0.1

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