Skip to content

Commit eae6a36

Browse files
committed
ChatAccessibilityService
1 parent 0f3fa7b commit eae6a36

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

src/vs/workbench/contrib/chat/browser/chat.contribution.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ import { registerChatExecuteActions } from 'vs/workbench/contrib/chat/browser/ac
2222
import { registerChatQuickQuestionActions } from 'vs/workbench/contrib/chat/browser/actions/chatQuickInputActions';
2323
import { registerChatTitleActions } from 'vs/workbench/contrib/chat/browser/actions/chatTitleActions';
2424
import { registerChatExportActions } from 'vs/workbench/contrib/chat/browser/actions/chatImportExport';
25-
import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat';
25+
import { IChatAccessibilityService, IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat';
2626
import { ChatContributionService } from 'vs/workbench/contrib/chat/browser/chatContributionServiceImpl';
2727
import { ChatEditor, IChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatEditor';
2828
import { ChatEditorInput, ChatEditorInputSerializer } from 'vs/workbench/contrib/chat/browser/chatEditorInput';
29-
import { ChatWidgetService } from 'vs/workbench/contrib/chat/browser/chatWidget';
29+
import { ChatAccessibilityService, ChatWidgetService } from 'vs/workbench/contrib/chat/browser/chatWidget';
3030
import 'vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib';
3131
import { IChatContributionService } from 'vs/workbench/contrib/chat/common/chatContributionService';
3232
import { IChatService } from 'vs/workbench/contrib/chat/common/chatService';
@@ -136,5 +136,6 @@ registerClearActions();
136136
registerSingleton(IChatService, ChatService, InstantiationType.Delayed);
137137
registerSingleton(IChatContributionService, ChatContributionService, InstantiationType.Delayed);
138138
registerSingleton(IChatWidgetService, ChatWidgetService, InstantiationType.Delayed);
139+
registerSingleton(IChatAccessibilityService, ChatAccessibilityService, InstantiationType.Delayed);
139140
registerSingleton(IChatWidgetHistoryService, ChatWidgetHistoryService, InstantiationType.Delayed);
140141

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { URI } from 'vs/base/common/uri';
1111
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
1212

1313
export const IChatWidgetService = createDecorator<IChatWidgetService>('chatWidgetService');
14+
export const IChatAccessibilityService = createDecorator<IChatAccessibilityService>('chatAccessibilityService');
1415

1516
export interface IChatWidgetService {
1617

@@ -29,6 +30,13 @@ export interface IChatWidgetService {
2930
getWidgetByInputUri(uri: URI): IChatWidget | undefined;
3031
}
3132

33+
34+
export interface IChatAccessibilityService {
35+
readonly _serviceBrand: undefined;
36+
acceptRequest(): void;
37+
acceptResponse(response?: IChatResponseViewModel): void;
38+
}
39+
3240
export interface IChatCodeBlockInfo {
3341
codeBlockIndex: number;
3442
element: IChatResponseViewModel;

src/vs/workbench/contrib/chat/browser/chatWidget.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle
2424
import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService';
2525
import { IViewsService } from 'vs/workbench/common/views';
2626
import { clearChatSession } from 'vs/workbench/contrib/chat/browser/actions/chatClear';
27-
import { ChatTreeItem, IChatCodeBlockInfo, IChatWidget, IChatWidgetService, IChatWidgetViewContext } from 'vs/workbench/contrib/chat/browser/chat';
27+
import { ChatTreeItem, IChatAccessibilityService, IChatCodeBlockInfo, IChatWidget, IChatWidgetService, IChatWidgetViewContext } from 'vs/workbench/contrib/chat/browser/chat';
2828
import { ChatInputPart } from 'vs/workbench/contrib/chat/browser/chatInputPart';
2929
import { ChatAccessibilityProvider, ChatListDelegate, ChatListItemRenderer, IChatRendererDelegate } from 'vs/workbench/contrib/chat/browser/chatListRenderer';
3030
import { ChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatOptions';
@@ -108,8 +108,6 @@ export class ChatWidget extends Disposable implements IChatWidget {
108108
private lastSlashCommands: ISlashCommand[] | undefined;
109109
private slashCommandsPromise: Promise<ISlashCommand[] | undefined> | undefined;
110110

111-
private _chatAccessibilityService: ChatAccessibilityService;
112-
113111
constructor(
114112
readonly viewContext: IChatWidgetViewContext,
115113
private readonly styles: IChatWidgetStyles,
@@ -118,15 +116,13 @@ export class ChatWidget extends Disposable implements IChatWidget {
118116
@IChatService private readonly chatService: IChatService,
119117
@IChatWidgetService chatWidgetService: IChatWidgetService,
120118
@IContextMenuService private readonly contextMenuService: IContextMenuService,
121-
@IAudioCueService audioCueService: IAudioCueService
119+
@IChatAccessibilityService private readonly _chatAccessibilityService: IChatAccessibilityService
122120
) {
123121
super();
124122
CONTEXT_IN_CHAT_SESSION.bindTo(contextKeyService).set(true);
125123
this.requestInProgress = CONTEXT_CHAT_REQUEST_IN_PROGRESS.bindTo(contextKeyService);
126124

127125
this._register((chatWidgetService as ChatWidgetService).register(this));
128-
this._chatAccessibilityService = new ChatAccessibilityService(audioCueService);
129-
this._register(this._chatAccessibilityService);
130126
}
131127

132128
get providerId(): string {
@@ -511,9 +507,14 @@ export class ChatWidgetService implements IChatWidgetService {
511507
}
512508
}
513509

510+
514511
const CHAT_RESPONSE_PENDING_AUDIO_CUE_LOOP_MS = 7000;
515-
class ChatAccessibilityService extends Disposable {
512+
export class ChatAccessibilityService extends Disposable implements IChatAccessibilityService {
513+
514+
declare readonly _serviceBrand: undefined;
515+
516516
private _responsePendingAudioCue: IDisposable | undefined;
517+
517518
constructor(@IAudioCueService private readonly _audioCueService: IAudioCueService) {
518519
super();
519520
}
@@ -523,10 +524,10 @@ class ChatAccessibilityService extends Disposable {
523524
}
524525
acceptResponse(response?: IChatResponseViewModel): void {
525526
this._responsePendingAudioCue?.dispose();
527+
this._audioCueService.playRandomAudioCue(AudioCueGroupId.chatResponseReceived, true);
526528
if (!response) {
527529
return;
528530
}
529-
this._audioCueService.playRandomAudioCue(AudioCueGroupId.chatResponseReceived, true);
530531
const errorDetails = response.errorDetails ? ` ${response.errorDetails.message}` : '';
531532
alert(response.response.value + errorDetails);
532533
}

0 commit comments

Comments
 (0)