@codingame/monaco-vscode-katex-common 32.0.2 → 33.0.9

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 (142) hide show
  1. package/package.json +3 -3
  2. package/vscode/src/vs/platform/actions/browser/buttonbar.js +2 -2
  3. package/vscode/src/vs/platform/agentHost/common/claudeSessionConfigKeys.d.ts +30 -0
  4. package/vscode/src/vs/platform/agentHost/common/claudeSessionConfigKeys.js +8 -0
  5. package/vscode/src/vs/platform/agentHost/common/sessionConfigKeys.d.ts +32 -0
  6. package/vscode/src/vs/platform/agentHost/common/sessionConfigKeys.js +13 -0
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +16 -16
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +9 -9
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +56 -36
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +10 -10
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +11 -11
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +13 -13
  14. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.contribution.d.ts +45 -0
  15. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.contribution.js +114 -0
  16. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.d.ts +87 -0
  17. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.js +502 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostGenericConfigChips.d.ts +45 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostGenericConfigChips.js +188 -0
  20. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/media/agentHostChatInputPicker.css +153 -0
  21. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +8 -8
  22. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +2 -2
  23. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +9 -9
  24. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
  25. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +30 -30
  26. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +52 -52
  27. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +13 -13
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +34 -34
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +1 -1
  30. package/vscode/src/vs/workbench/contrib/chat/browser/tools/chatToolRiskAssessmentService.js +4 -4
  31. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
  32. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  33. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +10 -10
  34. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.d.ts +1 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.js +23 -20
  36. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  37. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  38. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +1 -1
  39. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  41. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  42. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.d.ts +13 -1
  43. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +40 -13
  44. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +3 -3
  45. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +13 -13
  48. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +4 -1
  49. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +217 -13
  50. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +8 -8
  51. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  52. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPlanReviewPart.js +30 -30
  53. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +1 -1
  54. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +44 -44
  55. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +4 -4
  56. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +6 -6
  57. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +5 -5
  58. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +10 -10
  59. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +6 -6
  60. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  61. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +2 -0
  62. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +36 -23
  63. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +12 -9
  64. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +17 -17
  65. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +1 -3
  66. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +8 -13
  67. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +14 -14
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +16 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +1 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +1 -1
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMissingSandboxDepsConfirmationSubPart.js +2 -2
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.js +6 -6
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +24 -21
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +6 -1
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +72 -23
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationCarouselPart.js +8 -8
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +6 -6
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.d.ts +2 -4
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +7 -22
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +5 -5
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +5 -5
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.js +3 -3
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/media/toolRiskBadge.css +3 -3
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/toolRiskBadgeWidget.d.ts +1 -0
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/toolRiskBadgeWidget.js +25 -5
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +11 -11
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +9 -1
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +41 -27
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +31 -25
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationWidget.js +1 -1
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +4 -0
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +89 -27
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +4 -2
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +203 -107
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelSelectionLogic.d.ts +6 -1
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelSelectionLogic.js +3 -3
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatPhoneInputPresenter.js +2 -2
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +5 -5
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +5 -5
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.js +1 -1
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +18 -18
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +3 -3
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +32 -81
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +7 -7
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +4 -4
  112. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +6 -6
  113. package/vscode/src/vs/workbench/contrib/chat/common/chatPermissionWarnings.js +6 -6
  114. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +18 -18
  115. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +3 -3
  116. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +5 -5
  117. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  118. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChat.css +2 -2
  119. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +30 -30
  120. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  121. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  122. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  123. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.js +2 -2
  124. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +24 -24
  125. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.js +3 -3
  126. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.js +7 -7
  127. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.js +1 -1
  128. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.js +5 -5
  129. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.js +1 -1
  130. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  131. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  132. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
  133. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +4 -0
  134. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
  135. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
  136. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +4 -4
  137. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +29 -7
  138. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +27 -8
  139. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +17 -8
  140. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +150 -69
  141. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +1 -2
  142. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +9 -14
@@ -1,10 +1,12 @@
1
1
 
2
2
  import { registerCss } from '@codingame/monaco-vscode-api/css';
3
3
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
4
- import { $ } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
4
+ import { $, addDisposableListener, EventType } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
5
+ import { StandardKeyboardEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/keyboardEvent';
5
6
  import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
6
7
  import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
7
8
  import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
9
+ import { KeyCode } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
8
10
  import { Disposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
9
11
  import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
10
12
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
@@ -16,6 +18,9 @@ import * as toolRiskBadge from './media/toolRiskBadge.css';
16
18
  registerCss(toolRiskBadge);
17
19
  const RISK_BADGE_CLASS = "tool-risk-badge";
18
20
  let ToolRiskBadgeWidget = class ToolRiskBadgeWidget extends Disposable {
21
+ get isDisposed() {
22
+ return this._store.isDisposed;
23
+ }
19
24
  constructor(_hoverService) {
20
25
  super();
21
26
  this._hoverService = _hoverService;
@@ -30,17 +35,32 @@ let ToolRiskBadgeWidget = class ToolRiskBadgeWidget extends Disposable {
30
35
  this._detailsIconEl.classList.add(...ThemeIcon.asClassNameArray(Codicon.info));
31
36
  this._detailsIconEl.tabIndex = 0;
32
37
  this._detailsIconEl.setAttribute("role", "button");
33
- this._detailsIconEl.setAttribute("aria-label", ( localize(7395, "Risk assessment details")));
38
+ this._detailsIconEl.setAttribute("aria-label", ( localize(7474, "Risk assessment details")));
34
39
  this.domNode.append(this._iconEl, this._textEl, this._detailsIconEl);
35
40
  this._refreshDetailsHover();
36
41
  this.setLoading();
42
+ this._register(addDisposableListener(this._detailsIconEl, EventType.CLICK, e => {
43
+ e.preventDefault();
44
+ e.stopPropagation();
45
+ this._hoverService.showManagedHover(this._detailsIconEl);
46
+ }));
47
+ this._register(
48
+ addDisposableListener(this._detailsIconEl, EventType.KEY_DOWN, e => {
49
+ const ev = ( new StandardKeyboardEvent(e));
50
+ if (ev.keyCode === KeyCode.Enter || ev.keyCode === KeyCode.Space) {
51
+ ev.preventDefault();
52
+ ev.stopPropagation();
53
+ this._hoverService.showManagedHover(this._detailsIconEl);
54
+ }
55
+ })
56
+ );
37
57
  }
38
58
  setLoading() {
39
59
  this._setVariant("loading");
40
60
  this._setIcon(ThemeIcon.modify(Codicon.loading, "spin"));
41
- const text = ( localize(7396, "Assessing risk…"));
61
+ const text = ( localize(7475, "Assessing risk…"));
42
62
  this._textEl.textContent = text;
43
- this._setHover(( localize(7397, "Generating a risk assessment for this tool call.")));
63
+ this._setHover(( localize(7476, "Generating a risk assessment for this tool call.")));
44
64
  }
45
65
  setHidden() {
46
66
  this.domNode.style.display = "none";
@@ -102,7 +122,7 @@ let ToolRiskBadgeWidget = class ToolRiskBadgeWidget extends Disposable {
102
122
  );
103
123
  }
104
124
  _buildDetailsMarkdown() {
105
- const aiNote = ( localize(7398, "Risk assessments are AI-generated and may be inaccurate."));
125
+ const aiNote = ( localize(7477, "Risk assessments are AI-generated and may be inaccurate."));
106
126
  const details = this._details;
107
127
  const md = ( new MarkdownString(undefined, {
108
128
  supportThemeIcons: true,
@@ -209,23 +209,23 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
209
209
  getDropTypeName(type) {
210
210
  switch (type) {
211
211
  case ChatDragAndDropType.FILE_INTERNAL:
212
- return localize(7399, "File");
212
+ return localize(7478, "File");
213
213
  case ChatDragAndDropType.FILE_EXTERNAL:
214
- return localize(7399, "File");
214
+ return localize(7478, "File");
215
215
  case ChatDragAndDropType.FOLDER:
216
- return localize(7400, "Folder");
216
+ return localize(7479, "Folder");
217
217
  case ChatDragAndDropType.IMAGE:
218
- return localize(7401, "Image");
218
+ return localize(7480, "Image");
219
219
  case ChatDragAndDropType.SYMBOL:
220
- return localize(7402, "Symbol");
220
+ return localize(7481, "Symbol");
221
221
  case ChatDragAndDropType.MARKER:
222
- return localize(7403, "Problem");
222
+ return localize(7482, "Problem");
223
223
  case ChatDragAndDropType.HTML:
224
- return localize(7404, "URL");
224
+ return localize(7483, "URL");
225
225
  case ChatDragAndDropType.NOTEBOOK_CELL_OUTPUT:
226
- return localize(7405, "Output");
226
+ return localize(7484, "Output");
227
227
  case ChatDragAndDropType.SCM_HISTORY_ITEM:
228
- return localize(7406, "Change");
228
+ return localize(7485, "Change");
229
229
  }
230
230
  }
231
231
  async resolveAttachmentsFromDragEvent(e) {
@@ -297,7 +297,7 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
297
297
  async resolveHTMLAttachContext(e) {
298
298
  const existingAttachmentNames = ( new Set(( this.attachmentModel.attachments.map(attachment => attachment.name))));
299
299
  const createDisplayName = () => {
300
- const baseName = ( localize(7407, "Image from URL"));
300
+ const baseName = ( localize(7486, "Image from URL"));
301
301
  let uniqueName = baseName;
302
302
  let baseNameInstance = 1;
303
303
  while (( existingAttachmentNames.has(uniqueName))) {
@@ -375,7 +375,7 @@ let ChatDragAndDrop = class ChatDragAndDrop extends Themable {
375
375
  }
376
376
  getOverlayText(type) {
377
377
  const typeName = this.getDropTypeName(type);
378
- return localize(7408, "Attach {0} as Context", typeName);
378
+ return localize(7487, "Attach {0} as Context", typeName);
379
379
  }
380
380
  updateOverlayStyles(overlay) {
381
381
  overlay.style.backgroundColor = this.getColor(this.styles.overlayBackground) || "";
@@ -2,7 +2,7 @@ import { CachedListVirtualDelegate, IListElementRenderDetails } from "@codingame
2
2
  import { ITreeNode, ITreeRenderer } from "@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/tree/tree";
3
3
  import { Emitter, Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
4
4
  import { FuzzyScore } from "@codingame/monaco-vscode-api/vscode/vs/base/common/filters";
5
- import { Disposable, DisposableStore, IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
5
+ import { Disposable, DisposableMap, DisposableStore, IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
6
6
  import { ScrollEvent } from "@codingame/monaco-vscode-api/vscode/vs/base/common/scrollable";
7
7
  import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
8
8
  import { MenuWorkbenchToolBar } from "@codingame/monaco-vscode-api/vscode/vs/platform/actions/browser/toolbar";
@@ -36,6 +36,13 @@ export interface IChatListItemTemplate {
36
36
  * they are disposed in a separate cycle after diffing with the next content to render.
37
37
  */
38
38
  renderedParts?: IChatContentPart[];
39
+ /**
40
+ * Tool parts that have been moved out of a thinking part into the row's value
41
+ * container. Their lifecycle matches `renderedParts` (cleared by
42
+ * `clearRenderedParts`), not `elementDisposables` which is cleared on
43
+ * virtualization recycle.
44
+ */
45
+ movedOutToolParts?: DisposableMap<string, IDisposable>;
39
46
  /**
40
47
  * Element used to track whether the template is mounted in the DOM.
41
48
  */
@@ -179,6 +186,7 @@ export declare class ChatListItemRenderer extends Disposable implements ITreeRen
179
186
  private getConfirmationPendingLabel;
180
187
  private removeWorkingProgressContentPart;
181
188
  private updateWorkingProgressForPendingConfirmations;
189
+ private doUpdateWorkingProgressForPendingConfirmations;
182
190
  private getWorkingProgressContentPart;
183
191
  private createUpdateWorkingProgressOnConfirmationEnd;
184
192
  private hasBeenCaughtUpLongEnough;
@@ -14,7 +14,7 @@ import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/even
14
14
  import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
15
15
  import { Iterable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/iterator';
16
16
  import { KeyCode } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
17
- import { Disposable, DisposableStore, dispose, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
17
+ import { Disposable, DisposableStore, dispose, toDisposable, DisposableMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
18
18
  import { ResourceMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/map';
19
19
  import { FileAccess, Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/network';
20
20
  import { clamp } from '@codingame/monaco-vscode-api/vscode/vs/base/common/numbers';
@@ -268,8 +268,9 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
268
268
  if (normalizedHeight === template.currentElement.currentRenderedHeight) {
269
269
  return;
270
270
  }
271
+ const originalStoredHeight = template.currentElement.currentRenderedHeight;
271
272
  template.currentElement.currentRenderedHeight = normalizedHeight;
272
- if (template.currentElement !== this._elementBeingRendered) {
273
+ if (template.currentElement !== this._elementBeingRendered && typeof originalStoredHeight === "number") {
273
274
  this._onDidChangeItemHeight.fire({
274
275
  element: template.currentElement,
275
276
  height: normalizedHeight
@@ -464,7 +465,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
464
465
  const checkpointRestoreContainer = append(rowContainer, $(".checkpoint-restore-container"));
465
466
  append(checkpointRestoreContainer, $(".checkpoint-line-left"));
466
467
  const label = append(checkpointRestoreContainer, $("span.checkpoint-label-text"));
467
- label.textContent = ( localize(7409, "Checkpoint Restored"));
468
+ label.textContent = ( localize(7488, "Checkpoint Restored"));
468
469
  const dot = append(checkpointRestoreContainer, $("span.checkpoint-dot-separator"));
469
470
  dot.textContent = "·";
470
471
  dot.setAttribute("aria-hidden", "true");
@@ -595,6 +596,8 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
595
596
  } else if (isPendingDividerVM(templateData.currentElement)) {
596
597
  clearNode(templateData.value);
597
598
  }
599
+ templateData.movedOutToolParts?.dispose();
600
+ templateData.movedOutToolParts = undefined;
598
601
  if (templateData.titleToolbar) {
599
602
  templateData.titleToolbar.context = undefined;
600
603
  }
@@ -839,15 +842,15 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
839
842
  const label = append(dividerContent, $$1("span.pending-divider-label"));
840
843
  if (element.dividerKind === ChatRequestQueueKind.Steering) {
841
844
  if (element.isSystemInitiated) {
842
- label.textContent = ( localize(7410, "System Notification"));
843
- label.title = ( localize(7411, "System notification will be sent after the next tool call happens"));
845
+ label.textContent = ( localize(7489, "System Notification"));
846
+ label.title = ( localize(7490, "System notification will be sent after the next tool call happens"));
844
847
  } else {
845
- label.textContent = ( localize(7412, "Steering"));
846
- label.title = ( localize(7413, "Steering message will be sent after the next tool call happens"));
848
+ label.textContent = ( localize(7491, "Steering"));
849
+ label.title = ( localize(7492, "Steering message will be sent after the next tool call happens"));
847
850
  }
848
851
  } else {
849
- label.textContent = ( localize(7414, "Queued"));
850
- label.title = ( localize(7415, "Queued messages will be sent after the current request completes"));
852
+ label.textContent = ( localize(7493, "Queued"));
853
+ label.title = ( localize(7494, "Queued messages will be sent after the current request completes"));
851
854
  }
852
855
  templateData.value.appendChild(dividerContent);
853
856
  }
@@ -855,10 +858,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
855
858
  clearNode(templateData.detail);
856
859
  if (element.agentOrSlashCommandDetected) {
857
860
  const msg = element.slashCommand ? ( localize(
858
- 7416,
861
+ 7495,
859
862
  "used {0} [[(rerun without)]]",
860
863
  `${chatSubcommandLeader}${element.slashCommand.name}`
861
- )) : ( localize(7417, "[[(rerun without)]]"));
864
+ )) : ( localize(7496, "[[(rerun without)]]"));
862
865
  reset(templateData.detail, renderFormattedText(msg, {
863
866
  actionHandler: {
864
867
  disposables: templateData.elementDisposables,
@@ -871,7 +874,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
871
874
  this.delegate.currentChatMode(),
872
875
  this.rendererOptions.progressMessageAtBottomOfResponse
873
876
  )) {
874
- templateData.detail.textContent = ( localize(7418, "Working"));
877
+ templateData.detail.textContent = ( localize(7497, "Working"));
875
878
  }
876
879
  }
877
880
  renderConfirmationAction(element, templateData) {
@@ -880,7 +883,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
880
883
  append(templateData.detail, $("span.codicon.codicon-check", {
881
884
  "aria-hidden": "true"
882
885
  }));
883
- append(templateData.detail, $("span.confirmation-text", undefined, ( localize(7419, "Selected \"{0}\"", element.confirmation))));
886
+ append(templateData.detail, $("span.confirmation-text", undefined, ( localize(7498, "Selected \"{0}\"", element.confirmation))));
884
887
  templateData.header?.classList.remove("header-disabled");
885
888
  templateData.header?.classList.add("partially-disabled");
886
889
  }
@@ -1080,7 +1083,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
1080
1083
  }).length;
1081
1084
  }
1082
1085
  getConfirmationPendingLabel(count) {
1083
- return count === 1 ? ( localize(7420, "1 confirmation pending")) : ( localize(7421, "{0} confirmations pending", count));
1086
+ return count === 1 ? ( localize(7499, "1 confirmation pending")) : ( localize(7500, "{0} confirmations pending", count));
1084
1087
  }
1085
1088
  removeWorkingProgressContentPart(templateData) {
1086
1089
  const renderedParts = templateData.renderedParts;
@@ -1099,6 +1102,15 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
1099
1102
  }
1100
1103
  }
1101
1104
  updateWorkingProgressForPendingConfirmations(templateData) {
1105
+ const originalElement = templateData.currentElement;
1106
+ queueMicrotask(() => {
1107
+ if (templateData.currentElement !== originalElement) {
1108
+ return;
1109
+ }
1110
+ this.doUpdateWorkingProgressForPendingConfirmations(templateData);
1111
+ });
1112
+ }
1113
+ doUpdateWorkingProgressForPendingConfirmations(templateData) {
1102
1114
  const element = templateData.currentElement;
1103
1115
  if (!isResponseVM(element)) {
1104
1116
  return;
@@ -1954,7 +1966,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
1954
1966
  "ChatListItemRenderer#renderChatContentPart: error rendering content",
1955
1967
  toErrorMessage(err, true)
1956
1968
  );
1957
- const errorPart = this.instantiationService.createInstance(ChatErrorContentPart, ChatErrorLevel.Error, ( new MarkdownString(( localize(7422, "Failed to render content")) + `: ${toErrorMessage(err, false)}`)), content, this.chatContentMarkdownRenderer);
1969
+ const errorPart = this.instantiationService.createInstance(ChatErrorContentPart, ChatErrorLevel.Error, ( new MarkdownString(( localize(7501, "Failed to render content")) + `: ${toErrorMessage(err, false)}`)), content, this.chatContentMarkdownRenderer);
1958
1970
  return {
1959
1971
  dispose: () => errorPart.dispose(),
1960
1972
  domNode: errorPart.domNode,
@@ -2220,6 +2232,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2220
2232
  }
2221
2233
  templateData.value.appendChild(createdPart.domNode);
2222
2234
  thinkingPart.removeMaterializedItem(toolInvocation.toolCallId);
2235
+ (templateData.movedOutToolParts ??= ( new DisposableMap())).set(toolInvocation.toolCallId, createdPart);
2223
2236
  } else {
2224
2237
  thinkingPart.removeLazyItem(toolInvocation.toolId);
2225
2238
  const {
@@ -2227,6 +2240,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2227
2240
  part: createdPart
2228
2241
  } = createToolPart();
2229
2242
  part = createdPart;
2243
+ (templateData.movedOutToolParts ??= ( new DisposableMap())).set(toolInvocation.toolCallId, createdPart);
2230
2244
  templateData.value.appendChild(domNode);
2231
2245
  }
2232
2246
  this.finalizeCurrentThinkingPart(context, templateData);
@@ -2331,7 +2345,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2331
2345
  }
2332
2346
  const shouldPinToThinking = hookPart.hookType === HookType.PreToolUse || hookPart.hookType === HookType.PostToolUse;
2333
2347
  if (shouldPinToThinking) {
2334
- const hookTitle = hookPart.stopReason ? (hookPart.toolDisplayName ? ( localize(7423, "Blocked {0}", hookPart.toolDisplayName)) : ( localize(7424, "Blocked by hook"))) : (hookPart.toolDisplayName ? ( localize(7425, "Used {0}, but received a warning", hookPart.toolDisplayName)) : ( localize(7426, "Tool call received a warning")));
2348
+ const hookTitle = hookPart.stopReason ? (hookPart.toolDisplayName ? ( localize(7502, "Blocked {0}", hookPart.toolDisplayName)) : ( localize(7503, "Blocked by hook"))) : (hookPart.toolDisplayName ? ( localize(7504, "Used {0}, but received a warning", hookPart.toolDisplayName)) : ( localize(7505, "Tool call received a warning")));
2335
2349
  let thinkingPart = this.getLastThinkingPart(templateData.renderedParts);
2336
2350
  if (!thinkingPart) {
2337
2351
  const newThinking = this.renderThinkingPart({
@@ -2508,10 +2522,10 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2508
2522
  return;
2509
2523
  }
2510
2524
  const questionCount = carousel.questions.length;
2511
- const question = carousel.questions.length > 0 && carousel.questions[0].message ? carousel.questions[0].message : ( localize(7427, "Chat input required."));
2525
+ const question = carousel.questions.length > 0 && carousel.questions[0].message ? carousel.questions[0].message : ( localize(7506, "Chat input required."));
2512
2526
  const stringQuestion = typeof question === "string" ? question : question.value;
2513
- const alertMessage = questionCount === 1 ? ( localize(7428, "Chat input required (1 question): {0}", stringQuestion)) : ( localize(
2514
- 7429,
2527
+ const alertMessage = questionCount === 1 ? ( localize(7507, "Chat input required (1 question): {0}", stringQuestion)) : ( localize(
2528
+ 7508,
2515
2529
  "Chat input required ({0} questions): {1}",
2516
2530
  questionCount,
2517
2531
  stringQuestion
@@ -2520,7 +2534,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2520
2534
  if (stableKey) {
2521
2535
  this._notifiedQuestionCarousels.add(stableKey);
2522
2536
  }
2523
- const signalMessage = questionCount === 1 ? ( localize(7430, "Chat needs your input (1 question).")) : ( localize(7431, "Chat needs your input ({0} questions).", questionCount));
2537
+ const signalMessage = questionCount === 1 ? ( localize(7509, "Chat needs your input (1 question).")) : ( localize(7510, "Chat needs your input ({0} questions).", questionCount));
2524
2538
  this.accessibilitySignalService.playSignal(AccessibilitySignal.chatUserActionRequired, {
2525
2539
  allowManyInParallel: true,
2526
2540
  customAlertMessage: signalMessage
@@ -2566,7 +2580,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2566
2580
  supportThemeIcons: true
2567
2581
  }));
2568
2582
  if (overall) {
2569
- content.appendText(( localize(7432, "{0}: {1}", message, overall.replace(/\s+/g, " "))));
2583
+ content.appendText(( localize(7511, "{0}: {1}", message, overall.replace(/\s+/g, " "))));
2570
2584
  } else {
2571
2585
  content.appendText(message);
2572
2586
  }
@@ -2611,23 +2625,23 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2611
2625
  }
2612
2626
  getPlanReviewProgressMessage(review) {
2613
2627
  if (!review.isUsed) {
2614
- return localize(7433, "Plan review required");
2628
+ return localize(7512, "Plan review required");
2615
2629
  }
2616
2630
  const result = review.data;
2617
2631
  if (!result) {
2618
2632
  return undefined;
2619
2633
  }
2620
2634
  if (result.rejected) {
2621
- return localize(7434, "Rejected plan");
2635
+ return localize(7513, "Rejected plan");
2622
2636
  }
2623
2637
  if (result.feedback) {
2624
- return localize(7435, "Provided feedback");
2638
+ return localize(7514, "Provided feedback");
2625
2639
  }
2626
2640
  const action = review.actions.find(a => a.label === result.action);
2627
2641
  if (action?.permissionLevel === "autopilot") {
2628
- return localize(7436, "Started implementation with Autopilot");
2642
+ return localize(7515, "Started implementation with Autopilot");
2629
2643
  }
2630
- return localize(7437, "Approved plan");
2644
+ return localize(7516, "Approved plan");
2631
2645
  }
2632
2646
  removeCarouselFromTracking(context, part) {
2633
2647
  if (isResponseVM(context.element)) {
@@ -2714,7 +2728,7 @@ let ChatListItemRenderer = class ChatListItemRenderer extends Disposable {
2714
2728
  })
2715
2729
  );
2716
2730
  markdownPart.addDisposable(
2717
- this.hoverService.setupManagedHover(getDefaultHoverDelegate("element"), markdownPart.domNode, ( localize(7438, "Click to Edit")), {
2731
+ this.hoverService.setupManagedHover(getDefaultHoverDelegate("element"), markdownPart.domNode, ( localize(7517, "Click to Edit")), {
2718
2732
  trapFocus: true
2719
2733
  })
2720
2734
  );
@@ -41,6 +41,7 @@ import { bindContextKey } from '@codingame/monaco-vscode-api/vscode/vs/platform/
41
41
  import product from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/product';
42
42
  import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
43
43
  import { IThemeService } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service';
44
+ import { ChatEntitlementContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/chat/common/chatEntitlementService';
44
45
  import { IChatEntitlementService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/chat/common/chatEntitlementService.service';
45
46
  import { ILifecycleService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
46
47
  import { checkModeOption } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chat';
@@ -113,7 +114,7 @@ const supportsAllAttachments = {
113
114
  supportsHandOffs: true,
114
115
  supportsCheckpoints: true
115
116
  };
116
- const DISCLAIMER = ( localize(7439, "AI responses may be inaccurate"));
117
+ const DISCLAIMER = ( localize(7518, "AI responses may be inaccurate"));
117
118
  let ChatWidget = class ChatWidget extends Disposable {
118
119
  static {
119
120
  ChatWidget_1 = this;
@@ -797,8 +798,8 @@ let ChatWidget = class ChatWidget extends Disposable {
797
798
  } else {
798
799
  this.unlockFromCodingAgent();
799
800
  }
800
- this.inputPart.clearTodoListWidget(this.viewModel?.sessionResource, true);
801
- this.inputPart.clearArtifactsWidget();
801
+ this.inputPart?.clearTodoListWidget(this.viewModel?.sessionResource, true);
802
+ this.inputPart?.clearArtifactsWidget();
802
803
  this.chatSuggestNextWidget.hide();
803
804
  await this.viewOptions.clear?.();
804
805
  }
@@ -839,7 +840,7 @@ let ChatWidget = class ChatWidget extends Disposable {
839
840
  }
840
841
  this.container.classList.toggle(
841
842
  "chat-view-getting-started-disabled",
842
- this.chatEntitlementService.sentiment.completed
843
+ this.chatEntitlementService.sentiment.completed || this.chatEntitlementService.hasByokModels
843
844
  );
844
845
  this._onDidChangeEmptyState.fire();
845
846
  }
@@ -865,7 +866,7 @@ let ChatWidget = class ChatWidget extends Disposable {
865
866
  if (this.chatEntitlementService.anonymous && !this.chatEntitlementService.sentiment.completed) {
866
867
  const providers = product.defaultChatAgent.provider;
867
868
  additionalMessage = ( new MarkdownString(( localize(
868
- 7440,
869
+ 7519,
869
870
  "By continuing with {0} Copilot, you agree to {1}'s [Terms]({2}) and [Privacy Statement]({3}).",
870
871
  providers.default.name,
871
872
  providers.default.name,
@@ -947,7 +948,7 @@ let ChatWidget = class ChatWidget extends Disposable {
947
948
  return ( new MarkdownString(""));
948
949
  } else if (this._instructionFilesExist === false) {
949
950
  return (new MarkdownString(localize(
950
- 7441,
951
+ 7520,
951
952
  "[Generate Agent Instructions]({0}) to onboard AI onto your codebase.",
952
953
  `command:${GENERATE_AGENT_INSTRUCTIONS_COMMAND_ID}`
953
954
  ), {
@@ -973,19 +974,19 @@ let ChatWidget = class ChatWidget extends Disposable {
973
974
  const providerTitle = contribution?.welcomeTitle;
974
975
  const providerMessage = contribution?.welcomeMessage;
975
976
  const message = providerMessage ? ( new MarkdownString(providerMessage)) : (this._lockedAgent?.prefix === "@copilot " ? ( new MarkdownString(( localize(
976
- 7442,
977
+ 7521,
977
978
  "This chat session will be forwarded to the {0} [coding agent]({1}) where work is completed in the background. ",
978
979
  this._lockedAgent.prefix,
979
980
  "https://aka.ms/coding-agent-docs"
980
981
  )) + DISCLAIMER, {
981
982
  isTrusted: true
982
983
  })) : ( new MarkdownString(( localize(
983
- 7443,
984
+ 7522,
984
985
  "This chat session will be forwarded to the {0} coding agent where work is completed in the background. ",
985
986
  this._lockedAgent?.prefix
986
987
  )) + DISCLAIMER)));
987
988
  return {
988
- title: providerTitle ?? ( localize(7444, "Delegate to {0}", this._lockedAgent?.prefix)),
989
+ title: providerTitle ?? ( localize(7523, "Delegate to {0}", this._lockedAgent?.prefix)),
989
990
  message,
990
991
  icon: providerIcon ?? Codicon.sendToRemoteAgent,
991
992
  additionalMessage,
@@ -994,11 +995,11 @@ let ChatWidget = class ChatWidget extends Disposable {
994
995
  }
995
996
  let title;
996
997
  if (this.input.currentModeKind === ChatModeKind.Ask) {
997
- title = ( localize(7445, "Ask about your code"));
998
+ title = ( localize(7524, "Ask about your code"));
998
999
  } else if (this.input.currentModeKind === ChatModeKind.Edit) {
999
- title = ( localize(7446, "Edit in context"));
1000
+ title = ( localize(7525, "Edit in context"));
1000
1001
  } else {
1001
- title = ( localize(7447, "Build with Agent"));
1002
+ title = ( localize(7526, "Build with Agent"));
1002
1003
  }
1003
1004
  return {
1004
1005
  title,
@@ -1590,10 +1591,14 @@ let ChatWidget = class ChatWidget extends Disposable {
1590
1591
  this.renderChatSuggestNextWidget();
1591
1592
  }));
1592
1593
  const foregroundSessionCountContextKeys = ( new Set([ChatContextKeys.foregroundSessionCount.key]));
1594
+ const hasByokModelsContextKeys = ( new Set([ChatEntitlementContextKeys.hasByokModels.key]));
1593
1595
  this._register(this.contextKeyService.onDidChangeContext(e => {
1594
1596
  if (e.affectsSome(foregroundSessionCountContextKeys) && this.isEmpty()) {
1595
1597
  this.renderGettingStartedTipIfNeeded();
1596
1598
  }
1599
+ if (e.affectsSome(hasByokModelsContextKeys)) {
1600
+ this.updateChatViewVisibility();
1601
+ }
1597
1602
  }));
1598
1603
  let previousModelIdentifier;
1599
1604
  this._register(autorun(reader => {
@@ -1643,8 +1648,9 @@ let ChatWidget = class ChatWidget extends Disposable {
1643
1648
  );
1644
1649
  }
1645
1650
  setModel(model) {
1646
- if (!this.container) {
1647
- throw ( new Error("Call render() before setModel()"));
1651
+ if (!this.container || !this.inputPart) {
1652
+ this.logService.warn("ChatWidget#setModel called before render() completed");
1653
+ return;
1648
1654
  }
1649
1655
  if (!model) {
1650
1656
  this.inputPart.flushInputStateToModel();
@@ -1663,8 +1669,8 @@ let ChatWidget = class ChatWidget extends Disposable {
1663
1669
  if (this.viewModel?.editing) {
1664
1670
  this.finishedEditing();
1665
1671
  }
1666
- this.inputPart.clearTodoListWidget(model.sessionResource, false);
1667
- this.inputPart.clearArtifactsWidget();
1672
+ this.inputPart?.clearTodoListWidget(model.sessionResource, false);
1673
+ this.inputPart?.clearArtifactsWidget();
1668
1674
  this.chatSuggestNextWidget.hide();
1669
1675
  this.chatTipService.resetSession();
1670
1676
  this._gettingStartedTipPartRef = undefined;
@@ -1679,7 +1685,7 @@ let ChatWidget = class ChatWidget extends Disposable {
1679
1685
  let placeholder = this.chatSessionsService.getChatSessionContribution(this._lockedAgent.id)?.inputPlaceholder;
1680
1686
  if (!placeholder) {
1681
1687
  placeholder = ( localize(
1682
- 7448,
1688
+ 7527,
1683
1689
  "Chat with {0}",
1684
1690
  this._lockedAgent.displayName || this._lockedAgent.name
1685
1691
  ));
@@ -1742,7 +1748,7 @@ let ChatWidget = class ChatWidget extends Disposable {
1742
1748
  this._hasPendingRequestsContextKey.set(pendingCount > 0);
1743
1749
  const steeringCount = pendingRequests.filter(pending => pending.kind === ChatRequestQueueKind.Steering).length;
1744
1750
  if (announceSteering && steeringCount > 0 && lastSteeringCount === 0) {
1745
- status(( localize(7449, "Steering")));
1751
+ status(( localize(7528, "Steering")));
1746
1752
  }
1747
1753
  lastSteeringCount = steeringCount;
1748
1754
  };
@@ -1758,12 +1764,12 @@ let ChatWidget = class ChatWidget extends Disposable {
1758
1764
  this._updateAgentCapabilitiesContextKeys(e.agent);
1759
1765
  }
1760
1766
  if (e.kind === "addRequest") {
1761
- this.inputPart.clearTodoListWidget(this.viewModel?.sessionResource, false);
1767
+ this.inputPart?.clearTodoListWidget(this.viewModel?.sessionResource, false);
1762
1768
  this._sessionIsEmptyContextKey.set(false);
1763
1769
  this.chatSuggestNextWidget.hide();
1764
1770
  }
1765
1771
  if (e.kind === "removeRequest") {
1766
- this.inputPart.clearTodoListWidget(this.viewModel?.sessionResource, true);
1772
+ this.inputPart?.clearTodoListWidget(this.viewModel?.sessionResource, true);
1767
1773
  this.chatSuggestNextWidget.hide();
1768
1774
  this._sessionIsEmptyContextKey.set((this.viewModel?.model.getRequests().length ?? 0) === 0);
1769
1775
  }
@@ -1771,7 +1777,7 @@ let ChatWidget = class ChatWidget extends Disposable {
1771
1777
  const lastRequest = this.viewModel?.model.getRequests().at(-1);
1772
1778
  const wasCancelled = lastRequest?.response?.isCanceled ?? false;
1773
1779
  if (wasCancelled) {
1774
- this.inputPart.clearTodoListWidget(this.viewModel?.sessionResource, true);
1780
+ this.inputPart?.clearTodoListWidget(this.viewModel?.sessionResource, true);
1775
1781
  }
1776
1782
  this.renderChatSuggestNextWidget();
1777
1783
  if (this.visible && this.viewModel?.sessionResource) {
@@ -2169,16 +2175,16 @@ let ChatWidget = class ChatWidget extends Disposable {
2169
2175
  }
2170
2176
  const promptResult = await this.dialogService.prompt({
2171
2177
  type: "question",
2172
- message: ( localize(7450, "You already have pending requests.")),
2178
+ message: ( localize(7529, "You already have pending requests.")),
2173
2179
  detail: ( localize(
2174
- 7451,
2180
+ 7530,
2175
2181
  "Do you want to keep them in the queue or remove them before sending this message?"
2176
2182
  )),
2177
2183
  buttons: [{
2178
- label: ( localize(7452, "Keep Pending Requests")),
2184
+ label: ( localize(7531, "Keep Pending Requests")),
2179
2185
  run: () => "keep"
2180
2186
  }, {
2181
- label: ( localize(7453, "Remove Pending Requests")),
2187
+ label: ( localize(7532, "Remove Pending Requests")),
2182
2188
  run: () => "remove"
2183
2189
  }],
2184
2190
  cancelButton: true
@@ -45,7 +45,7 @@ let ChatFollowups = class ChatFollowups extends Disposable {
45
45
  } else if (followup.kind === "command") {
46
46
  button.element.classList.add("interactive-followup-command");
47
47
  }
48
- button.element.ariaLabel = ( localize(7454, "Follow up question: {0}", baseTitle));
48
+ button.element.ariaLabel = ( localize(7533, "Follow up question: {0}", baseTitle));
49
49
  button.label = ( new MarkdownString(baseTitle));
50
50
  this._register(button.onDidClick(() => this.clickHandler(followup)));
51
51
  }
@@ -76,7 +76,7 @@ let ChatInputNotificationWidget = class ChatInputNotificationWidget extends Disp
76
76
  dismissButton.appendChild($$1(ThemeIcon.asCSSSelector(Codicon.close)));
77
77
  dismissButton.tabIndex = 0;
78
78
  dismissButton.role = "button";
79
- dismissButton.ariaLabel = ( localize(7455, "Dismiss notification"));
79
+ dismissButton.ariaLabel = ( localize(7534, "Dismiss notification"));
80
80
  this._contentDisposables.add(addDisposableListener(dismissButton, EventType.CLICK, () => {
81
81
  this._notificationService.dismissNotification(notification.id);
82
82
  }));
@@ -220,6 +220,7 @@ export declare class ChatInputPart extends Disposable implements IHistoryNavigat
220
220
  private _forceVisibleScrollbarUntilAccept;
221
221
  private _inputModel;
222
222
  private readonly _modelSyncDisposables;
223
+ private readonly _currentChatModes;
223
224
  private _isSyncingToOrFromInputModel;
224
225
  private readonly _syncTextDebounced;
225
226
  private executeToolbar;
@@ -249,6 +250,7 @@ export declare class ChatInputPart extends Disposable implements IHistoryNavigat
249
250
  private modelWidget;
250
251
  private modeWidget;
251
252
  private permissionWidget;
253
+ private readonly permissionWidgetDisposeListener;
252
254
  private sessionTargetWidget;
253
255
  private delegationWidget;
254
256
  private readonly chatSessionPickerWidgets;
@@ -256,6 +258,7 @@ export declare class ChatInputPart extends Disposable implements IHistoryNavigat
256
258
  private _lastSessionPickerAction;
257
259
  private _lastSessionPickerOptions;
258
260
  private readonly _waitForPersistedLanguageModel;
261
+ private readonly _waitForSessionHistoryLanguageModel;
259
262
  private readonly _chatSessionOptionEmitters;
260
263
  /**
261
264
  * Scoped context key service for this chat input part.
@@ -323,6 +326,7 @@ export declare class ChatInputPart extends Disposable implements IHistoryNavigat
323
326
  switchModel(modelMetadata: Pick<ILanguageModelChatMetadata, "vendor" | "id" | "family">): void;
324
327
  switchModelByQualifiedName(qualifiedModelNames: readonly string[]): boolean;
325
328
  switchToNextModel(): void;
329
+ switchToNextPinnedModel(): void;
326
330
  openModelPicker(): void;
327
331
  openModePicker(): void;
328
332
  private _showCombinedPhonePickerSheet;