ChatAccessibilityService

This commit is contained in:
meganrogge
2023-06-15 15:25:33 -05:00
parent 0f3fa7bbaf
commit eae6a36078
3 changed files with 20 additions and 10 deletions
@@ -22,11 +22,11 @@ import { registerChatExecuteActions } from 'vs/workbench/contrib/chat/browser/ac
import { registerChatQuickQuestionActions } from 'vs/workbench/contrib/chat/browser/actions/chatQuickInputActions';
import { registerChatTitleActions } from 'vs/workbench/contrib/chat/browser/actions/chatTitleActions';
import { registerChatExportActions } from 'vs/workbench/contrib/chat/browser/actions/chatImportExport';
import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat';
import { IChatAccessibilityService, IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat';
import { ChatContributionService } from 'vs/workbench/contrib/chat/browser/chatContributionServiceImpl';
import { ChatEditor, IChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatEditor';
import { ChatEditorInput, ChatEditorInputSerializer } from 'vs/workbench/contrib/chat/browser/chatEditorInput';
import { ChatWidgetService } from 'vs/workbench/contrib/chat/browser/chatWidget';
import { ChatAccessibilityService, ChatWidgetService } from 'vs/workbench/contrib/chat/browser/chatWidget';
import 'vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib';
import { IChatContributionService } from 'vs/workbench/contrib/chat/common/chatContributionService';
import { IChatService } from 'vs/workbench/contrib/chat/common/chatService';
@@ -136,5 +136,6 @@ registerClearActions();
registerSingleton(IChatService, ChatService, InstantiationType.Delayed);
registerSingleton(IChatContributionService, ChatContributionService, InstantiationType.Delayed);
registerSingleton(IChatWidgetService, ChatWidgetService, InstantiationType.Delayed);
registerSingleton(IChatAccessibilityService, ChatAccessibilityService, InstantiationType.Delayed);
registerSingleton(IChatWidgetHistoryService, ChatWidgetHistoryService, InstantiationType.Delayed);
@@ -11,6 +11,7 @@ import { URI } from 'vs/base/common/uri';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
export const IChatWidgetService = createDecorator<IChatWidgetService>('chatWidgetService');
export const IChatAccessibilityService = createDecorator<IChatAccessibilityService>('chatAccessibilityService');
export interface IChatWidgetService {
@@ -29,6 +30,13 @@ export interface IChatWidgetService {
getWidgetByInputUri(uri: URI): IChatWidget | undefined;
}
export interface IChatAccessibilityService {
readonly _serviceBrand: undefined;
acceptRequest(): void;
acceptResponse(response?: IChatResponseViewModel): void;
}
export interface IChatCodeBlockInfo {
codeBlockIndex: number;
element: IChatResponseViewModel;
@@ -24,7 +24,7 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle
import { WorkbenchObjectTree } from 'vs/platform/list/browser/listService';
import { IViewsService } from 'vs/workbench/common/views';
import { clearChatSession } from 'vs/workbench/contrib/chat/browser/actions/chatClear';
import { ChatTreeItem, IChatCodeBlockInfo, IChatWidget, IChatWidgetService, IChatWidgetViewContext } from 'vs/workbench/contrib/chat/browser/chat';
import { ChatTreeItem, IChatAccessibilityService, IChatCodeBlockInfo, IChatWidget, IChatWidgetService, IChatWidgetViewContext } from 'vs/workbench/contrib/chat/browser/chat';
import { ChatInputPart } from 'vs/workbench/contrib/chat/browser/chatInputPart';
import { ChatAccessibilityProvider, ChatListDelegate, ChatListItemRenderer, IChatRendererDelegate } from 'vs/workbench/contrib/chat/browser/chatListRenderer';
import { ChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatOptions';
@@ -108,8 +108,6 @@ export class ChatWidget extends Disposable implements IChatWidget {
private lastSlashCommands: ISlashCommand[] | undefined;
private slashCommandsPromise: Promise<ISlashCommand[] | undefined> | undefined;
private _chatAccessibilityService: ChatAccessibilityService;
constructor(
readonly viewContext: IChatWidgetViewContext,
private readonly styles: IChatWidgetStyles,
@@ -118,15 +116,13 @@ export class ChatWidget extends Disposable implements IChatWidget {
@IChatService private readonly chatService: IChatService,
@IChatWidgetService chatWidgetService: IChatWidgetService,
@IContextMenuService private readonly contextMenuService: IContextMenuService,
@IAudioCueService audioCueService: IAudioCueService
@IChatAccessibilityService private readonly _chatAccessibilityService: IChatAccessibilityService
) {
super();
CONTEXT_IN_CHAT_SESSION.bindTo(contextKeyService).set(true);
this.requestInProgress = CONTEXT_CHAT_REQUEST_IN_PROGRESS.bindTo(contextKeyService);
this._register((chatWidgetService as ChatWidgetService).register(this));
this._chatAccessibilityService = new ChatAccessibilityService(audioCueService);
this._register(this._chatAccessibilityService);
}
get providerId(): string {
@@ -511,9 +507,14 @@ export class ChatWidgetService implements IChatWidgetService {
}
}
const CHAT_RESPONSE_PENDING_AUDIO_CUE_LOOP_MS = 7000;
class ChatAccessibilityService extends Disposable {
export class ChatAccessibilityService extends Disposable implements IChatAccessibilityService {
declare readonly _serviceBrand: undefined;
private _responsePendingAudioCue: IDisposable | undefined;
constructor(@IAudioCueService private readonly _audioCueService: IAudioCueService) {
super();
}
@@ -523,10 +524,10 @@ class ChatAccessibilityService extends Disposable {
}
acceptResponse(response?: IChatResponseViewModel): void {
this._responsePendingAudioCue?.dispose();
this._audioCueService.playRandomAudioCue(AudioCueGroupId.chatResponseReceived, true);
if (!response) {
return;
}
this._audioCueService.playRandomAudioCue(AudioCueGroupId.chatResponseReceived, true);
const errorDetails = response.errorDetails ? ` ${response.errorDetails.message}` : '';
alert(response.response.value + errorDetails);
}