diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 084acdd70d4..197468b788b 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -1223,6 +1223,9 @@ export class Repository implements Disposable { async () => { await this.repository.add(resources.map(r => r.fsPath), opts); this.closeDiffEditors([], [...resources.map(r => r.fsPath)]); + + // Accept working set changes across all chat sessions + commands.executeCommand('_chat.editSessions.accept', resources); }, () => { const resourcePaths = resources.map(r => r.fsPath); @@ -1373,6 +1376,12 @@ export class Repository implements Disposable { this.inputBox.value = await this.getInputTemplate(); } this.closeDiffEditors(indexResources, workingGroupResources); + + // Accept working set changes across all chat sessions + const resources = indexResources.length !== 0 + ? indexResources.map(r => Uri.file(r)) + : workingGroupResources.map(r => Uri.file(r)); + commands.executeCommand('_chat.editSessions.accept', resources); } private commitOperationGetOptimisticResourceGroups(opts: CommitOptions): GitResourceGroups { diff --git a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts index 10f3d39ede4..a2efcd696f3 100644 --- a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts +++ b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts @@ -7,7 +7,7 @@ import { CancellationToken } from '../../../../../base/common/cancellation.js'; import { Codicon } from '../../../../../base/common/codicons.js'; import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js'; import { basename } from '../../../../../base/common/resources.js'; -import { URI } from '../../../../../base/common/uri.js'; +import { URI, UriComponents } from '../../../../../base/common/uri.js'; import { isCodeEditor } from '../../../../../editor/browser/editorBrowser.js'; import { ServicesAccessor } from '../../../../../editor/browser/editorExtensions.js'; import { Position } from '../../../../../editor/common/core/position.js'; @@ -18,6 +18,7 @@ import { ILanguageFeaturesService } from '../../../../../editor/common/services/ import { ITextModelService } from '../../../../../editor/common/services/resolverService.js'; import { localize, localize2 } from '../../../../../nls.js'; import { Action2, IAction2Options, MenuId, registerAction2 } from '../../../../../platform/actions/common/actions.js'; +import { CommandsRegistry } from '../../../../../platform/commands/common/commands.js'; import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js'; import { IDialogService } from '../../../../../platform/dialogs/common/dialogs.js'; @@ -745,3 +746,19 @@ export class ViewPreviousEditsAction extends EditingSessionAction { } } registerAction2(ViewPreviousEditsAction); + +/** + * Workbench command to explore accepting working set changes from an extension. Executing + * the command will accept the changes for the provided resources across all edit sessions. + */ +CommandsRegistry.registerCommand('_chat.editSessions.accept', async (accessor: ServicesAccessor, resources: UriComponents[]) => { + if (resources.length === 0) { + return; + } + + const uris = resources.map(resource => URI.revive(resource)); + const chatEditingService = accessor.get(IChatEditingService); + for (const editingSession of chatEditingService.editingSessionsObs.get()) { + await editingSession.accept(...uris); + } +});