From bae958334d9bd89527cb62f7203d61706a550c3e Mon Sep 17 00:00:00 2001 From: Pranav Date: Mon, 2 Jun 2025 22:02:03 -0500 Subject: [PATCH] feat: Update UI for Copilot (#11561) - Updated UI for copilot --- .../dashboard/api/inbox/conversation.js | 4 - .../components-next/captain/PageLayout.vue | 4 +- .../components-next/copilot/Copilot.vue | 161 ++++++++++-------- .../copilot/CopilotAssistantMessage.vue | 17 +- .../copilot/CopilotEmptyState.vue | 108 ++++++++++++ .../copilot/CopilotLauncher.vue | 61 +++++++ .../copilot/CopilotThinkingBlock.vue | 2 +- .../copilot/CopilotThinkingGroup.vue | 8 +- .../components/copilot/CopilotContainer.vue | 118 +++++++------ .../conversation/ConversationSidebar.vue | 31 +--- .../i18n/locale/en/integrations.json | 12 ++ .../dashboard/routes/dashboard/Dashboard.vue | 7 + .../pages/CampaignsPageRouteView.vue | 2 +- .../conversation/ConversationView.vue | 7 +- .../routes/dashboard/inbox/InboxView.vue | 1 - .../inbox/components/InboxItemHeader.vue | 2 +- .../reports/components/ReportsWrapper.vue | 4 +- .../store/captain/copilotMessages.js | 6 +- config/locales/en.yml | 5 + config/routes.rb | 1 - .../v1/accounts/conversations_controller.rb | 26 --- enterprise/app/helpers/captain/chat_helper.rb | 20 ++- enterprise/app/models/copilot_message.rb | 2 +- .../services/captain/copilot/chat_service.rb | 5 +- .../captain/llm/system_prompts_service.rb | 12 +- .../services/captain/tool_registry_service.rb | 6 + .../copilot/search_conversations_service.rb | 24 +-- .../captain/tool_registry_service_spec.rb | 42 +++++ 28 files changed, 455 insertions(+), 243 deletions(-) create mode 100644 app/javascript/dashboard/components-next/copilot/CopilotEmptyState.vue create mode 100644 app/javascript/dashboard/components-next/copilot/CopilotLauncher.vue diff --git a/app/javascript/dashboard/api/inbox/conversation.js b/app/javascript/dashboard/api/inbox/conversation.js index 39546096f..1a87e6d96 100644 --- a/app/javascript/dashboard/api/inbox/conversation.js +++ b/app/javascript/dashboard/api/inbox/conversation.js @@ -134,10 +134,6 @@ class ConversationApi extends ApiClient { return axios.get(`${this.url}/${conversationId}/attachments`); } - requestCopilot(conversationId, body) { - return axios.post(`${this.url}/${conversationId}/copilot`, body); - } - getInboxAssistant(conversationId) { return axios.get(`${this.url}/${conversationId}/inbox_assistant`); } diff --git a/app/javascript/dashboard/components-next/captain/PageLayout.vue b/app/javascript/dashboard/components-next/captain/PageLayout.vue index 7355ac616..495db1838 100644 --- a/app/javascript/dashboard/components-next/captain/PageLayout.vue +++ b/app/javascript/dashboard/components-next/captain/PageLayout.vue @@ -76,7 +76,7 @@ const handlePageChange = event => { diff --git a/app/javascript/dashboard/components-next/copilot/CopilotAssistantMessage.vue b/app/javascript/dashboard/components-next/copilot/CopilotAssistantMessage.vue index 0a37600bf..2447a7164 100644 --- a/app/javascript/dashboard/components-next/copilot/CopilotAssistantMessage.vue +++ b/app/javascript/dashboard/components-next/copilot/CopilotAssistantMessage.vue @@ -11,6 +11,10 @@ import MessageFormatter from 'shared/helpers/MessageFormatter.js'; import Button from 'dashboard/components-next/button/Button.vue'; const props = defineProps({ + isLastMessage: { + type: Boolean, + default: false, + }, message: { type: Object, required: true, @@ -20,6 +24,15 @@ const props = defineProps({ required: true, }, }); +const hasEmptyMessageContent = computed(() => !props.message?.content); + +const showUseButton = computed(() => { + return ( + !hasEmptyMessageContent.value && + props.message.reply_suggestion && + props.isLastMessage + ); +}); const messageContent = computed(() => { const formatter = new MessageFormatter(props.message.content); @@ -32,8 +45,6 @@ const insertIntoRichEditor = computed(() => { ); }); -const hasEmptyMessageContent = computed(() => !props.message?.content); - const useCopilotResponse = () => { if (insertIntoRichEditor.value) { emitter.emit(BUS_EVENTS.INSERT_INTO_RICH_EDITOR, props.message?.content); @@ -57,7 +68,7 @@ const useCopilotResponse = () => { />