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