@codingame/monaco-vscode-katex-common 34.1.2 → 35.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 (244) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/base/browser/animationSync.d.ts +36 -0
  3. package/vscode/src/vs/base/browser/animationSync.js +23 -0
  4. package/vscode/src/vs/base/browser/ui/pixelSpinner/pixelSpinner.js +23 -2
  5. package/vscode/src/vs/platform/actions/browser/buttonbar.js +3 -2
  6. package/vscode/src/vs/platform/agentHost/common/claudeSessionConfigKeys.d.ts +5 -5
  7. package/vscode/src/vs/platform/agentHost/common/fileEditDiff.d.ts +32 -0
  8. package/vscode/src/vs/platform/agentHost/common/fileEditDiff.js +33 -0
  9. package/vscode/src/vs/platform/agentHost/common/meta/agentFeedbackAnnotations.d.ts +90 -0
  10. package/vscode/src/vs/platform/agentHost/common/meta/agentFeedbackAttachments.d.ts +30 -0
  11. package/vscode/src/vs/platform/agentHost/common/meta/agentToolCallMeta.d.ts +65 -0
  12. package/vscode/src/vs/platform/agentHost/common/sessionConfigKeys.d.ts +16 -5
  13. package/vscode/src/vs/platform/agentHost/common/sessionConfigKeys.js +3 -2
  14. package/vscode/src/vs/platform/agentHost/common/state/protocol/channels-resource-watch/reducer.d.ts +21 -0
  15. package/vscode/src/vs/platform/agentHost/common/state/protocol/reducers.d.ts +8 -0
  16. package/vscode/src/vs/platform/agentHost/common/state/sessionReducers.d.ts +9 -0
  17. package/vscode/src/vs/platform/mcp/common/modelContextProtocolApps.d.ts +2 -2
  18. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +16 -16
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +29 -0
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +105 -28
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.d.ts +15 -1
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +74 -44
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +10 -10
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +11 -11
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +2 -2
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +98 -24
  28. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.contribution.d.ts +8 -0
  29. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.contribution.js +31 -4
  30. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.d.ts +45 -4
  31. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostChatInputPicker.js +163 -37
  32. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostFolderPickerActionItem.d.ts +47 -0
  33. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostFolderPickerActionItem.js +172 -0
  34. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostGenericConfigChips.d.ts +3 -1
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostGenericConfigChips.js +7 -4
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSessionReferenceAttachment.d.ts +12 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSnapshotController.d.ts +116 -0
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostSnapshotController.js +348 -0
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/media/agentHostChatInputPicker.css +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/stateToProgressAdapter.d.ts +211 -0
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/stateToProgressAdapter.js +64 -0
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.d.ts +18 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionApprovalModel.js +13 -2
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.d.ts +1 -1
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +30 -18
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +4 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +29 -4
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +9 -9
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +24 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +119 -41
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +27 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionTypeAvailability.d.ts +63 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/sessionTypeAvailability.js +97 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +5 -6
  56. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +105 -88
  57. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +13 -13
  58. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.d.ts +1 -0
  59. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +46 -48
  60. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.d.ts +28 -0
  61. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +98 -0
  62. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.d.ts +3 -3
  63. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +9 -7
  64. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatTurnPills.css +162 -0
  65. package/vscode/src/vs/workbench/contrib/chat/browser/tools/chatToolRiskAssessmentService.d.ts +9 -2
  66. package/vscode/src/vs/workbench/contrib/chat/browser/tools/chatToolRiskAssessmentService.js +95 -24
  67. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.d.ts +22 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +151 -20
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +10 -10
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.js +20 -2
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.d.ts +5 -0
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.js +61 -17
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAutoModeResolutionContentPart.d.ts +20 -0
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAutoModeResolutionContentPart.js +55 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.d.ts +6 -2
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +81 -30
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +2 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +3 -3
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatEditPillElement.d.ts +11 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatEditPillElement.js +13 -1
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatElicitationContentPart.js +9 -33
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExternalEditContentPart.d.ts +6 -2
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExternalEditContentPart.js +21 -11
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +13 -13
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +6 -2
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +40 -19
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpAuthenticationContentPart.d.ts +35 -0
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpAuthenticationContentPart.js +140 -0
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +8 -8
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersStartingContentPart.d.ts +24 -0
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersStartingContentPart.js +58 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.d.ts +3 -1
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +29 -8
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPlanReviewPart.js +30 -30
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +1 -1
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +44 -44
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.d.ts +1 -2
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +12 -66
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +6 -6
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +5 -5
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.d.ts +39 -0
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +167 -43
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.d.ts +1 -15
  112. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +9 -86
  113. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSystemNotificationContentPart.d.ts +12 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSystemNotificationContentPart.js +23 -0
  115. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  116. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +9 -1
  117. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +141 -72
  118. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +9 -9
  119. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +17 -17
  120. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +2 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +17 -3
  122. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  123. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTurnPillsPart.d.ts +29 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTurnPillsPart.js +110 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  126. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +14 -14
  127. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatAgentFeedbackReviewConfirmation.css +133 -0
  128. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatAutoModeResolution.css +30 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatCodeBlockPill.css +4 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +18 -8
  131. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatPlanReview.css +23 -7
  132. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +33 -18
  133. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatSubagentContent.css +23 -0
  134. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +44 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +2 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatToolConfirmationCarousel.css +1 -1
  137. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.d.ts +9 -1
  138. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +21 -4
  139. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatAgentFeedbackReviewConfirmationSubPart.d.ts +48 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatAgentFeedbackReviewConfirmationSubPart.js +279 -0
  141. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  142. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.d.ts +43 -1
  143. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +53 -15
  144. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.d.ts +7 -9
  145. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
  146. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.d.ts +4 -1
  147. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.js +24 -10
  148. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/{chatMissingSandboxDepsConfirmationSubPart.d.ts → chatSandboxPrerequisiteConfirmationSubPart.d.ts} +3 -2
  149. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/{chatMissingSandboxDepsConfirmationSubPart.js → chatSandboxPrerequisiteConfirmationSubPart.js} +14 -10
  150. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.d.ts +0 -1
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +30 -59
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +2 -1
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +41 -29
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationCarouselPart.js +8 -8
  155. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.d.ts +2 -1
  156. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +12 -9
  157. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.d.ts +1 -1
  158. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +43 -35
  159. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  160. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +5 -5
  161. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.d.ts +2 -1
  162. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +11 -8
  163. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/toolRiskBadgeHelper.d.ts +18 -0
  164. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/toolRiskBadgeHelper.js +51 -0
  165. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/toolRiskBadgeWidget.js +4 -4
  166. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +11 -11
  167. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +18 -3
  168. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +266 -98
  169. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.d.ts +1 -0
  170. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +8 -3
  171. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatRestoreCheckpointActionViewItem.d.ts +32 -0
  172. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatRestoreCheckpointActionViewItem.js +135 -0
  173. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatTurnPills.d.ts +85 -0
  174. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatTurnPills.js +275 -0
  175. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +18 -1
  176. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +84 -37
  177. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  178. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatGoalBannerWidget.js +4 -4
  179. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationService.d.ts +14 -0
  180. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationWidget.d.ts +6 -1
  181. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputNotificationWidget.js +52 -4
  182. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +187 -13
  183. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +435 -139
  184. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputStatePersistence.d.ts +6 -0
  185. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputStatePersistence.js +21 -0
  186. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelConfigurationLogic.d.ts +50 -0
  187. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelConfigurationLogic.js +49 -0
  188. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelConfigurationStore.d.ts +79 -0
  189. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelConfigurationStore.js +127 -0
  190. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +84 -8
  191. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +658 -430
  192. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelSelectionLogic.d.ts +72 -8
  193. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelSelectionLogic.js +82 -7
  194. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatPhoneInputPresenter.js +2 -2
  195. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatSelectedTools.d.ts +3 -3
  196. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatSelectedTools.js +6 -3
  197. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +2 -1
  198. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +23 -9
  199. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/media/chatGoalBannerWidget.css +2 -2
  200. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/media/chatInputNotificationWidget.css +28 -12
  201. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.d.ts +3 -0
  202. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +15 -14
  203. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.d.ts +60 -0
  204. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.js +18 -7
  205. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.d.ts +49 -1
  206. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +141 -81
  207. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.d.ts +7 -15
  208. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +30 -47
  209. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
  210. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerInputActionItem.d.ts +20 -0
  211. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerInputActionItem.js +18 -0
  212. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +469 -148
  213. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.d.ts +11 -2
  214. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +79 -28
  215. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.d.ts +71 -2
  216. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +107 -45
  217. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css +20 -0
  218. package/vscode/src/vs/workbench/contrib/chat/common/chatErrorMessages.d.ts +110 -0
  219. package/vscode/src/vs/workbench/contrib/chat/common/chatErrorMessages.js +37 -0
  220. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.d.ts +4 -1
  221. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +13 -11
  222. package/vscode/src/vs/workbench/contrib/chat/common/chatPermissionWarnings.d.ts +8 -1
  223. package/vscode/src/vs/workbench/contrib/chat/common/chatPermissionWarnings.js +57 -21
  224. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +18 -18
  225. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +4 -4
  226. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +5 -5
  227. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  228. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +30 -30
  229. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  230. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpToolCallUI.d.ts +39 -8
  231. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpToolCallUI.js +168 -72
  232. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  233. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  234. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/cellOperations.js +2 -2
  235. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +24 -24
  236. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.js +3 -3
  237. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.js +7 -7
  238. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.js +1 -1
  239. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.js +5 -5
  240. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.js +1 -1
  241. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  242. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  243. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputStatusActionViewItem.d.ts +0 -30
  244. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputStatusActionViewItem.js +0 -147
@@ -1,7 +1,9 @@
1
1
  import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
+ import { type IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
2
3
  import { IMenuService } from "@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions.service";
3
4
  import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
4
5
  import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service";
6
+ import type { IChatWidget } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat";
5
7
  export interface IChatContextUsagePromptTokenDetail {
6
8
  category: string;
7
9
  label: string;
@@ -14,16 +16,21 @@ export interface IChatContextUsageData {
14
16
  percentage: number;
15
17
  outputBufferPercentage?: number;
16
18
  promptTokenDetails?: readonly IChatContextUsagePromptTokenDetail[];
19
+ sessionCost?: number;
17
20
  }
18
21
  /**
19
22
  * Detailed widget that shows context usage breakdown.
20
23
  * Displayed when the user clicks on the ChatContextUsageIcon.
21
24
  */
22
25
  export declare class ChatContextUsageDetails extends Disposable {
26
+ private _chatWidget;
27
+ private readonly _dataObservable;
23
28
  private readonly instantiationService;
24
29
  private readonly menuService;
25
30
  private readonly contextKeyService;
26
31
  readonly domNode: HTMLElement;
32
+ private readonly sessionCostSection;
33
+ private readonly sessionCostValue;
27
34
  private readonly quotaItem;
28
35
  private readonly percentageLabel;
29
36
  private readonly tokenCountLabel;
@@ -33,8 +40,10 @@ export declare class ChatContextUsageDetails extends Disposable {
33
40
  private readonly tokenDetailsContainer;
34
41
  private readonly warningMessage;
35
42
  private readonly actionsSection;
36
- constructor(instantiationService: IInstantiationService, menuService: IMenuService, contextKeyService: IContextKeyService);
37
- update(data: IChatContextUsageData): void;
43
+ constructor(_chatWidget: IChatWidget | undefined, _dataObservable: IObservable<IChatContextUsageData | undefined>, instantiationService: IInstantiationService, menuService: IMenuService, contextKeyService: IContextKeyService);
44
+ setChatWidget(widget: IChatWidget): void;
45
+ private withActionContext;
46
+ private _render;
38
47
  private formatTokenCount;
39
48
  private renderTokenDetails;
40
49
  focus(): void;
@@ -3,26 +3,48 @@ import { registerCss } from '@codingame/monaco-vscode-api/css';
3
3
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
4
4
  import * as chatContextUsageDetails from './media/chatContextUsageDetails.css';
5
5
  import { $ as $$1, clearNode } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
6
+ import { toAction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/actions';
6
7
  import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
8
+ import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
7
9
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
8
10
  import { MenuId } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
9
11
  import { IMenuService } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions.service';
10
12
  import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
11
- import { MenuWorkbenchButtonBar } from '../../../../../../platform/actions/browser/buttonbar.js';
13
+ import { WorkbenchButtonBar } from '../../../../../../platform/actions/browser/buttonbar.js';
12
14
  import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
15
+ import { getActionBarActions } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/browser/menuEntryActionViewItem';
16
+ import { formatCopilotCredits } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
17
+ import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
13
18
 
14
19
  registerCss(chatContextUsageDetails);
15
20
  const $ = $$1;
21
+ const COMPACT_AGENT_HOST_CONVERSATION_ACTION_ID = "workbench.action.chat.compactAgentHostConversation";
16
22
  let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
17
- constructor(instantiationService, menuService, contextKeyService) {
23
+ constructor(
24
+ _chatWidget,
25
+ _dataObservable,
26
+ instantiationService,
27
+ menuService,
28
+ contextKeyService
29
+ ) {
18
30
  super();
31
+ this._chatWidget = _chatWidget;
32
+ this._dataObservable = _dataObservable;
19
33
  this.instantiationService = instantiationService;
20
34
  this.menuService = menuService;
21
35
  this.contextKeyService = contextKeyService;
22
36
  this.domNode = $(".chat-context-usage-details");
37
+ const topHeader = this.domNode.appendChild($("div.header"));
38
+ topHeader.textContent = ( localize(8395, "Session Info"));
39
+ this.sessionCostSection = this.domNode.appendChild($(".session-cost-section"));
40
+ this.sessionCostSection.style.display = "none";
41
+ const sessionCostRow = this.sessionCostSection.appendChild($(".session-cost-row"));
42
+ const sessionCostLabel = sessionCostRow.appendChild($("span.session-cost-label"));
43
+ sessionCostLabel.textContent = ( localize(8396, "Session Cost"));
44
+ this.sessionCostValue = sessionCostRow.appendChild($("span.session-cost-value"));
23
45
  this.quotaItem = this.domNode.appendChild($(".quota-indicator"));
24
46
  const header = this.domNode.insertBefore($("div.header"), this.quotaItem);
25
- header.textContent = ( localize(7813, "Context Window"));
47
+ header.textContent = ( localize(8397, "Context Window"));
26
48
  const quotaLabel = this.quotaItem.appendChild($(".quota-label"));
27
49
  this.tokenCountLabel = quotaLabel.appendChild($("span"));
28
50
  this.percentageLabel = quotaLabel.appendChild($("span.quota-value"));
@@ -32,53 +54,82 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
32
54
  this.outputBufferLegend = this.quotaItem.appendChild($(".output-buffer-legend"));
33
55
  this.outputBufferLegend.appendChild($(".output-buffer-swatch"));
34
56
  const legendLabel = this.outputBufferLegend.appendChild($("span"));
35
- legendLabel.textContent = ( localize(7814, "Reserved for response"));
57
+ legendLabel.textContent = ( localize(8398, "Reserved for response"));
36
58
  this.outputBufferLegend.style.display = "none";
37
59
  this.tokenDetailsContainer = this.domNode.appendChild($(".token-details-container"));
38
60
  this.warningMessage = this.domNode.appendChild($("div.description"));
39
- this.warningMessage.textContent = ( localize(7815, "Quality may decline as limit nears."));
61
+ this.warningMessage.textContent = ( localize(8399, "Quality may decline as limit nears."));
40
62
  this.warningMessage.style.display = "none";
41
63
  this.actionsSection = this.domNode.appendChild($(".actions-section"));
42
64
  const buttonBarContainer = this.actionsSection.appendChild($(".button-bar-container"));
43
- this._register(this.instantiationService.createInstance(
44
- MenuWorkbenchButtonBar,
45
- buttonBarContainer,
46
- MenuId.ChatContextUsageActions,
47
- {
48
- toolbarOptions: {
49
- primaryGroup: () => true
50
- },
65
+ const buttonBar = this._register(
66
+ this.instantiationService.createInstance(WorkbenchButtonBar, buttonBarContainer, {
51
67
  buttonConfigProvider: () => ({
52
68
  isSecondary: true
53
69
  })
54
- }
55
- ));
70
+ })
71
+ );
56
72
  const menu = this._register(
57
73
  this.menuService.createMenu(MenuId.ChatContextUsageActions, this.contextKeyService)
58
74
  );
59
- const updateActionsVisibility = () => {
60
- const actions = menu.getActions();
61
- const hasActions = actions.length > 0 && ( actions.some(([, items]) => items.length > 0));
62
- this.actionsSection.style.display = hasActions ? "" : "none";
75
+ const updateActions = () => {
76
+ const actions = getActionBarActions(menu.getActions({
77
+ shouldForwardArgs: true
78
+ }), () => true);
79
+ const primaryActions = ( actions.primary.map(action => this.withActionContext(action)));
80
+ const secondaryActions = ( actions.secondary.map(action => this.withActionContext(action)));
81
+ buttonBar.update(primaryActions, secondaryActions);
82
+ this.actionsSection.style.display = primaryActions.length > 0 || secondaryActions.length > 0 ? "" : "none";
63
83
  };
64
- this._register(menu.onDidChange(updateActionsVisibility));
65
- updateActionsVisibility();
84
+ this._register(menu.onDidChange(updateActions));
85
+ updateActions();
86
+ this._register(autorun(reader => {
87
+ const data = this._dataObservable.read(reader);
88
+ if (data) {
89
+ this._render(data);
90
+ }
91
+ }));
92
+ }
93
+ setChatWidget(widget) {
94
+ this._chatWidget = widget;
66
95
  }
67
- update(data) {
96
+ withActionContext(action) {
97
+ if (action.id !== COMPACT_AGENT_HOST_CONVERSATION_ACTION_ID) {
98
+ return action;
99
+ }
100
+ return toAction({
101
+ id: action.id,
102
+ label: action.label,
103
+ tooltip: action.tooltip,
104
+ class: action.class,
105
+ enabled: action.enabled,
106
+ checked: action.checked,
107
+ run: () => action.run(this._chatWidget)
108
+ });
109
+ }
110
+ _render(data) {
68
111
  const {
69
112
  percentage,
70
113
  usedTokens,
71
114
  totalContextWindow,
72
115
  outputBufferPercentage,
73
- promptTokenDetails
116
+ promptTokenDetails,
117
+ sessionCost
74
118
  } = data;
119
+ if (typeof sessionCost === "number" && sessionCost > 0) {
120
+ const formatted = formatCopilotCredits(sessionCost);
121
+ this.sessionCostValue.textContent = formatted === "1" ? ( localize(8400, "{0} credit", formatted)) : ( localize(8401, "{0} credits", formatted));
122
+ this.sessionCostSection.style.display = "";
123
+ } else {
124
+ this.sessionCostSection.style.display = "none";
125
+ }
75
126
  this.tokenCountLabel.textContent = ( localize(
76
- 7816,
127
+ 8402,
77
128
  "{0} / {1} tokens",
78
129
  this.formatTokenCount(usedTokens, 1),
79
130
  this.formatTokenCount(totalContextWindow, 0)
80
131
  ));
81
- this.percentageLabel.textContent = ( localize(7817, "{0}%", Math.min(100, percentage).toFixed(0)));
132
+ this.percentageLabel.textContent = ( localize(8403, "{0}%", Math.min(100, percentage).toFixed(0)));
82
133
  const usageBarWidth = Math.max(0, Math.min(100, percentage));
83
134
  this.progressFill.style.width = `${usageBarWidth}%`;
84
135
  if (outputBufferPercentage !== undefined && outputBufferPercentage > 0) {
@@ -128,8 +179,8 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
128
179
  }
129
180
  if (totalPercentage < 100) {
130
181
  const uncategorizedPercentage = 100 - totalPercentage;
131
- categoryMap.set(( localize(7818, "Uncategorized")), [{
132
- label: ( localize(7819, "Other")),
182
+ categoryMap.set(( localize(8404, "Uncategorized")), [{
183
+ label: ( localize(8405, "Other")),
133
184
  percentageOfPrompt: uncategorizedPercentage
134
185
  }]);
135
186
  }
@@ -158,6 +209,6 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
158
209
  this.domNode.focus();
159
210
  }
160
211
  };
161
- ChatContextUsageDetails = ( __decorate([( __param(0, IInstantiationService)), ( __param(1, IMenuService)), ( __param(2, IContextKeyService))], ChatContextUsageDetails));
212
+ ChatContextUsageDetails = ( __decorate([( __param(2, IInstantiationService)), ( __param(3, IMenuService)), ( __param(4, IContextKeyService))], ChatContextUsageDetails));
162
213
 
163
214
  export { ChatContextUsageDetails };
@@ -1,3 +1,4 @@
1
+ import { IStringDictionary } from "@codingame/monaco-vscode-api/vscode/vs/base/common/collections";
1
2
  import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
2
3
  import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
3
4
  import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
@@ -7,7 +8,33 @@ import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platf
7
8
  import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
8
9
  import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
9
10
  import { IChatRequestModel } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatModel";
11
+ import { ILanguageModelConfigurationSchema } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels";
10
12
  import { ILanguageModelsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service";
13
+ import { IChatContextUsageData } from "./chatContextUsageDetails.js";
14
+ import type { IChatWidget } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat";
15
+ /**
16
+ * Resolves the input-token denominator used by the context-usage gauge.
17
+ *
18
+ * Resolution order, mirroring the request path's `applyContextSizeOverride`:
19
+ * 1. An explicit `contextSize` in the resolved model configuration.
20
+ * 2. The schema's default `contextSize` tier (e.g. 200K). Used when the
21
+ * resolved configuration is missing `contextSize` (e.g. the schema default
22
+ * has not loaded yet) so the gauge denominator agrees with the size the
23
+ * request actually uses instead of jumping to the model's full native
24
+ * window. See issue #320393.
25
+ * 3. The model's full native window (`maxInputTokens`). Models without a
26
+ * context-size picker have no such schema property and land here, where
27
+ * default and max are the same value.
28
+ *
29
+ * @internal - exported for testing
30
+ */
31
+ export declare function resolveContextWindowInputTokens(modelConfiguration: IStringDictionary<unknown> | undefined, configurationSchema: ILanguageModelConfigurationSchema | undefined, maxInputTokens: number | undefined): number | undefined;
32
+ /**
33
+ * Equality comparer for {@link IChatContextUsageData} used to suppress redundant updates.
34
+ *
35
+ * @internal - exported for testing
36
+ */
37
+ export declare function isSameContextUsageData(a: IChatContextUsageData | undefined, b: IChatContextUsageData | undefined): boolean;
11
38
  /**
12
39
  * A reusable circular progress indicator that displays a ring.
13
40
  * The ring fills clockwise from the top based on the percentage value.
@@ -46,14 +73,34 @@ export declare class ChatContextUsageWidget extends Disposable {
46
73
  private readonly _isVisible;
47
74
  get isVisible(): IObservable<boolean>;
48
75
  private readonly _lastRequestDisposable;
76
+ private readonly _modelConfigurationListener;
77
+ private _currentResponse;
78
+ private _currentModelId;
79
+ /**
80
+ * The model the user currently has selected in the picker. When set it
81
+ * overrides the last request's model for computing the context-window
82
+ * denominator, so switching models updates the widget before the next
83
+ * request is sent. The usage numerator still comes from the last response.
84
+ */
85
+ private _selectedModelId;
86
+ private _sessionCost;
49
87
  private readonly _hoverDisposable;
50
88
  private readonly _contextUsageDetails;
51
- private currentData;
89
+ private _chatWidget;
90
+ private readonly _currentData;
52
91
  private static readonly _OPENED_STORAGE_KEY;
53
92
  private static readonly _HOVER_ID;
54
93
  private readonly _contextUsageOpenedKey;
55
94
  private _enabled;
95
+ /**
96
+ * Per-editor resolver for a model's configuration (e.g. user-selected
97
+ * context size). When unset the widget falls back to the profile-global
98
+ * value from {@link ILanguageModelsService.getModelConfiguration}, which can
99
+ * lag the editor's actual selection (see issue #320393).
100
+ */
101
+ private _modelConfigurationResolver;
56
102
  constructor(hoverService: IHoverService, instantiationService: IInstantiationService, languageModelsService: ILanguageModelsService, contextKeyService: IContextKeyService, storageService: IStorageService, configurationService: IConfigurationService);
103
+ setChatWidget(widget: IChatWidget): void;
57
104
  /**
58
105
  * Shows the sticky context usage details hover and records that the user
59
106
  * has opened it. Returns `true` if the details were shown.
@@ -67,8 +114,30 @@ export declare class ChatContextUsageWidget extends Disposable {
67
114
  * Updates the widget with the latest request/response data.
68
115
  * The model is retrieved from the request's modelId.
69
116
  * @param lastRequest The last request in the session
117
+ * @param sessionCost Total copilot credits consumed across all turns
118
+ */
119
+ update(lastRequest: IChatRequestModel | undefined, sessionCost?: number): void;
120
+ /**
121
+ * Provides a per-editor resolver for the selected model's configuration
122
+ * (notably the user-selected context size). The widget re-renders whenever
123
+ * the supplied event fires for the currently displayed model. Without this,
124
+ * the widget falls back to the profile-global value, which can drift from
125
+ * the editor's actual selection (see issue #320393).
126
+ */
127
+ setModelConfigurationResolver(resolver: (modelId: string) => IStringDictionary<unknown> | undefined, onDidChange: Event<string>): void;
128
+ /**
129
+ * Sets the model the user currently has selected in the picker. The
130
+ * context-window denominator then reflects this model immediately, even
131
+ * before a request is sent with it. The usage numerator still comes from the
132
+ * last completed response.
133
+ */
134
+ setSelectedModel(modelId: string | undefined): void;
135
+ /**
136
+ * Resolves a model's context-window dimensions, or `undefined` when it has no usable window. A meta-model such as
137
+ * "auto" advertises a zero-sized window, so it resolves to `undefined` and the caller falls back to the model that
138
+ * actually served the request (see issue #321781).
70
139
  */
71
- update(lastRequest: IChatRequestModel | undefined): void;
140
+ private resolveContextWindow;
72
141
  private updateFromResponse;
73
142
  private render;
74
143
  private show;
@@ -6,6 +6,7 @@ import { $ as $$1, createElementNS, addDisposableListener, EventType } from '@co
6
6
  import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
7
7
  import { Disposable, MutableDisposable, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
8
8
  import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
9
+ import { equals } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arrays';
9
10
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
10
11
  import { IHoverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service';
11
12
  import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
@@ -20,10 +21,29 @@ import { ChatContextUsageDetails } from './chatContextUsageDetails.js';
20
21
  import { StandardKeyboardEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/keyboardEvent';
21
22
  import { KeyCode } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
22
23
  import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
24
+ import { observableValueOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValueOpts';
23
25
 
24
26
  var ChatContextUsageWidget_1;
25
27
  registerCss(chatContextUsageWidget);
26
28
  const $ = $$1;
29
+ function resolveContextWindowInputTokens(modelConfiguration, configurationSchema, maxInputTokens) {
30
+ const configuredContextSize = typeof modelConfiguration?.contextSize === "number" ? modelConfiguration.contextSize : undefined;
31
+ const schemaDefaultContextSize = configurationSchema?.properties?.contextSize?.default;
32
+ return configuredContextSize ?? (typeof schemaDefaultContextSize === "number" ? schemaDefaultContextSize : undefined) ?? maxInputTokens;
33
+ }
34
+ function isSameContextUsageData(a, b) {
35
+ if (a === b) {
36
+ return true;
37
+ }
38
+ if (!a || !b) {
39
+ return false;
40
+ }
41
+ return a.usedTokens === b.usedTokens && a.completionTokens === b.completionTokens && a.totalContextWindow === b.totalContextWindow && a.percentage === b.percentage && a.outputBufferPercentage === b.outputBufferPercentage && a.sessionCost === b.sessionCost && equals(
42
+ a.promptTokenDetails,
43
+ b.promptTokenDetails,
44
+ (x, y) => x.category === y.category && x.label === y.label && x.percentageOfPrompt === y.percentageOfPrompt
45
+ );
46
+ }
27
47
  class CircularProgressIndicator {
28
48
  static {
29
49
  this.CENTER_X = 18;
@@ -93,8 +113,14 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
93
113
  this.onDidChangeVisibility = this._onDidChangeVisibility.event;
94
114
  this._isVisible = observableValue(this, false);
95
115
  this._lastRequestDisposable = this._register(( new MutableDisposable()));
116
+ this._modelConfigurationListener = this._register(( new MutableDisposable()));
117
+ this._sessionCost = 0;
96
118
  this._hoverDisposable = this._register(( new MutableDisposable()));
97
119
  this._contextUsageDetails = this._register(( new MutableDisposable()));
120
+ this._currentData = observableValueOpts({
121
+ owner: this,
122
+ equalsFn: isSameContextUsageData
123
+ }, undefined);
98
124
  this._hoverOptions = {
99
125
  id: ChatContextUsageWidget_1._HOVER_ID,
100
126
  appearance: {
@@ -110,7 +136,7 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
110
136
  this.domNode.style.display = "none";
111
137
  this.domNode.setAttribute("tabindex", "0");
112
138
  this.domNode.setAttribute("role", "button");
113
- this.domNode.setAttribute("aria-label", ( localize(7820, "Context window usage")));
139
+ this.domNode.setAttribute("aria-label", ( localize(8406, "Context window usage")));
114
140
  const iconContainer = this.domNode.appendChild($(".icon-container"));
115
141
  this.progressIndicator = ( new CircularProgressIndicator());
116
142
  iconContainer.appendChild(this.progressIndicator.domNode);
@@ -129,13 +155,17 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
129
155
  this._enabled = this.configurationService.getValue(ChatConfiguration.ChatContextUsageEnabled) !== false;
130
156
  if (!this._enabled) {
131
157
  this.hide();
132
- } else if (this.currentData) {
158
+ } else if (this._currentData.get()) {
133
159
  this.show();
134
160
  }
135
161
  }
136
162
  }));
137
163
  this.setupHover();
138
164
  }
165
+ setChatWidget(widget) {
166
+ this._chatWidget = widget;
167
+ this._contextUsageDetails.value?.setChatWidget(widget);
168
+ }
139
169
  showDetails() {
140
170
  const details = this._createDetails();
141
171
  if (!details) {
@@ -154,13 +184,12 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
154
184
  return true;
155
185
  }
156
186
  _createDetails() {
157
- if (!this._isVisible.get() || !this.currentData) {
187
+ if (!this._isVisible.get() || !this._currentData.get()) {
158
188
  return undefined;
159
189
  }
160
190
  if (!this._contextUsageDetails.value) {
161
- this._contextUsageDetails.value = this.instantiationService.createInstance(ChatContextUsageDetails);
191
+ this._contextUsageDetails.value = this.instantiationService.createInstance(ChatContextUsageDetails, this._chatWidget, this._currentData);
162
192
  }
163
- this._contextUsageDetails.value.update(this.currentData);
164
193
  return this._contextUsageDetails.value;
165
194
  }
166
195
  _markOpened() {
@@ -192,81 +221,114 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
192
221
  }
193
222
  }));
194
223
  }
195
- update(lastRequest) {
224
+ update(lastRequest, sessionCost = 0) {
196
225
  this._lastRequestDisposable.clear();
226
+ this._currentResponse = undefined;
227
+ this._currentModelId = undefined;
228
+ this._sessionCost = sessionCost;
197
229
  if (!lastRequest) {
198
- this.currentData = undefined;
230
+ this._currentData.set(undefined, undefined);
199
231
  this.hide();
200
232
  return;
201
233
  }
202
234
  if (!lastRequest.response || !lastRequest.modelId) {
203
- if (!this.currentData) {
235
+ if (!this._currentData.get()) {
204
236
  this.hide();
205
237
  }
206
238
  return;
207
239
  }
208
240
  const response = lastRequest.response;
209
241
  const modelId = lastRequest.modelId;
242
+ this._currentResponse = response;
243
+ this._currentModelId = modelId;
210
244
  this.updateFromResponse(response, modelId);
211
245
  this._lastRequestDisposable.value = response.onDidChange(() => {
212
246
  this.updateFromResponse(response, modelId);
213
247
  });
214
248
  }
215
- updateFromResponse(response, modelId) {
216
- const usage = response.usage;
249
+ setModelConfigurationResolver(resolver, onDidChange) {
250
+ this._modelConfigurationResolver = resolver;
251
+ this._modelConfigurationListener.value = onDidChange(modelId => {
252
+ const affectsDisplayedModel = this._currentModelId === modelId || this._selectedModelId === modelId;
253
+ if (this._currentResponse && this._currentModelId && affectsDisplayedModel) {
254
+ this.updateFromResponse(this._currentResponse, this._currentModelId);
255
+ }
256
+ });
257
+ }
258
+ setSelectedModel(modelId) {
259
+ if (this._selectedModelId === modelId) {
260
+ return;
261
+ }
262
+ this._selectedModelId = modelId;
263
+ if (this._currentResponse && this._currentModelId) {
264
+ this.updateFromResponse(this._currentResponse, this._currentModelId);
265
+ }
266
+ }
267
+ resolveContextWindow(modelId) {
268
+ if (!modelId) {
269
+ return undefined;
270
+ }
217
271
  const modelMetadata = this.languageModelsService.lookupLanguageModel(modelId);
218
- const modelConfiguration = this.languageModelsService.getModelConfiguration(modelId);
219
- const configuredContextSize = typeof modelConfiguration?.contextSize === "number" ? modelConfiguration.contextSize : undefined;
220
- const maxInputTokens = configuredContextSize ?? modelMetadata?.maxInputTokens;
221
- const maxOutputTokens = modelMetadata?.maxOutputTokens;
272
+ if (!modelMetadata) {
273
+ return undefined;
274
+ }
275
+ const modelConfiguration = this._modelConfigurationResolver?.(modelId) ?? this.languageModelsService.getModelConfiguration(modelId);
276
+ const maxInputTokens = resolveContextWindowInputTokens(
277
+ modelConfiguration,
278
+ modelMetadata.configurationSchema,
279
+ modelMetadata.maxInputTokens
280
+ );
281
+ const maxOutputTokens = modelMetadata.maxOutputTokens;
222
282
  const totalContextWindow = (maxInputTokens ?? 0) + (maxOutputTokens ?? 0);
223
- if (!usage || totalContextWindow <= 0) {
224
- if (!this.currentData) {
283
+ if (totalContextWindow <= 0) {
284
+ return undefined;
285
+ }
286
+ return {
287
+ maxOutputTokens,
288
+ totalContextWindow
289
+ };
290
+ }
291
+ updateFromResponse(response, modelId) {
292
+ const usage = response.usage;
293
+ const effectiveModelId = usage?.actualModelId ?? modelId;
294
+ const contextWindow = this.resolveContextWindow(this._selectedModelId) ?? this.resolveContextWindow(effectiveModelId);
295
+ if (!usage || !contextWindow) {
296
+ if (!this._currentData.get()) {
225
297
  this.hide();
226
298
  }
227
299
  return;
228
300
  }
301
+ const {
302
+ maxOutputTokens,
303
+ totalContextWindow
304
+ } = contextWindow;
229
305
  const promptTokens = usage.promptTokens;
230
306
  const completionTokens = usage.completionTokens;
231
307
  const promptTokenDetails = usage.promptTokenDetails;
232
- const outputBuffer = usage.outputBuffer;
233
308
  const usedTokens = promptTokens + completionTokens;
234
309
  const percentage = (usedTokens / totalContextWindow) * 100;
235
- const outputBufferPercentage = outputBuffer !== undefined ? (Math.max(0, outputBuffer - completionTokens) / totalContextWindow) * 100 : undefined;
236
- this.render(
237
- percentage,
238
- completionTokens,
239
- usedTokens,
240
- totalContextWindow,
241
- outputBufferPercentage,
242
- promptTokenDetails
243
- );
244
- this.show();
245
- }
246
- render(
247
- percentage,
248
- completionTokens,
249
- usedTokens,
250
- totalContextWindow,
251
- outputBufferPercentage,
252
- promptTokenDetails
253
- ) {
254
- this.currentData = {
310
+ const outputBufferPercentage = maxOutputTokens !== undefined ? (Math.max(0, maxOutputTokens - completionTokens) / totalContextWindow) * 100 : undefined;
311
+ this.render({
255
312
  usedTokens,
256
313
  completionTokens,
257
314
  totalContextWindow,
258
315
  percentage,
259
316
  outputBufferPercentage,
260
- promptTokenDetails
261
- };
262
- this.progressIndicator.setProgress(percentage);
263
- const roundedPercentage = Math.min(100, Math.round(percentage));
317
+ promptTokenDetails,
318
+ sessionCost: this._sessionCost
319
+ });
320
+ this.show();
321
+ }
322
+ render(data) {
323
+ this._currentData.set(data, undefined);
324
+ this.progressIndicator.setProgress(data.percentage);
325
+ const roundedPercentage = Math.min(100, Math.round(data.percentage));
264
326
  this.percentageLabel.textContent = `${roundedPercentage}%`;
265
- this.domNode.setAttribute("aria-label", ( localize(7821, "Context window usage: {0}%", roundedPercentage)));
327
+ this.domNode.setAttribute("aria-label", ( localize(8407, "Context window usage: {0}%", roundedPercentage)));
266
328
  this.domNode.classList.remove("warning", "error");
267
- if (percentage >= 90) {
329
+ if (data.percentage >= 90) {
268
330
  this.domNode.classList.add("error");
269
- } else if (percentage >= 75) {
331
+ } else if (data.percentage >= 75) {
270
332
  this.domNode.classList.add("warning");
271
333
  }
272
334
  }
@@ -290,4 +352,4 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
290
352
  };
291
353
  ChatContextUsageWidget = ChatContextUsageWidget_1 = ( __decorate([( __param(0, IHoverService)), ( __param(1, IInstantiationService)), ( __param(2, ILanguageModelsService)), ( __param(3, IContextKeyService)), ( __param(4, IStorageService)), ( __param(5, IConfigurationService))], ChatContextUsageWidget));
292
354
 
293
- export { ChatContextUsageWidget, CircularProgressIndicator };
355
+ export { ChatContextUsageWidget, CircularProgressIndicator, isSameContextUsageData, resolveContextWindowInputTokens };
@@ -33,6 +33,26 @@
33
33
  font-weight: 600;
34
34
  }
35
35
 
36
+ /* Session cost section */
37
+ .chat-context-usage-details .session-cost-section {
38
+ margin-bottom: 8px;
39
+ }
40
+
41
+ .chat-context-usage-details .session-cost-row {
42
+ display: flex;
43
+ justify-content: space-between;
44
+ align-items: center;
45
+ gap: 20px;
46
+ }
47
+
48
+ .chat-context-usage-details .session-cost-label {
49
+ color: var(--vscode-foreground);
50
+ }
51
+
52
+ .chat-context-usage-details .session-cost-value {
53
+ font-weight: 600;
54
+ }
55
+
36
56
  /* Quota indicator — matching ChatStatusDashboard */
37
57
  .chat-context-usage-details .quota-indicator .quota-label {
38
58
  display: flex;