@codingame/monaco-vscode-katex-common 26.2.1 → 27.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetDropdown.d.ts +10 -4
  3. package/vscode/src/vs/platform/actionWidget/browser/actionWidgetDropdown.js +35 -11
  4. package/vscode/src/vs/platform/actions/browser/buttonbar.d.ts +3 -0
  5. package/vscode/src/vs/platform/actions/browser/buttonbar.js +15 -4
  6. package/vscode/src/vs/platform/mcp/common/modelContextProtocolApps.d.ts +548 -0
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +15 -15
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +5 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +168 -15
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +67 -51
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.d.ts +1 -0
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +12 -11
  14. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +9 -9
  15. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +8 -0
  16. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +42 -19
  17. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +12 -1
  18. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +63 -40
  19. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
  20. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +7 -5
  21. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +77 -73
  22. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +69 -32
  23. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +23 -6
  24. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +381 -83
  25. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.d.ts +1 -0
  26. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.js +28 -13
  27. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +38 -19
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +109 -113
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +16 -15
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +2 -2
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +8 -8
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +14 -14
  33. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +2 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +28 -9
  35. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +226 -123
  36. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js +4 -4
  37. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewWelcomeController.js +4 -4
  38. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  41. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.d.ts +3 -1
  42. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAttachmentsContentPart.js +9 -4
  43. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.d.ts +1 -3
  44. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +7 -10
  45. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleContentPart.d.ts +3 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleContentPart.js +22 -4
  48. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleMarkdownContentPart.d.ts +2 -1
  49. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCollapsibleMarkdownContentPart.js +11 -3
  50. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  52. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +1 -1
  53. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDiffBlockPart.d.ts +0 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDiffBlockPart.js +0 -6
  55. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +2 -2
  56. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatErrorConfirmationPart.d.ts +3 -1
  57. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatErrorConfirmationPart.js +6 -3
  58. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  59. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.d.ts +2 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +5 -4
  61. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +0 -1
  62. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +26 -27
  63. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +3 -0
  64. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +52 -22
  65. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +8 -7
  66. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  67. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.d.ts +2 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +20 -8
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPullRequestContentPart.d.ts +3 -3
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatPullRequestContentPart.js +11 -6
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +36 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +166 -45
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +4 -4
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.d.ts +3 -2
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +16 -11
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.d.ts +14 -5
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +98 -26
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +5 -5
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTaskContentPart.js +1 -0
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +10 -1
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +244 -80
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.d.ts +29 -1
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +252 -8
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.d.ts +4 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +39 -18
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +5 -3
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +36 -23
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolOutputContentSubPart.js +5 -5
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.d.ts +5 -7
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +42 -37
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatCodeBlockPill.css +12 -3
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +48 -18
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatHookContentPart.css +9 -6
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatInlineAnchorWidget.css +2 -2
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +351 -422
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +14 -7
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +102 -7
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTipContent.css +69 -19
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/codeBlockPart.css +48 -15
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.d.ts +4 -1
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +47 -23
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.d.ts +0 -1
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.js +0 -5
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +2 -2
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +7 -7
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatSimpleToolProgressPart.d.ts +18 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatSimpleToolProgressPart.js +103 -0
  112. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +15 -18
  113. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +1 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +63 -69
  115. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.d.ts +1 -1
  116. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +7 -9
  117. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.d.ts +3 -1
  118. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +41 -2
  119. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  120. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +3 -3
  121. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.d.ts +1 -1
  122. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +6 -5
  123. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.js +13 -1
  124. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolStreamingSubPart.js +2 -1
  125. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +11 -11
  126. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +17 -3
  127. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +310 -79
  128. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.d.ts +6 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +13 -4
  130. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.d.ts +35 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.js +441 -0
  132. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +24 -1
  133. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +392 -86
  134. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  135. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +52 -6
  136. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +271 -187
  137. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +68 -0
  138. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +668 -0
  139. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +12 -1
  140. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +57 -16
  141. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.d.ts +2 -6
  142. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +78 -45
  143. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.d.ts +1 -0
  144. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.d.ts +28 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js +86 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +9 -5
  147. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +4 -3
  148. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +393 -134
  149. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chatViewWelcome.css +36 -17
  150. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.d.ts +2 -2
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +20 -13
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.d.ts +25 -6
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +141 -79
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageWidget.css +18 -13
  155. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.d.ts +7 -0
  156. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.js +108 -27
  157. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.d.ts +1 -0
  158. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +20 -14
  159. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.d.ts +4 -6
  160. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.js +74 -32
  161. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.d.ts +11 -2
  162. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +68 -27
  163. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.d.ts +5 -0
  164. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.js +125 -13
  165. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatGutterAffordance.d.ts +8 -11
  166. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatGutterAffordance.js +54 -45
  167. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.d.ts +11 -10
  168. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.js +172 -112
  169. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +5 -5
  170. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  171. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChat.css +0 -42
  172. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatEditorAffordance.css +27 -3
  173. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatOverlayWidget.css +83 -2
  174. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.d.ts +8 -1
  175. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +58 -33
  176. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  177. package/vscode/src/vs/workbench/contrib/mcp/common/modelContextProtocolApps.d.ts +1 -548
  178. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  179. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  180. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  181. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  182. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.js +0 -187
  183. /package/vscode/src/vs/{workbench/contrib → platform}/mcp/common/modelContextProtocolApps.js +0 -0
@@ -14,6 +14,18 @@
14
14
  }
15
15
  }
16
16
 
17
+ .interactive-session.chat-view-getting-started-disabled {
18
+
19
+ /* hide most welcome pieces (except suggested actions) when we show recent sessions to make some space */
20
+ .chat-welcome-view .chat-welcome-view-icon,
21
+ .chat-welcome-view .chat-welcome-view-title,
22
+ .chat-welcome-view .chat-welcome-view-message,
23
+ .chat-welcome-view .chat-welcome-view-disclaimer,
24
+ .chat-welcome-view .chat-welcome-view-tips {
25
+ display: none;
26
+ }
27
+ }
28
+
17
29
  /* Chat welcome container */
18
30
  .interactive-session .chat-welcome-view-container {
19
31
  display: flex;
@@ -41,11 +53,13 @@ div.chat-welcome-view {
41
53
  padding: 12px;
42
54
 
43
55
  & > .chat-welcome-view-icon {
44
- min-height: 48px;
56
+ min-height: 40px;
45
57
  }
46
58
 
47
59
  & > .chat-welcome-view-icon .codicon {
60
+ color: var(--vscode-descriptionForeground);
48
61
  font-size: 40px;
62
+ margin-bottom: 24px;
49
63
  }
50
64
 
51
65
  & > .chat-welcome-view-icon.custom-icon {
@@ -72,7 +86,9 @@ div.chat-welcome-view {
72
86
  }
73
87
 
74
88
  & > .chat-welcome-view-title {
75
- font-size: 24px;
89
+ font-size: 13px;
90
+ font-weight: 600;
91
+ color: var(--vscode-foreground);
76
92
  margin-top: 5px;
77
93
  text-align: center;
78
94
  line-height: normal;
@@ -82,10 +98,11 @@ div.chat-welcome-view {
82
98
  & > .chat-welcome-view-message {
83
99
  position: relative;
84
100
  text-align: center;
85
- max-width: 100%;
101
+ max-width: 280px;
86
102
  padding: 0 20px;
87
- margin: 0 auto;
88
- color: var(--vscode-foreground);
103
+ margin: 8px auto 0;
104
+ color: var(--vscode-descriptionForeground);
105
+ font-size: 12px;
89
106
 
90
107
  a {
91
108
  color: var(--vscode-textLink-foreground);
@@ -98,8 +115,7 @@ div.chat-welcome-view {
98
115
  }
99
116
 
100
117
  p {
101
- margin-top: 8px;
102
- margin-bottom: 8px;
118
+ margin: 0;
103
119
  }
104
120
  }
105
121
 
@@ -141,11 +157,16 @@ div.chat-welcome-view {
141
157
  }
142
158
 
143
159
  & > .chat-welcome-view-disclaimer {
144
- color: var(--vscode-foreground);
160
+ color: var(--vscode-input-placeholderForeground);
145
161
  text-align: center;
146
- margin: -16px auto;
147
- max-width: 400px;
162
+ margin: 0;
163
+ max-width: 256px;
148
164
  padding: 0 12px;
165
+ font-size: 12px;
166
+
167
+ p {
168
+ margin: 0;
169
+ }
149
170
 
150
171
  a {
151
172
  color: var(--vscode-textLink-foreground);
@@ -178,9 +199,7 @@ div.chat-welcome-view {
178
199
  position: absolute;
179
200
  top: 8px;
180
201
  left: 16px;
181
- font-size: 11px;
182
- text-transform: uppercase;
183
- letter-spacing: 0.5px;
202
+ font-size: 12px;
184
203
  color: var(--vscode-descriptionForeground);
185
204
  margin: 0;
186
205
  text-align: left;
@@ -190,8 +209,8 @@ div.chat-welcome-view {
190
209
  display: flex;
191
210
  align-items: center;
192
211
  gap: 6px;
193
- height: 24px;
194
- padding: 0 8px;
212
+ height: 20px;
213
+ padding: 0 6px;
195
214
  border-radius: 4px;
196
215
  background-color: var(--vscode-editorWidget-background);
197
216
  cursor: pointer;
@@ -202,13 +221,13 @@ div.chat-welcome-view {
202
221
  flex: 0 0 auto;
203
222
 
204
223
  & > .chat-welcome-view-suggested-prompt-title {
205
- font-size: 13px;
224
+ font-size: 12px;
206
225
  color: var(--vscode-editorWidget-foreground);
207
226
  white-space: nowrap;
208
227
  }
209
228
 
210
229
  & > .chat-welcome-view-suggested-prompt-description {
211
- font-size: 13px;
230
+ font-size: 11px;
212
231
  color: var(--vscode-descriptionForeground);
213
232
  overflow: hidden;
214
233
  text-overflow: ellipsis;
@@ -8,8 +8,8 @@ export interface IChatContextUsagePromptTokenDetail {
8
8
  percentageOfPrompt: number;
9
9
  }
10
10
  export interface IChatContextUsageData {
11
- promptTokens: number;
12
- maxInputTokens: number;
11
+ usedTokens: number;
12
+ totalContextWindow: number;
13
13
  percentage: number;
14
14
  promptTokenDetails?: readonly IChatContextUsagePromptTokenDetail[];
15
15
  }
@@ -20,11 +20,10 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
20
20
  this.menuService = menuService;
21
21
  this.contextKeyService = contextKeyService;
22
22
  this.domNode = $(".chat-context-usage-details");
23
- this.domNode.setAttribute("tabindex", "0");
24
23
  this.quotaItem = this.domNode.appendChild($(".quota-item"));
25
24
  const quotaItemHeader = this.quotaItem.appendChild($(".quota-item-header"));
26
25
  const quotaItemLabel = quotaItemHeader.appendChild($(".quota-item-label"));
27
- quotaItemLabel.textContent = ( localize(6235, "Context Window"));
26
+ quotaItemLabel.textContent = ( localize(6774, "Context Window"));
28
27
  const tokenRow = this.quotaItem.appendChild($(".token-row"));
29
28
  this.tokenCountLabel = tokenRow.appendChild($(".token-count-label"));
30
29
  this.percentageLabel = tokenRow.appendChild($(".quota-item-value"));
@@ -32,12 +31,12 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
32
31
  this.progressFill = progressBar.appendChild($(".quota-bit"));
33
32
  this.tokenDetailsContainer = this.domNode.appendChild($(".token-details-container"));
34
33
  this.warningMessage = this.domNode.appendChild($(".warning-message"));
35
- this.warningMessage.textContent = ( localize(6236, "Quality may decline as limit nears."));
34
+ this.warningMessage.textContent = ( localize(6775, "Quality may decline as limit nears."));
36
35
  this.warningMessage.style.display = "none";
37
36
  this.actionsSection = this.domNode.appendChild($(".actions-section"));
38
37
  this.actionsSection.appendChild($(".separator"));
39
38
  const actionsHeader = this.actionsSection.appendChild($(".actions-header"));
40
- actionsHeader.textContent = ( localize(6237, "Actions"));
39
+ actionsHeader.textContent = ( localize(6776, "Actions"));
41
40
  const buttonBarContainer = this.actionsSection.appendChild($(".button-bar-container"));
42
41
  this._register(this.instantiationService.createInstance(
43
42
  MenuWorkbenchButtonBar,
@@ -66,15 +65,15 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
66
65
  update(data) {
67
66
  const {
68
67
  percentage,
69
- promptTokens,
70
- maxInputTokens,
68
+ usedTokens,
69
+ totalContextWindow,
71
70
  promptTokenDetails
72
71
  } = data;
73
72
  this.tokenCountLabel.textContent = ( localize(
74
- 6238,
73
+ 6777,
75
74
  "{0} / {1} tokens",
76
- this.formatTokenCount(promptTokens, 1),
77
- this.formatTokenCount(maxInputTokens, 0)
75
+ this.formatTokenCount(usedTokens, 1),
76
+ this.formatTokenCount(totalContextWindow, 0)
78
77
  ));
79
78
  this.percentageLabel.textContent = `• ${percentage.toFixed(0)}%`;
80
79
  this.progressFill.style.width = `${Math.min(100, percentage)}%`;
@@ -88,7 +87,8 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
88
87
  this.warningMessage.style.display = percentage >= 75 ? "" : "none";
89
88
  }
90
89
  formatTokenCount(count, decimals) {
91
- if (count >= 1000000) {
90
+ const mThreshold = 1000000 - 500 * Math.pow(10, -decimals);
91
+ if (count >= mThreshold) {
92
92
  return `${(count / 1000000).toFixed(decimals)}M`;
93
93
  } else if (count >= 1000) {
94
94
  return `${(count / 1000).toFixed(decimals)}K`;
@@ -115,16 +115,23 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
115
115
  }
116
116
  if (totalPercentage < 100) {
117
117
  const uncategorizedPercentage = 100 - totalPercentage;
118
- categoryMap.set(( localize(6239, "Uncategorized")), [{
119
- label: ( localize(6240, "Other")),
118
+ categoryMap.set(( localize(6778, "Uncategorized")), [{
119
+ label: ( localize(6779, "Other")),
120
120
  percentageOfPrompt: uncategorizedPercentage
121
121
  }]);
122
122
  }
123
123
  for (const [category, items] of categoryMap) {
124
+ const visibleItems = items.filter(item => {
125
+ const contextRelativePercentage = (item.percentageOfPrompt / 100) * contextWindowPercentage;
126
+ return contextRelativePercentage >= 0.05;
127
+ });
128
+ if (visibleItems.length === 0) {
129
+ continue;
130
+ }
124
131
  const categorySection = this.tokenDetailsContainer.appendChild($(".token-category"));
125
132
  const categoryHeader = categorySection.appendChild($(".token-category-header"));
126
133
  categoryHeader.textContent = category;
127
- for (const item of items) {
134
+ for (const item of visibleItems) {
128
135
  const itemRow = categorySection.appendChild($(".token-detail-item"));
129
136
  const itemLabel = itemRow.appendChild($(".token-detail-label"));
130
137
  itemLabel.textContent = item.label;
@@ -3,22 +3,26 @@ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/l
3
3
  import { IObservable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/observable";
4
4
  import { IHoverService } from "@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service";
5
5
  import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
6
+ import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service";
7
+ import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
8
+ import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
6
9
  import { IChatRequestModel } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatModel";
7
10
  import { ILanguageModelsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service";
8
11
  /**
9
- * A reusable circular progress indicator that displays a pie chart.
10
- * The pie fills clockwise from the top based on the percentage value.
12
+ * A reusable circular progress indicator that displays a ring.
13
+ * The ring fills clockwise from the top based on the percentage value.
11
14
  */
12
15
  export declare class CircularProgressIndicator {
13
16
  readonly domNode: SVGSVGElement;
14
- private readonly progressPie;
17
+ private readonly progressCircle;
18
+ private readonly circumference;
15
19
  private static readonly CENTER_X;
16
20
  private static readonly CENTER_Y;
17
21
  private static readonly RADIUS;
18
22
  constructor();
19
23
  /**
20
- * Updates the pie chart to display the given percentage (0-100).
21
- * @param percentage The percentage of the pie to fill (clamped to 0-100)
24
+ * Updates the ring to display the given percentage (0-100).
25
+ * @param percentage The percentage of the ring to fill (clamped to 0-100)
22
26
  */
23
27
  setProgress(percentage: number): void;
24
28
  }
@@ -31,6 +35,9 @@ export declare class ChatContextUsageWidget extends Disposable {
31
35
  private readonly hoverService;
32
36
  private readonly instantiationService;
33
37
  private readonly languageModelsService;
38
+ private readonly contextKeyService;
39
+ private readonly storageService;
40
+ private readonly configurationService;
34
41
  private readonly _onDidChangeVisibility;
35
42
  readonly onDidChangeVisibility: Event<void>;
36
43
  readonly domNode: HTMLElement;
@@ -41,7 +48,19 @@ export declare class ChatContextUsageWidget extends Disposable {
41
48
  private readonly _hoverDisposable;
42
49
  private readonly _contextUsageDetails;
43
50
  private currentData;
44
- constructor(hoverService: IHoverService, instantiationService: IInstantiationService, languageModelsService: ILanguageModelsService);
51
+ private static readonly _OPENED_STORAGE_KEY;
52
+ private static readonly _HOVER_ID;
53
+ private readonly _contextUsageOpenedKey;
54
+ private _enabled;
55
+ constructor(hoverService: IHoverService, instantiationService: IInstantiationService, languageModelsService: ILanguageModelsService, contextKeyService: IContextKeyService, storageService: IStorageService, configurationService: IConfigurationService);
56
+ /**
57
+ * Shows the sticky context usage details hover and records that the user
58
+ * has opened it. Returns `true` if the details were shown.
59
+ */
60
+ showDetails(): boolean;
61
+ private readonly _hoverOptions;
62
+ private _createDetails;
63
+ private _markOpened;
45
64
  private setupHover;
46
65
  /**
47
66
  * Updates the widget with the latest request/response data.
@@ -9,13 +9,19 @@ import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/in
9
9
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
10
10
  import { IHoverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service';
11
11
  import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
12
+ import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
13
+ import { StorageScope, StorageTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
14
+ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service';
15
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
16
+ import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
17
+ import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
12
18
  import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
13
19
  import { ChatContextUsageDetails } from './chatContextUsageDetails.js';
14
20
  import { StandardKeyboardEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/keyboardEvent';
15
21
  import { KeyCode } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
16
22
  import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
17
- import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
18
23
 
24
+ var ChatContextUsageWidget_1;
19
25
  registerCss(chatContextUsageWidget);
20
26
  const $ = $$1;
21
27
  class CircularProgressIndicator {
@@ -26,155 +32,208 @@ class CircularProgressIndicator {
26
32
  this.CENTER_Y = 18;
27
33
  }
28
34
  static {
29
- this.RADIUS = 16;
35
+ this.RADIUS = 14;
30
36
  }
31
37
  constructor() {
38
+ const r = CircularProgressIndicator.RADIUS;
39
+ this.circumference = 2 * Math.PI * r;
32
40
  this.domNode = document.createElementNS("http://www.w3.org/2000/svg", "svg");
33
41
  this.domNode.setAttribute("viewBox", "0 0 36 36");
34
42
  this.domNode.classList.add("circular-progress");
35
43
  const bgCircle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
36
44
  bgCircle.setAttribute("cx", String(CircularProgressIndicator.CENTER_X));
37
45
  bgCircle.setAttribute("cy", String(CircularProgressIndicator.CENTER_Y));
38
- bgCircle.setAttribute("r", String(CircularProgressIndicator.RADIUS));
46
+ bgCircle.setAttribute("r", String(r));
39
47
  bgCircle.classList.add("progress-bg");
40
48
  this.domNode.appendChild(bgCircle);
41
- this.progressPie = document.createElementNS("http://www.w3.org/2000/svg", "path");
42
- this.progressPie.classList.add("progress-pie");
43
- this.domNode.appendChild(this.progressPie);
49
+ this.progressCircle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
50
+ this.progressCircle.setAttribute("cx", String(CircularProgressIndicator.CENTER_X));
51
+ this.progressCircle.setAttribute("cy", String(CircularProgressIndicator.CENTER_Y));
52
+ this.progressCircle.setAttribute("r", String(r));
53
+ this.progressCircle.classList.add("progress-arc");
54
+ this.progressCircle.setAttribute("stroke-dasharray", String(this.circumference));
55
+ this.progressCircle.setAttribute("stroke-dashoffset", String(this.circumference));
56
+ this.domNode.appendChild(this.progressCircle);
44
57
  }
45
58
  setProgress(percentage) {
46
- const cx = CircularProgressIndicator.CENTER_X;
47
- const cy = CircularProgressIndicator.CENTER_Y;
48
- const r = CircularProgressIndicator.RADIUS;
49
- if (percentage >= 100) {
50
- this.progressPie.setAttribute("d", `M ${cx} ${cy - r} A ${r} ${r} 0 1 1 ${cx - 0.001} ${cy - r} Z`);
51
- } else if (percentage <= 0) {
52
- this.progressPie.setAttribute("d", "");
53
- } else {
54
- const angle = (percentage / 100) * 360;
55
- const radians = (angle - 90) * (Math.PI / 180);
56
- const x = cx + r * Math.cos(radians);
57
- const y = cy + r * Math.sin(radians);
58
- const largeArcFlag = angle > 180 ? 1 : 0;
59
- const d = [
60
- `M ${cx} ${cy}`,
61
- `L ${cx} ${cy - r}`,
62
- `A ${r} ${r} 0 ${largeArcFlag} 1 ${x} ${y}`,
63
- "Z"].join(" ");
64
- this.progressPie.setAttribute("d", d);
65
- }
59
+ const clamped = Math.max(0, Math.min(100, percentage));
60
+ const offset = this.circumference - (clamped / 100) * this.circumference;
61
+ this.progressCircle.setAttribute("stroke-dashoffset", String(offset));
66
62
  }
67
63
  }
68
64
  let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
65
+ static {
66
+ ChatContextUsageWidget_1 = this;
67
+ }
69
68
  get isVisible() {
70
69
  return this._isVisible;
71
70
  }
72
- constructor(hoverService, instantiationService, languageModelsService) {
71
+ static {
72
+ this._OPENED_STORAGE_KEY = "chat.contextUsage.hasBeenOpened";
73
+ }
74
+ static {
75
+ this._HOVER_ID = "chat.contextUsage";
76
+ }
77
+ constructor(
78
+ hoverService,
79
+ instantiationService,
80
+ languageModelsService,
81
+ contextKeyService,
82
+ storageService,
83
+ configurationService
84
+ ) {
73
85
  super();
74
86
  this.hoverService = hoverService;
75
87
  this.instantiationService = instantiationService;
76
88
  this.languageModelsService = languageModelsService;
89
+ this.contextKeyService = contextKeyService;
90
+ this.storageService = storageService;
91
+ this.configurationService = configurationService;
77
92
  this._onDidChangeVisibility = this._register(( new Emitter()));
78
93
  this.onDidChangeVisibility = this._onDidChangeVisibility.event;
79
94
  this._isVisible = observableValue(this, false);
80
95
  this._lastRequestDisposable = this._register(( new MutableDisposable()));
81
96
  this._hoverDisposable = this._register(( new MutableDisposable()));
82
97
  this._contextUsageDetails = this._register(( new MutableDisposable()));
98
+ this._hoverOptions = {
99
+ id: ChatContextUsageWidget_1._HOVER_ID,
100
+ appearance: {
101
+ showPointer: true,
102
+ compact: true
103
+ },
104
+ persistence: {
105
+ hideOnHover: false
106
+ },
107
+ trapFocus: true
108
+ };
83
109
  this.domNode = $(".chat-context-usage-widget");
84
110
  this.domNode.style.display = "none";
85
111
  this.domNode.setAttribute("tabindex", "0");
86
112
  this.domNode.setAttribute("role", "button");
87
- this.domNode.setAttribute("aria-label", ( localize(6241, "Context window usage")));
113
+ this.domNode.setAttribute("aria-label", ( localize(6780, "Context window usage")));
88
114
  const iconContainer = this.domNode.appendChild($(".icon-container"));
89
115
  this.progressIndicator = ( new CircularProgressIndicator());
90
116
  iconContainer.appendChild(this.progressIndicator.domNode);
117
+ this._contextUsageOpenedKey = ChatContextKeys.contextUsageHasBeenOpened.bindTo(this.contextKeyService);
118
+ if (this.storageService.getBoolean(
119
+ ChatContextUsageWidget_1._OPENED_STORAGE_KEY,
120
+ StorageScope.WORKSPACE,
121
+ false
122
+ )) {
123
+ this._contextUsageOpenedKey.set(true);
124
+ }
125
+ this._enabled = this.configurationService.getValue(ChatConfiguration.ChatContextUsageEnabled) !== false;
126
+ this._register(this.configurationService.onDidChangeConfiguration(e => {
127
+ if (e.affectsConfiguration(ChatConfiguration.ChatContextUsageEnabled)) {
128
+ this._enabled = this.configurationService.getValue(ChatConfiguration.ChatContextUsageEnabled) !== false;
129
+ if (!this._enabled) {
130
+ this.hide();
131
+ } else if (this.currentData) {
132
+ this.show();
133
+ }
134
+ }
135
+ }));
91
136
  this.setupHover();
92
137
  }
138
+ showDetails() {
139
+ const details = this._createDetails();
140
+ if (!details) {
141
+ return false;
142
+ }
143
+ this.hoverService.showInstantHover({
144
+ ...this._hoverOptions,
145
+ content: details.domNode,
146
+ target: this.domNode,
147
+ persistence: {
148
+ hideOnHover: false,
149
+ sticky: true
150
+ }
151
+ }, true);
152
+ this._markOpened();
153
+ return true;
154
+ }
155
+ _createDetails() {
156
+ if (!this._isVisible.get() || !this.currentData) {
157
+ return undefined;
158
+ }
159
+ if (!this._contextUsageDetails.value) {
160
+ this._contextUsageDetails.value = this.instantiationService.createInstance(ChatContextUsageDetails);
161
+ }
162
+ this._contextUsageDetails.value.update(this.currentData);
163
+ return this._contextUsageDetails.value;
164
+ }
165
+ _markOpened() {
166
+ this._contextUsageOpenedKey.set(true);
167
+ this.storageService.store(
168
+ ChatContextUsageWidget_1._OPENED_STORAGE_KEY,
169
+ true,
170
+ StorageScope.WORKSPACE,
171
+ StorageTarget.MACHINE
172
+ );
173
+ }
93
174
  setupHover() {
94
175
  this._hoverDisposable.clear();
95
176
  const store = ( new DisposableStore());
96
177
  this._hoverDisposable.value = store;
97
- const createDetails = () => {
98
- if (!this._isVisible.get() || !this.currentData) {
99
- return undefined;
100
- }
101
- this._contextUsageDetails.value = this.instantiationService.createInstance(ChatContextUsageDetails);
102
- this._contextUsageDetails.value.update(this.currentData);
103
- return this._contextUsageDetails.value;
104
- };
105
- const hoverOptions = {
106
- appearance: {
107
- showPointer: true,
108
- compact: true
109
- },
110
- persistence: {
111
- hideOnHover: false
112
- },
113
- trapFocus: true
114
- };
115
178
  store.add(this.hoverService.setupDelayedHover(this.domNode, () => ({
116
- ...hoverOptions,
117
- content: createDetails()?.domNode ?? ""
179
+ ...this._hoverOptions,
180
+ content: this._createDetails()?.domNode ?? ""
118
181
  })));
119
- const showStickyHover = () => {
120
- const details = createDetails();
121
- if (details) {
122
- this.hoverService.showInstantHover({
123
- ...hoverOptions,
124
- content: details.domNode,
125
- target: this.domNode,
126
- persistence: {
127
- hideOnHover: false,
128
- sticky: true
129
- }
130
- }, true);
131
- }
132
- };
133
182
  store.add(addDisposableListener(this.domNode, EventType.CLICK, e => {
134
183
  e.stopPropagation();
135
- showStickyHover();
184
+ this.showDetails();
136
185
  }));
137
186
  store.add(addDisposableListener(this.domNode, EventType.KEY_DOWN, e => {
138
187
  const evt = ( new StandardKeyboardEvent(e));
139
188
  if (evt.equals(KeyCode.Space) || evt.equals(KeyCode.Enter)) {
140
189
  e.preventDefault();
141
- showStickyHover();
190
+ this.showDetails();
142
191
  }
143
192
  }));
144
193
  }
145
194
  update(lastRequest) {
146
195
  this._lastRequestDisposable.clear();
147
- if (!lastRequest?.response || !lastRequest.modelId) {
196
+ if (!lastRequest) {
197
+ this.currentData = undefined;
148
198
  this.hide();
149
199
  return;
150
200
  }
201
+ if (!lastRequest.response || !lastRequest.modelId) {
202
+ if (!this.currentData) {
203
+ this.hide();
204
+ }
205
+ return;
206
+ }
151
207
  const response = lastRequest.response;
152
208
  const modelId = lastRequest.modelId;
153
- this._lastRequestDisposable.value = autorun(reader => {
154
- const isComplete = !response.isInProgress.read(reader);
155
- if (isComplete) {
156
- this.updateFromResponse(response, modelId);
157
- }
209
+ this.updateFromResponse(response, modelId);
210
+ this._lastRequestDisposable.value = response.onDidChange(() => {
211
+ this.updateFromResponse(response, modelId);
158
212
  });
159
213
  }
160
214
  updateFromResponse(response, modelId) {
161
- const usage = response.result?.usage;
215
+ const usage = response.usage;
162
216
  const modelMetadata = this.languageModelsService.lookupLanguageModel(modelId);
163
217
  const maxInputTokens = modelMetadata?.maxInputTokens;
164
- if (!usage || !maxInputTokens || maxInputTokens <= 0) {
165
- this.hide();
218
+ const maxOutputTokens = modelMetadata?.maxOutputTokens;
219
+ if (!usage || !maxInputTokens || maxInputTokens <= 0 || !maxOutputTokens || maxOutputTokens <= 0) {
220
+ if (!this.currentData) {
221
+ this.hide();
222
+ }
166
223
  return;
167
224
  }
168
225
  const promptTokens = usage.promptTokens;
169
226
  const promptTokenDetails = usage.promptTokenDetails;
170
- const percentage = Math.min(100, (promptTokens / maxInputTokens) * 100);
171
- this.render(percentage, promptTokens, maxInputTokens, promptTokenDetails);
227
+ const totalContextWindow = maxInputTokens + maxOutputTokens;
228
+ const usedTokens = promptTokens + maxOutputTokens;
229
+ const percentage = Math.min(100, (usedTokens / totalContextWindow) * 100);
230
+ this.render(percentage, usedTokens, totalContextWindow, promptTokenDetails);
172
231
  this.show();
173
232
  }
174
- render(percentage, promptTokens, maxTokens, promptTokenDetails) {
233
+ render(percentage, usedTokens, totalContextWindow, promptTokenDetails) {
175
234
  this.currentData = {
176
- promptTokens,
177
- maxInputTokens: maxTokens,
235
+ usedTokens,
236
+ totalContextWindow,
178
237
  percentage,
179
238
  promptTokenDetails
180
239
  };
@@ -187,6 +246,9 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
187
246
  }
188
247
  }
189
248
  show() {
249
+ if (!this._enabled) {
250
+ return;
251
+ }
190
252
  if (this.domNode.style.display === "none") {
191
253
  this.domNode.style.display = "";
192
254
  this._isVisible.set(true, undefined);
@@ -201,6 +263,6 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
201
263
  }
202
264
  }
203
265
  };
204
- ChatContextUsageWidget = ( __decorate([( __param(0, IHoverService)), ( __param(1, IInstantiationService)), ( __param(2, ILanguageModelsService))], ChatContextUsageWidget));
266
+ ChatContextUsageWidget = ChatContextUsageWidget_1 = ( __decorate([( __param(0, IHoverService)), ( __param(1, IInstantiationService)), ( __param(2, ILanguageModelsService)), ( __param(3, IContextKeyService)), ( __param(4, IStorageService)), ( __param(5, IConfigurationService))], ChatContextUsageWidget));
205
267
 
206
268
  export { ChatContextUsageWidget, CircularProgressIndicator };
@@ -8,6 +8,7 @@
8
8
  align-items: center;
9
9
  justify-content: center;
10
10
  height: 22px;
11
+ width: 22px;
11
12
  flex-shrink: 0;
12
13
  cursor: pointer;
13
14
  padding: 3px;
@@ -19,8 +20,8 @@
19
20
  display: flex;
20
21
  align-items: center;
21
22
  justify-content: center;
22
- width: 16px;
23
- height: 16px;
23
+ width: 14px;
24
+ height: 14px;
24
25
  flex-shrink: 0;
25
26
  }
26
27
 
@@ -46,22 +47,26 @@
46
47
  }
47
48
 
48
49
  .chat-context-usage-widget .progress-bg {
49
- fill: transparent;
50
- stroke: var(--vscode-icon-foreground);
51
- stroke-width: 2;
52
- opacity: 0.4;
50
+ fill: none;
51
+ stroke: var(--vscode-disabledForeground);
52
+ stroke-width: 4;
53
+ opacity: 0.5;
53
54
  }
54
55
 
55
- .chat-context-usage-widget .progress-pie {
56
- fill: var(--vscode-icon-foreground);
57
- opacity: 0.8;
56
+ .chat-context-usage-widget .progress-arc {
57
+ fill: none;
58
+ stroke: var(--vscode-descriptionForeground);
59
+ stroke-width: 4;
60
+ stroke-linecap: round;
61
+ transform: rotate(-90deg);
62
+ transform-origin: center;
58
63
  pointer-events: none;
59
64
  }
60
65
 
61
- .chat-context-usage-widget.warning .progress-pie {
62
- fill: var(--vscode-editorWarning-foreground);
66
+ .chat-context-usage-widget.warning .progress-arc {
67
+ stroke: var(--vscode-editorWarning-foreground);
63
68
  }
64
69
 
65
- .chat-context-usage-widget.error .progress-pie {
66
- fill: var(--vscode-editorError-foreground);
70
+ .chat-context-usage-widget.error .progress-arc {
71
+ stroke: var(--vscode-editorError-foreground);
67
72
  }