in src/common/chat/gitlab_chat_controller.ts [56:125]
async viewMessageHandler(message: ViewEmittedMessage) {
switch (message.eventType) {
case 'newPrompt': {
const record = await GitLabChatRecord.buildWithContext(
{
role: 'user',
content: message.record.content,
type: detectType(
message.record.content,
await this.getGitLabVersionForClear(this.#manager),
),
},
this.#aiContextManager,
);
await Promise.all([this.processNewUserRecord(record), this.#clearSelectedContextItems()]);
break;
}
case 'cancelPrompt': {
this.#canceledPromptRequestIds.push(message.canceledPromptRequestId);
await this.#view.cancelPrompt(this.#canceledPromptRequestIds);
break;
}
case 'isChatFocused': {
await this.#view.setChatFocused(message.isChatFocused);
break;
}
case 'trackFeedback': {
if (message.data) {
const gitlabEnvironment = await this.#manager.getGitLabEnvironment();
await submitFeedback({
didWhat: message.data.didWhat,
improveWhat: message.data.improveWhat,
feedbackChoices: message.data.feedbackChoices,
gitlabEnvironment,
});
}
break;
}
case 'insertCodeSnippet': {
if (message.data && message.data.snippet) {
await insertCodeSnippet(message.data.snippet);
}
break;
}
case 'contextItemSearchQuery': {
const { category, query } = message.query;
await this.#searchContextItems(category, query);
break;
}
case 'contextItemAdded': {
await this.#addContextItem(message.item);
break;
}
case 'contextItemRemoved': {
await this.#removeContextItem(message.item);
break;
}
case 'contextItemGetContent': {
await this.#getContextItemContent(message.item, message.messageId);
break;
}
default:
log.warn(`Unhandled chat-webview message: "${JSON.stringify(message)}"`);
break;
}
}