@codingame/monaco-vscode-katex-common 26.2.1 → 27.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 (183) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetDropdown.d.ts +10 -4
  3. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetDropdown.js +35 -11
  4. package/vscode/src/vs/platform/actions/browser/buttonbar.d.ts +3 -0
  5. package/vscode/src/vs/platform/actions/browser/buttonbar.js +15 -4
  6. package/vscode/src/vs/platform/mcp/common/modelContextProtocolApps.d.ts +548 -0
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +15 -15
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +5 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +168 -15
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +67 -51
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.d.ts +1 -0
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +12 -11
  14. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +9 -9
  15. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +8 -0
  16. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +42 -19
  17. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +12 -1
  18. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +63 -40
  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 +7 -5
  21. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +77 -73
  22. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +69 -32
  23. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +23 -6
  24. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +381 -83
  25. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.d.ts +1 -0
  26. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.js +28 -13
  27. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +38 -19
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +109 -113
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +16 -15
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +2 -2
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +8 -8
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +14 -14
  33. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +2 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +28 -9
  35. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +226 -123
  36. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js +4 -4
  37. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewWelcomeController.js +4 -4
  38. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  41. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.d.ts +3 -1
  42. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.js +9 -4
  43. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.d.ts +1 -3
  44. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +7 -10
  45. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleContentPart.d.ts +3 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleContentPart.js +22 -4
  48. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleMarkdownContentPart.d.ts +2 -1
  49. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleMarkdownContentPart.js +11 -3
  50. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  52. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +1 -1
  53. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDiffBlockPart.d.ts +0 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDiffBlockPart.js +0 -6
  55. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +2 -2
  56. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatErrorConfirmationPart.d.ts +3 -1
  57. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatErrorConfirmationPart.js +6 -3
  58. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  59. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.d.ts +2 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +5 -4
  61. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +0 -1
  62. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +26 -27
  63. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +3 -0
  64. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +52 -22
  65. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +8 -7
  66. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  67. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.d.ts +2 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +20 -8
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPullRequestContentPart.d.ts +3 -3
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPullRequestContentPart.js +11 -6
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +36 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +166 -45
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +4 -4
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.d.ts +3 -2
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +16 -11
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.d.ts +14 -5
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +98 -26
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +5 -5
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTaskContentPart.js +1 -0
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +10 -1
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +244 -80
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.d.ts +29 -1
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +252 -8
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.d.ts +4 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +39 -18
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +5 -3
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +36 -23
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolOutputContentSubPart.js +5 -5
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.d.ts +5 -7
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +42 -37
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatCodeBlockPill.css +12 -3
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +48 -18
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatHookContentPart.css +9 -6
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatInlineAnchorWidget.css +2 -2
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +351 -422
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +14 -7
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +102 -7
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTipContent.css +69 -19
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/codeBlockPart.css +48 -15
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.d.ts +4 -1
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +47 -23
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.d.ts +0 -1
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.js +0 -5
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +2 -2
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +7 -7
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatSimpleToolProgressPart.d.ts +18 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatSimpleToolProgressPart.js +103 -0
  112. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +15 -18
  113. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +1 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +63 -69
  115. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.d.ts +1 -1
  116. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +7 -9
  117. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.d.ts +3 -1
  118. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +41 -2
  119. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  120. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +3 -3
  121. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.d.ts +1 -1
  122. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +6 -5
  123. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.js +13 -1
  124. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolStreamingSubPart.js +2 -1
  125. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +11 -11
  126. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +17 -3
  127. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +310 -79
  128. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.d.ts +6 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +13 -4
  130. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.d.ts +35 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.js +441 -0
  132. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +24 -1
  133. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +392 -86
  134. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  135. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +52 -6
  136. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +271 -187
  137. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +68 -0
  138. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +668 -0
  139. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +12 -1
  140. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +57 -16
  141. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.d.ts +2 -6
  142. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +78 -45
  143. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.d.ts +1 -0
  144. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.d.ts +28 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js +86 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +9 -5
  147. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +4 -3
  148. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +393 -134
  149. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chatViewWelcome.css +36 -17
  150. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.d.ts +2 -2
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +20 -13
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.d.ts +25 -6
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +141 -79
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageWidget.css +18 -13
  155. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.d.ts +7 -0
  156. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.js +108 -27
  157. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.d.ts +1 -0
  158. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +20 -14
  159. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.d.ts +4 -6
  160. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.js +74 -32
  161. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.d.ts +11 -2
  162. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +68 -27
  163. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.d.ts +5 -0
  164. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.js +125 -13
  165. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatGutterAffordance.d.ts +8 -11
  166. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatGutterAffordance.js +54 -45
  167. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.d.ts +11 -10
  168. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.js +172 -112
  169. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +5 -5
  170. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  171. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChat.css +0 -42
  172. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatEditorAffordance.css +27 -3
  173. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatOverlayWidget.css +83 -2
  174. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.d.ts +8 -1
  175. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +58 -33
  176. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  177. package/vscode/src/vs/workbench/contrib/mcp/common/modelContextProtocolApps.d.ts +1 -548
  178. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  179. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  180. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  181. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  182. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.js +0 -187
  183. /package/vscode/src/vs/{workbench/contrib → platform}/mcp/common/modelContextProtocolApps.js +0 -0
@@ -2,7 +2,7 @@
2
2
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
3
  import { sep } from '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
4
4
  import { raceCancellationError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
5
- import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
5
+ import { CancellationToken, CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
6
6
  import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
7
7
  import { Emitter, AsyncEmitter, Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
8
8
  import { Disposable, DisposableMap, DisposableStore, combinedDisposable, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
@@ -40,7 +40,7 @@ import { renderAsPlaintext } from '@codingame/monaco-vscode-api/vscode/vs/base/b
40
40
  import { IViewsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/views/common/viewsService.service';
41
41
  import { ChatViewId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat';
42
42
  import { AgentSessionProviders, backgroundAgentDisplayName, getAgentSessionProviderName } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/agentSessions/agentSessions';
43
- import { BugIndicatingError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
43
+ import { isCancellationError, BugIndicatingError } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errors';
44
44
  import { IEditorGroupsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorGroupsService.service';
45
45
  import { LocalChatSessionUri } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatUri';
46
46
  import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
@@ -53,39 +53,39 @@ import { observableSignalFromEvent } from '@codingame/monaco-vscode-api/vscode/v
53
53
  const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
54
54
  extensionPoint: "chatSessions",
55
55
  jsonSchema: {
56
- description: ( localize(5508, "Contributes chat session integrations to the chat widget.")),
56
+ description: ( localize(5941, "Contributes chat session integrations to the chat widget.")),
57
57
  type: "array",
58
58
  items: {
59
59
  type: "object",
60
60
  additionalProperties: false,
61
61
  properties: {
62
62
  type: {
63
- description: ( localize(5509, "Unique identifier for the type of chat session.")),
63
+ description: ( localize(5942, "Unique identifier for the type of chat session.")),
64
64
  type: "string"
65
65
  },
66
66
  name: {
67
67
  description: ( localize(
68
- 5510,
68
+ 5943,
69
69
  "Name of the dynamically registered chat participant (eg: @agent). Must not contain whitespace."
70
70
  )),
71
71
  type: "string",
72
72
  pattern: "^[\\w-]+$"
73
73
  },
74
74
  displayName: {
75
- description: ( localize(5511, "A longer name for this item which is used for display in menus.")),
75
+ description: ( localize(5944, "A longer name for this item which is used for display in menus.")),
76
76
  type: "string"
77
77
  },
78
78
  description: {
79
- description: ( localize(5512, "Description of the chat session for use in menus and tooltips.")),
79
+ description: ( localize(5945, "Description of the chat session for use in menus and tooltips.")),
80
80
  type: "string"
81
81
  },
82
82
  when: {
83
- description: ( localize(5513, "Condition which must be true to show this item.")),
83
+ description: ( localize(5946, "Condition which must be true to show this item.")),
84
84
  type: "string"
85
85
  },
86
86
  icon: {
87
87
  description: ( localize(
88
- 5514,
88
+ 5947,
89
89
  "Icon identifier (codicon ID) for the chat session editor tab. For example, \"$(github)\" or \"$(cloud)\"."
90
90
  )),
91
91
  anyOf: [{
@@ -94,22 +94,22 @@ const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
94
94
  type: "object",
95
95
  properties: {
96
96
  light: {
97
- description: ( localize(5515, "Icon path when a light theme is used")),
97
+ description: ( localize(5948, "Icon path when a light theme is used")),
98
98
  type: "string"
99
99
  },
100
100
  dark: {
101
- description: ( localize(5516, "Icon path when a dark theme is used")),
101
+ description: ( localize(5949, "Icon path when a dark theme is used")),
102
102
  type: "string"
103
103
  }
104
104
  }
105
105
  }]
106
106
  },
107
107
  order: {
108
- description: ( localize(5517, "Order in which this item should be displayed.")),
108
+ description: ( localize(5950, "Order in which this item should be displayed.")),
109
109
  type: "integer"
110
110
  },
111
111
  alternativeIds: {
112
- description: ( localize(5518, "Alternative identifiers for backward compatibility.")),
112
+ description: ( localize(5951, "Alternative identifiers for backward compatibility.")),
113
113
  type: "array",
114
114
  items: {
115
115
  type: "string"
@@ -117,87 +117,91 @@ const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
117
117
  },
118
118
  welcomeTitle: {
119
119
  description: ( localize(
120
- 5519,
120
+ 5952,
121
121
  "Title text to display in the chat welcome view for this session type."
122
122
  )),
123
123
  type: "string"
124
124
  },
125
125
  welcomeMessage: {
126
126
  description: ( localize(
127
- 5520,
127
+ 5953,
128
128
  "Message text (supports markdown) to display in the chat welcome view for this session type."
129
129
  )),
130
130
  type: "string"
131
131
  },
132
132
  welcomeTips: {
133
133
  description: ( localize(
134
- 5521,
134
+ 5954,
135
135
  "Tips text (supports markdown and theme icons) to display in the chat welcome view for this session type."
136
136
  )),
137
137
  type: "string"
138
138
  },
139
139
  inputPlaceholder: {
140
140
  description: ( localize(
141
- 5522,
141
+ 5955,
142
142
  "Placeholder text to display in the chat input box for this session type."
143
143
  )),
144
144
  type: "string"
145
145
  },
146
146
  capabilities: {
147
- description: ( localize(5523, "Optional capabilities for this chat session.")),
147
+ description: ( localize(5956, "Optional capabilities for this chat session.")),
148
148
  type: "object",
149
149
  additionalProperties: false,
150
150
  properties: {
151
151
  supportsFileAttachments: {
152
152
  description: ( localize(
153
- 5524,
153
+ 5957,
154
154
  "Whether this chat session supports attaching files or file references."
155
155
  )),
156
156
  type: "boolean"
157
157
  },
158
158
  supportsToolAttachments: {
159
159
  description: ( localize(
160
- 5525,
160
+ 5958,
161
161
  "Whether this chat session supports attaching tools or tool references."
162
162
  )),
163
163
  type: "boolean"
164
164
  },
165
165
  supportsMCPAttachments: {
166
- description: ( localize(5526, "Whether this chat session supports attaching MCP resources.")),
166
+ description: ( localize(5959, "Whether this chat session supports attaching MCP resources.")),
167
167
  type: "boolean"
168
168
  },
169
169
  supportsImageAttachments: {
170
- description: ( localize(5527, "Whether this chat session supports attaching images.")),
170
+ description: ( localize(5960, "Whether this chat session supports attaching images.")),
171
171
  type: "boolean"
172
172
  },
173
173
  supportsSearchResultAttachments: {
174
- description: ( localize(5528, "Whether this chat session supports attaching search results.")),
174
+ description: ( localize(5961, "Whether this chat session supports attaching search results.")),
175
175
  type: "boolean"
176
176
  },
177
177
  supportsInstructionAttachments: {
178
- description: ( localize(5529, "Whether this chat session supports attaching instructions.")),
178
+ description: ( localize(5962, "Whether this chat session supports attaching instructions.")),
179
179
  type: "boolean"
180
180
  },
181
181
  supportsSourceControlAttachments: {
182
182
  description: ( localize(
183
- 5530,
183
+ 5963,
184
184
  "Whether this chat session supports attaching source control changes."
185
185
  )),
186
186
  type: "boolean"
187
187
  },
188
188
  supportsProblemAttachments: {
189
- description: ( localize(5531, "Whether this chat session supports attaching problems.")),
189
+ description: ( localize(5964, "Whether this chat session supports attaching problems.")),
190
190
  type: "boolean"
191
191
  },
192
192
  supportsSymbolAttachments: {
193
- description: ( localize(5532, "Whether this chat session supports attaching symbols.")),
193
+ description: ( localize(5965, "Whether this chat session supports attaching symbols.")),
194
+ type: "boolean"
195
+ },
196
+ supportsPromptAttachments: {
197
+ description: ( localize(5966, "Whether this chat session supports attaching prompts.")),
194
198
  type: "boolean"
195
199
  }
196
200
  }
197
201
  },
198
202
  commands: {
199
203
  markdownDescription: ( localize(
200
- 5533,
204
+ 5967,
201
205
  "Commands available for this chat session, which the user can invoke with a `/`."
202
206
  )),
203
207
  type: "array",
@@ -214,17 +218,17 @@ const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
214
218
  properties: {
215
219
  name: {
216
220
  description: ( localize(
217
- 5534,
221
+ 5968,
218
222
  "A short name by which this command is referred to in the UI, e.g. `fix` or `explain` for commands that fix an issue or explain code. The name should be unique among the commands provided by this participant."
219
223
  )),
220
224
  type: "string"
221
225
  },
222
226
  description: {
223
- description: ( localize(5535, "A description of this command.")),
227
+ description: ( localize(5969, "A description of this command.")),
224
228
  type: "string"
225
229
  },
226
230
  when: {
227
- description: ( localize(5536, "A condition which must be true to enable this command.")),
231
+ description: ( localize(5970, "A condition which must be true to enable this command.")),
228
232
  type: "string"
229
233
  }
230
234
  }
@@ -232,7 +236,7 @@ const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
232
236
  },
233
237
  canDelegate: {
234
238
  description: ( localize(
235
- 5537,
239
+ 5971,
236
240
  "Whether delegation is supported. Default is false. Note that enabling this is experimental and may not be respected at all times."
237
241
  )),
238
242
  type: "boolean",
@@ -240,10 +244,18 @@ const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
240
244
  },
241
245
  customAgentTarget: {
242
246
  description: ( localize(
243
- 5538,
247
+ 5972,
244
248
  "When set, the chat session will show a filtered mode picker that prefers custom agents whose target property matches this value. Custom agents without a target property are still shown in all session types. This enables the use of standard agent/mode with contributed sessions."
245
249
  )),
246
250
  type: "string"
251
+ },
252
+ requiresCustomModels: {
253
+ description: ( localize(
254
+ 5973,
255
+ "When set, the chat session will show a filtered model picker that prefers custom models. This enables the use of standard model picker with contributed sessions."
256
+ )),
257
+ type: "boolean",
258
+ default: false
247
259
  }
248
260
  },
249
261
  required: ["type", "name", "displayName", "description"]
@@ -313,7 +325,7 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
313
325
  this._menuService = _menuService;
314
326
  this._themeService = _themeService;
315
327
  this._labelService = _labelService;
316
- this._itemsProviders = ( new Map());
328
+ this._itemControllers = ( new Map());
317
329
  this._contributions = ( new Map());
318
330
  this._contributionDisposables = this._register(( new DisposableMap()));
319
331
  this._contentProviders = ( new Map());
@@ -332,12 +344,14 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
332
344
  this._onRequestNotifyExtension = this._register(( new AsyncEmitter()));
333
345
  this.inProgressMap = ( new Map());
334
346
  this._sessionTypeOptions = ( new Map());
347
+ this._sessionTypeNewSessionOptions = ( new Map());
335
348
  this._sessionTypeIcons = ( new Map());
336
349
  this._sessionTypeWelcomeTitles = ( new Map());
337
350
  this._sessionTypeWelcomeMessages = ( new Map());
338
351
  this._sessionTypeWelcomeTips = ( new Map());
339
352
  this._sessionTypeInputPlaceholders = ( new Map());
340
353
  this._sessions = ( new ResourceMap());
354
+ this._resourceAliases = ( new ResourceMap());
341
355
  this._hasCanDelegateProvidersKey = ChatContextKeys.hasCanDelegateProviders.bindTo(this._contextKeyService);
342
356
  this._register(extensionPoint.setHandler(extensions => {
343
357
  for (const ext of extensions) {
@@ -359,7 +373,7 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
359
373
  this._evaluateAvailability();
360
374
  }));
361
375
  const builtinSessionProviders = [AgentSessionProviders.Local];
362
- const contributedSessionProviders = observableFromEvent(this.onDidChangeAvailability, () => Array.from(( this._contributions.keys())).filter(isAgentSessionProviderType)).recomputeInitiallyAndOnChange(this._store);
376
+ const contributedSessionProviders = observableFromEvent(this.onDidChangeAvailability, () => Array.from(( this._contributions.keys())).filter(key => ( this._contributionDisposables.has(key)) && isAgentSessionProviderType(key))).recomputeInitiallyAndOnChange(this._store);
363
377
  this._register(autorun(reader => {
364
378
  backgroundAgentDisplayName.read(reader);
365
379
  const activatedProviders = [...builtinSessionProviders, ...contributedSessionProviders.read(reader)];
@@ -371,7 +385,11 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
371
385
  }
372
386
  }
373
387
  }));
374
- this._register(this.onDidChangeSessionItems(chatSessionType => {
388
+ this._register(this.onDidChangeSessionItems((
389
+ {
390
+ chatSessionType
391
+ }
392
+ ) => {
375
393
  this.updateInProgressStatus(chatSessionType).catch(error => {
376
394
  this._logService.warn(`Failed to update progress status for '${chatSessionType}':`, error);
377
395
  });
@@ -388,11 +406,11 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
388
406
  reportInProgress(chatSessionType, count) {
389
407
  let displayName;
390
408
  if (chatSessionType === AgentSessionProviders.Local) {
391
- displayName = ( localize(5539, "Local Agent"));
409
+ displayName = ( localize(5974, "Local Agent"));
392
410
  } else if (chatSessionType === AgentSessionProviders.Background) {
393
- displayName = ( localize(5540, "Background Agent"));
411
+ displayName = ( localize(5975, "Background Agent"));
394
412
  } else if (chatSessionType === AgentSessionProviders.Cloud) {
395
- displayName = ( localize(5541, "Cloud Agent"));
413
+ displayName = ( localize(5976, "Cloud Agent"));
396
414
  } else {
397
415
  displayName = this._contributions.get(chatSessionType)?.contribution.displayName;
398
416
  }
@@ -548,7 +566,7 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
548
566
  constructor() {
549
567
  super({
550
568
  id: `workbench.action.chat.openSessionWithPrompt.${contribution.type}`,
551
- title: ( localize2(5542, "New {0} with Prompt", contribution.displayName)),
569
+ title: ( localize2(5977, "New {0} with Prompt", contribution.displayName)),
552
570
  category: CHAT_CATEGORY,
553
571
  icon: Codicon.plus,
554
572
  f1: false,
@@ -562,12 +580,20 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
562
580
  } = contribution;
563
581
  if (chatOptions) {
564
582
  const resource = URI.revive(chatOptions.resource);
565
- const ref = await chatService.loadSessionForResource(resource, ChatAgentLocation.Chat, CancellationToken.None);
566
- await chatService.sendRequest(resource, chatOptions.prompt, {
567
- agentIdSilent: type,
568
- attachedContext: chatOptions.attachedContext
569
- });
570
- ref?.dispose();
583
+ const ref = await chatService.acquireOrLoadSession(resource, ChatAgentLocation.Chat, CancellationToken.None);
584
+ try {
585
+ const result = await chatService.sendRequest(resource, chatOptions.prompt, {
586
+ agentIdSilent: type,
587
+ attachedContext: chatOptions.attachedContext
588
+ });
589
+ if (result.kind === "queued") {
590
+ await result.deferred;
591
+ } else if (result.kind === "sent") {
592
+ await result.data.responseCompletePromise;
593
+ }
594
+ } finally {
595
+ ref?.dispose();
596
+ }
571
597
  }
572
598
  }
573
599
  }),
@@ -575,7 +601,7 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
575
601
  constructor() {
576
602
  super({
577
603
  id: `workbench.action.chat.openNewSessionEditor.${contribution.type}`,
578
- title: ( localize2(5543, "New {0}", contribution.displayName)),
604
+ title: ( localize2(5978, "New {0}", contribution.displayName)),
579
605
  category: CHAT_CATEGORY,
580
606
  icon: Codicon.plus,
581
607
  f1: true,
@@ -598,7 +624,7 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
598
624
  constructor() {
599
625
  super({
600
626
  id: `workbench.action.chat.openNewSessionSidebar.${contribution.type}`,
601
- title: ( localize2(5544, "New {0}", contribution.displayName)),
627
+ title: ( localize2(5979, "New {0}", contribution.displayName)),
602
628
  category: CHAT_CATEGORY,
603
629
  icon: Codicon.plus,
604
630
  f1: false,
@@ -641,13 +667,17 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
641
667
  }
642
668
  if (hasChanges) {
643
669
  this._onDidChangeAvailability.fire();
644
- for (const provider of ( this._itemsProviders.values())) {
645
- this._onDidChangeItemsProviders.fire(provider);
670
+ for (const chatSessionType of ( this._itemControllers.keys())) {
671
+ this._onDidChangeItemsProviders.fire({
672
+ chatSessionType
673
+ });
646
674
  }
647
675
  for (const {
648
676
  contribution
649
677
  } of ( this._contributions.values())) {
650
- this._onDidChangeSessionItems.fire(contribution.type);
678
+ this._onDidChangeSessionItems.fire({
679
+ chatSessionType: contribution.type
680
+ });
651
681
  }
652
682
  }
653
683
  this._updateHasCanDelegateProvidersContextKey();
@@ -741,6 +771,9 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
741
771
  return this._isContributionAvailable(contribution) ? contribution : undefined;
742
772
  }
743
773
  async activateChatSessionItemProvider(chatViewType) {
774
+ await this.doActivateChatSessionItemController(chatViewType);
775
+ }
776
+ async doActivateChatSessionItemController(chatViewType) {
744
777
  await this._extensionService.whenInstalledExtensionsRegistered();
745
778
  const resolvedType = this._resolveToPrimaryType(chatViewType);
746
779
  if (resolvedType) {
@@ -748,13 +781,14 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
748
781
  }
749
782
  const contribution = this._contributions.get(chatViewType)?.contribution;
750
783
  if (contribution && !this._isContributionAvailable(contribution)) {
751
- return undefined;
784
+ return false;
752
785
  }
753
- if (( this._itemsProviders.has(chatViewType))) {
754
- return this._itemsProviders.get(chatViewType);
786
+ if (( this._itemControllers.has(chatViewType))) {
787
+ return true;
755
788
  }
756
789
  await this._extensionService.activateByEvent(`onChatSession:${chatViewType}`);
757
- return this._itemsProviders.get(chatViewType);
790
+ const controller = this._itemControllers.get(chatViewType);
791
+ return !!controller;
758
792
  }
759
793
  async canResolveChatSession(chatSessionResource) {
760
794
  await this._extensionService.whenInstalledExtensionsRegistered();
@@ -769,73 +803,78 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
769
803
  await this._extensionService.activateByEvent(`onChatSession:${chatSessionResource.scheme}`);
770
804
  return ( this._contentProviders.has(chatSessionResource.scheme));
771
805
  }
772
- async getChatSessionItems(providersToResolve, token) {
773
- const results = [];
774
- const resolvedProviderTypes = ( new Set());
775
- for (const contrib of this.getAllChatSessionContributions()) {
806
+ async tryActivateControllers(providersToResolve) {
807
+ await Promise.all(( this.getAllChatSessionContributions().map(async contrib => {
776
808
  if (providersToResolve && !providersToResolve.includes(contrib.type)) {
777
- continue;
809
+ return;
778
810
  }
779
- const provider = await this.activateChatSessionItemProvider(contrib.type);
780
- if (!provider) {
811
+ if (!(await this.doActivateChatSessionItemController(contrib.type))) {
781
812
  if (providersToResolve?.includes(contrib.type)) {
782
813
  this._logService.trace(
783
814
  `[ChatSessionsService] No enabled provider found for chat session type ${contrib.type}`
784
815
  );
785
816
  }
786
- continue;
787
- }
788
- try {
789
- const providerSessions = await raceCancellationError(provider.provideChatSessionItems(token), token);
790
- this._logService.trace(
791
- `[ChatSessionsService] Resolved ${providerSessions.length} sessions for provider ${provider.chatSessionType}`
792
- );
793
- results.push({
794
- chatSessionType: provider.chatSessionType,
795
- items: providerSessions
796
- });
797
- resolvedProviderTypes.add(provider.chatSessionType);
798
- } catch (error) {
799
- this._logService.error(
800
- `[ChatSessionsService] Failed to resolve sessions for provider ${provider.chatSessionType}`,
801
- error
802
- );
803
- continue;
804
- }
805
- }
806
- for (const [chatSessionType, provider] of this._itemsProviders) {
807
- if (( resolvedProviderTypes.has(chatSessionType))) {
808
- continue;
809
817
  }
810
- if (providersToResolve && !providersToResolve.includes(chatSessionType)) {
811
- continue;
818
+ })));
819
+ }
820
+ async getChatSessionItems(providersToResolve, token) {
821
+ await this.tryActivateControllers(providersToResolve);
822
+ const results = [];
823
+ await Promise.all(( Array.from(this._itemControllers).map(async ([chatSessionType, controllerEntry]) => {
824
+ const resolvedType = this._resolveToPrimaryType(chatSessionType) ?? chatSessionType;
825
+ if (providersToResolve && !providersToResolve.includes(resolvedType)) {
826
+ return;
812
827
  }
813
828
  try {
814
- const providerSessions = await raceCancellationError(provider.provideChatSessionItems(token), token);
829
+ await controllerEntry.initialRefresh;
830
+ const providerSessions = controllerEntry.controller.items;
815
831
  this._logService.trace(
816
- `[ChatSessionsService] Resolved ${providerSessions.length} sessions for built-in provider ${chatSessionType}`
832
+ `[ChatSessionsService] Resolved ${providerSessions.length} sessions for provider ${resolvedType}`
817
833
  );
818
834
  results.push({
819
- chatSessionType,
835
+ chatSessionType: resolvedType,
820
836
  items: providerSessions
821
837
  });
822
- } catch (error) {
823
- this._logService.error(
824
- `[ChatSessionsService] Failed to resolve sessions for built-in provider ${chatSessionType}`,
825
- error
826
- );
827
- continue;
838
+ } catch (err) {
839
+ if (!isCancellationError(err)) {
840
+ this._logService.error(
841
+ `[ChatSessionsService] Failed to resolve sessions for provider ${resolvedType}`,
842
+ err
843
+ );
844
+ }
828
845
  }
829
- }
846
+ })));
830
847
  return results;
831
848
  }
832
- registerChatSessionItemProvider(provider) {
833
- const chatSessionType = provider.chatSessionType;
834
- this._itemsProviders.set(chatSessionType, provider);
835
- this._onDidChangeItemsProviders.fire(provider);
849
+ async refreshChatSessionItems(providersToResolve, token) {
850
+ await this.tryActivateControllers(providersToResolve);
851
+ await Promise.all(( Array.from(this._itemControllers).map(async ([chatSessionType, controllerEntry]) => {
852
+ try {
853
+ await controllerEntry.controller.refresh(token);
854
+ } catch (err) {
855
+ if (!isCancellationError(err)) {
856
+ this._logService.error(
857
+ `[ChatSessionsService] Failed to resolve sessions for provider ${chatSessionType}`,
858
+ err
859
+ );
860
+ }
861
+ }
862
+ })));
863
+ }
864
+ registerChatSessionItemController(chatSessionType, controller) {
836
865
  const disposables = ( new DisposableStore());
837
- disposables.add(provider.onDidChangeChatSessionItems(() => {
838
- this._onDidChangeSessionItems.fire(chatSessionType);
866
+ const initialRefreshCts = disposables.add(( new CancellationTokenSource()));
867
+ this._itemControllers.set(chatSessionType, {
868
+ controller,
869
+ initialRefresh: controller.refresh(initialRefreshCts.token)
870
+ });
871
+ this._onDidChangeItemsProviders.fire({
872
+ chatSessionType
873
+ });
874
+ disposables.add(controller.onDidChangeChatSessionItems(() => {
875
+ this._onDidChangeSessionItems.fire({
876
+ chatSessionType
877
+ });
839
878
  }));
840
879
  this.updateInProgressStatus(chatSessionType).catch(error => {
841
880
  this._logService.warn(
@@ -845,11 +884,14 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
845
884
  });
846
885
  return {
847
886
  dispose: () => {
887
+ initialRefreshCts.cancel();
848
888
  disposables.dispose();
849
- const provider = this._itemsProviders.get(chatSessionType);
850
- if (provider) {
851
- this._itemsProviders.delete(chatSessionType);
852
- this._onDidChangeItemsProviders.fire(provider);
889
+ const controller = this._itemControllers.get(chatSessionType);
890
+ if (controller) {
891
+ this._itemControllers.delete(chatSessionType);
892
+ this._onDidChangeItemsProviders.fire({
893
+ chatSessionType
894
+ });
853
895
  }
854
896
  }
855
897
  };
@@ -948,34 +990,72 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
948
990
  const confirmationTitle = state.confirmationMessages?.title;
949
991
  const titleMessage = confirmationTitle && (typeof confirmationTitle === "string" ? confirmationTitle : confirmationTitle.value);
950
992
  const descriptionValue = typeof description === "string" ? description : description.value;
951
- description = titleMessage ?? ( localize(5545, "Waiting for confirmation: {0}", descriptionValue));
993
+ description = titleMessage ?? ( localize(5980, "Waiting for confirmation: {0}", descriptionValue));
952
994
  }
953
995
  } else if (part.kind === "toolInvocationSerialized") {
954
996
  description = part.invocationMessage;
955
997
  } else if (part.kind === "progressMessage") {
956
998
  description = part.content;
957
999
  } else if (part.kind === "thinking") {
958
- description = ( localize(5546, "Thinking..."));
1000
+ description = ( localize(5981, "Thinking..."));
959
1001
  }
960
1002
  }
961
1003
  return description ? renderAsPlaintext(description, {
962
1004
  useLinkFormatter: true
963
1005
  }) : "";
964
1006
  }
1007
+ async createNewChatSessionItem(chatSessionType, request, token) {
1008
+ const controllerData = this._itemControllers.get(chatSessionType);
1009
+ if (!controllerData) {
1010
+ return undefined;
1011
+ }
1012
+ await controllerData.initialRefresh;
1013
+ return controllerData.controller.newChatSessionItem?.(request, token);
1014
+ }
965
1015
  async getOrCreateChatSession(sessionResource, token) {
966
- const existingSessionData = this._sessions.get(sessionResource);
967
- if (existingSessionData) {
968
- return existingSessionData.session;
1016
+ {
1017
+ const existingSessionData = this._sessions.get(sessionResource);
1018
+ if (existingSessionData) {
1019
+ return existingSessionData.session;
1020
+ }
969
1021
  }
970
1022
  if (!(await raceCancellationError(this.canResolveChatSession(sessionResource), token))) {
971
1023
  throw Error(`Can not find provider for ${sessionResource}`);
972
1024
  }
1025
+ {
1026
+ const existingSessionData = this._sessions.get(sessionResource);
1027
+ if (existingSessionData) {
1028
+ return existingSessionData.session;
1029
+ }
1030
+ }
973
1031
  const resolvedType = this._resolveToPrimaryType(sessionResource.scheme) || sessionResource.scheme;
974
1032
  const provider = this._contentProviders.get(resolvedType);
975
1033
  if (!provider) {
976
1034
  throw Error(`Can not find provider for ${sessionResource}`);
977
1035
  }
978
- const session = await raceCancellationError(provider.provideChatSessionContent(sessionResource, token), token);
1036
+ let session;
1037
+ const newSessionOptions = this.getNewSessionOptionsForSessionType(resolvedType);
1038
+ if (sessionResource.path.startsWith("/untitled") && newSessionOptions) {
1039
+ session = {
1040
+ sessionResource: sessionResource,
1041
+ onWillDispose: Event.None,
1042
+ history: [],
1043
+ options: newSessionOptions ?? {},
1044
+ dispose: () => {}
1045
+ };
1046
+ for (const [optionId, value] of Object.entries(newSessionOptions ?? {})) {
1047
+ this.setSessionOption(sessionResource, optionId, value);
1048
+ }
1049
+ } else {
1050
+ session = await raceCancellationError(provider.provideChatSessionContent(sessionResource, token), token);
1051
+ }
1052
+ {
1053
+ const existingSessionData = this._sessions.get(sessionResource);
1054
+ if (existingSessionData) {
1055
+ session.dispose();
1056
+ return existingSessionData.session;
1057
+ }
1058
+ }
979
1059
  const sessionData = ( new ContributedChatSessionData(
980
1060
  session,
981
1061
  sessionResource.scheme,
@@ -987,22 +1067,26 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
987
1067
  }
988
1068
  ));
989
1069
  this._sessions.set(sessionResource, sessionData);
1070
+ this._onDidChangeSessionOptions.fire(sessionResource);
990
1071
  return session;
991
1072
  }
992
1073
  hasAnySessionOptions(sessionResource) {
993
- const session = this._sessions.get(sessionResource);
1074
+ const session = this._sessions.get(this._resolveResource(sessionResource));
994
1075
  return !!session && !!session.options && ( Object.keys(session.options)).length > 0;
995
1076
  }
996
1077
  getSessionOption(sessionResource, optionId) {
997
- const session = this._sessions.get(sessionResource);
1078
+ const session = this._sessions.get(this._resolveResource(sessionResource));
998
1079
  return session?.getOption(optionId);
999
1080
  }
1000
1081
  setSessionOption(sessionResource, optionId, value) {
1001
- const session = this._sessions.get(sessionResource);
1082
+ const session = this._sessions.get(this._resolveResource(sessionResource));
1002
1083
  return !!session?.setOption(optionId, value);
1003
1084
  }
1004
- notifySessionItemsChanged(chatSessionType) {
1005
- this._onDidChangeSessionItems.fire(chatSessionType);
1085
+ _resolveResource(resource) {
1086
+ return this._resourceAliases.get(resource) ?? resource;
1087
+ }
1088
+ registerSessionResourceAlias(untitledResource, realResource) {
1089
+ this._resourceAliases.set(realResource, untitledResource);
1006
1090
  }
1007
1091
  setOptionGroupsForSessionType(chatSessionType, handle, optionGroups) {
1008
1092
  if (optionGroups) {
@@ -1015,6 +1099,12 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
1015
1099
  getOptionGroupsForSessionType(chatSessionType) {
1016
1100
  return this._sessionTypeOptions.get(chatSessionType);
1017
1101
  }
1102
+ getNewSessionOptionsForSessionType(chatSessionType) {
1103
+ return this._sessionTypeNewSessionOptions.get(chatSessionType);
1104
+ }
1105
+ setNewSessionOptionsForSessionType(chatSessionType, options) {
1106
+ this._sessionTypeNewSessionOptions.set(chatSessionType, options);
1107
+ }
1018
1108
  async notifySessionOptionsChange(sessionResource, updates) {
1019
1109
  if (!updates.length) {
1020
1110
  return;
@@ -1032,7 +1122,7 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
1032
1122
  for (const u of updates) {
1033
1123
  this.setSessionOption(sessionResource, u.optionId, u.value);
1034
1124
  }
1035
- this._onDidChangeSessionOptions.fire(sessionResource);
1125
+ this._onDidChangeSessionOptions.fire(this._resolveResource(sessionResource));
1036
1126
  this._logService.trace(
1037
1127
  `[ChatSessionsService] notifySessionOptionsChange: finished for ${sessionResource}`
1038
1128
  );
@@ -1065,6 +1155,10 @@ let ChatSessionsService = class ChatSessionsService extends Disposable {
1065
1155
  const contribution = this._contributions.get(chatSessionType)?.contribution;
1066
1156
  return contribution?.customAgentTarget ?? Target.Undefined;
1067
1157
  }
1158
+ requiresCustomModelsForSessionType(chatSessionType) {
1159
+ const contribution = this._contributions.get(chatSessionType)?.contribution;
1160
+ return !!contribution?.requiresCustomModels;
1161
+ }
1068
1162
  getContentProviderSchemes() {
1069
1163
  return Array.from(( this._contentProviders.keys()));
1070
1164
  }
@@ -1075,7 +1169,7 @@ function registerNewSessionInPlaceAction(type, displayName) {
1075
1169
  constructor() {
1076
1170
  super({
1077
1171
  id: `workbench.action.chat.openNewChatSessionInPlace.${type}`,
1078
- title: ( localize2(5547, "New {0}", displayName)),
1172
+ title: ( localize2(5982, "New {0}", displayName)),
1079
1173
  category: CHAT_CATEGORY,
1080
1174
  f1: false,
1081
1175
  precondition: ChatContextKeys.enabled
@@ -1091,7 +1185,7 @@ function registerNewSessionInPlaceAction(type, displayName) {
1091
1185
  }
1092
1186
  await openChatSession(accessor, {
1093
1187
  type: type,
1094
- displayName: ( localize(5548, "Chat")),
1188
+ displayName: ( localize(5983, "Chat")),
1095
1189
  position: chatSessionPosition,
1096
1190
  replaceEditor: true
1097
1191
  });
@@ -1103,7 +1197,7 @@ function registerNewSessionExternalAction(type, displayName, commandId) {
1103
1197
  constructor() {
1104
1198
  super({
1105
1199
  id: `workbench.action.chat.openNewChatSessionExternal.${type}`,
1106
- title: ( localize2(5549, "New {0}", displayName)),
1200
+ title: ( localize2(5984, "New {0}", displayName)),
1107
1201
  category: CHAT_CATEGORY,
1108
1202
  f1: false,
1109
1203
  precondition: ChatContextKeys.enabled
@@ -1146,7 +1240,7 @@ async function openChatSession(accessor, openOptions, chatSendOptions) {
1146
1240
  override: ChatEditorInput.EditorID,
1147
1241
  pinned: true,
1148
1242
  title: {
1149
- fallback: ( localize(5550, "{0}", openOptions.displayName))
1243
+ fallback: ( localize(5985, "{0}", openOptions.displayName))
1150
1244
  }
1151
1245
  };
1152
1246
  if (openOptions.replaceEditor) {
@@ -1184,6 +1278,15 @@ async function openChatSession(accessor, openOptions, chatSendOptions) {
1184
1278
  }
1185
1279
  if (chatSendOptions) {
1186
1280
  try {
1281
+ if (chatSendOptions.initialSessionOptions) {
1282
+ const model = chatService.getSession(resource);
1283
+ if (model?.contributedChatSession) {
1284
+ model.setContributedChatSession({
1285
+ ...model.contributedChatSession,
1286
+ initialSessionOptions: chatSendOptions.initialSessionOptions
1287
+ });
1288
+ }
1289
+ }
1187
1290
  await chatService.sendRequest(resource, chatSendOptions.prompt, {
1188
1291
  agentIdSilent: openOptions.type,
1189
1292
  attachedContext: chatSendOptions.attachedContext