@codingame/monaco-vscode-katex-common 29.1.1 → 30.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 (180) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/platform/actions/browser/buttonbar.js +14 -13
  3. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +16 -16
  4. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +9 -9
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +34 -34
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +12 -20
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +14 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +208 -0
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +22 -0
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +637 -0
  12. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.d.ts +1 -0
  13. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.js +1 -0
  14. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +8 -8
  15. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +9 -1
  16. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +202 -13
  17. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +4 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +17 -8
  19. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
  20. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +53 -5
  21. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +296 -63
  22. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +59 -23
  23. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +55 -42
  24. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +12 -12
  25. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +110 -59
  26. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +14 -14
  27. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +7 -7
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +12 -12
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +1 -1
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js +5 -4
  31. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.d.ts +24 -0
  32. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +384 -0
  33. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  34. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.d.ts +12 -7
  35. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +220 -61
  36. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.js +1 -2
  37. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  38. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.d.ts +6 -0
  40. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.js +14 -1
  41. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +1 -1
  42. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  43. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  44. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  45. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatContentCodePools.js +5 -4
  47. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +3 -3
  48. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  49. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
  50. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +5 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +14 -14
  52. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +11 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +40 -12
  54. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +8 -8
  55. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  56. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +2 -2
  57. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +1 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +97 -54
  59. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +5 -4
  60. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +6 -6
  61. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +5 -5
  62. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +6 -6
  63. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +8 -7
  64. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  65. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +15 -2
  66. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +155 -22
  67. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +9 -9
  68. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.d.ts +3 -1
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +36 -19
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +2 -2
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +14 -14
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +13 -0
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +1 -1
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +1 -1
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMissingSandboxDepsConfirmationSubPart.d.ts +17 -0
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMissingSandboxDepsConfirmationSubPart.js +68 -0
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.js +6 -6
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +16 -16
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +33 -25
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +7 -7
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +12 -3
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +5 -5
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +5 -5
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +11 -11
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +4 -13
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +37 -113
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +1 -1
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +10 -3
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +66 -39
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +13 -2
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +103 -61
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +2 -1
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +35 -23
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +4 -4
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +6 -6
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +5 -5
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.d.ts +1 -0
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js +4 -1
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.d.ts +2 -1
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +39 -24
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.d.ts +6 -5
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +44 -18
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +60 -10
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +7 -7
  112. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +2 -2
  113. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +6 -6
  114. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +15 -15
  115. package/vscode/src/vs/workbench/contrib/chat/common/widget/codeBlockModelCollection.js +4 -0
  116. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +4 -4
  117. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.js +5 -5
  118. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +4 -1
  119. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +5 -2
  120. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +6 -11
  121. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  122. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +39 -39
  123. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  124. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  125. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  126. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.d.ts +26 -0
  127. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.js +746 -0
  128. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.d.ts +13 -0
  129. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +300 -0
  130. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffCellEditorOptions.d.ts +8 -0
  131. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffCellEditorOptions.js +55 -0
  132. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.d.ts +273 -0
  133. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.js +1963 -0
  134. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.d.ts +50 -0
  135. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.js +314 -0
  136. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementViewModel.d.ts +258 -0
  137. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementViewModel.js +886 -0
  138. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffNestedCellViewModel.d.ts +41 -0
  139. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffNestedCellViewModel.js +118 -0
  140. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/editorHeightCalculator.d.ts +17 -0
  141. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/editorHeightCalculator.js +71 -0
  142. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/eventDispatcher.d.ts +27 -0
  143. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/eventDispatcher.js +40 -0
  144. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookCellDiffDecorator.d.ts +23 -0
  145. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookCellDiffDecorator.js +313 -0
  146. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookDeletedCellDecorator.d.ts +51 -0
  147. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookDeletedCellDecorator.js +265 -0
  148. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookInlineDiff.d.ts +24 -0
  149. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookInlineDiff.js +185 -0
  150. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookInlineDiffWidget.d.ts +28 -0
  151. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookInlineDiffWidget.js +104 -0
  152. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookInsertedCellDecorator.d.ts +10 -0
  153. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookInsertedCellDecorator.js +43 -0
  154. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookOriginalCellModelFactory.d.ts +21 -0
  155. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookOriginalCellModelFactory.js +41 -0
  156. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookOriginalModelRefFactory.d.ts +25 -0
  157. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookOriginalModelRefFactory.js +69 -0
  158. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiff.css +469 -0
  159. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.d.ts +149 -0
  160. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.js +933 -0
  161. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.d.ts +180 -0
  162. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.js +32 -0
  163. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.d.ts +102 -0
  164. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.js +643 -0
  165. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffOverviewRuler.d.ts +30 -0
  166. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffOverviewRuler.js +197 -0
  167. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffViewModel.d.ts +75 -0
  168. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffViewModel.js +539 -0
  169. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/unchangedEditorRegions.d.ts +13 -0
  170. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/unchangedEditorRegions.js +39 -0
  171. package/vscode/src/vs/workbench/contrib/notebook/common/model/notebookMetadataTextModel.d.ts +19 -0
  172. package/vscode/src/vs/workbench/contrib/notebook/common/model/notebookMetadataTextModel.js +90 -0
  173. package/vscode/src/vs/workbench/contrib/notebook/common/notebookDiff.d.ts +26 -0
  174. package/vscode/src/vs/workbench/contrib/notebook/common/notebookDiff.js +92 -0
  175. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  176. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  177. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -152
  178. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -1317
  179. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalPromptFileSystem.d.ts +0 -47
  180. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalPromptFileSystem.js +0 -95
@@ -0,0 +1,637 @@
1
+
2
+ import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
3
+ import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
4
+ import { Emitter, Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
5
+ import { DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
6
+ import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
7
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
8
+ import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
9
+ import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
10
+ import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
11
+ import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
12
+ import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
13
+ import { ExtensionEditorTab } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions';
14
+ import { IExtensionsWorkbenchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions.service';
15
+ import { McpCommandIds } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpCommandIds';
16
+ import { IMcpRegistry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpRegistryTypes.service';
17
+ import { McpServerEditorTab, McpConnectionState, McpServerCacheState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes';
18
+ import { IMcpService, IMcpWorkbenchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes.service';
19
+ import { startServerAndWaitForLiveTools } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypesUtils';
20
+ import { ILanguageModelToolsConfirmationService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsConfirmationService.service';
21
+ import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService';
22
+ import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService.service';
23
+ import { ConfigureToolSets } from '../tools/toolSetsContribution.js';
24
+
25
+ var BucketOrdinal;
26
+ (function(BucketOrdinal) {
27
+ BucketOrdinal[BucketOrdinal["User"] = 0] = "User";
28
+ BucketOrdinal[BucketOrdinal["BuiltIn"] = 1] = "BuiltIn";
29
+ BucketOrdinal[BucketOrdinal["Mcp"] = 2] = "Mcp";
30
+ BucketOrdinal[BucketOrdinal["Extension"] = 3] = "Extension";
31
+ })(BucketOrdinal || (BucketOrdinal = {}));
32
+ function isBucketTreeItem(item) {
33
+ return item.itemType === "bucket";
34
+ }
35
+ function isToolSetTreeItem(item) {
36
+ return item.itemType === "toolset";
37
+ }
38
+ function isToolTreeItem(item) {
39
+ return item.itemType === "tool";
40
+ }
41
+ function isCallbackTreeItem(item) {
42
+ return item.itemType === "callback";
43
+ }
44
+ function mapIconToTreeItem(icon, useDefaultToolIcon = false) {
45
+ if (!icon) {
46
+ if (useDefaultToolIcon) {
47
+ return {
48
+ iconClass: ThemeIcon.asClassName(Codicon.tools)
49
+ };
50
+ }
51
+ return {};
52
+ }
53
+ if (ThemeIcon.isThemeIcon(icon)) {
54
+ return {
55
+ iconClass: ThemeIcon.asClassName(icon)
56
+ };
57
+ } else {
58
+ return {
59
+ iconPath: icon
60
+ };
61
+ }
62
+ }
63
+ function createToolTreeItemFromData(tool, checked) {
64
+ const iconProps = mapIconToTreeItem(tool.icon, true);
65
+ return {
66
+ itemType: "tool",
67
+ tool,
68
+ id: tool.id,
69
+ label: tool.toolReferenceName ?? tool.displayName,
70
+ description: tool.userDescription ?? tool.modelDescription,
71
+ checked,
72
+ ...iconProps
73
+ };
74
+ }
75
+ function createToolSetTreeItem(toolset, checked, editorService) {
76
+ const iconProps = mapIconToTreeItem(toolset.icon);
77
+ const buttons = [];
78
+ if (toolset.source.type === "user") {
79
+ const resource = toolset.source.file;
80
+ buttons.push({
81
+ iconClass: ThemeIcon.asClassName(Codicon.edit),
82
+ tooltip: ( localize(5025, "Edit Tool Set")),
83
+ action: () => editorService.openEditor({
84
+ resource
85
+ })
86
+ });
87
+ }
88
+ return {
89
+ itemType: "toolset",
90
+ toolset,
91
+ buttons,
92
+ id: toolset.id,
93
+ label: toolset.referenceName,
94
+ description: toolset.description,
95
+ checked,
96
+ children: undefined,
97
+ collapsed: true,
98
+ ...iconProps
99
+ };
100
+ }
101
+ async function showToolsPicker(accessor, placeHolder, source, description, getToolsEntries, model, token) {
102
+ const quickPickService = accessor.get(IQuickInputService);
103
+ const mcpService = accessor.get(IMcpService);
104
+ const mcpRegistry = accessor.get(IMcpRegistry);
105
+ const commandService = accessor.get(ICommandService);
106
+ const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
107
+ const editorService = accessor.get(IEditorService);
108
+ const mcpWorkbenchService = accessor.get(IMcpWorkbenchService);
109
+ const toolsService = accessor.get(ILanguageModelToolsService);
110
+ const confirmationService = accessor.get(ILanguageModelToolsConfirmationService);
111
+ const telemetryService = accessor.get(ITelemetryService);
112
+ const mcpServerByTool = ( new Map());
113
+ for (const server of mcpService.servers.get()) {
114
+ for (const tool of server.tools.get()) {
115
+ mcpServerByTool.set(tool.id, server);
116
+ }
117
+ }
118
+ function computeItems(previousToolsEntries) {
119
+ let toolsEntries = getToolsEntries ? ( new Map(( [...getToolsEntries()].map(([k, enabled]) => [k.id, enabled])))) : undefined;
120
+ if (!toolsEntries) {
121
+ const defaultEntries = ( new Map());
122
+ for (const tool of toolsService.getTools(model)) {
123
+ if (tool.canBeReferencedInPrompt) {
124
+ defaultEntries.set(tool, false);
125
+ }
126
+ }
127
+ for (const toolSet of toolsService.getToolSetsForModel(model)) {
128
+ defaultEntries.set(toolSet, false);
129
+ }
130
+ toolsEntries = defaultEntries;
131
+ }
132
+ previousToolsEntries?.forEach((value, key) => {
133
+ toolsEntries.set(key.id, value);
134
+ });
135
+ const treeItems = [];
136
+ const bucketMap = ( new Map());
137
+ const getKey = source => {
138
+ switch (source.type) {
139
+ case "mcp":
140
+ case "extension":
141
+ return ToolDataSource.toKey(source);
142
+ case "internal":
143
+ return ( BucketOrdinal.BuiltIn.toString());
144
+ case "user":
145
+ return ( BucketOrdinal.User.toString());
146
+ case "external":
147
+ throw ( new Error("should not be reachable"));
148
+ default:
149
+ assertNever();
150
+ }
151
+ };
152
+ const mcpServers = ( new Map(( mcpService.servers.get().map(s => [s.definition.id, {
153
+ server: s,
154
+ seen: false
155
+ }]))));
156
+ const createBucket = (source, key) => {
157
+ if (source.type === "mcp") {
158
+ const mcpServerEntry = mcpServers.get(source.definitionId);
159
+ if (!mcpServerEntry) {
160
+ return undefined;
161
+ }
162
+ mcpServerEntry.seen = true;
163
+ const mcpServer = mcpServerEntry.server;
164
+ const buttons = [];
165
+ const collection = mcpRegistry.collections.get().find(c => c.id === mcpServer.collection.id);
166
+ if (collection?.source) {
167
+ buttons.push({
168
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
169
+ tooltip: ( localize(5026, "Configure {0}", collection.label)),
170
+ action: () => collection.source ? collection.source instanceof ExtensionIdentifier ? extensionsWorkbenchService.open(collection.source.value, {
171
+ tab: ExtensionEditorTab.Features,
172
+ feature: "mcp"
173
+ }) : mcpWorkbenchService.open(collection.source, {
174
+ tab: McpServerEditorTab.Configuration
175
+ }) : undefined
176
+ });
177
+ } else if (collection?.presentation?.origin) {
178
+ buttons.push({
179
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
180
+ tooltip: ( localize(5026, "Configure {0}", collection.label)),
181
+ action: () => editorService.openEditor({
182
+ resource: collection.presentation.origin
183
+ })
184
+ });
185
+ }
186
+ if (mcpServer.connectionState.get().state === McpConnectionState.Kind.Error) {
187
+ buttons.push({
188
+ iconClass: ThemeIcon.asClassName(Codicon.warning),
189
+ tooltip: ( localize(5027, "Show Output")),
190
+ action: () => mcpServer.showOutput()
191
+ });
192
+ }
193
+ const cacheState = mcpServer.cacheState.get();
194
+ const children = [];
195
+ let collapsed = true;
196
+ if (cacheState === McpServerCacheState.Unknown || cacheState === McpServerCacheState.Outdated) {
197
+ collapsed = false;
198
+ children.push({
199
+ itemType: "callback",
200
+ iconClass: ThemeIcon.asClassName(Codicon.sync),
201
+ label: ( localize(5028, "Update Tools")),
202
+ pickable: false,
203
+ run: () => {
204
+ treePicker.busy = true;
205
+ (async () => {
206
+ const ok = await startServerAndWaitForLiveTools(mcpServer, {
207
+ promptType: "all-untrusted"
208
+ });
209
+ if (!ok) {
210
+ mcpServer.showOutput();
211
+ treePicker.hide();
212
+ return;
213
+ }
214
+ treePicker.busy = false;
215
+ computeItems(collectResults());
216
+ })();
217
+ return false;
218
+ }
219
+ });
220
+ }
221
+ const bucket = {
222
+ itemType: "bucket",
223
+ ordinal: BucketOrdinal.Mcp,
224
+ id: key,
225
+ label: source.label,
226
+ checked: undefined,
227
+ collapsed,
228
+ children,
229
+ buttons,
230
+ sortOrder: 2
231
+ };
232
+ const iconPath = mcpServer.serverMetadata.get()?.icons.getUrl(22);
233
+ if (iconPath) {
234
+ bucket.iconPath = iconPath;
235
+ } else {
236
+ bucket.iconClass = ThemeIcon.asClassName(Codicon.mcp);
237
+ }
238
+ return bucket;
239
+ } else if (source.type === "extension") {
240
+ return {
241
+ itemType: "bucket",
242
+ ordinal: BucketOrdinal.Extension,
243
+ id: key,
244
+ label: source.label,
245
+ checked: undefined,
246
+ children: [],
247
+ buttons: [],
248
+ collapsed: true,
249
+ iconClass: ThemeIcon.asClassName(Codicon.extensions),
250
+ sortOrder: 3
251
+ };
252
+ } else if (source.type === "internal") {
253
+ return {
254
+ itemType: "bucket",
255
+ ordinal: BucketOrdinal.BuiltIn,
256
+ id: key,
257
+ label: ( localize(5029, "Built-In")),
258
+ checked: undefined,
259
+ children: [],
260
+ buttons: [],
261
+ collapsed: false,
262
+ sortOrder: 1
263
+ };
264
+ } else {
265
+ return {
266
+ itemType: "bucket",
267
+ ordinal: BucketOrdinal.User,
268
+ id: key,
269
+ label: ( localize(5030, "User Defined Tool Sets")),
270
+ checked: undefined,
271
+ children: [],
272
+ buttons: [],
273
+ collapsed: true,
274
+ sortOrder: 4
275
+ };
276
+ }
277
+ };
278
+ const getBucket = source => {
279
+ const key = getKey(source);
280
+ let bucket = bucketMap.get(key);
281
+ if (!bucket) {
282
+ bucket = createBucket(source, key);
283
+ if (bucket) {
284
+ bucketMap.set(key, bucket);
285
+ }
286
+ }
287
+ return bucket;
288
+ };
289
+ for (const toolSet of toolsService.getToolSetsForModel(model)) {
290
+ if (!( toolsEntries.has(toolSet.id))) {
291
+ continue;
292
+ }
293
+ const bucket = getBucket(toolSet.source);
294
+ if (!bucket) {
295
+ continue;
296
+ }
297
+ const toolSetChecked = toolsEntries.get(toolSet.id) === true;
298
+ if (toolSet.source.type === "mcp") {
299
+ bucket.toolset = toolSet;
300
+ if (toolSetChecked) {
301
+ bucket.checked = toolSetChecked;
302
+ }
303
+ } else {
304
+ const treeItem = createToolSetTreeItem(toolSet, toolSetChecked, editorService);
305
+ bucket.children.push(treeItem);
306
+ const children = [];
307
+ for (const tool of toolSet.getTools()) {
308
+ const toolChecked = toolSetChecked || toolsEntries.get(tool.id) === true;
309
+ const toolTreeItem = createToolTreeItemFromData(tool, toolChecked);
310
+ children.push(toolTreeItem);
311
+ }
312
+ if (children.length > 0) {
313
+ treeItem.children = children;
314
+ }
315
+ }
316
+ }
317
+ for (const tool of toolsService.getAllToolsIncludingDisabled()) {
318
+ if (!tool.canBeReferencedInPrompt || !( toolsEntries.has(tool.id))) {
319
+ continue;
320
+ }
321
+ const bucket = getBucket(tool.source);
322
+ if (!bucket) {
323
+ continue;
324
+ }
325
+ const toolChecked = bucket.checked === true || toolsEntries.get(tool.id) === true;
326
+ const toolTreeItem = createToolTreeItemFromData(tool, toolChecked);
327
+ bucket.children.push(toolTreeItem);
328
+ }
329
+ for (const {
330
+ server,
331
+ seen
332
+ } of ( mcpServers.values())) {
333
+ const cacheState = server.cacheState.get();
334
+ if (!seen && (cacheState === McpServerCacheState.Unknown || cacheState === McpServerCacheState.Outdated)) {
335
+ getBucket({
336
+ type: "mcp",
337
+ definitionId: server.definition.id,
338
+ label: server.definition.label,
339
+ instructions: "",
340
+ serverLabel: "",
341
+ collectionId: server.collection.id
342
+ });
343
+ }
344
+ }
345
+ const sortedBuckets = Array.from(( bucketMap.values())).sort((a, b) => {
346
+ if (a.sortOrder !== b.sortOrder) {
347
+ return a.sortOrder - b.sortOrder;
348
+ }
349
+ return a.label.localeCompare(b.label);
350
+ });
351
+ for (const bucket of sortedBuckets) {
352
+ treeItems.push(bucket);
353
+ bucket.children.sort((a, b) => a.label.localeCompare(b.label));
354
+ for (const child of bucket.children) {
355
+ if (isToolSetTreeItem(child) && child.children) {
356
+ child.children.sort((a, b) => a.label.localeCompare(b.label));
357
+ }
358
+ }
359
+ }
360
+ for (const bucket of sortedBuckets) {
361
+ const isMcpBucket = bucket.ordinal === BucketOrdinal.Mcp;
362
+ const addConfirmationButton = toolItem => {
363
+ if (!confirmationService.toolCanManageConfirmation(toolItem.tool)) {
364
+ return;
365
+ }
366
+ const tool = toolItem.tool;
367
+ const manageTools = isMcpBucket ? bucket.children.flatMap(
368
+ c => isToolTreeItem(c) ? [c.tool] : isToolSetTreeItem(c) && c.children ? ( c.children.filter(isToolTreeItem).map(gc => gc.tool)) : []
369
+ ) : [tool];
370
+ const buttons = toolItem.buttons ? [...toolItem.buttons] : [];
371
+ buttons.push({
372
+ iconClass: ThemeIcon.asClassName(Codicon.pass),
373
+ tooltip: ( localize(5031, "Manage Approval")),
374
+ keepOpen: true,
375
+ action: () => confirmationService.manageConfirmationPreferences(manageTools, {
376
+ focusToolId: tool.id
377
+ })
378
+ });
379
+ toolItem.buttons = buttons;
380
+ };
381
+ for (const child of bucket.children) {
382
+ if (isToolTreeItem(child)) {
383
+ addConfirmationButton(child);
384
+ } else if (isToolSetTreeItem(child) && child.children) {
385
+ for (const grandchild of child.children) {
386
+ if (isToolTreeItem(grandchild)) {
387
+ addConfirmationButton(grandchild);
388
+ }
389
+ }
390
+ }
391
+ }
392
+ }
393
+ if (treeItems.length === 0) {
394
+ treePicker.placeholder = ( localize(5032, "Add tools to chat"));
395
+ } else {
396
+ treePicker.placeholder = placeHolder;
397
+ }
398
+ treePicker.setItemTree(treeItems);
399
+ }
400
+ const store = ( new DisposableStore());
401
+ const treePicker = store.add(quickPickService.createQuickTree());
402
+ treePicker.placeholder = placeHolder;
403
+ treePicker.description = description;
404
+ treePicker.matchOnDescription = true;
405
+ treePicker.matchOnLabel = true;
406
+ treePicker.sortByLabel = false;
407
+ computeItems();
408
+ store.add(treePicker.onDidTriggerItemButton(e => {
409
+ if (e.button && typeof e.button.action === "function") {
410
+ const actionableButton = e.button;
411
+ actionableButton.action();
412
+ store.dispose();
413
+ }
414
+ }));
415
+ const collectResults = () => {
416
+ const result = ( new Map());
417
+ const traverse = items => {
418
+ for (const item of items) {
419
+ if (isBucketTreeItem(item)) {
420
+ if (item.toolset) {
421
+ const allChecked = item.checked === true;
422
+ result.set(item.toolset, allChecked);
423
+ }
424
+ traverse(item.children);
425
+ } else if (isToolSetTreeItem(item)) {
426
+ result.set(item.toolset, item.checked === true);
427
+ if (item.children) {
428
+ traverse(item.children);
429
+ }
430
+ } else if (isToolTreeItem(item)) {
431
+ result.set(item.tool, item.checked || result.get(item.tool) === true);
432
+ }
433
+ }
434
+ };
435
+ traverse(treePicker.itemTree);
436
+ return result;
437
+ };
438
+ let didAccept = false;
439
+ const didAcceptFinalItem = store.add(( new Emitter()));
440
+ store.add(treePicker.onDidAccept(() => {
441
+ const activeItems = treePicker.activeItems;
442
+ const callbackItem = activeItems.find(isCallbackTreeItem);
443
+ if (!callbackItem) {
444
+ didAccept = true;
445
+ treePicker.hide();
446
+ return;
447
+ }
448
+ const ret = callbackItem.run();
449
+ if (ret !== false) {
450
+ didAcceptFinalItem.fire();
451
+ }
452
+ }));
453
+ const addMcpServerButton = {
454
+ iconClass: ThemeIcon.asClassName(Codicon.mcp),
455
+ tooltip: ( localize(5033, "Add MCP Server..."))
456
+ };
457
+ const installExtension = {
458
+ iconClass: ThemeIcon.asClassName(Codicon.extensions),
459
+ tooltip: ( localize(5034, "Install Extension..."))
460
+ };
461
+ const configureToolSets = {
462
+ iconClass: ThemeIcon.asClassName(Codicon.gear),
463
+ tooltip: ( localize(5035, "Configure Tool Sets..."))
464
+ };
465
+ treePicker.title = ( localize(5036, "Configure Tools"));
466
+ treePicker.buttons = [addMcpServerButton, installExtension, configureToolSets];
467
+ store.add(treePicker.onDidTriggerButton(button => {
468
+ if (button === addMcpServerButton) {
469
+ commandService.executeCommand(McpCommandIds.AddConfiguration);
470
+ } else if (button === installExtension) {
471
+ extensionsWorkbenchService.openSearch("@tag:language-model-tools");
472
+ } else if (button === configureToolSets) {
473
+ commandService.executeCommand(ConfigureToolSets.ID);
474
+ }
475
+ treePicker.hide();
476
+ }));
477
+ if (token) {
478
+ store.add(token.onCancellationRequested(() => {
479
+ treePicker.hide();
480
+ }));
481
+ }
482
+ const initialState = collectResults();
483
+ treePicker.show();
484
+ await Promise.race([
485
+ Event.toPromise(Event.any(treePicker.onDidHide, didAcceptFinalItem.event), store)
486
+ ]);
487
+ sendDidChangeEvent(source, telemetryService, initialState, collectResults(), mcpRegistry);
488
+ store.dispose();
489
+ return didAccept ? collectResults() : undefined;
490
+ }
491
+ function categorizeTool(item, mcpRegistry) {
492
+ const source = item.source;
493
+ switch (source.type) {
494
+ case "internal":
495
+ return {
496
+ category: "builtin",
497
+ name: item.id
498
+ };
499
+ case "extension":
500
+ return {
501
+ category: "extension",
502
+ name: item.id,
503
+ extensionId: source.extensionId.value
504
+ };
505
+ case "mcp":
506
+ {
507
+ const collection = mcpRegistry.collections.get().find(c => c.id === source.collectionId);
508
+ if (collection?.source instanceof ExtensionIdentifier) {
509
+ return {
510
+ category: "extension-mcp",
511
+ extensionId: collection.source.value
512
+ };
513
+ }
514
+ return {
515
+ category: "user-mcp"
516
+ };
517
+ }
518
+ case "user":
519
+ return {
520
+ category: "user-toolset"
521
+ };
522
+ case "external":
523
+ return {
524
+ category: "user-toolset"
525
+ };
526
+ default:
527
+ assertNever();
528
+ }
529
+ }
530
+ function computeToolToggleSummary(initialState, finalState, mcpRegistry) {
531
+ const summary = {
532
+ builtinEnabled: 0,
533
+ builtinDisabled: 0,
534
+ extensionEnabled: 0,
535
+ extensionDisabled: 0,
536
+ extensionMcpEnabled: 0,
537
+ extensionMcpDisabled: 0,
538
+ userMcpEnabled: 0,
539
+ userMcpDisabled: 0,
540
+ userToolsetEnabled: 0,
541
+ userToolsetDisabled: 0,
542
+ details: ""
543
+ };
544
+ const detailItems = [];
545
+ for (const [item, finalEnabled] of finalState) {
546
+ const initialEnabled = initialState.get(item) ?? false;
547
+ if (initialEnabled === finalEnabled) {
548
+ continue;
549
+ }
550
+ const categorized = categorizeTool(item, mcpRegistry);
551
+ const enabled = finalEnabled;
552
+ switch (categorized.category) {
553
+ case "builtin":
554
+ if (enabled) {
555
+ summary.builtinEnabled++;
556
+ } else {
557
+ summary.builtinDisabled++;
558
+ }
559
+ detailItems.push({
560
+ category: "builtin",
561
+ name: categorized.name,
562
+ enabled
563
+ });
564
+ break;
565
+ case "extension":
566
+ if (enabled) {
567
+ summary.extensionEnabled++;
568
+ } else {
569
+ summary.extensionDisabled++;
570
+ }
571
+ detailItems.push({
572
+ category: "extension",
573
+ name: categorized.name,
574
+ extensionId: categorized.extensionId,
575
+ enabled
576
+ });
577
+ break;
578
+ case "extension-mcp":
579
+ if (enabled) {
580
+ summary.extensionMcpEnabled++;
581
+ } else {
582
+ summary.extensionMcpDisabled++;
583
+ }
584
+ detailItems.push({
585
+ category: "extension-mcp",
586
+ extensionId: categorized.extensionId,
587
+ enabled
588
+ });
589
+ break;
590
+ case "user-mcp":
591
+ if (enabled) {
592
+ summary.userMcpEnabled++;
593
+ } else {
594
+ summary.userMcpDisabled++;
595
+ }
596
+ detailItems.push({
597
+ category: "user-mcp",
598
+ enabled
599
+ });
600
+ break;
601
+ case "user-toolset":
602
+ if (enabled) {
603
+ summary.userToolsetEnabled++;
604
+ } else {
605
+ summary.userToolsetDisabled++;
606
+ }
607
+ detailItems.push({
608
+ category: "user-toolset",
609
+ enabled
610
+ });
611
+ break;
612
+ }
613
+ }
614
+ summary.details = JSON.stringify(detailItems);
615
+ return summary;
616
+ }
617
+ function sendDidChangeEvent(source, telemetryService, initialState, finalState, mcpRegistry) {
618
+ const summary = computeToolToggleSummary(initialState, finalState, mcpRegistry);
619
+ const changed = summary.builtinEnabled > 0 || summary.builtinDisabled > 0 || summary.extensionEnabled > 0 || summary.extensionDisabled > 0 || summary.extensionMcpEnabled > 0 || summary.extensionMcpDisabled > 0 || summary.userMcpEnabled > 0 || summary.userMcpDisabled > 0 || summary.userToolsetEnabled > 0 || summary.userToolsetDisabled > 0;
620
+ telemetryService.publicLog2("chatToolPickerClosed", {
621
+ source,
622
+ changed,
623
+ builtinEnabled: summary.builtinEnabled,
624
+ builtinDisabled: summary.builtinDisabled,
625
+ extensionEnabled: summary.extensionEnabled,
626
+ extensionDisabled: summary.extensionDisabled,
627
+ extensionMcpEnabled: summary.extensionMcpEnabled,
628
+ extensionMcpDisabled: summary.extensionMcpDisabled,
629
+ userMcpEnabled: summary.userMcpEnabled,
630
+ userMcpDisabled: summary.userMcpDisabled,
631
+ userToolsetEnabled: summary.userToolsetEnabled,
632
+ userToolsetDisabled: summary.userToolsetDisabled,
633
+ details: summary.details
634
+ });
635
+ }
636
+
637
+ export { showToolsPicker };
@@ -6,6 +6,7 @@ import { ILanguageService } from "@codingame/monaco-vscode-api/vscode/vs/editor/
6
6
  export interface IAgentSessionApprovalInfo {
7
7
  readonly label: string;
8
8
  readonly languageId: string | undefined;
9
+ readonly since: Date;
9
10
  confirm(): void;
10
11
  }
11
12
  /**
@@ -90,6 +90,7 @@ let AgentSessionApprovalModel = class AgentSessionApprovalModel extends Disposab
90
90
  setIfChanged({
91
91
  label,
92
92
  languageId,
93
+ since: ( new Date()),
93
94
  confirm: () => confirmState.confirm({
94
95
  type: ToolConfirmKind.UserAction
95
96
  })