Skip to content

Commit 9680a58

Browse files
Copilotmeganrogge
andauthored
Retarget voice mode when starting a new chat session
Co-authored-by: meganrogge <29464607+meganrogge@users.noreply.github.com>
1 parent 47cc21f commit 9680a58

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

src/vs/workbench/contrib/chat/browser/actions/chatNewActions.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import { Codicon } from '../../../../../base/common/codicons.js';
77
import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';
8+
import { isEqual } from '../../../../../base/common/resources.js';
89
import { ServicesAccessor } from '../../../../../editor/browser/editorExtensions.js';
910
import { localize, localize2 } from '../../../../../nls.js';
1011
import { IAccessibilityService } from '../../../../../platform/accessibility/common/accessibility.js';
@@ -20,6 +21,7 @@ import { IChatEditingSession } from '../../common/editing/chatEditingService.js'
2021
import { IChatService } from '../../common/chatService/chatService.js';
2122
import { ChatAgentLocation, ChatModeKind } from '../../common/constants.js';
2223
import { ChatViewId, IChatWidgetService } from '../chat.js';
24+
import { IVoiceSessionController } from '../voiceClient/voiceSessionController.js';
2325
import { ChatViewPane } from '../widgetHosts/viewPane/chatViewPane.js';
2426
import { EditingSessionAction, EditingSessionActionContext, getEditingSessionContext } from '../chatEditing/chatEditingActions.js';
2527
import { ACTION_ID_NEW_CHAT, ACTION_ID_NEW_EDIT_SESSION, CHAT_CATEGORY, clearChatSessionPreservingType, handleCurrentEditingSession } from './chatActions.js';
@@ -334,6 +336,9 @@ async function runNewChatAction(
334336
return;
335337
}
336338

339+
const voiceSessionController = accessor.get(IVoiceSessionController);
340+
const voiceTarget = voiceSessionController.targetSession.get();
341+
const currentSession = widget.viewModel?.sessionResource;
337342
const dialogService = accessor.get(IDialogService);
338343

339344
const model = widget.viewModel?.model;
@@ -346,6 +351,13 @@ async function runNewChatAction(
346351
// Create a new session, preserving the session type (or using the specified one)
347352
await instantiationService.invokeFunction(clearChatSessionPreservingType, widget, sessionType);
348353

354+
const newSession = widget.viewModel?.sessionResource;
355+
if ((voiceSessionController.isConnected.get() || voiceSessionController.isConnecting.get())
356+
&& (!voiceTarget || (!!currentSession && isEqual(voiceTarget, currentSession)))
357+
&& newSession) {
358+
voiceSessionController.setTargetSession(newSession);
359+
}
360+
349361
widget.attachmentModel.clear(true);
350362
widget.focusInput();
351363

0 commit comments

Comments
 (0)