diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues index 50ebbfdb7508d..f44d9c4a45b4e 100644 --- a/.vscode/notebooks/my-endgame.github-issues +++ b/.vscode/notebooks/my-endgame.github-issues @@ -12,7 +12,7 @@ { "kind": 2, "language": "github-issues", - "value": "$NOT_TEAM_MEMBERS=-author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:bamurtaugh -author:bpasero -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:egamma -author:fiveisprime -author:ntrogh -author:hediet -author:isidorn -author:joaomoreno -author:jrieken -author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:roblourens -author:rzhao271 -author:sandy081 -author:sbatten -author:stevencl -author:TylerLeonhardt -author:Tyriar -author:weinand -author:amunger -author:karthiknadig -author:eleanorjboyd -author:Yoyokrazy -author:ulugbekna -author:aiday-mar -author:bhavyaus -author:justschen -author:benibenj -author:luabud -author:anthonykim1 -author:joshspicer -author:osortega -author:hawkticehurst -author:pierceboggan -author:benvillalobos -author:dileepyavan -author:dineshc-msft -author:dmitrivMS -author:eli-w-king -author:jo-oikawa -author:jruales -author:jytjyt05 -author:kycutler -author:mrleemurray -author:pwang347 -author:vijayupadya -author:bryanchen-d -author:cwebster-99 -author:rwoll -author:lostintangent -author:jukasper -author:zhichli" + "value": "$NOT_TEAM_MEMBERS=-author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:bamurtaugh -author:bpasero -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:egamma -author:fiveisprime -author:ntrogh -author:hediet -author:isidorn -author:joaomoreno -author:jrieken -author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:mjbvz -author:rebornix -author:roblourens -author:rzhao271 -author:sandy081 -author:sbatten -author:stevencl -author:TylerLeonhardt -author:Tyriar -author:amunger -author:karthiknadig -author:eleanorjboyd -author:Yoyokrazy -author:ulugbekna -author:aiday-mar -author:bhavyaus -author:justschen -author:benibenj -author:luabud -author:anthonykim1 -author:joshspicer -author:osortega -author:hawkticehurst -author:pierceboggan -author:benvillalobos -author:dileepyavan -author:dmitrivMS -author:eli-w-king -author:jo-oikawa -author:jruales -author:jytjyt05 -author:kycutler -author:mrleemurray -author:pwang347 -author:vijayupadya -author:bryanchen-d -author:cwebster-99 -author:rwoll -author:lostintangent -author:jukasper -author:zhichli" }, { "kind": 1, diff --git a/extensions/theme-2026/themes/2026-dark.json b/extensions/theme-2026/themes/2026-dark.json index a346ebba78f22..ce19af608424c 100644 --- a/extensions/theme-2026/themes/2026-dark.json +++ b/extensions/theme-2026/themes/2026-dark.json @@ -5,7 +5,7 @@ "type": "dark", "colors": { "foreground": "#bfbfbf", - "disabledForeground": "#666666", + "disabledForeground": "#555555", "errorForeground": "#f48771", "descriptionForeground": "#8C8C8C", "icon.foreground": "#8C8C8C", @@ -110,7 +110,7 @@ "editorLineNumber.foreground": "#858889", "editorLineNumber.activeForeground": "#BBBEBF", "editorCursor.foreground": "#BBBEBF", - "editor.selectionBackground": "#27678280", + "editor.selectionBackground": "#276782dd", "editor.inactiveSelectionBackground": "#27678260", "editor.selectionHighlightBackground": "#27678260", "editor.wordHighlightBackground": "#27678250", diff --git a/extensions/theme-2026/themes/2026-light.json b/extensions/theme-2026/themes/2026-light.json index e9db9b3765651..a03d296a0c65f 100644 --- a/extensions/theme-2026/themes/2026-light.json +++ b/extensions/theme-2026/themes/2026-light.json @@ -116,7 +116,7 @@ "editorLineNumber.foreground": "#606060", "editorLineNumber.activeForeground": "#202020", "editorCursor.foreground": "#202020", - "editor.selectionBackground": "#0069CC1A", + "editor.selectionBackground": "#0069CC40", "editor.inactiveSelectionBackground": "#0069CC1A", "editor.selectionHighlightBackground": "#0069CC15", "editor.wordHighlightBackground": "#0069CC26", diff --git a/src/vs/sessions/contrib/changesView/browser/toggleChangesView.ts b/src/vs/sessions/contrib/changesView/browser/toggleChangesView.ts index e7371a4f73d22..abc40780aa638 100644 --- a/src/vs/sessions/contrib/changesView/browser/toggleChangesView.ts +++ b/src/vs/sessions/contrib/changesView/browser/toggleChangesView.ts @@ -110,7 +110,7 @@ export class ToggleChangesViewContribution extends Disposable { private syncAuxiliaryBarVisibility(hasChanges: boolean): void { if (hasChanges) { - this.viewsService.openView(CHANGES_VIEW_ID, true); + this.viewsService.openView(CHANGES_VIEW_ID, false); } else { this.layoutService.setPartHidden(true, Parts.AUXILIARYBAR_PART); } diff --git a/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.ts b/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.ts index f15bed0dc9466..08ae2d0a1e0e5 100644 --- a/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.ts +++ b/src/vs/sessions/contrib/sessions/browser/sessionsTitleBarWidget.ts @@ -32,7 +32,8 @@ import { AgentSessionsPicker } from '../../../../workbench/contrib/chat/browser/ import { autorun } from '../../../../base/common/observable.js'; import { IChatService } from '../../../../workbench/contrib/chat/common/chatService/chatService.js'; import { ThemeIcon } from '../../../../base/common/themables.js'; -import { getAgentSessionProvider, getAgentSessionProviderIcon } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessions.js'; +import { AgentSessionProviders, getAgentSessionProvider, getAgentSessionProviderIcon } from '../../../../workbench/contrib/chat/browser/agentSessions/agentSessions.js'; +import { Codicon } from '../../../../base/common/codicons.js'; import { basename } from '../../../../base/common/resources.js'; import { IsAuxiliaryWindowContext } from '../../../../workbench/common/contextkeys.js'; import { SessionsWelcomeVisibleContext } from '../../../common/contextkeys.js'; @@ -290,6 +291,12 @@ export class SessionsTitleBarWidget extends BaseActionViewItem { // Try to get icon from the agent session model (has provider-resolved icon) const agentSession = this.agentSessionsService.getSession(activeSession.resource); if (agentSession) { + // For background sessions, distinguish worktree vs folder based on metadata + if (agentSession.providerType === AgentSessionProviders.Background) { + const hasWorktree = typeof agentSession.metadata?.worktreePath === 'string'; + return hasWorktree ? Codicon.worktree : Codicon.folder; + } + return agentSession.icon; } diff --git a/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.ts b/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.ts index 3bdba7d96a678..1bd80b586c7f9 100644 --- a/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.ts +++ b/src/vs/sessions/contrib/workspace/browser/workspaceFolderManagement.ts @@ -68,7 +68,7 @@ export class WorkspaceFolderManagementContribution extends Disposable implements if (session.worktree) { return { uri: session.worktree, - name: session.repository ? `${this.uriIdentityService.extUri.basename(session.repository)} (worktree)` : undefined + name: session.repository ? `${this.uriIdentityService.extUri.basename(session.repository)} (${this.uriIdentityService.extUri.basename(session.worktree)})` : this.uriIdentityService.extUri.basename(session.worktree) }; } diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index 9c5adf7bc0ddb..78b0c9049479e 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -3607,6 +3607,7 @@ export namespace ChatRequestModeInstructions { export function to(mode: IChatRequestModeInstructions | undefined): vscode.ChatRequestModeInstructions | undefined { if (mode) { return { + uri: URI.revive(mode.uri), name: mode.name, content: mode.content, toolReferences: ChatLanguageModelToolReferences.to(mode.toolReferences), diff --git a/src/vs/workbench/browser/parts/editor/modalEditorPart.ts b/src/vs/workbench/browser/parts/editor/modalEditorPart.ts index 13c86decaf357..2e8ed96d0109f 100644 --- a/src/vs/workbench/browser/parts/editor/modalEditorPart.ts +++ b/src/vs/workbench/browser/parts/editor/modalEditorPart.ts @@ -26,7 +26,6 @@ import { IEditorService } from '../../../services/editor/common/editorService.js import { EditorPartModalContext, EditorPartModalMaximizedContext, EditorPartModalNavigationContext } from '../../../common/contextkeys.js'; import { EditorResourceAccessor, SideBySideEditor, Verbosity } from '../../../common/editor.js'; import { ResourceLabel } from '../../labels.js'; -import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; import { IHostService } from '../../../services/host/browser/host.js'; import { IWorkbenchLayoutService, Parts } from '../../../services/layout/browser/layoutService.js'; import { mainWindow } from '../../../../base/browser/window.js'; @@ -36,12 +35,55 @@ import { CLOSE_MODAL_EDITOR_COMMAND_ID, MOVE_MODAL_EDITOR_TO_MAIN_COMMAND_ID, MO import { IModalEditorNavigation, IModalEditorPartOptions } from '../../../../platform/editor/common/editor.js'; const defaultModalEditorAllowableCommands = new Set([ + + // Application 'workbench.action.quit', 'workbench.action.reloadWindow', - 'workbench.action.closeActiveEditor', - 'workbench.action.closeAllEditors', + 'workbench.action.toggleFullScreen', + + // Quick access + 'workbench.action.gotoSymbol', + 'workbench.action.gotoLine', + + // Zoom + 'workbench.action.zoomIn', + 'workbench.action.zoomOut', + 'workbench.action.zoomReset', + + // File operations 'workbench.action.files.save', 'workbench.action.files.saveAll', + 'workbench.action.files.revert', + + // Close editors + 'workbench.action.closeActiveEditor', + 'workbench.action.closeAllEditors', + 'workbench.action.closeEditorsInGroup', + 'workbench.action.closeUnmodifiedEditors', + + // Settings + 'workbench.action.openSettings', + 'workbench.action.openSettings2', + 'workbench.action.openSettingsJson', + 'workbench.action.openGlobalSettings', + 'workbench.action.openApplicationSettingsJson', + 'workbench.action.openRawDefaultSettings', + 'workbench.action.openWorkspaceSettings', + 'workbench.action.openWorkspaceSettingsFile', + 'workbench.action.openFolderSettings', + 'workbench.action.openFolderSettingsFile', + 'workbench.action.openRemoteSettings', + 'workbench.action.openRemoteSettingsFile', + 'workbench.action.openAccessibilitySettings', + 'workbench.action.configureLanguageBasedSettings', + + // Keybindings + 'workbench.action.openGlobalKeybindings', + 'workbench.action.openDefaultKeybindingsFile', + 'workbench.action.openGlobalKeybindingsFile', + 'workbench.action.openKeyboardLayoutPicker', + + // Modal editor CLOSE_MODAL_EDITOR_COMMAND_ID, MOVE_MODAL_EDITOR_TO_MAIN_COMMAND_ID, MOVE_MODAL_EDITOR_TO_WINDOW_COMMAND_ID, @@ -65,7 +107,7 @@ export class ModalEditorPart { @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, @IKeybindingService private readonly keybindingService: IKeybindingService, @IHostService private readonly hostService: IHostService, - @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, + @IConfigurationService private readonly configurationService: IConfigurationService, ) { } @@ -86,11 +128,18 @@ export class ModalEditorPart { } })); + let useModalMode = this.configurationService.getValue('workbench.editor.useModal'); + disposables.add(this.configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('workbench.editor.useModal')) { + useModalMode = this.configurationService.getValue('workbench.editor.useModal'); + } + })); + disposables.add(addDisposableListener(modalElement, EventType.KEY_DOWN, e => { const event = new StandardKeyboardEvent(e); - // Prevent unsupported commands (not in sessions windows) - if (!this.environmentService.isSessionsWindow) { + // Prevent unsupported commands unless all editors open in modal + if (useModalMode !== 'all') { const resolved = this.keybindingService.softDispatch(event, this.layoutService.mainContainer); if (resolved.kind === ResultKind.KbFound && resolved.commandId) { if ( diff --git a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.ts b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.ts index 3150acc6c23cf..950fea0381ea2 100644 --- a/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.ts +++ b/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.ts @@ -28,7 +28,7 @@ import { ChatViewPane } from '../widgetHosts/viewPane/chatViewPane.js'; import { ICommandService } from '../../../../../platform/commands/common/commands.js'; import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; import { AgentSessionsPicker } from './agentSessionsPicker.js'; -import { ActiveEditorContext } from '../../../../common/contextkeys.js'; +import { ActiveEditorContext, IsSessionsWindowContext } from '../../../../common/contextkeys.js'; import { IQuickInputService } from '../../../../../platform/quickinput/common/quickInput.js'; import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js'; import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js'; @@ -708,10 +708,11 @@ export class OpenAgentSessionInEditorGroupAction extends BaseOpenAgentSessionAct primary: KeyMod.WinCtrl | KeyCode.Enter }, weight: KeybindingWeight.WorkbenchContrib + 1, - when: ChatContextKeys.agentSessionsViewerFocused, + when: ContextKeyExpr.and(ChatContextKeys.agentSessionsViewerFocused, IsSessionsWindowContext.negate()), }, menu: { id: MenuId.AgentSessionsContext, + when: IsSessionsWindowContext.negate(), order: 1, group: 'navigation' } @@ -741,10 +742,11 @@ export class OpenAgentSessionInNewEditorGroupAction extends BaseOpenAgentSession primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.Enter }, weight: KeybindingWeight.WorkbenchContrib + 1, - when: ChatContextKeys.agentSessionsViewerFocused, + when: ContextKeyExpr.and(ChatContextKeys.agentSessionsViewerFocused, IsSessionsWindowContext.negate()), }, menu: { id: MenuId.AgentSessionsContext, + when: IsSessionsWindowContext.negate(), order: 2, group: 'navigation' } diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts index 45f4a15d64840..e91a0f8126922 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatInputPart.ts @@ -436,6 +436,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge kind: this.currentModeKind, isBuiltin: mode.isBuiltin, modeInstructions: modeInstructions ? { + uri: mode.uri?.get(), name: mode.name.get(), content: modeInstructions.content, toolReferences: this.toolService.toToolReferences(modeInstructions.toolReferences), @@ -3145,7 +3146,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge const inputToolbarWidth = this.cachedInputToolbarWidth = this.inputActionsToolbar.getItemsWidth(); const executeToolbarPadding = (this.executeToolbar.getItemsLength() - 1) * toolbarItemGap; const inputToolbarPadding = this.inputActionsToolbar.getItemsLength() ? (this.inputActionsToolbar.getItemsLength() - 1) * toolbarItemGap : 0; - const contextUsageWidth = dom.getTotalWidth(this.contextUsageWidgetContainer); + const contextUsageWidth = 0;// dom.getTotalWidth(this.contextUsageWidgetContainer); const inputToolbarsPadding = 12; // pdading between input toolbar/execute toolbar/contextUsage. return executeToolbarWidth + executeToolbarPadding + contextUsageWidth + (this.options.renderInputToolbarBelowInput ? 0 : inputToolbarWidth + inputToolbarPadding + inputToolbarsPadding); }; diff --git a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.ts b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.ts index 43fc982f081a2..9c63561bb60fc 100644 --- a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.ts +++ b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatContextUsageDetails.ts @@ -52,20 +52,19 @@ export class ChatContextUsageDetails extends Disposable { this.domNode = $('.chat-context-usage-details'); - // Using same structure as ChatUsageWidget quota items - this.quotaItem = this.domNode.appendChild($('.quota-item')); + // Quota indicator — using same structure as ChatStatusDashboard + this.quotaItem = this.domNode.appendChild($('.quota-indicator')); - // Header row with label - const quotaItemHeader = this.quotaItem.appendChild($('.quota-item-header')); - const quotaItemLabel = quotaItemHeader.appendChild($('.quota-item-label')); - quotaItemLabel.textContent = localize('contextWindow', "Context Window"); + // Header row + const header = this.domNode.insertBefore($('div.header'), this.quotaItem); + header.textContent = localize('contextWindow', "Context Window"); - // Token count and percentage row (on same line) - const tokenRow = this.quotaItem.appendChild($('.token-row')); - this.tokenCountLabel = tokenRow.appendChild($('.token-count-label')); - this.percentageLabel = tokenRow.appendChild($('.quota-item-value')); + // Quota label row with token count + percentage + const quotaLabel = this.quotaItem.appendChild($('.quota-label')); + this.tokenCountLabel = quotaLabel.appendChild($('span')); + this.percentageLabel = quotaLabel.appendChild($('span.quota-value')); - // Progress bar - using same structure as chat usage widget + // Progress bar const progressBar = this.quotaItem.appendChild($('.quota-bar')); this.progressFill = progressBar.appendChild($('.quota-bit')); @@ -73,15 +72,12 @@ export class ChatContextUsageDetails extends Disposable { this.tokenDetailsContainer = this.domNode.appendChild($('.token-details-container')); // Warning message (shown when usage is high) - this.warningMessage = this.domNode.appendChild($('.warning-message')); + this.warningMessage = this.domNode.appendChild($('div.description')); this.warningMessage.textContent = localize('qualityWarning', "Quality may decline as limit nears."); this.warningMessage.style.display = 'none'; - // Actions section with header, separator, and button bar + // Actions section with button bar this.actionsSection = this.domNode.appendChild($('.actions-section')); - this.actionsSection.appendChild($('.separator')); - const actionsHeader = this.actionsSection.appendChild($('.actions-header')); - actionsHeader.textContent = localize('actions', "Actions"); const buttonBarContainer = this.actionsSection.appendChild($('.button-bar-container')); this._register(this.instantiationService.createInstance(MenuWorkbenchButtonBar, buttonBarContainer, MenuId.ChatContextUsageActions, { toolbarOptions: { @@ -104,14 +100,14 @@ export class ChatContextUsageDetails extends Disposable { update(data: IChatContextUsageData): void { const { percentage, usedTokens, totalContextWindow, promptTokenDetails } = data; - // Update token count and percentage on same line + // Update token count and percentage this.tokenCountLabel.textContent = localize( 'tokenCount', "{0} / {1} tokens", this.formatTokenCount(usedTokens, 1), this.formatTokenCount(totalContextWindow, 0) ); - this.percentageLabel.textContent = `• ${percentage.toFixed(0)}%`; + this.percentageLabel.textContent = localize('quotaDisplay', "{0}%", percentage.toFixed(0)); // Update progress bar this.progressFill.style.width = `${Math.min(100, percentage)}%`; diff --git a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css index 41b7a7ad9d1d1..21dd9bcb7d4fc 100644 --- a/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css +++ b/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatContextUsageDetails.css @@ -15,7 +15,8 @@ .chat-context-usage-details { display: flex; flex-direction: column; - padding: 4px 0; + margin-top: 4px; + margin-bottom: 4px; min-width: 200px; } @@ -23,97 +24,88 @@ outline: none; } -/* Using same structure as ChatUsageWidget quota items */ -.chat-context-usage-details .quota-item { - margin-bottom: 4px; -} - -.chat-context-usage-details .quota-item-header { +/* Section headers — matching ChatStatusDashboard */ +.chat-context-usage-details div.header { display: flex; align-items: center; - justify-content: space-between; - margin-bottom: 2px; -} - -.chat-context-usage-details .quota-item-label { - color: var(--vscode-foreground); -} - -.chat-context-usage-details .quota-item-value { color: var(--vscode-descriptionForeground); + margin-bottom: 4px; + font-weight: 600; } -.chat-context-usage-details .token-row { +/* Quota indicator — matching ChatStatusDashboard */ +.chat-context-usage-details .quota-indicator .quota-label { display: flex; - align-items: center; - gap: 4px; - margin-bottom: 2px; + justify-content: space-between; + gap: 20px; + margin-bottom: 3px; } -.chat-context-usage-details .token-count-label { - font-size: 12px; +.chat-context-usage-details .quota-indicator .quota-label .quota-value { color: var(--vscode-descriptionForeground); } -/* Progress bar - matching chat usage implementation */ -.chat-context-usage-details .quota-item .quota-bar { +.chat-context-usage-details .quota-indicator .quota-bar { width: 100%; height: 4px; background-color: var(--vscode-gauge-background); border-radius: 4px; border: 1px solid var(--vscode-gauge-border); - margin: 2px 0; + margin: 4px 0; } -.chat-context-usage-details .quota-item .quota-bar .quota-bit { +.chat-context-usage-details .quota-indicator .quota-bar .quota-bit { height: 100%; background-color: var(--vscode-gauge-foreground); border-radius: 4px; transition: width 0.3s ease; } -.chat-context-usage-details .quota-item.warning .quota-bar { +.chat-context-usage-details .quota-indicator.warning .quota-bar { background-color: var(--vscode-gauge-warningBackground); } -.chat-context-usage-details .quota-item.warning .quota-bar .quota-bit { +.chat-context-usage-details .quota-indicator.warning .quota-bar .quota-bit { background-color: var(--vscode-gauge-warningForeground); } -.chat-context-usage-details .quota-item.error .quota-bar { +.chat-context-usage-details .quota-indicator.error .quota-bar { background-color: var(--vscode-gauge-errorBackground); } -.chat-context-usage-details .quota-item.error .quota-bar .quota-bit { +.chat-context-usage-details .quota-indicator.error .quota-bar .quota-bit { background-color: var(--vscode-gauge-errorForeground); } -.chat-context-usage-details .warning-message { - font-size: 12px; +/* Description / warning text — matching ChatStatusDashboard */ +.chat-context-usage-details div.description { + font-size: 11px; color: var(--vscode-descriptionForeground); - margin-bottom: 4px; + display: flex; + align-items: center; + gap: 3px; } /* Token details breakdown */ -.chat-context-usage-details .token-details-container { - margin-top: 4px; -} - .chat-context-usage-details .token-category { - margin-bottom: 4px; + margin-bottom: 6px; } .chat-context-usage-details .token-category-header { + display: flex; + align-items: center; + color: var(--vscode-descriptionForeground); + margin-top: 16px; + margin-bottom: 4px; font-weight: 600; - color: var(--vscode-foreground); - margin-bottom: 2px; } .chat-context-usage-details .token-detail-item { display: flex; justify-content: space-between; align-items: center; - padding-left: 8px; + gap: 20px; + margin-bottom: 2px; } .chat-context-usage-details .token-detail-label { @@ -124,15 +116,9 @@ color: var(--vscode-descriptionForeground); } -.chat-context-usage-details .actions-section .separator { - border-top: 1px solid var(--vscode-editorHoverWidget-border); - margin: 4px 0; -} - -.chat-context-usage-details .actions-section .actions-header { - font-weight: 600; - color: var(--vscode-foreground); - margin-bottom: 4px; +/* Actions section */ +.chat-context-usage-details .actions-section { + margin-top: 8px; } .chat-context-usage-details .actions-section .button-bar-container { diff --git a/src/vs/workbench/contrib/chat/common/model/chatModel.ts b/src/vs/workbench/contrib/chat/common/model/chatModel.ts index 98098bb937681..a08574a75c848 100644 --- a/src/vs/workbench/contrib/chat/common/model/chatModel.ts +++ b/src/vs/workbench/contrib/chat/common/model/chatModel.ts @@ -318,6 +318,7 @@ export interface IChatRequestModeInfo { } export interface IChatRequestModeInstructions { + readonly uri?: URI; readonly name: string; readonly content: string; readonly toolReferences: readonly ChatRequestToolReferenceEntry[]; diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts index 8829e4bb9127c..aef9aeefc52be 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts @@ -239,7 +239,7 @@ export class FixDiagnosticsAction extends AbstractInlineChatAction { id: 'inlineChat.fixDiagnostics', title: localize2('fix', 'Fix'), icon: Codicon.editSparkle, - precondition: ContextKeyExpr.and(inlineChatContextKey, CTX_FIX_DIAGNOSTICS_ENABLED, EditorContextKeys.selectionHasDiagnostics, CTX_INLINE_CHAT_FILE_BELONGS_TO_CHAT.negate()), + precondition: ContextKeyExpr.and(CTX_FIX_DIAGNOSTICS_ENABLED, EditorContextKeys.selectionHasDiagnostics, CTX_INLINE_CHAT_FILE_BELONGS_TO_CHAT.negate()), menu: [{ id: MenuId.InlineChatEditorAffordance, group: '1_quickfix', @@ -255,6 +255,7 @@ export class FixDiagnosticsAction extends AbstractInlineChatAction { } override runInlineChatCommand(_accessor: ServicesAccessor, ctrl: InlineChatController, _editor: ICodeEditor, ..._args: unknown[]): void { + ctrl.inputWidget.hide(); ctrl.run({ autoSend: true, attachDiagnostics: true }); } } diff --git a/src/vs/workbench/contrib/scm/browser/scmInput.ts b/src/vs/workbench/contrib/scm/browser/scmInput.ts index bcc312c6ba2c3..a35d479e1a84d 100644 --- a/src/vs/workbench/contrib/scm/browser/scmInput.ts +++ b/src/vs/workbench/contrib/scm/browser/scmInput.ts @@ -261,6 +261,7 @@ class SCMInputWidgetEditorOptions { e.affectsConfiguration('editor.cursorWidth') || e.affectsConfiguration('editor.emptySelectionClipboard') || e.affectsConfiguration('editor.fontFamily') || + e.affectsConfiguration('editor.roundedSelection') || e.affectsConfiguration('editor.rulers') || e.affectsConfiguration('editor.wordWrap') || e.affectsConfiguration('editor.wordSegmenterLocales') || @@ -304,8 +305,9 @@ class SCMInputWidgetEditorOptions { const cursorStyle = this.configurationService.getValue('editor.cursorStyle'); const cursorWidth = this.configurationService.getValue('editor.cursorWidth') ?? 1; const emptySelectionClipboard = this.configurationService.getValue('editor.emptySelectionClipboard') === true; + const roundedSelection = this.configurationService.getValue('editor.roundedSelection') === true; - return { ...this._getEditorLanguageConfiguration(), accessibilitySupport, cursorBlinking, cursorStyle, cursorWidth, fontFamily, fontSize, lineHeight, emptySelectionClipboard, wordSegmenterLocales }; + return { ...this._getEditorLanguageConfiguration(), accessibilitySupport, cursorBlinking, cursorStyle, cursorWidth, fontFamily, fontSize, lineHeight, emptySelectionClipboard, roundedSelection, wordSegmenterLocales }; } private _getEditorFontFamily(): string { diff --git a/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts b/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts index f78e56bed5a10..9143c72c08df2 100644 --- a/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts +++ b/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts @@ -1059,6 +1059,8 @@ declare module 'vscode' { } export interface ChatRequestModeInstructions { + /** set when the mode a custom agent (not built-in), to be used as identifier */ + readonly uri?: Uri; readonly name: string; readonly content: string; readonly toolReferences?: readonly ChatLanguageModelToolReference[];