@codingame/monaco-vscode-chat-service-override 26.2.2 → 28.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 (356) hide show
  1. package/index.js +35 -2
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +15 -0
  4. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.d.ts +53 -0
  5. package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.js +219 -0
  6. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.d.ts +89 -0
  7. package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +251 -0
  8. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +123 -0
  9. package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +278 -0
  10. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +76 -0
  11. package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +299 -0
  12. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.d.ts +67 -0
  13. package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.js +263 -0
  14. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +85 -0
  15. package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +397 -0
  16. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -2
  17. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +27 -40
  18. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +9 -3
  19. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +74 -18
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +1 -0
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +54 -8
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +87 -53
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +71 -15
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +43 -21
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +13 -5
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +22 -3
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +1 -0
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +154 -0
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -8
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +53 -43
  35. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.d.ts +4 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +85 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +8 -0
  38. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +33 -0
  39. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
  40. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +18 -32
  41. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
  42. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +13 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -17
  44. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +49 -13
  45. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.d.ts +58 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +537 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.d.ts +17 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +55 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +26 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.js +9 -0
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/media/agentPluginEditor.css +32 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +48 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +282 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +55 -0
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +634 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +10 -11
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +74 -67
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +7 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +27 -18
  61. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.d.ts +1 -0
  62. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +4 -2
  63. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +5 -5
  65. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +2 -0
  66. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +90 -51
  67. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +20 -5
  68. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +3 -1
  69. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +43 -27
  70. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +7 -2
  71. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +3 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +84 -22
  73. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
  74. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.d.ts → localAgentSessionsController.d.ts} +7 -4
  75. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.js → localAgentSessionsController.js} +24 -17
  76. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +23 -0
  77. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +171 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +52 -0
  79. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +20 -0
  80. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +179 -0
  81. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +987 -0
  82. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.d.ts +1 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +246 -0
  84. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +56 -0
  85. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +26 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +130 -0
  87. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +878 -0
  88. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +22 -0
  89. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +38 -0
  90. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +1 -0
  91. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +83 -0
  92. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +45 -0
  93. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +165 -0
  94. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +75 -0
  95. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +692 -0
  96. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +936 -0
  97. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +62 -0
  98. package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +702 -0
  99. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +2 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +30 -1
  101. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.d.ts +32 -0
  102. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.js +26 -0
  103. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +36 -26
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +622 -391
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +18 -0
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +419 -0
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.d.ts +12 -0
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.js +46 -0
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +34 -0
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +198 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +55 -0
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +314 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.d.ts +23 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +64 -0
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +5 -0
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +84 -0
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +27 -0
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +110 -0
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.d.ts +46 -0
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +170 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.d.ts +71 -0
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +611 -0
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +125 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +504 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.d.ts +10 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +914 -0
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.d.ts +19 -0
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +128 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +61 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +467 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +31 -0
  132. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +113 -0
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +14 -0
  134. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +126 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +38 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +279 -0
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +18 -0
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +122 -0
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.d.ts +47 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +85 -0
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +788 -0
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +2 -5
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +32 -36
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +6 -24
  146. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
  147. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
  148. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
  149. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
  150. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +3 -3
  151. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +2 -1
  152. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +2 -2
  153. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
  154. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +12 -12
  155. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  156. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +16 -15
  157. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
  158. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
  159. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +63 -76
  160. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +26 -15
  161. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatManagementEditor.css +2 -2
  162. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
  163. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
  164. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +24 -7
  165. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +40 -413
  166. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +10 -0
  167. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +38 -6
  168. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +5 -1
  169. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +56 -46
  170. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +15 -11
  171. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +52 -0
  172. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +138 -0
  173. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +11 -1
  174. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +166 -41
  175. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +6 -0
  176. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +37 -23
  177. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +17 -0
  178. package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +394 -0
  179. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  180. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +118 -63
  181. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
  182. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +28 -0
  183. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.d.ts +66 -0
  184. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +245 -0
  185. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.d.ts +78 -0
  186. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.js +234 -0
  187. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +88 -14
  188. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +624 -68
  189. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.d.ts +41 -0
  190. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.js +22 -0
  191. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -0
  192. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +88 -24
  193. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +28 -19
  194. package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.d.ts +14 -0
  195. package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.js +62 -0
  196. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.d.ts +36 -0
  197. package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +110 -0
  198. package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.d.ts +10 -0
  199. package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.js +39 -0
  200. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +3 -3
  201. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +6 -6
  202. package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.d.ts +10 -0
  203. package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.js +39 -0
  204. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +26 -0
  205. package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +175 -0
  206. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.d.ts +99 -0
  207. package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +489 -0
  208. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
  209. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +19 -1
  210. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +364 -279
  211. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.d.ts +18 -1
  212. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +69 -6
  213. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  214. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +9 -9
  215. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  216. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.d.ts +4 -0
  217. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
  218. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
  219. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  220. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +4 -4
  221. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.d.ts +22 -0
  222. package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +76 -0
  223. package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.d.ts +5 -0
  224. package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.js +30 -0
  225. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.d.ts +2 -0
  226. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +67 -38
  227. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +20 -1
  228. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +187 -74
  229. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +31 -0
  230. package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +242 -0
  231. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.d.ts +34 -0
  232. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +45 -0
  233. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
  234. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +33 -0
  235. package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +311 -0
  236. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  237. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.d.ts +4 -0
  238. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +10 -1
  239. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.d.ts +2 -0
  240. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +29 -14
  241. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +8 -9
  242. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +126 -30
  243. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +9 -5
  244. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
  245. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +2 -2
  246. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.d.ts +15 -4
  247. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +46 -9
  248. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +8 -1
  249. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +65 -37
  250. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +6 -5
  251. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -20
  252. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +15 -6
  253. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +40 -0
  254. package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +28 -0
  255. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +190 -0
  256. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +11 -0
  257. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +44 -0
  258. package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +208 -0
  259. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +19 -9
  260. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +261 -105
  261. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +21 -2
  262. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +7 -2
  263. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -6
  264. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +16 -8
  265. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +13 -4
  266. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +144 -11
  267. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +36 -3
  268. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +5 -3
  269. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +2 -2
  270. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +57 -0
  271. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +29 -0
  272. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +119 -0
  273. package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +748 -0
  274. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +146 -0
  275. package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +672 -0
  276. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
  277. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +3 -16
  278. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +7 -50
  279. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +2 -1
  280. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +2 -2
  281. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +1 -6
  282. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +4 -8
  283. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -2
  284. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +10 -9
  285. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +1 -1
  286. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +26 -1
  287. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +293 -94
  288. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.d.ts +10 -1
  289. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +86 -30
  290. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +121 -0
  291. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +1422 -0
  292. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
  293. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +48 -14
  294. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +404 -132
  295. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +17 -2
  296. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +40 -28
  297. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +3 -0
  298. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +13 -0
  299. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  300. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.d.ts +14 -2
  301. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +54 -5
  302. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +12 -5
  303. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +27 -4
  304. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +265 -25
  305. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +6 -11
  306. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +18 -81
  307. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +2 -3
  308. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +10 -10
  309. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
  310. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
  311. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
  312. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +6 -6
  313. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
  314. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  315. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +6 -2
  316. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  317. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +35 -26
  318. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +0 -1
  319. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +1 -5
  320. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +3 -3
  321. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
  322. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +4 -1
  323. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +13 -11
  324. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
  325. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +3 -1
  326. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
  327. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
  328. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
  329. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
  330. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
  331. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
  332. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
  333. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
  334. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +17 -0
  335. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +302 -69
  336. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +3 -1
  337. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +8 -0
  338. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -10
  339. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +7 -0
  340. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +63 -21
  341. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +8 -0
  342. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +31 -0
  343. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
  344. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
  345. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
  346. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  347. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +7 -1
  348. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +46 -17
  349. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +0 -72
  350. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +0 -587
  351. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.d.ts +0 -12
  352. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +0 -51
  353. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +0 -71
  354. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +0 -293
  355. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +0 -2
  356. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.js +0 -31
@@ -14,17 +14,18 @@ import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codi
14
14
  import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
15
15
  import { PromptsStorage } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService';
16
16
  import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
17
- import { PromptsType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
17
+ import { Target, PromptsType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
18
18
  import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
19
19
  import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
20
20
  import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
21
- import { getEffectiveCommandFieldKey, HOOK_TYPES } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
21
+ import { HOOKS_BY_TARGET, HOOK_METADATA } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookTypes';
22
+ import { formatHookCommandLabel, getEffectiveCommandFieldKey } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/hookSchema';
22
23
  import { resolveCopilotCliHookType, getCopilotCliHookTypeName } from '../../common/promptSyntax/hookCopilotCliCompat.js';
23
24
  import { getHookSourceFormat, HookSourceFormat, buildNewHookEntry } from '../../common/promptSyntax/hookCompatibility.js';
24
25
  import { getClaudeHookTypeName, resolveClaudeHookType } from '../../common/promptSyntax/hookClaudeCompat.js';
25
26
  import { ILabelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service';
26
27
  import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
27
- import { findHookCommandSelection, parseAllHookFiles } from './hookUtils.js';
28
+ import { findHookCommandSelection, parseAllHookFiles, findHookCommandInYaml } from './hookUtils.js';
28
29
  import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
29
30
  import { IPathService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/path/common/pathService.service';
30
31
  import { INotificationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/notification/common/notification.service';
@@ -33,7 +34,7 @@ import { IBulkEditService } from '@codingame/monaco-vscode-api/vscode/vs/editor/
33
34
  import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
34
35
  import { getCodeEditor } from '@codingame/monaco-vscode-api/vscode/vs/editor/browser/editorBrowser';
35
36
  import { IRemoteAgentService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/remote/common/remoteAgentService.service';
36
- import { OS } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
37
+ import { OS, OperatingSystem } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
37
38
 
38
39
  const CONFIGURE_HOOKS_ACTION_ID = "workbench.action.chat.configure.hooks";
39
40
  function usesCopilotCliNaming(hooksObj) {
@@ -59,7 +60,8 @@ async function addHookToFile(
59
60
  fileService,
60
61
  editorService,
61
62
  notificationService,
62
- bulkEditService
63
+ bulkEditService,
64
+ openEditorOverride
63
65
  ) {
64
66
  let hooksContent;
65
67
  const fileExists = await fileService.exists(hookFileUri);
@@ -72,7 +74,7 @@ async function addHookToFile(
72
74
  }
73
75
  } catch {
74
76
  notificationService.error(( localize(
75
- 5696,
77
+ 6273,
76
78
  "Failed to parse existing hooks file. Please fix the JSON syntax errors and try again."
77
79
  )));
78
80
  await editorService.openEditor({
@@ -155,7 +157,7 @@ async function addHookToFile(
155
157
  range: ( new Range(1, 1, Number.MAX_SAFE_INTEGER, 1)),
156
158
  text: jsonContent
157
159
  }))], {
158
- label: ( localize(5697, "Add Hook"))
160
+ label: ( localize(6274, "Add Hook"))
159
161
  });
160
162
  const selection = findHookCommandSelection(jsonContent, keyToUse, newHookIndex, "command");
161
163
  await editorService.openEditor({
@@ -180,17 +182,23 @@ async function addHookToFile(
180
182
  range: ( new Range(1, 1, Number.MAX_SAFE_INTEGER, 1)),
181
183
  text: jsonContent
182
184
  }))], {
183
- label: ( localize(5697, "Add Hook"))
185
+ label: ( localize(6274, "Add Hook"))
184
186
  });
185
187
  }
186
188
  const selection = findHookCommandSelection(jsonContent, keyToUse, newHookIndex, "command");
187
- await editorService.openEditor({
188
- resource: hookFileUri,
189
- options: {
190
- selection,
191
- pinned: false
192
- }
193
- });
189
+ if (openEditorOverride) {
190
+ await openEditorOverride(hookFileUri, {
191
+ selection
192
+ });
193
+ } else {
194
+ await editorService.openEditor({
195
+ resource: hookFileUri,
196
+ options: {
197
+ selection,
198
+ pinned: false
199
+ }
200
+ });
201
+ }
194
202
  }
195
203
  }
196
204
  function awaitPick(picker, backButton) {
@@ -225,7 +233,7 @@ var Step;
225
233
  Step[Step["SelectFolder"] = 4] = "SelectFolder";
226
234
  Step[Step["EnterFilename"] = 5] = "EnterFilename";
227
235
  })(Step || (Step = {}));
228
- async function showConfigureHooksQuickPick(accessor) {
236
+ async function showConfigureHooksQuickPick(accessor, options) {
229
237
  const promptsService = accessor.get(IPromptsService);
230
238
  const quickInputService = accessor.get(IQuickInputService);
231
239
  const fileService = accessor.get(IFileService);
@@ -249,7 +257,9 @@ async function showConfigureHooksQuickPick(accessor) {
249
257
  workspaceRootUri,
250
258
  userHome,
251
259
  targetOS,
252
- CancellationToken.None
260
+ CancellationToken.None,
261
+ {
262
+ }
253
263
  );
254
264
  const hookCountByType = ( new Map());
255
265
  for (const entry of hookEntries) {
@@ -260,12 +270,6 @@ async function showConfigureHooksQuickPick(accessor) {
260
270
  useSeparators: true
261
271
  }));
262
272
  const backButton = quickInputService.backButton;
263
- let suppressHideDispose = false;
264
- store.add(picker.onDidHide(() => {
265
- if (!suppressHideDispose) {
266
- store.dispose();
267
- }
268
- }));
269
273
  picker.show();
270
274
  let step = Step.SelectHookType;
271
275
  let selectedHookType;
@@ -274,300 +278,381 @@ async function showConfigureHooksQuickPick(accessor) {
274
278
  let selectedFolder;
275
279
  const stepHistory = [];
276
280
  const goBack = () => stepHistory.pop();
277
- while (true) {
278
- switch (step) {
279
- case Step.SelectHookType:
280
- {
281
- const hookTypeItems = ( HOOK_TYPES.map(hookType => {
282
- const count = hookCountByType.get(hookType.id) ?? 0;
283
- const countLabel = count > 0 ? ` (${count})` : "";
284
- return {
285
- label: `${hookType.label}${countLabel}`,
286
- description: hookType.description,
287
- hookType
281
+ try {
282
+ while (true) {
283
+ switch (step) {
284
+ case Step.SelectHookType:
285
+ {
286
+ const makeItem = ([hookType, meta]) => {
287
+ const count = hookCountByType.get(hookType) ?? 0;
288
+ const countLabel = count > 0 ? ` (${count})` : "";
289
+ return {
290
+ label: `${meta.label}${countLabel}`,
291
+ description: meta.description,
292
+ hookType,
293
+ hookTypeMeta: meta
294
+ };
288
295
  };
289
- }));
290
- picker.items = hookTypeItems;
291
- picker.value = "";
292
- picker.placeholder = ( localize(5698, "Select a lifecycle event"));
293
- picker.title = ( localize(5699, "Hooks"));
294
- picker.buttons = [];
295
- const result = await awaitPick(picker, backButton);
296
- if (!result || result === "back") {
297
- picker.hide();
298
- return;
296
+ let pickerItems;
297
+ if (options?.target) {
298
+ const targetHookTypes = ( new Set(( Object.values(HOOKS_BY_TARGET[options.target]))));
299
+ pickerItems = ( Object.entries(HOOK_METADATA).filter(([hookType]) => ( targetHookTypes.has(hookType))).map(makeItem));
300
+ } else {
301
+ const vscodeTypes = ( new Set(( Object.values(HOOKS_BY_TARGET[Target.VSCode]))));
302
+ const copilotTypes = ( new Set(( Object.values(HOOKS_BY_TARGET[Target.GitHubCopilot]))));
303
+ const allEntries = Object.entries(HOOK_METADATA);
304
+ const shared = allEntries.filter(([h]) => ( vscodeTypes.has(h)) && ( copilotTypes.has(h)));
305
+ const vscodeOnly = allEntries.filter(([h]) => ( vscodeTypes.has(h)) && !( copilotTypes.has(h)));
306
+ const copilotOnly = allEntries.filter(([h]) => !( vscodeTypes.has(h)) && ( copilotTypes.has(h)));
307
+ pickerItems = [];
308
+ if (shared.length > 0) {
309
+ pickerItems.push({
310
+ type: "separator",
311
+ label: ( localize(6275, "Local/Copilot CLI Agents"))
312
+ });
313
+ pickerItems.push(...( shared.map(makeItem)));
314
+ }
315
+ if (vscodeOnly.length > 0) {
316
+ pickerItems.push({
317
+ type: "separator",
318
+ label: ( localize(6276, "Local Agents"))
319
+ });
320
+ pickerItems.push(...( vscodeOnly.map(makeItem)));
321
+ }
322
+ if (copilotOnly.length > 0) {
323
+ pickerItems.push({
324
+ type: "separator",
325
+ label: ( localize(6277, "Copilot CLI Agents"))
326
+ });
327
+ pickerItems.push(...( copilotOnly.map(makeItem)));
328
+ }
329
+ }
330
+ picker.items = pickerItems;
331
+ picker.value = "";
332
+ picker.placeholder = ( localize(6278, "Select a lifecycle event"));
333
+ picker.title = ( localize(6279, "Hooks"));
334
+ picker.buttons = [];
335
+ const result = await awaitPick(picker, backButton);
336
+ if (!result || result === "back") {
337
+ return;
338
+ }
339
+ selectedHookType = result;
340
+ stepHistory.push(Step.SelectHookType);
341
+ step = Step.SelectHook;
342
+ break;
299
343
  }
300
- selectedHookType = result;
301
- stepHistory.push(Step.SelectHookType);
302
- step = Step.SelectHook;
303
- break;
304
- }
305
- case Step.SelectHook:
306
- {
307
- const hooksOfType = hookEntries.filter(h => h.hookType === selectedHookType.hookType.id);
308
- const hookItems = [];
309
- hookItems.push({
310
- label: `$(plus) ${( localize(5700, "Add new hook..."))}`,
311
- isAddNewHook: true,
312
- alwaysShow: true
313
- });
314
- if (hooksOfType.length > 0) {
344
+ case Step.SelectHook:
345
+ {
346
+ const hooksOfType = hookEntries.filter(h => h.hookType === selectedHookType.hookType);
347
+ const fileHooks = hooksOfType.filter(h => !h.agentName);
348
+ const agentHooks = hooksOfType.filter(h => h.agentName);
349
+ const hookItems = [];
315
350
  hookItems.push({
316
- type: "separator",
317
- label: ( localize(5701, "Existing Hooks"))
351
+ label: `$(plus) ${( localize(6280, "Add new hook..."))}`,
352
+ isAddNewHook: true,
353
+ alwaysShow: true
318
354
  });
319
- for (const entry of hooksOfType) {
320
- const description = labelService.getUriLabel(entry.fileUri, {
321
- relative: true
322
- });
355
+ if (fileHooks.length > 0) {
323
356
  hookItems.push({
324
- label: entry.commandLabel,
325
- description,
326
- hookEntry: entry
357
+ type: "separator",
358
+ label: ( localize(6281, "Existing Hooks"))
327
359
  });
360
+ for (const entry of fileHooks) {
361
+ const description = labelService.getUriLabel(entry.fileUri, {
362
+ relative: true
363
+ });
364
+ hookItems.push({
365
+ label: entry.commandLabel,
366
+ description,
367
+ hookEntry: entry
368
+ });
369
+ }
328
370
  }
329
- }
330
- if (hooksOfType.length === 0) {
331
- selectedHook = hookItems[0];
332
- } else {
333
- picker.items = hookItems;
334
- picker.value = "";
335
- picker.placeholder = ( localize(5702, "Select a hook to open or add a new one"));
336
- picker.title = selectedHookType.hookType.label;
337
- picker.buttons = [backButton];
338
- const result = await awaitPick(picker, backButton);
339
- if (result === "back") {
340
- step = goBack() ?? Step.SelectHookType;
341
- break;
342
- }
343
- if (!result) {
344
- picker.hide();
345
- return;
371
+ if (agentHooks.length > 0) {
372
+ const agentNames = [...( new Set(( agentHooks.map(h => h.agentName))))];
373
+ for (const agentName of agentNames) {
374
+ hookItems.push({
375
+ type: "separator",
376
+ label: ( localize(6282, "Agent: {0}", agentName))
377
+ });
378
+ for (const entry of agentHooks.filter(h => h.agentName === agentName)) {
379
+ const description = labelService.getUriLabel(entry.fileUri, {
380
+ relative: true
381
+ });
382
+ hookItems.push({
383
+ label: entry.commandLabel,
384
+ description,
385
+ hookEntry: entry
386
+ });
387
+ }
388
+ }
346
389
  }
347
- selectedHook = result;
348
- stepHistory.push(Step.SelectHook);
349
- }
350
- if (selectedHook.hookEntry) {
351
- const entry = selectedHook.hookEntry;
352
- let selection;
353
- const commandFieldName = getEffectiveCommandFieldKey(entry.command, targetOS);
354
- if (commandFieldName) {
355
- try {
356
- const content = await fileService.readFile(entry.fileUri);
357
- selection = findHookCommandSelection(( content.value.toString()), entry.originalHookTypeId, entry.index, commandFieldName);
358
- } catch {}
390
+ if (hooksOfType.length === 0) {
391
+ selectedHook = hookItems[0];
392
+ } else {
393
+ picker.items = hookItems;
394
+ picker.value = "";
395
+ picker.placeholder = ( localize(6283, "Select a hook to open or add a new one"));
396
+ picker.title = selectedHookType.hookTypeMeta.label;
397
+ picker.buttons = [backButton];
398
+ const result = await awaitPick(picker, backButton);
399
+ if (result === "back") {
400
+ step = goBack() ?? Step.SelectHookType;
401
+ break;
402
+ }
403
+ if (!result) {
404
+ return;
405
+ }
406
+ selectedHook = result;
407
+ stepHistory.push(Step.SelectHook);
359
408
  }
360
- picker.hide();
361
- await editorService.openEditor({
362
- resource: entry.fileUri,
363
- options: {
364
- selection,
365
- pinned: false
409
+ if (selectedHook.hookEntry) {
410
+ const entry = selectedHook.hookEntry;
411
+ let selection;
412
+ if (entry.agentName) {
413
+ try {
414
+ const content = await fileService.readFile(entry.fileUri);
415
+ const commandText = formatHookCommandLabel(entry.command, targetOS);
416
+ if (commandText) {
417
+ selection = findHookCommandInYaml(( content.value.toString()), commandText);
418
+ }
419
+ } catch {}
420
+ } else {
421
+ const commandFieldName = getEffectiveCommandFieldKey(entry.command, targetOS);
422
+ if (commandFieldName) {
423
+ try {
424
+ const content = await fileService.readFile(entry.fileUri);
425
+ selection = findHookCommandSelection(( content.value.toString()), entry.originalHookTypeId, entry.index, commandFieldName);
426
+ } catch {}
427
+ }
366
428
  }
367
- });
368
- return;
429
+ if (options?.openEditor) {
430
+ await options.openEditor(entry.fileUri, {
431
+ selection
432
+ });
433
+ } else {
434
+ await editorService.openEditor({
435
+ resource: entry.fileUri,
436
+ options: {
437
+ selection,
438
+ pinned: false
439
+ }
440
+ });
441
+ }
442
+ return;
443
+ }
444
+ step = Step.SelectFile;
445
+ break;
369
446
  }
370
- step = Step.SelectFile;
371
- break;
372
- }
373
- case Step.SelectFile:
374
- {
375
- const hookFiles = await promptsService.listPromptFilesForStorage(PromptsType.hook, PromptsStorage.local, CancellationToken.None);
376
- const fileItems = [];
377
- fileItems.push({
378
- label: `$(new-file) ${( localize(5703, "Create new hook config file..."))}`,
379
- isCreateNewFile: true,
380
- alwaysShow: true
381
- });
382
- if (hookFiles.length > 0) {
447
+ case Step.SelectFile:
448
+ {
449
+ const hookFiles = await promptsService.listPromptFilesForStorage(PromptsType.hook, PromptsStorage.local, CancellationToken.None);
450
+ const fileItems = [];
383
451
  fileItems.push({
384
- type: "separator",
385
- label: ( localize(5704, "Existing Hook Files"))
452
+ label: `$(new-file) ${( localize(6284, "Create new hook config file..."))}`,
453
+ isCreateNewFile: true,
454
+ alwaysShow: true
386
455
  });
387
- for (const hookFile of hookFiles) {
388
- const relativePath = labelService.getUriLabel(hookFile.uri, {
389
- relative: true
390
- });
456
+ if (hookFiles.length > 0) {
391
457
  fileItems.push({
392
- label: relativePath,
393
- fileUri: hookFile.uri
458
+ type: "separator",
459
+ label: ( localize(6285, "Existing Hook Files"))
394
460
  });
461
+ for (const hookFile of hookFiles) {
462
+ const relativePath = labelService.getUriLabel(hookFile.uri, {
463
+ relative: true
464
+ });
465
+ fileItems.push({
466
+ label: relativePath,
467
+ fileUri: hookFile.uri
468
+ });
469
+ }
395
470
  }
396
- }
397
- if (hookFiles.length === 0) {
398
- selectedFile = fileItems[0];
399
- } else {
400
- picker.items = fileItems;
401
- picker.value = "";
402
- picker.placeholder = ( localize(5705, "Select a hook file or create a new one"));
403
- picker.title = ( localize(5706, "Add Hook"));
404
- picker.buttons = [backButton];
405
- const result = await awaitPick(picker, backButton);
406
- if (result === "back") {
407
- step = goBack() ?? Step.SelectHook;
408
- break;
471
+ if (hookFiles.length === 0) {
472
+ selectedFile = fileItems[0];
473
+ } else {
474
+ picker.items = fileItems;
475
+ picker.value = "";
476
+ picker.placeholder = ( localize(6286, "Select a hook file or create a new one"));
477
+ picker.title = ( localize(6287, "Add Hook"));
478
+ picker.buttons = [backButton];
479
+ const result = await awaitPick(picker, backButton);
480
+ if (result === "back") {
481
+ step = goBack() ?? Step.SelectHook;
482
+ break;
483
+ }
484
+ if (!result) {
485
+ return;
486
+ }
487
+ selectedFile = result;
488
+ stepHistory.push(Step.SelectFile);
409
489
  }
410
- if (!result) {
411
- picker.hide();
490
+ if (selectedFile.fileUri) {
491
+ await addHookToFile(
492
+ selectedFile.fileUri,
493
+ selectedHookType.hookType,
494
+ fileService,
495
+ editorService,
496
+ notificationService,
497
+ bulkEditService,
498
+ options?.openEditor
499
+ );
412
500
  return;
413
501
  }
414
- selectedFile = result;
415
- stepHistory.push(Step.SelectFile);
502
+ step = Step.SelectFolder;
503
+ break;
416
504
  }
417
- if (selectedFile.fileUri) {
418
- picker.hide();
419
- await addHookToFile(
420
- selectedFile.fileUri,
421
- selectedHookType.hookType.id,
422
- fileService,
423
- editorService,
424
- notificationService,
425
- bulkEditService
426
- );
427
- return;
505
+ case Step.SelectFolder:
506
+ {
507
+ const allFolders = await promptsService.getSourceFolders(PromptsType.hook);
508
+ const localFolders = allFolders.filter(f => f.storage === PromptsStorage.local);
509
+ if (localFolders.length === 0) {
510
+ notificationService.error(( localize(6288, "Please open a workspace folder to configure hooks.")));
511
+ return;
512
+ }
513
+ selectedFolder = localFolders[0];
514
+ if (localFolders.length > 1) {
515
+ const folderItems = ( localFolders.map(folder => ({
516
+ label: labelService.getUriLabel(folder.uri, {
517
+ relative: true
518
+ }),
519
+ folder
520
+ })));
521
+ picker.items = folderItems;
522
+ picker.value = "";
523
+ picker.placeholder = ( localize(6289, "Select a location for the hook file"));
524
+ picker.title = ( localize(6290, "Hook File Location"));
525
+ picker.buttons = [backButton];
526
+ const result = await awaitPick(picker, backButton);
527
+ if (result === "back") {
528
+ step = goBack() ?? Step.SelectFile;
529
+ break;
530
+ }
531
+ if (!result) {
532
+ return;
533
+ }
534
+ selectedFolder = result.folder;
535
+ stepHistory.push(Step.SelectFolder);
536
+ }
537
+ step = Step.EnterFilename;
538
+ break;
428
539
  }
429
- step = Step.SelectFolder;
430
- break;
431
- }
432
- case Step.SelectFolder:
433
- {
434
- const allFolders = await promptsService.getSourceFolders(PromptsType.hook);
435
- const localFolders = allFolders.filter(f => f.storage === PromptsStorage.local);
436
- if (localFolders.length === 0) {
540
+ case Step.EnterFilename:
541
+ {
437
542
  picker.hide();
438
- notificationService.error(( localize(5707, "Please open a workspace folder to configure hooks.")));
439
- return;
440
- }
441
- selectedFolder = localFolders[0];
442
- if (localFolders.length > 1) {
443
- const folderItems = ( localFolders.map(folder => ({
444
- label: labelService.getUriLabel(folder.uri, {
445
- relative: true
446
- }),
447
- folder
448
- })));
449
- picker.items = folderItems;
450
- picker.value = "";
451
- picker.placeholder = ( localize(5708, "Select a location for the hook file"));
452
- picker.title = ( localize(5709, "Hook File Location"));
453
- picker.buttons = [backButton];
454
- const result = await awaitPick(picker, backButton);
455
- if (result === "back") {
456
- step = goBack() ?? Step.SelectFile;
543
+ const fileNameResult = await ( new Promise(resolve => {
544
+ let resolved = false;
545
+ const done = value => {
546
+ if (!resolved) {
547
+ resolved = true;
548
+ inputDisposables.dispose();
549
+ resolve(value);
550
+ }
551
+ };
552
+ const inputDisposables = ( new DisposableStore());
553
+ const inputBox = inputDisposables.add(quickInputService.createInputBox());
554
+ inputBox.prompt = ( localize(6291, "Enter hook file name"));
555
+ inputBox.placeholder = ( localize(6292, "e.g., hooks, diagnostics, security"));
556
+ inputBox.title = ( localize(6293, "Hook File Name"));
557
+ inputBox.buttons = [backButton];
558
+ inputBox.ignoreFocusOut = true;
559
+ inputDisposables.add(inputBox.onDidAccept(async () => {
560
+ const value = inputBox.value;
561
+ if (!value || !value.trim()) {
562
+ inputBox.validationMessage = ( localize(6294, "File name is required"));
563
+ return;
564
+ }
565
+ const name = value.trim();
566
+ if (/[/\\:*?"<>|]/.test(name)) {
567
+ inputBox.validationMessage = ( localize(6295, "File name contains invalid characters"));
568
+ return;
569
+ }
570
+ done(name);
571
+ }));
572
+ inputDisposables.add(inputBox.onDidChangeValue(() => {
573
+ inputBox.validationMessage = undefined;
574
+ }));
575
+ inputDisposables.add(inputBox.onDidTriggerButton(button => {
576
+ if (button === backButton) {
577
+ done("back");
578
+ }
579
+ }));
580
+ inputDisposables.add(inputBox.onDidHide(() => {
581
+ done(undefined);
582
+ }));
583
+ inputBox.show();
584
+ }));
585
+ if (fileNameResult === "back") {
586
+ picker.show();
587
+ step = goBack() ?? Step.SelectFolder;
457
588
  break;
458
589
  }
459
- if (!result) {
460
- picker.hide();
590
+ if (!fileNameResult) {
461
591
  return;
462
592
  }
463
- selectedFolder = result.folder;
464
- stepHistory.push(Step.SelectFolder);
465
- }
466
- step = Step.EnterFilename;
467
- break;
468
- }
469
- case Step.EnterFilename:
470
- {
471
- suppressHideDispose = true;
472
- picker.hide();
473
- suppressHideDispose = false;
474
- const fileNameResult = await ( new Promise(resolve => {
475
- let resolved = false;
476
- const done = value => {
477
- if (!resolved) {
478
- resolved = true;
479
- inputDisposables.dispose();
480
- resolve(value);
593
+ await fileService.createFolder(selectedFolder.uri);
594
+ const hookFileName = fileNameResult.endsWith(".json") ? fileNameResult : `${fileNameResult}.json`;
595
+ const hookFileUri = URI.joinPath(selectedFolder.uri, hookFileName);
596
+ if (await fileService.exists(hookFileUri)) {
597
+ await addHookToFile(
598
+ hookFileUri,
599
+ selectedHookType.hookType,
600
+ fileService,
601
+ editorService,
602
+ notificationService,
603
+ bulkEditService,
604
+ options?.openEditor
605
+ );
606
+ return;
607
+ }
608
+ const newFileFormat = getHookSourceFormat(hookFileUri);
609
+ const isClaudeNewFile = newFileFormat === HookSourceFormat.Claude;
610
+ const isCopilotCliOnly = !isClaudeNewFile && !( ( new Set(( Object.values(HOOKS_BY_TARGET[Target.VSCode])))).has(selectedHookType.hookType)) && ( ( new Set(( Object.values(HOOKS_BY_TARGET[Target.GitHubCopilot])))).has(selectedHookType.hookType));
611
+ const hookTypeKey = isClaudeNewFile ? (getClaudeHookTypeName(selectedHookType.hookType) ?? selectedHookType.hookType) : isCopilotCliOnly ? (getCopilotCliHookTypeName(selectedHookType.hookType) ?? selectedHookType.hookType) : selectedHookType.hookType;
612
+ const newFileHookEntry = isCopilotCliOnly ? {
613
+ type: "command",
614
+ [targetOS === OperatingSystem.Windows ? "powershell" : "bash"]: ""
615
+ } : buildNewHookEntry(newFileFormat);
616
+ const commandFieldKey = isCopilotCliOnly ? (targetOS === OperatingSystem.Windows ? "powershell" : "bash") : "command";
617
+ const hooksContent = {
618
+ ...(isCopilotCliOnly ? {
619
+ version: 1
620
+ } : {}),
621
+ hooks: {
622
+ [hookTypeKey]: [newFileHookEntry]
481
623
  }
482
624
  };
483
- const inputDisposables = ( new DisposableStore());
484
- const inputBox = inputDisposables.add(quickInputService.createInputBox());
485
- inputBox.prompt = ( localize(5710, "Enter hook file name"));
486
- inputBox.placeholder = ( localize(5711, "e.g., hooks, diagnostics, security"));
487
- inputBox.title = ( localize(5712, "Hook File Name"));
488
- inputBox.buttons = [backButton];
489
- inputBox.ignoreFocusOut = true;
490
- inputDisposables.add(inputBox.onDidAccept(async () => {
491
- const value = inputBox.value;
492
- if (!value || !value.trim()) {
493
- inputBox.validationMessage = ( localize(5713, "File name is required"));
494
- return;
495
- }
496
- const name = value.trim();
497
- if (/[/\\:*?"<>|]/.test(name)) {
498
- inputBox.validationMessage = ( localize(5714, "File name contains invalid characters"));
499
- return;
500
- }
501
- done(name);
502
- }));
503
- inputDisposables.add(inputBox.onDidChangeValue(() => {
504
- inputBox.validationMessage = undefined;
505
- }));
506
- inputDisposables.add(inputBox.onDidTriggerButton(button => {
507
- if (button === backButton) {
508
- done("back");
509
- }
510
- }));
511
- inputDisposables.add(inputBox.onDidHide(() => {
512
- done(undefined);
513
- }));
514
- inputBox.show();
515
- }));
516
- if (fileNameResult === "back") {
517
- picker.show();
518
- step = goBack() ?? Step.SelectFolder;
519
- break;
520
- }
521
- if (!fileNameResult) {
522
- store.dispose();
523
- return;
524
- }
525
- await fileService.createFolder(selectedFolder.uri);
526
- const hookFileName = fileNameResult.endsWith(".json") ? fileNameResult : `${fileNameResult}.json`;
527
- const hookFileUri = URI.joinPath(selectedFolder.uri, hookFileName);
528
- if (await fileService.exists(hookFileUri)) {
529
- store.dispose();
530
- await addHookToFile(
531
- hookFileUri,
532
- selectedHookType.hookType.id,
533
- fileService,
534
- editorService,
535
- notificationService,
536
- bulkEditService
537
- );
625
+ const jsonContent = JSON.stringify(hooksContent, null, "\t");
626
+ await fileService.writeFile(hookFileUri, VSBuffer.fromString(jsonContent));
627
+ options?.onHookFileCreated?.(hookFileUri);
628
+ const selection = findHookCommandSelection(jsonContent, hookTypeKey, 0, commandFieldKey);
629
+ if (options?.openEditor) {
630
+ await options.openEditor(hookFileUri, {
631
+ selection
632
+ });
633
+ } else {
634
+ await editorService.openEditor({
635
+ resource: hookFileUri,
636
+ options: {
637
+ selection,
638
+ pinned: false
639
+ }
640
+ });
641
+ }
538
642
  return;
539
643
  }
540
- const newFileFormat = getHookSourceFormat(hookFileUri);
541
- const isClaudeNewFile = newFileFormat === HookSourceFormat.Claude;
542
- const hookTypeKey = isClaudeNewFile ? (getClaudeHookTypeName(selectedHookType.hookType.id) ?? selectedHookType.hookType.id) : selectedHookType.hookType.id;
543
- const newFileHookEntry = buildNewHookEntry(newFileFormat);
544
- const hooksContent = {
545
- hooks: {
546
- [hookTypeKey]: [newFileHookEntry]
547
- }
548
- };
549
- const jsonContent = JSON.stringify(hooksContent, null, "\t");
550
- await fileService.writeFile(hookFileUri, VSBuffer.fromString(jsonContent));
551
- const selection = findHookCommandSelection(jsonContent, hookTypeKey, 0, "command");
552
- store.dispose();
553
- await editorService.openEditor({
554
- resource: hookFileUri,
555
- options: {
556
- selection,
557
- pinned: false
558
- }
559
- });
560
- return;
561
644
  }
562
645
  }
646
+ } finally {
647
+ store.dispose();
563
648
  }
564
649
  }
565
650
  class ManageHooksAction extends Action2 {
566
651
  constructor() {
567
652
  super({
568
653
  id: CONFIGURE_HOOKS_ACTION_ID,
569
- title: ( localize2(5715, "Configure Hooks...")),
570
- shortTitle: ( localize2(5716, "Hooks")),
654
+ title: ( localize2(6296, "Configure Hooks...")),
655
+ shortTitle: ( localize2(6297, "Hooks")),
571
656
  icon: Codicon.zap,
572
657
  f1: true,
573
658
  precondition: ChatContextKeys.enabled,