From 8f36256d80be2ac44a9fb2ff5dfcd243ad987de0 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Fri, 6 Mar 2026 15:08:39 -0500 Subject: [PATCH 1/2] fix #299859 --- .../chat/browser/widget/input/editor/chatPasteProviders.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts b/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts index eafcf7aa1c601..49a290dba635b 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts @@ -5,6 +5,7 @@ import { CancellationToken } from '../../../../../../../base/common/cancellation.js'; import { Codicon } from '../../../../../../../base/common/codicons.js'; import { createStringDataTransferItem, IDataTransferItem, IReadonlyVSDataTransfer, VSDataTransfer } from '../../../../../../../base/common/dataTransfer.js'; +import { alert } from '../../../../../../../base/browser/ui/aria/aria.js'; import { HierarchicalKind } from '../../../../../../../base/common/hierarchicalKind.js'; import { Disposable } from '../../../../../../../base/common/lifecycle.js'; import { revive } from '../../../../../../../base/common/marshalling.js'; @@ -386,6 +387,7 @@ function createCustomPasteEdit(model: ITextModel, context: IChatRequestVariableE const label = context.length === 1 ? context[0].name : localize('pastedAttachment.multiple', '{0} and {1} more', context[0].name, context.length - 1); + const announceImageAttachment = context.length === 1 && context[0].kind === 'image'; const customEdit = { resource: model.uri, @@ -403,6 +405,9 @@ function createCustomPasteEdit(model: ITextModel, context: IChatRequestVariableE throw new Error('No widget found for redo'); } widget.attachmentModel.addContext(...context); + if (announceImageAttachment) { + alert(localize('chat.pastedImageAttached', 'Attached image')); + } }, metadata: { needsConfirmation: false, From 350257d1e165377ab3c707736fce9e7d873aa6f6 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:28:46 -0500 Subject: [PATCH 2/2] Use `isImageVariableEntry()` type guard in chatPasteProviders (#299864) --- .../chat/browser/widget/input/editor/chatPasteProviders.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts b/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts index 49a290dba635b..527e9e9becf0e 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatPasteProviders.ts @@ -24,7 +24,7 @@ import { IFileService } from '../../../../../../../platform/files/common/files.j import { IInstantiationService } from '../../../../../../../platform/instantiation/common/instantiation.js'; import { ILogService } from '../../../../../../../platform/log/common/log.js'; import { IExtensionService, isProposedApiEnabled } from '../../../../../../services/extensions/common/extensions.js'; -import { IChatRequestPasteVariableEntry, IChatRequestVariableEntry } from '../../../../common/attachments/chatVariableEntries.js'; +import { IChatRequestPasteVariableEntry, IChatRequestVariableEntry, isImageVariableEntry } from '../../../../common/attachments/chatVariableEntries.js'; import { IDynamicVariable } from '../../../../common/attachments/chatVariables.js'; import { IChatWidgetService } from '../../../chat.js'; import { getDynamicVariablesForWidget } from '../../../attachments/chatVariables.js'; @@ -387,7 +387,7 @@ function createCustomPasteEdit(model: ITextModel, context: IChatRequestVariableE const label = context.length === 1 ? context[0].name : localize('pastedAttachment.multiple', '{0} and {1} more', context[0].name, context.length - 1); - const announceImageAttachment = context.length === 1 && context[0].kind === 'image'; + const announceImageAttachment = context.length === 1 && isImageVariableEntry(context[0]); const customEdit = { resource: model.uri,