@codingame/monaco-vscode-katex-common 28.4.0 → 29.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 (154) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/platform/actions/browser/buttonbar.js +2 -2
  3. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider.js +17 -15
  4. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.d.ts +2 -2
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContinueInAction.js +9 -9
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatElicitationActions.js +1 -1
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.d.ts +3 -1
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatExecuteActions.js +158 -47
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +22 -17
  10. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionHoverWidget.js +8 -8
  11. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +16 -4
  12. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +121 -14
  13. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +8 -1
  14. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +15 -8
  15. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +1 -1
  16. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +29 -13
  17. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +349 -109
  18. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +47 -23
  19. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.d.ts +6 -1
  20. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgets.js +104 -62
  21. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatImplicitContext.js +1 -3
  22. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/implicitContextAttachment.js +13 -11
  23. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.js +34 -40
  24. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +21 -16
  25. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +7 -7
  26. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +14 -14
  27. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.d.ts +8 -1
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionPickerActionItem.js +13 -4
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +29 -50
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +261 -282
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.d.ts +2 -1
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/searchableOptionPickerActionItem.js +7 -5
  33. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatAgentHover.js +2 -2
  34. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.d.ts +31 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatArtifactsWidget.js +184 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentMarkdownRenderer.js +4 -2
  37. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAgentCommandContentPart.js +1 -1
  38. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatAnonymousRateLimitedPart.js +2 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatChangesSummaryPart.js +1 -1
  40. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCodeCitationContentPart.js +1 -1
  41. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatCommandContentPart.js +1 -1
  42. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationContentPart.js +2 -2
  43. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatConfirmationWidget.js +1 -1
  44. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatDisabledClaudeHooksContentPart.js +4 -3
  45. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatExtensionsContentPart.js +1 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatHookContentPart.js +1 -1
  47. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.d.ts +3 -2
  48. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatInlineAnchorWidget.js +42 -34
  49. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.d.ts +1 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownContentPart.js +14 -18
  51. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMcpServersInteractionContentPart.js +11 -9
  52. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMultiDiffContentPart.js +4 -4
  53. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatProgressContentPart.js +6 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.d.ts +25 -2
  55. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuestionCarouselPart.js +332 -114
  56. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatQuotaExceededPart.js +4 -4
  57. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.d.ts +1 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatReferencesContentPart.js +7 -7
  59. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.d.ts +2 -0
  60. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatResourceGroupWidget.js +10 -5
  61. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.d.ts +1 -1
  62. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSubagentContentPart.js +11 -16
  63. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.d.ts +7 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatSuggestNextWidget.js +66 -7
  65. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTextEditContentPart.js +1 -1
  66. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.d.ts +28 -3
  67. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingContentPart.js +272 -107
  68. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingExternalResourcesWidget.d.ts +18 -0
  69. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatThinkingExternalResourcesWidget.js +70 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTipContentPart.js +9 -9
  71. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTodoListWidget.js +17 -17
  72. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.d.ts +1 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatToolInputOutputContentPart.js +6 -3
  74. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatTreeContentPart.js +1 -1
  75. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatWorkspaceEditContentPart.js +3 -3
  76. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart.js +14 -14
  77. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatConfirmationWidget.css +151 -0
  78. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatInlineAnchorWidget.css +6 -6
  79. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatQuestionCarousel.css +96 -10
  80. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatTerminalToolProgressPart.css +6 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/media/chatThinkingContent.css +86 -10
  82. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.d.ts +7 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/abstractToolConfirmationSubPart.js +5 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatExtensionsInstallToolSubPart.js +4 -4
  85. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.d.ts +1 -1
  86. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatInputOutputMarkdownProgressPart.js +8 -6
  87. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppModel.js +1 -1
  88. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatMcpAppSubPart.js +3 -3
  89. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.d.ts +28 -0
  90. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatModifiedFilesConfirmationSubPart.js +273 -0
  91. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatSimpleToolProgressPart.js +3 -2
  92. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js +28 -16
  93. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.d.ts +22 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolProgressPart.js +81 -32
  95. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.d.ts +1 -0
  96. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.js +20 -7
  97. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolInvocationPart.js +11 -1
  98. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputPart.js +2 -2
  99. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.d.ts +6 -0
  100. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPartUtilities.js +21 -7
  101. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolPostExecuteConfirmationPart.js +5 -5
  102. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolProgressPart.js +2 -12
  103. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatDragAndDrop.js +12 -12
  104. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.d.ts +0 -6
  105. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.js +112 -163
  106. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatListWidget.js +11 -1
  107. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.d.ts +9 -1
  108. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidget.js +137 -52
  109. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatFollowups.js +1 -1
  110. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.d.ts +12 -0
  111. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.js +108 -38
  112. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.d.ts +9 -3
  113. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.js +385 -247
  114. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.d.ts +5 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/delegationSessionPickerActionItem.js +23 -7
  116. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modePickerActionItem.js +6 -6
  117. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem.d.ts +4 -1
  118. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/modelPickerActionItem2.js +4 -2
  119. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/permissionPickerActionItem.js +23 -23
  120. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/sessionTargetPickerActionItem.js +3 -3
  121. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/workspacePickerActionItem.js +3 -3
  122. package/vscode/src/vs/workbench/contrib/chat/browser/widget/media/chat.css +124 -17
  123. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.d.ts +4 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.js +24 -7
  125. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageWidget.js +30 -11
  126. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css +84 -0
  127. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.d.ts +31 -0
  128. package/vscode/src/vs/workbench/contrib/chat/common/chatImageExtraction.js +170 -0
  129. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalPromptFileSystem.d.ts +47 -0
  130. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/internalCustomizations/internalPromptFileSystem.js +95 -0
  131. package/vscode/src/vs/workbench/contrib/chat/common/widget/annotations.js +4 -1
  132. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatColors.js +15 -15
  133. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.d.ts +1 -1
  134. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAffordance.js +4 -3
  135. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.d.ts +2 -0
  136. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatController.js +38 -6
  137. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.d.ts +1 -0
  138. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatEditorAffordance.js +31 -0
  139. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.d.ts +12 -3
  140. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatOverlayWidget.js +130 -23
  141. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +23 -0
  142. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +41 -0
  143. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.js +5 -5
  144. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatZoneWidget.js +1 -1
  145. package/vscode/src/vs/workbench/contrib/inlineChat/browser/media/inlineChatOverlayWidget.css +55 -3
  146. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.d.ts +4 -1
  147. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChat.js +50 -39
  148. package/vscode/src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.js +3 -3
  149. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/executionStatusBarItemController.js +7 -7
  150. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindWidget.js +2 -2
  151. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditor.js +1 -1
  152. package/vscode/src/vs/workbench/contrib/replNotebook/browser/replEditorInput.js +1 -1
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.d.ts +0 -35
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatQuestionCarouselAutoReply.js +0 -440
@@ -22,15 +22,21 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
22
22
  this.domNode = $(".chat-context-usage-details");
23
23
  this.quotaItem = this.domNode.appendChild($(".quota-indicator"));
24
24
  const header = this.domNode.insertBefore($("div.header"), this.quotaItem);
25
- header.textContent = ( localize(6886, "Context Window"));
25
+ header.textContent = ( localize(7092, "Context Window"));
26
26
  const quotaLabel = this.quotaItem.appendChild($(".quota-label"));
27
27
  this.tokenCountLabel = quotaLabel.appendChild($("span"));
28
28
  this.percentageLabel = quotaLabel.appendChild($("span.quota-value"));
29
29
  const progressBar = this.quotaItem.appendChild($(".quota-bar"));
30
30
  this.progressFill = progressBar.appendChild($(".quota-bit"));
31
+ this.outputBufferFill = progressBar.appendChild($(".quota-bit.output-buffer"));
32
+ this.outputBufferLegend = this.quotaItem.appendChild($(".output-buffer-legend"));
33
+ this.outputBufferLegend.appendChild($(".output-buffer-swatch"));
34
+ const legendLabel = this.outputBufferLegend.appendChild($("span"));
35
+ legendLabel.textContent = ( localize(7093, "Reserved for response"));
36
+ this.outputBufferLegend.style.display = "none";
31
37
  this.tokenDetailsContainer = this.domNode.appendChild($(".token-details-container"));
32
38
  this.warningMessage = this.domNode.appendChild($("div.description"));
33
- this.warningMessage.textContent = ( localize(6887, "Quality may decline as limit nears."));
39
+ this.warningMessage.textContent = ( localize(7094, "Quality may decline as limit nears."));
34
40
  this.warningMessage.style.display = "none";
35
41
  this.actionsSection = this.domNode.appendChild($(".actions-section"));
36
42
  const buttonBarContainer = this.actionsSection.appendChild($(".button-bar-container"));
@@ -63,16 +69,27 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
63
69
  percentage,
64
70
  usedTokens,
65
71
  totalContextWindow,
72
+ outputBufferPercentage,
66
73
  promptTokenDetails
67
74
  } = data;
68
75
  this.tokenCountLabel.textContent = ( localize(
69
- 6888,
76
+ 7095,
70
77
  "{0} / {1} tokens",
71
78
  this.formatTokenCount(usedTokens, 1),
72
79
  this.formatTokenCount(totalContextWindow, 0)
73
80
  ));
74
- this.percentageLabel.textContent = ( localize(6889, "{0}%", percentage.toFixed(0)));
75
- this.progressFill.style.width = `${Math.min(100, percentage)}%`;
81
+ this.percentageLabel.textContent = ( localize(7096, "{0}%", Math.min(100, percentage).toFixed(0)));
82
+ const usageBarWidth = Math.max(0, Math.min(100, percentage));
83
+ this.progressFill.style.width = `${usageBarWidth}%`;
84
+ if (outputBufferPercentage !== undefined && outputBufferPercentage > 0) {
85
+ this.outputBufferFill.style.width = `${Math.max(0, Math.min(100 - usageBarWidth, outputBufferPercentage))}%`;
86
+ this.outputBufferFill.style.display = "";
87
+ this.outputBufferLegend.style.display = "";
88
+ } else {
89
+ this.outputBufferFill.style.width = "0";
90
+ this.outputBufferFill.style.display = "none";
91
+ this.outputBufferLegend.style.display = "none";
92
+ }
76
93
  this.quotaItem.classList.remove("warning", "error");
77
94
  if (percentage >= 90) {
78
95
  this.quotaItem.classList.add("error");
@@ -111,8 +128,8 @@ let ChatContextUsageDetails = class ChatContextUsageDetails extends Disposable {
111
128
  }
112
129
  if (totalPercentage < 100) {
113
130
  const uncategorizedPercentage = 100 - totalPercentage;
114
- categoryMap.set(( localize(6890, "Uncategorized")), [{
115
- label: ( localize(6891, "Other")),
131
+ categoryMap.set(( localize(7097, "Uncategorized")), [{
132
+ label: ( localize(7098, "Other")),
116
133
  percentageOfPrompt: uncategorizedPercentage
117
134
  }]);
118
135
  }
@@ -2,7 +2,7 @@
2
2
  import { registerCss } from '@codingame/monaco-vscode-api/css';
3
3
  import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
4
4
  import * as chatContextUsageWidget from './media/chatContextUsageWidget.css';
5
- import { $ as $$1, addDisposableListener, EventType } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
5
+ import { $ as $$1, createElementNS, addDisposableListener, EventType } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
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';
@@ -37,16 +37,16 @@ class CircularProgressIndicator {
37
37
  constructor() {
38
38
  const r = CircularProgressIndicator.RADIUS;
39
39
  this.circumference = 2 * Math.PI * r;
40
- this.domNode = document.createElementNS("http://www.w3.org/2000/svg", "svg");
40
+ this.domNode = createElementNS("http://www.w3.org/2000/svg", "svg");
41
41
  this.domNode.setAttribute("viewBox", "0 0 36 36");
42
42
  this.domNode.classList.add("circular-progress");
43
- const bgCircle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
43
+ const bgCircle = createElementNS("http://www.w3.org/2000/svg", "circle");
44
44
  bgCircle.setAttribute("cx", String(CircularProgressIndicator.CENTER_X));
45
45
  bgCircle.setAttribute("cy", String(CircularProgressIndicator.CENTER_Y));
46
46
  bgCircle.setAttribute("r", String(r));
47
47
  bgCircle.classList.add("progress-bg");
48
48
  this.domNode.appendChild(bgCircle);
49
- this.progressCircle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
49
+ this.progressCircle = createElementNS("http://www.w3.org/2000/svg", "circle");
50
50
  this.progressCircle.setAttribute("cx", String(CircularProgressIndicator.CENTER_X));
51
51
  this.progressCircle.setAttribute("cy", String(CircularProgressIndicator.CENTER_Y));
52
52
  this.progressCircle.setAttribute("r", String(r));
@@ -110,7 +110,7 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
110
110
  this.domNode.style.display = "none";
111
111
  this.domNode.setAttribute("tabindex", "0");
112
112
  this.domNode.setAttribute("role", "button");
113
- this.domNode.setAttribute("aria-label", ( localize(6892, "Context window usage")));
113
+ this.domNode.setAttribute("aria-label", ( localize(7099, "Context window usage")));
114
114
  const iconContainer = this.domNode.appendChild($(".icon-container"));
115
115
  this.progressIndicator = ( new CircularProgressIndicator());
116
116
  iconContainer.appendChild(this.progressIndicator.domNode);
@@ -224,24 +224,43 @@ let ChatContextUsageWidget = class ChatContextUsageWidget extends Disposable {
224
224
  return;
225
225
  }
226
226
  const promptTokens = usage.promptTokens;
227
+ const completionTokens = usage.completionTokens;
227
228
  const promptTokenDetails = usage.promptTokenDetails;
229
+ const outputBuffer = usage.outputBuffer;
228
230
  const totalContextWindow = maxInputTokens + maxOutputTokens;
229
- const usedTokens = promptTokens + maxOutputTokens;
230
- const percentage = Math.min(100, (usedTokens / totalContextWindow) * 100);
231
- this.render(percentage, usedTokens, totalContextWindow, promptTokenDetails);
231
+ const usedTokens = promptTokens + completionTokens;
232
+ const percentage = (usedTokens / totalContextWindow) * 100;
233
+ const outputBufferPercentage = outputBuffer !== undefined ? (Math.max(0, outputBuffer - completionTokens) / totalContextWindow) * 100 : undefined;
234
+ this.render(
235
+ percentage,
236
+ completionTokens,
237
+ usedTokens,
238
+ totalContextWindow,
239
+ outputBufferPercentage,
240
+ promptTokenDetails
241
+ );
232
242
  this.show();
233
243
  }
234
- render(percentage, usedTokens, totalContextWindow, promptTokenDetails) {
244
+ render(
245
+ percentage,
246
+ completionTokens,
247
+ usedTokens,
248
+ totalContextWindow,
249
+ outputBufferPercentage,
250
+ promptTokenDetails
251
+ ) {
235
252
  this.currentData = {
236
253
  usedTokens,
254
+ completionTokens,
237
255
  totalContextWindow,
238
256
  percentage,
257
+ outputBufferPercentage,
239
258
  promptTokenDetails
240
259
  };
241
260
  this.progressIndicator.setProgress(percentage);
242
- const roundedPercentage = Math.round(percentage);
261
+ const roundedPercentage = Math.min(100, Math.round(percentage));
243
262
  this.percentageLabel.textContent = `${roundedPercentage}%`;
244
- this.domNode.setAttribute("aria-label", ( localize(6893, "Context window usage: {0}%", roundedPercentage)));
263
+ this.domNode.setAttribute("aria-label", ( localize(7100, "Context window usage: {0}%", roundedPercentage)));
245
264
  this.domNode.classList.remove("warning", "error");
246
265
  if (percentage >= 90) {
247
266
  this.domNode.classList.add("error");
@@ -52,6 +52,7 @@
52
52
  border-radius: 4px;
53
53
  border: 1px solid var(--vscode-gauge-border);
54
54
  margin: 4px 0;
55
+ display: flex;
55
56
  }
56
57
 
57
58
  .chat-context-usage-details .quota-indicator .quota-bar .quota-bit {
@@ -61,6 +62,55 @@
61
62
  transition: width 0.3s ease;
62
63
  }
63
64
 
65
+ .chat-context-usage-details .quota-indicator .quota-bar .quota-bit.output-buffer {
66
+ background: repeating-linear-gradient(
67
+ -45deg,
68
+ var(--vscode-gauge-foreground),
69
+ var(--vscode-gauge-foreground) 2px,
70
+ transparent 2px,
71
+ transparent 4px
72
+ );
73
+ border-radius: 0 4px 4px 0;
74
+ }
75
+
76
+ .chat-context-usage-details .quota-indicator .quota-bar .quota-bit:not(.output-buffer):has(+ .quota-bit.output-buffer:not([style*="display: none"])) {
77
+ border-radius: 4px 0 0 4px;
78
+ }
79
+
80
+ /* Output buffer legend */
81
+ .chat-context-usage-details .quota-indicator .output-buffer-legend {
82
+ display: flex;
83
+ align-items: center;
84
+ gap: 6px;
85
+ margin-top: 4px;
86
+ font-size: 11px;
87
+ color: var(--vscode-descriptionForeground);
88
+ }
89
+
90
+ .chat-context-usage-details .quota-indicator .output-buffer-legend .output-buffer-swatch {
91
+ width: 12px;
92
+ height: 8px;
93
+ border-radius: 2px;
94
+ background: repeating-linear-gradient(
95
+ -45deg,
96
+ var(--vscode-gauge-foreground),
97
+ var(--vscode-gauge-foreground) 2px,
98
+ transparent 2px,
99
+ transparent 4px
100
+ );
101
+ flex-shrink: 0;
102
+ }
103
+
104
+ .chat-context-usage-details .quota-indicator.warning .output-buffer-swatch {
105
+ background: repeating-linear-gradient(
106
+ -45deg,
107
+ var(--vscode-gauge-warningForeground),
108
+ var(--vscode-gauge-warningForeground) 2px,
109
+ transparent 2px,
110
+ transparent 4px
111
+ );
112
+ }
113
+
64
114
  .chat-context-usage-details .quota-indicator.warning .quota-bar {
65
115
  background-color: var(--vscode-gauge-warningBackground);
66
116
  }
@@ -69,6 +119,26 @@
69
119
  background-color: var(--vscode-gauge-warningForeground);
70
120
  }
71
121
 
122
+ .chat-context-usage-details .quota-indicator.warning .quota-bar .quota-bit.output-buffer {
123
+ background: repeating-linear-gradient(
124
+ -45deg,
125
+ var(--vscode-gauge-warningForeground),
126
+ var(--vscode-gauge-warningForeground) 2px,
127
+ transparent 2px,
128
+ transparent 4px
129
+ );
130
+ }
131
+
132
+ .chat-context-usage-details .quota-indicator.error .output-buffer-swatch {
133
+ background: repeating-linear-gradient(
134
+ -45deg,
135
+ var(--vscode-gauge-errorForeground),
136
+ var(--vscode-gauge-errorForeground) 2px,
137
+ transparent 2px,
138
+ transparent 4px
139
+ );
140
+ }
141
+
72
142
  .chat-context-usage-details .quota-indicator.error .quota-bar {
73
143
  background-color: var(--vscode-gauge-errorBackground);
74
144
  }
@@ -77,6 +147,16 @@
77
147
  background-color: var(--vscode-gauge-errorForeground);
78
148
  }
79
149
 
150
+ .chat-context-usage-details .quota-indicator.error .quota-bar .quota-bit.output-buffer {
151
+ background: repeating-linear-gradient(
152
+ -45deg,
153
+ var(--vscode-gauge-errorForeground),
154
+ var(--vscode-gauge-errorForeground) 2px,
155
+ transparent 2px,
156
+ transparent 4px
157
+ );
158
+ }
159
+
80
160
  /* Description / warning text — matching ChatStatusDashboard */
81
161
  .chat-context-usage-details div.description {
82
162
  font-size: 11px;
@@ -100,6 +180,10 @@
100
180
  font-weight: 600;
101
181
  }
102
182
 
183
+ .chat-context-usage-details .token-category:first-child .token-category-header {
184
+ margin-top: 8px;
185
+ }
186
+
103
187
  .chat-context-usage-details .token-detail-item {
104
188
  display: flex;
105
189
  justify-content: space-between;
@@ -0,0 +1,31 @@
1
+ import { VSBuffer } from "@codingame/monaco-vscode-api/vscode/vs/base/common/buffer";
2
+ import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
3
+ import { IChatResponseViewModel, IChatRequestViewModel } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatViewModel";
4
+ import { IChatToolInvocation, IChatToolInvocationSerialized } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService";
5
+ export interface IChatExtractedImage {
6
+ readonly id: string;
7
+ readonly uri: URI;
8
+ readonly name: string;
9
+ readonly mimeType: string;
10
+ readonly data: VSBuffer;
11
+ readonly source: string;
12
+ readonly caption: string | undefined;
13
+ }
14
+ export interface IChatExtractedImageCollection {
15
+ readonly id: string;
16
+ readonly title: string;
17
+ readonly images: IChatExtractedImage[];
18
+ }
19
+ /**
20
+ * Extract all images from a chat response's tool invocations and inline references.
21
+ * Tool invocation images are extracted from output details and message URIs.
22
+ * Inline reference images (file URIs) are read via the provided {@link readFile} callback.
23
+ */
24
+ export declare function extractImagesFromChatResponse(response: IChatResponseViewModel, readFile: (uri: URI) => Promise<VSBuffer>): Promise<IChatExtractedImageCollection>;
25
+ export declare function extractImagesFromToolInvocationOutputDetails(toolInvocation: IChatToolInvocation | IChatToolInvocationSerialized, sessionResource: URI): IChatExtractedImage[];
26
+ export declare function extractImagesFromToolInvocationMessages(toolInvocation: IChatToolInvocation | IChatToolInvocationSerialized, readFile: (uri: URI) => Promise<VSBuffer>): Promise<IChatExtractedImage[]>;
27
+ export declare function coerceImageBuffer(value: unknown): Uint8Array | undefined;
28
+ /**
29
+ * Extract images from a chat request's variable attachments (user-attached images).
30
+ */
31
+ export declare function extractImagesFromChatRequest(request: IChatRequestViewModel): IChatExtractedImage[];
@@ -0,0 +1,170 @@
1
+
2
+ import { decodeBase64, VSBuffer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
3
+ import { getExtensionForMimeType, getMediaMime } from '@codingame/monaco-vscode-api/vscode/vs/base/common/mime';
4
+ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
5
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
6
+ import { isLocation } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/languages';
7
+ import { isRequestVM } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatViewModel';
8
+ import { ChatResponseResource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatModel';
9
+ import { IChatToolInvocation } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
10
+ import { isToolResultInputOutputDetails, isToolResultOutputDetails } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService';
11
+ import { isImageVariableEntry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
12
+
13
+ async function extractImagesFromChatResponse(response, readFile) {
14
+ const allImages = [];
15
+ for (const item of response.response.value) {
16
+ if (item.kind === "toolInvocation" || item.kind === "toolInvocationSerialized") {
17
+ const images = extractImagesFromToolInvocationOutputDetails(item, response.sessionResource);
18
+ allImages.push(...images);
19
+ const messageImages = await extractImagesFromToolInvocationMessages(item, readFile);
20
+ allImages.push(...messageImages);
21
+ } else if (item.kind === "inlineReference") {
22
+ const image = await extractImageFromInlineReference(item, readFile);
23
+ if (image) {
24
+ allImages.push(image);
25
+ }
26
+ }
27
+ }
28
+ const request = response.session.getItems().find(item => isRequestVM(item) && item.id === response.requestId);
29
+ const title = request ? request.messageText : ( localize(7192, "Images"));
30
+ return {
31
+ id: ( response.sessionResource.toString()) + "_" + response.id,
32
+ title,
33
+ images: allImages
34
+ };
35
+ }
36
+ function extractImagesFromToolInvocationOutputDetails(toolInvocation, sessionResource) {
37
+ const images = [];
38
+ const resultDetails = IChatToolInvocation.resultDetails(toolInvocation);
39
+ const msg = toolInvocation.pastTenseMessage ?? toolInvocation.invocationMessage;
40
+ const caption = msg ? (typeof msg === "string" ? msg : msg.value) : undefined;
41
+ const pushImage = (mimeType, data, outputIndex) => {
42
+ const ext = getExtensionForMimeType(mimeType);
43
+ const permalinkBasename = ext ? `file${ext}` : "file.bin";
44
+ const uri = ChatResponseResource.createUri(sessionResource, toolInvocation.toolCallId, outputIndex, permalinkBasename);
45
+ images.push({
46
+ id: `${toolInvocation.toolCallId}_${outputIndex}`,
47
+ uri,
48
+ name: ( localize(7193, "Image {0}", images.length + 1)),
49
+ mimeType,
50
+ data,
51
+ source: ( localize(7194, "Tool: {0}", toolInvocation.toolId)),
52
+ caption
53
+ });
54
+ };
55
+ if (isToolResultInputOutputDetails(resultDetails)) {
56
+ for (let i = 0; i < resultDetails.output.length; i++) {
57
+ const outputItem = resultDetails.output[i];
58
+ if (outputItem.type === "embed" && outputItem.mimeType?.startsWith("image/") && !outputItem.isText) {
59
+ pushImage(outputItem.mimeType, decodeBase64(outputItem.value), i);
60
+ }
61
+ }
62
+ } else if (isToolResultOutputDetails(resultDetails)) {
63
+ const output = resultDetails.output;
64
+ if (output.mimeType?.startsWith("image/")) {
65
+ const data = getImageDataFromOutputDetails(resultDetails, toolInvocation);
66
+ if (data) {
67
+ pushImage(output.mimeType, data, 0);
68
+ }
69
+ }
70
+ }
71
+ return images;
72
+ }
73
+ async function extractImagesFromToolInvocationMessages(toolInvocation, readFile) {
74
+ const message = toolInvocation.pastTenseMessage ?? toolInvocation.invocationMessage;
75
+ if (!message || typeof message === "string" || !message.uris || ( Object.keys(message.uris)).length === 0) {
76
+ return [];
77
+ }
78
+ const images = [];
79
+ for (const uriComponents of ( Object.values(message.uris))) {
80
+ const uri = URI.revive(uriComponents);
81
+ const mimeType = getMediaMime(uri.path);
82
+ if (mimeType?.startsWith("image/")) {
83
+ let data;
84
+ try {
85
+ data = await readFile(uri);
86
+ } catch {
87
+ continue;
88
+ }
89
+ const name = uri.path.split("/").pop() ?? "image";
90
+ images.push({
91
+ id: ( uri.toString()),
92
+ uri,
93
+ name,
94
+ mimeType,
95
+ data,
96
+ source: ( localize(7194, "Tool: {0}", toolInvocation.toolId)),
97
+ caption: message.value
98
+ });
99
+ }
100
+ }
101
+ return images;
102
+ }
103
+ function getImageDataFromOutputDetails(resultDetails, toolInvocation) {
104
+ if (toolInvocation.kind === "toolInvocationSerialized") {
105
+ const serializedDetails = resultDetails;
106
+ if (serializedDetails.output.base64Data) {
107
+ return decodeBase64(serializedDetails.output.base64Data);
108
+ }
109
+ return undefined;
110
+ } else {
111
+ return resultDetails.output.value;
112
+ }
113
+ }
114
+ async function extractImageFromInlineReference(part, readFile) {
115
+ const ref = part.inlineReference;
116
+ const refUri = URI.isUri(ref) ? ref : isLocation(ref) ? ref.uri : ref.location.uri;
117
+ const mime = getMediaMime(refUri.path);
118
+ if (!mime?.startsWith("image/")) {
119
+ return undefined;
120
+ }
121
+ let data;
122
+ try {
123
+ data = await readFile(refUri);
124
+ } catch {
125
+ return undefined;
126
+ }
127
+ const name = part.name ?? refUri.path.split("/").pop() ?? "image";
128
+ return {
129
+ id: ( refUri.toString()),
130
+ uri: refUri,
131
+ name,
132
+ mimeType: mime,
133
+ data,
134
+ source: ( localize(7195, "File")),
135
+ caption: undefined
136
+ };
137
+ }
138
+ function coerceImageBuffer(value) {
139
+ return value instanceof Uint8Array ? value : value instanceof ArrayBuffer ? ( new Uint8Array(value)) : (value && typeof value === "object" && !Array.isArray(value)) ? ( new Uint8Array(( ( Object.keys(value)).sort((a, b) => Number(a) - Number(b)).map(key => value[key])))) : undefined;
140
+ }
141
+ function extractImagesFromChatRequest(request) {
142
+ const images = [];
143
+ for (const variable of request.variables) {
144
+ if (!isImageVariableEntry(variable)) {
145
+ continue;
146
+ }
147
+ const buffer = coerceImageBuffer(variable.value);
148
+ if (!buffer) {
149
+ continue;
150
+ }
151
+ const mimeType = variable.mimeType ?? getMediaMime(variable.name) ?? "image/png";
152
+ const uri = variable.references?.[0]?.reference;
153
+ const imageUri = URI.isUri(uri) ? uri : ( URI.from({
154
+ scheme: "data",
155
+ path: variable.name
156
+ }));
157
+ images.push({
158
+ id: ( imageUri.toString()),
159
+ uri: imageUri,
160
+ name: variable.name,
161
+ mimeType,
162
+ data: VSBuffer.wrap(buffer),
163
+ source: ( localize(7196, "Attachment")),
164
+ caption: undefined
165
+ });
166
+ }
167
+ return images;
168
+ }
169
+
170
+ export { coerceImageBuffer, extractImagesFromChatRequest, extractImagesFromChatResponse, extractImagesFromToolInvocationMessages, extractImagesFromToolInvocationOutputDetails };
@@ -0,0 +1,47 @@
1
+ import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
2
+ import { Disposable, IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
3
+ import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
4
+ import { FileType, IFileDeleteOptions, IFileOverwriteOptions, IFileSystemProviderWithFileReadWriteCapability, IFileWriteOptions, IStat } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files";
5
+ import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
6
+ /**
7
+ * URI scheme for internal chat prompt files (skills, instructions, agents, etc.)
8
+ * backed by a readonly virtual filesystem.
9
+ */
10
+ export declare const CHAT_INTERNAL_SCHEME = "vscode-chat-internal";
11
+ /**
12
+ * A readonly virtual filesystem provider for internal chat prompt files.
13
+ *
14
+ * Files are registered at startup via {@link registerFile} and cannot be
15
+ * modified or deleted afterwards.
16
+ */
17
+ export declare class ChatInternalFileSystemProvider extends Disposable implements IFileSystemProviderWithFileReadWriteCapability {
18
+ private readonly files;
19
+ readonly onDidChangeCapabilities: Event<any>;
20
+ readonly onDidChangeFile: Event<any>;
21
+ readonly capabilities: number;
22
+ /**
23
+ * Register a file with static content. Must be called before the
24
+ * file can be read. Typically called once at startup.
25
+ */
26
+ registerFile(uri: URI, content: string): void;
27
+ watch(): IDisposable;
28
+ stat(resource: URI): Promise<IStat>;
29
+ mkdir(): Promise<void>;
30
+ readdir(resource: URI): Promise<[
31
+ string,
32
+ FileType
33
+ ][]>;
34
+ delete(_resource: URI, _opts: IFileDeleteOptions): Promise<void>;
35
+ rename(_from: URI, _to: URI, _opts: IFileOverwriteOptions): Promise<void>;
36
+ readFile(resource: URI): Promise<Uint8Array>;
37
+ writeFile(_resource: URI, _content: Uint8Array, _opts: IFileWriteOptions): Promise<void>;
38
+ }
39
+ /**
40
+ * Registers the internal chat filesystem provider with the file service,
41
+ * populates it with built-in files, and returns both the provider (for
42
+ * event subscription) and a disposable for cleanup.
43
+ */
44
+ export declare function registerChatInternalFileSystem(fileService: IFileService): {
45
+ provider: ChatInternalFileSystemProvider;
46
+ disposable: IDisposable;
47
+ };
@@ -0,0 +1,95 @@
1
+
2
+ import { VSBuffer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
3
+ import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
4
+ import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
5
+ import { FileSystemProviderCapabilities, FileType, createFileSystemProviderError, FileSystemProviderErrorCode } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files';
6
+
7
+ const CHAT_INTERNAL_SCHEME = "vscode-chat-internal";
8
+ class ChatInternalFileSystemProvider extends Disposable {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.files = ( new Map());
12
+ this.onDidChangeCapabilities = Event.None;
13
+ this.onDidChangeFile = Event.None;
14
+ this.capabilities = FileSystemProviderCapabilities.FileReadWrite | FileSystemProviderCapabilities.Readonly | FileSystemProviderCapabilities.PathCaseSensitive;
15
+ }
16
+ registerFile(uri, content) {
17
+ this.files.set(( uri.toString()), VSBuffer.fromString(content).buffer);
18
+ }
19
+ watch() {
20
+ return Disposable.None;
21
+ }
22
+ async stat(resource) {
23
+ const data = this.files.get(( resource.toString()));
24
+ if (data) {
25
+ return {
26
+ type: FileType.File,
27
+ ctime: 0,
28
+ mtime: 0,
29
+ size: data.byteLength
30
+ };
31
+ }
32
+ const prefix = ( resource.toString()) + "/";
33
+ for (const key of ( this.files.keys())) {
34
+ if (key.startsWith(prefix)) {
35
+ return {
36
+ type: FileType.Directory,
37
+ ctime: 0,
38
+ mtime: 0,
39
+ size: 0
40
+ };
41
+ }
42
+ }
43
+ throw createFileSystemProviderError("file not found", FileSystemProviderErrorCode.FileNotFound);
44
+ }
45
+ async mkdir() {
46
+ throw createFileSystemProviderError("readonly filesystem", FileSystemProviderErrorCode.NoPermissions);
47
+ }
48
+ async readdir(resource) {
49
+ const prefix = ( resource.toString()) + "/";
50
+ const entries = ( new Map());
51
+ for (const key of ( this.files.keys())) {
52
+ if (key.startsWith(prefix)) {
53
+ const rest = key.substring(prefix.length);
54
+ const slash = rest.indexOf("/");
55
+ if (slash === -1) {
56
+ entries.set(rest, FileType.File);
57
+ } else {
58
+ entries.set(rest.substring(0, slash), FileType.Directory);
59
+ }
60
+ }
61
+ }
62
+ return [...entries.entries()];
63
+ }
64
+ async delete(_resource, _opts) {
65
+ throw createFileSystemProviderError("readonly filesystem", FileSystemProviderErrorCode.NoPermissions);
66
+ }
67
+ async rename(_from, _to, _opts) {
68
+ throw createFileSystemProviderError("readonly filesystem", FileSystemProviderErrorCode.NoPermissions);
69
+ }
70
+ async readFile(resource) {
71
+ const data = this.files.get(( resource.toString()));
72
+ if (data) {
73
+ return data;
74
+ }
75
+ throw createFileSystemProviderError("file not found", FileSystemProviderErrorCode.FileNotFound);
76
+ }
77
+ async writeFile(_resource, _content, _opts) {
78
+ throw createFileSystemProviderError("readonly filesystem", FileSystemProviderErrorCode.NoPermissions);
79
+ }
80
+ }
81
+ function registerChatInternalFileSystem(fileService) {
82
+ const provider = ( new ChatInternalFileSystemProvider());
83
+ const registration = fileService.registerProvider(CHAT_INTERNAL_SCHEME, provider);
84
+ return {
85
+ provider,
86
+ disposable: {
87
+ dispose() {
88
+ registration.dispose();
89
+ provider.dispose();
90
+ }
91
+ }
92
+ };
93
+ }
94
+
95
+ export { CHAT_INTERNAL_SCHEME, ChatInternalFileSystemProvider, registerChatInternalFileSystem };
@@ -221,6 +221,9 @@ function extractSubAgentInvocationIdFromText(text) {
221
221
  }
222
222
  return undefined;
223
223
  }
224
+ function hasCodeblockUriTag(text) {
225
+ return text.includes("<vscode_codeblock_uri");
226
+ }
224
227
  function hasEditCodeblockUriTag(text) {
225
228
  return text.includes("<vscode_codeblock_uri isEdit");
226
229
  }
@@ -264,4 +267,4 @@ function extractVulnerabilitiesFromText(text) {
264
267
  };
265
268
  }
266
269
 
267
- export { annotateSpecialMarkdownContent, contentRefUrl, extractCodeblockUrisFromText, extractSubAgentInvocationIdFromText, extractVulnerabilitiesFromText, hasEditCodeblockUriTag, isInsideCodeContext };
270
+ export { annotateSpecialMarkdownContent, contentRefUrl, extractCodeblockUrisFromText, extractSubAgentInvocationIdFromText, extractVulnerabilitiesFromText, hasCodeblockUriTag, hasEditCodeblockUriTag, isInsideCodeContext };