@gitlab/duo-ui 15.12.1 → 15.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/agentic_chat/agentic_duo_chat.js +9 -2
- package/dist/components/agentic_chat/web_agentic_duo_chat.js +14 -1
- package/dist/components/chat/components/duo_chat_conversation/duo_chat_conversation.js +14 -1
- package/dist/components/chat/components/duo_chat_header/duo_chat_header.js +18 -8
- package/dist/components/chat/components/duo_chat_message/duo_chat_message.js +14 -2
- package/dist/components/chat/components/duo_chat_message/message_types/index.js +6 -7
- package/dist/components/chat/components/duo_chat_message/message_types/message_map.js +48 -28
- package/dist/components/chat/components/duo_chat_message/message_types/message_tool.js +1 -7
- package/dist/components/chat/components/duo_chat_message/message_types/message_tool_approved.js +63 -0
- package/dist/components/chat/components/utils.js +3 -1
- package/dist/components/chat/constants.js +2 -1
- package/dist/index.js +11 -1
- package/dist/tailwind.css +1 -1
- package/dist/tailwind.css.map +1 -1
- package/package.json +7 -6
- package/src/components/agentic_chat/agentic_duo_chat.vue +11 -3
- package/src/components/agentic_chat/web_agentic_duo_chat.vue +14 -0
- package/src/components/chat/components/duo_chat_conversation/duo_chat_conversation.vue +14 -0
- package/src/components/chat/components/duo_chat_header/duo_chat_header.vue +26 -14
- package/src/components/chat/components/duo_chat_message/duo_chat_message.vue +14 -1
- package/src/components/chat/components/duo_chat_message/message_types/index.js +2 -13
- package/src/components/chat/components/duo_chat_message/message_types/message_map.vue +51 -30
- package/src/components/chat/components/duo_chat_message/message_types/message_tool.vue +1 -13
- package/src/components/chat/components/duo_chat_message/message_types/message_tool_approved.vue +32 -0
- package/src/components/chat/components/utils.js +9 -0
- package/src/components/chat/constants.js +10 -0
- package/src/index.js +10 -8
- package/dist/components/chat/components/duo_chat_message/message_types/constants.js +0 -11
- package/src/components/chat/components/duo_chat_message/message_types/constants.js +0 -15
|
@@ -172,13 +172,17 @@ var script = {
|
|
|
172
172
|
/**
|
|
173
173
|
* Chat state object that contains enablement state and optional reason message.
|
|
174
174
|
* When chat is disabled (isEnabled: false), a reason message must be provided.
|
|
175
|
+
* @property {boolean} isEnabled - Whether the chat is enabled.
|
|
176
|
+
* @property {string|null} reason - Optional reason message shown in the info alert.
|
|
177
|
+
* @property {boolean} [canDismiss=true] - Whether the info alert can be dismissed by the user.
|
|
175
178
|
*/
|
|
176
179
|
chatState: {
|
|
177
180
|
type: Object,
|
|
178
181
|
required: false,
|
|
179
182
|
default: () => ({
|
|
180
183
|
isEnabled: true,
|
|
181
|
-
reason: null
|
|
184
|
+
reason: null,
|
|
185
|
+
canDismiss: true
|
|
182
186
|
}),
|
|
183
187
|
validator: value => {
|
|
184
188
|
// If chat is disabled, reason must be provided
|
|
@@ -770,7 +774,10 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
770
774
|
},attrs:{"width":_vm.shouldRenderResizable ? _vm.dimensions.width : null,"height":_vm.shouldRenderResizable ? _vm.dimensions.height : null,"max-width":_vm.shouldRenderResizable ? _vm.dimensions.maxWidth : null,"max-height":_vm.shouldRenderResizable ? _vm.dimensions.maxHeight : null,"min-width":_vm.shouldRenderResizable ? _vm.dimensions.minWidth : null,"left":_vm.shouldRenderResizable ? _vm.dimensions.left : null,"top":_vm.shouldRenderResizable ? _vm.dimensions.top : null,"fit-parent":true,"min-height":_vm.shouldRenderResizable ? _vm.dimensions.minHeight : null,"active":_vm.shouldRenderResizable ? ['l', 't', 'lt'] : null},on:{"resize:end":_vm.updateSize}},[(!_vm.isHidden)?_c('aside',{staticClass:"duo-chat gl-bottom-0 gl-flex gl-max-h-full gl-flex-col",class:{
|
|
771
775
|
'resizable-content': _vm.shouldRenderResizable,
|
|
772
776
|
'duo-chat-drawer': !_vm.shouldRenderResizable,
|
|
773
|
-
},attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"error
|
|
777
|
+
},attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"error-config":{ message: _vm.error },"info-config":{
|
|
778
|
+
message: _vm.hasMessages ? _vm.chatState.reason : '',
|
|
779
|
+
dismissible: _vm.chatState.canDismiss,
|
|
780
|
+
},"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"session-id":_vm.sessionId,"agents":_vm.agents},on:{"go-back":_vm.onGoBack,"new-chat":_vm.onNewChat,"close":_vm.hideChat,"dismiss-error":function($event){return _vm.$emit('dismiss-error')},"dismiss-info":function($event){return _vm.$emit('dismiss-info')}},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{ref:"chatContent",staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory,"trusted-urls":_vm.trustedUrls},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-gray-900 gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[(_vm.emptyStateTitle)?_c('p',{staticClass:"gl-m-0",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateTitle)+"\n ")]):_vm._e(),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]:_vm._e(),_vm._v(" "),(_vm.isLoading && !_vm.isAwaitingToolApproval)?_c('duo-chat-loader',{key:"loader",attrs:{"tool-name":_vm.toolName}}):_vm._e(),_vm._v(" "),_c('div',{key:"anchor",ref:"anchor",staticClass:"scroll-anchor"})],2)],1),_vm._v(" "),(!_vm.shouldShowThreadList)?_c('footer',{staticClass:"duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0",attrs:{"data-testid":"chat-footer"}},[(_vm.$scopedSlots['footer-panel'])?_c('div',{staticClass:"gl-relative gl-max-w-full",attrs:{"data-testid":"footer-panel-wrapper"}},[_vm._t("footer-panel")],2):_vm._e(),_vm._v(" "),(_vm.$scopedSlots['footer-actions'])?_c('div',{staticClass:"gl-my-4 gl-flex gl-items-center gl-justify-between gl-gap-x-4 gl-px-4",attrs:{"data-testid":"footer-actions-wrapper"}},[_vm._t("footer-actions")],2):_vm._e(),_vm._v(" "),_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('div',{staticClass:"gl-relative gl-max-w-full"},[_vm._t("context-items-menu",null,{"isOpen":_vm.contextItemsMenuIsOpen,"onClose":_vm.closeContextItemsMenuOpen,"setRef":_vm.setContextItemsMenuRef,"focusPrompt":_vm.focusChatInput})],2),_vm._v(" "),_c('gl-form-input-group',{scopedSlots:_vm._u([{key:"append",fn:function(){return [(_vm.canSubmit)?_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-full",attrs:{"icon":"paper-airplane","category":"primary","variant":"confirm","type":"submit","disabled":!_vm.isChatAvailable || !_vm.chatState.isEnabled || _vm.isPromptEmpty || !_vm.hasValidPrompt,"data-testid":"chat-prompt-submit-button","aria-label":_vm.$options.i18n.CHAT_SUBMIT_LABEL}}):_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-full",attrs:{"icon":"stop","category":"primary","variant":"default","data-testid":"chat-prompt-cancel-button","aria-label":_vm.$options.i18n.CHAT_CANCEL_LABEL,"disabled":!_vm.canCancelInternal},on:{"click":_vm.cancelPrompt}})]},proxy:true}],null,false,4037582087)},[_c('div',{staticClass:"duo-chat-input gl-min-h-8 gl-max-w-full gl-grow gl-align-top",attrs:{"data-value":_vm.prompt}},[(_vm.shouldShowSlashCommands)?_c('gl-card',{ref:"commands",staticClass:"slash-commands !gl-absolute gl-w-full -gl-translate-y-full gl-list-none gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2"}},_vm._l((_vm.filteredSlashCommands),function(command,index){return _c('gl-dropdown-item',{key:command.name,class:{ 'active-command': index === _vm.activeCommandIndex },on:{"click":function($event){return _vm.selectSlashCommand(index)}},nativeOn:{"mouseenter":function($event){_vm.activeCommandIndex = index;}}},[_c('span',{staticClass:"gl-flex gl-justify-between"},[_c('span',{staticClass:"gl-block"},[_vm._v(_vm._s(command.name))]),_vm._v(" "),_c('small',{staticClass:"gl-pl-3 gl-text-right gl-italic gl-text-subtle"},[_vm._v(_vm._s(command.description))])])])}),1):_vm._e(),_vm._v(" "),_c('gl-form-textarea',{ref:"prompt",attrs:{"disabled":!_vm.canSubmit || !_vm.isChatAvailable || !_vm.chatState.isEnabled,"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"character-count-limit":_vm.maxPromptLength,"textarea-classes":[
|
|
774
781
|
'gl-absolute',
|
|
775
782
|
'!gl-h-full',
|
|
776
783
|
'gl-rounded-br-none',
|
|
@@ -6,6 +6,7 @@ import { VIEW_TYPES } from '../chat/components/duo_chat_header/constants';
|
|
|
6
6
|
import DuoChatLoader from '../chat/components/duo_chat_loader/duo_chat_loader';
|
|
7
7
|
import DuoChatPredefinedPrompts from '../chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts';
|
|
8
8
|
import DuoChatConversation from '../chat/components/duo_chat_conversation/duo_chat_conversation';
|
|
9
|
+
import { messageRenderersValidator } from '../chat/components/utils';
|
|
9
10
|
import WebDuoChatHeader from '../chat/components/duo_chat_header/web_duo_chat_header';
|
|
10
11
|
import DuoChatThreads from '../chat/components/duo_chat_threads/duo_chat_threads';
|
|
11
12
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
@@ -341,6 +342,18 @@ var script = {
|
|
|
341
342
|
type: Boolean,
|
|
342
343
|
required: false,
|
|
343
344
|
default: false
|
|
345
|
+
},
|
|
346
|
+
/**
|
|
347
|
+
* Optional array of custom message renderers passed through to MessageMap.
|
|
348
|
+
* Each entry is an object with `component` (Vue component) and `matchMessage` (Function).
|
|
349
|
+
*/
|
|
350
|
+
messageRenderers: {
|
|
351
|
+
type: Array,
|
|
352
|
+
required: false,
|
|
353
|
+
validator: messageRenderersValidator,
|
|
354
|
+
default() {
|
|
355
|
+
return [];
|
|
356
|
+
}
|
|
344
357
|
}
|
|
345
358
|
},
|
|
346
359
|
data() {
|
|
@@ -772,7 +785,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
772
785
|
'duo-chat-history gl-px-4',
|
|
773
786
|
_vm.$scopedSlots['custom-empty-state'] && !_vm.hasMessages && !_vm.isLoading
|
|
774
787
|
? 'gl-m-auto'
|
|
775
|
-
: 'gl-mt-auto gl-pb-4 gl-pt-6' ],attrs:{"mode":"out-in","tag":"section","name":_vm.$scopedSlots['custom-empty-state'] ? '' : 'message',"data-testid":"chat-messages"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory,"trusted-urls":_vm.trustedUrls,"is-binary-feedback-enabled":_vm.isBinaryFeedbackEnabled},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-container"},[_vm._t("custom-empty-state",function(){return [_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-default gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[_c('div',{staticClass:"gl-mb-[3.75rem] gl-flex gl-flex-col gl-items-center gl-justify-center gl-gap-3 gl-text-center"},[_c('h1',{staticClass:"gl-my-0 gl-text-[3.5rem]",attrs:{"data-testid":"gl-duo-chat-empty-state-emoji"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_EMPTY_STATE_EMOJI)+"\n ")]),_vm._v(" "),(_vm.agentName)?_c('h2',{staticClass:"gl-heading-2 gl-my-0",attrs:{"data-testid":"gl-duo-chat-empty-state-greeting"}},[_vm._v("\n "+_vm._s(_vm.emptyStateGreeting)+"\n ")]):_vm._e(),_vm._v(" "),_c('h2',{staticClass:"gl-my-0 gl-text-size-h2",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateMainText)+"\n ")]),_vm._v(" "),_c('p',{staticClass:"gl-text-base gl-text-subtle",attrs:{"data-testid":"gl-duo-chat-empty-state-subtitle"}},[_vm._v("\n "+_vm._s(_vm.emptyStateSubText)+"\n ")])]),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]})],2)]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('duo-chat-loader',{key:"loader",attrs:{"tool-name":_vm.toolName}}):_vm._e(),_vm._v(" "),_c('div',{key:"anchor",ref:"anchor",staticClass:"scroll-anchor"})],2)],1),_vm._v(" "),(!_vm.shouldShowThreadList)?_c('footer',{staticClass:"duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0",attrs:{"data-testid":"chat-footer"}},[_c('p',{staticClass:"gl-mb-3 gl-text-sm gl-text-subtle",class:{ 'gl-invisible': !_vm.hasAssistantMessages },attrs:{"data-testid":"chat-disclaimer"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_DISCLAIMER)+"\n ")]),_vm._v(" "),_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('div',{staticClass:"gl-relative gl-max-w-full"},[_vm._t("context-items-menu",null,{"isOpen":_vm.contextItemsMenuIsOpen,"onClose":_vm.closeContextItemsMenuOpen,"setRef":_vm.setContextItemsMenuRef,"focusPrompt":_vm.focusChatInput})],2),_vm._v(" "),_c('div',{staticClass:"duo-chat-input gl-relative gl-min-h-8 gl-max-w-full gl-grow gl-flex-col gl-rounded-bl-[12px] gl-rounded-br-[18px] gl-rounded-tl-[12px] gl-rounded-tr-[12px] gl-align-top forced-colors:gl-border"},[(_vm.$scopedSlots['agentic-model'] || _vm.$scopedSlots['agentic-switch'])?_c('div',{staticClass:"gl-flex gl-items-center gl-justify-between gl-gap-5 gl-border-0 gl-border-b-1 gl-border-solid gl-border-strong gl-px-4 gl-py-4 forced-colors:gl-border-none"},[_c('div',{staticClass:"duo-model-switcher gl-min-w-0 gl-max-w-full"},[_vm._t("agentic-model")],2),_vm._v(" "),_c('div',{staticClass:"duo-agent-mode-switcher gl-min-w-0 gl-max-w-full gl-shrink-0"},[_vm._t("agentic-switch")],2)]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-input-wrap gl-relative gl-flex gl-grow gl-flex-col",attrs:{"data-value":_vm.prompt}},[(_vm.shouldShowSlashCommands)?_c('gl-card',{ref:"commands",staticClass:"slash-commands !gl-absolute gl-w-full -gl-translate-y-full gl-list-none gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2"}},_vm._l((_vm.filteredSlashCommands),function(command,index){return _c('gl-dropdown-item',{key:command.name,class:{ 'active-command': index === _vm.activeCommandIndex },on:{"click":function($event){return _vm.selectSlashCommand(index)}},nativeOn:{"mouseenter":function($event){_vm.activeCommandIndex = index;}}},[_c('span',{staticClass:"gl-flex gl-justify-between"},[_c('span',{staticClass:"gl-block"},[_vm._v(_vm._s(command.name))]),_vm._v(" "),_c('small',{staticClass:"gl-pl-3 gl-text-right gl-italic gl-text-subtle"},[_vm._v(_vm._s(command.description))])])])}),1):_vm._e(),_vm._v(" "),_c('gl-form-textarea',{ref:"prompt",staticClass:"gl-absolute !gl-h-full !gl-w-full",attrs:{"disabled":!_vm.canSubmit || !_vm.isChatAvailable || !_vm.chatState.isEnabled,"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"character-count-limit":_vm.maxPromptLength,"textarea-classes":[
|
|
788
|
+
: 'gl-mt-auto gl-pb-4 gl-pt-6' ],attrs:{"mode":"out-in","tag":"section","name":_vm.$scopedSlots['custom-empty-state'] ? '' : 'message',"data-testid":"chat-messages"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory,"trusted-urls":_vm.trustedUrls,"is-binary-feedback-enabled":_vm.isBinaryFeedbackEnabled,"message-renderers":_vm.messageRenderers},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-container"},[_vm._t("custom-empty-state",function(){return [_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-default gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[_c('div',{staticClass:"gl-mb-[3.75rem] gl-flex gl-flex-col gl-items-center gl-justify-center gl-gap-3 gl-text-center"},[_c('h1',{staticClass:"gl-my-0 gl-text-[3.5rem]",attrs:{"data-testid":"gl-duo-chat-empty-state-emoji"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_EMPTY_STATE_EMOJI)+"\n ")]),_vm._v(" "),(_vm.agentName)?_c('h2',{staticClass:"gl-heading-2 gl-my-0",attrs:{"data-testid":"gl-duo-chat-empty-state-greeting"}},[_vm._v("\n "+_vm._s(_vm.emptyStateGreeting)+"\n ")]):_vm._e(),_vm._v(" "),_c('h2',{staticClass:"gl-my-0 gl-text-size-h2",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateMainText)+"\n ")]),_vm._v(" "),_c('p',{staticClass:"gl-text-base gl-text-subtle",attrs:{"data-testid":"gl-duo-chat-empty-state-subtitle"}},[_vm._v("\n "+_vm._s(_vm.emptyStateSubText)+"\n ")])]),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]})],2)]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('duo-chat-loader',{key:"loader",attrs:{"tool-name":_vm.toolName}}):_vm._e(),_vm._v(" "),_c('div',{key:"anchor",ref:"anchor",staticClass:"scroll-anchor"})],2)],1),_vm._v(" "),(!_vm.shouldShowThreadList)?_c('footer',{staticClass:"duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0",attrs:{"data-testid":"chat-footer"}},[_c('p',{staticClass:"gl-mb-3 gl-text-sm gl-text-subtle",class:{ 'gl-invisible': !_vm.hasAssistantMessages },attrs:{"data-testid":"chat-disclaimer"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_DISCLAIMER)+"\n ")]),_vm._v(" "),_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('div',{staticClass:"gl-relative gl-max-w-full"},[_vm._t("context-items-menu",null,{"isOpen":_vm.contextItemsMenuIsOpen,"onClose":_vm.closeContextItemsMenuOpen,"setRef":_vm.setContextItemsMenuRef,"focusPrompt":_vm.focusChatInput})],2),_vm._v(" "),_c('div',{staticClass:"duo-chat-input gl-relative gl-min-h-8 gl-max-w-full gl-grow gl-flex-col gl-rounded-bl-[12px] gl-rounded-br-[18px] gl-rounded-tl-[12px] gl-rounded-tr-[12px] gl-align-top forced-colors:gl-border"},[(_vm.$scopedSlots['agentic-model'] || _vm.$scopedSlots['agentic-switch'])?_c('div',{staticClass:"gl-flex gl-items-center gl-justify-between gl-gap-5 gl-border-0 gl-border-b-1 gl-border-solid gl-border-strong gl-px-4 gl-py-4 forced-colors:gl-border-none"},[_c('div',{staticClass:"duo-model-switcher gl-min-w-0 gl-max-w-full"},[_vm._t("agentic-model")],2),_vm._v(" "),_c('div',{staticClass:"duo-agent-mode-switcher gl-min-w-0 gl-max-w-full gl-shrink-0"},[_vm._t("agentic-switch")],2)]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-input-wrap gl-relative gl-flex gl-grow gl-flex-col",attrs:{"data-value":_vm.prompt}},[(_vm.shouldShowSlashCommands)?_c('gl-card',{ref:"commands",staticClass:"slash-commands !gl-absolute gl-w-full -gl-translate-y-full gl-list-none gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2"}},_vm._l((_vm.filteredSlashCommands),function(command,index){return _c('gl-dropdown-item',{key:command.name,class:{ 'active-command': index === _vm.activeCommandIndex },on:{"click":function($event){return _vm.selectSlashCommand(index)}},nativeOn:{"mouseenter":function($event){_vm.activeCommandIndex = index;}}},[_c('span',{staticClass:"gl-flex gl-justify-between"},[_c('span',{staticClass:"gl-block"},[_vm._v(_vm._s(command.name))]),_vm._v(" "),_c('small',{staticClass:"gl-pl-3 gl-text-right gl-italic gl-text-subtle"},[_vm._v(_vm._s(command.description))])])])}),1):_vm._e(),_vm._v(" "),_c('gl-form-textarea',{ref:"prompt",staticClass:"gl-absolute !gl-h-full !gl-w-full",attrs:{"disabled":!_vm.canSubmit || !_vm.isChatAvailable || !_vm.chatState.isEnabled,"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"character-count-limit":_vm.maxPromptLength,"textarea-classes":[
|
|
776
789
|
'!gl-h-full',
|
|
777
790
|
'!gl-bg-transparent',
|
|
778
791
|
'!gl-py-4',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { translate } from '../../../../utils/i18n';
|
|
2
2
|
import DuoChatMessage from '../duo_chat_message/duo_chat_message';
|
|
3
3
|
import DuoChatMessageToolApproval from '../duo_chat_message_tool_approval/message_tool_approval';
|
|
4
|
+
import { messageRenderersValidator } from '../utils';
|
|
4
5
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
5
6
|
|
|
6
7
|
const i18n = {
|
|
@@ -88,6 +89,18 @@ var script = {
|
|
|
88
89
|
type: Boolean,
|
|
89
90
|
required: false,
|
|
90
91
|
default: false
|
|
92
|
+
},
|
|
93
|
+
/**
|
|
94
|
+
* Optional array of custom message renderers passed through to MessageMap.
|
|
95
|
+
* Each entry is an object with `component` (Vue component) and `matchMessage` (Function).
|
|
96
|
+
*/
|
|
97
|
+
messageRenderers: {
|
|
98
|
+
type: Array,
|
|
99
|
+
required: false,
|
|
100
|
+
validator: messageRenderersValidator,
|
|
101
|
+
default() {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
91
104
|
}
|
|
92
105
|
},
|
|
93
106
|
computed: {
|
|
@@ -173,7 +186,7 @@ const __vue_script__ = script;
|
|
|
173
186
|
/* template */
|
|
174
187
|
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:[
|
|
175
188
|
'gl-flex gl-flex-col gl-justify-end gl-gap-6',
|
|
176
|
-
{ 'insert-code-hidden': !_vm.enableCodeInsertion } ]},[(_vm.showDelimiter)?_c('div',{staticClass:"gl-my-5 gl-flex gl-items-center gl-gap-4 gl-text-gray-500",attrs:{"data-testid":"conversation-delimiter"}},[_c('hr',{staticClass:"gl-grow"}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.$options.i18n.CONVERSATION_NEW_CHAT))]),_vm._v(" "),_c('hr',{staticClass:"gl-grow"})]):_vm._e(),_vm._v(" "),_vm._l((_vm.messages),function(msg,index){return _c('duo-chat-message',{key:((msg.role) + "-" + index),attrs:{"message":msg,"trusted-urls":_vm.trustedUrls,"is-cancelled":_vm.canceledRequestIds.includes(msg.requestId),"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"is-binary-feedback-enabled":_vm.isBinaryFeedbackEnabled,"show-binary-feedback":index === _vm.lastAssistantMessageIndex},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(_vm.hasPendingToolApprovals)?_c('duo-chat-message-tool-approval',{attrs:{"messages":_vm.pendingToolApprovals,"is-processing":_vm.isToolApprovalProcessing,"approval-options":_vm.toolApprovalOptions},on:{"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall}}):_vm._e()],2)};
|
|
189
|
+
{ 'insert-code-hidden': !_vm.enableCodeInsertion } ]},[(_vm.showDelimiter)?_c('div',{staticClass:"gl-my-5 gl-flex gl-items-center gl-gap-4 gl-text-gray-500",attrs:{"data-testid":"conversation-delimiter"}},[_c('hr',{staticClass:"gl-grow"}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.$options.i18n.CONVERSATION_NEW_CHAT))]),_vm._v(" "),_c('hr',{staticClass:"gl-grow"})]):_vm._e(),_vm._v(" "),_vm._l((_vm.messages),function(msg,index){return _c('duo-chat-message',{key:((msg.role) + "-" + index),attrs:{"message":msg,"trusted-urls":_vm.trustedUrls,"is-cancelled":_vm.canceledRequestIds.includes(msg.requestId),"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"is-binary-feedback-enabled":_vm.isBinaryFeedbackEnabled,"show-binary-feedback":index === _vm.lastAssistantMessageIndex,"message-renderers":_vm.messageRenderers},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(_vm.hasPendingToolApprovals)?_c('duo-chat-message-tool-approval',{attrs:{"messages":_vm.pendingToolApprovals,"is-processing":_vm.isToolApprovalProcessing,"approval-options":_vm.toolApprovalOptions},on:{"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall}}):_vm._e()],2)};
|
|
177
190
|
var __vue_staticRenderFns__ = [];
|
|
178
191
|
|
|
179
192
|
/* style */
|
|
@@ -49,15 +49,25 @@ var script = {
|
|
|
49
49
|
required: false,
|
|
50
50
|
default: ''
|
|
51
51
|
},
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Configuration object for the error alert.
|
|
54
|
+
* @property {string} message - The error message. Alert is only shown when provided.
|
|
55
|
+
* @property {boolean} [dismissible=true] - Whether the alert can be dismissed.
|
|
56
|
+
*/
|
|
57
|
+
errorConfig: {
|
|
58
|
+
type: Object,
|
|
54
59
|
required: false,
|
|
55
|
-
default:
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
default: () => ({})
|
|
61
|
+
},
|
|
62
|
+
/**
|
|
63
|
+
* Configuration object for the info alert.
|
|
64
|
+
* @property {string} message - The info message. Alert is only shown when provided.
|
|
65
|
+
* @property {boolean} [dismissible=true] - Whether the alert can be dismissed.
|
|
66
|
+
*/
|
|
67
|
+
infoConfig: {
|
|
68
|
+
type: Object,
|
|
59
69
|
required: false,
|
|
60
|
-
default:
|
|
70
|
+
default: () => ({})
|
|
61
71
|
},
|
|
62
72
|
isMultithreaded: {
|
|
63
73
|
type: Boolean,
|
|
@@ -157,7 +167,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
157
167
|
_vm.isMultithreaded && (_vm.activeThreadId || _vm.currentView === _vm.VIEW_TYPES.LIST || _vm.hasManyAgents)
|
|
158
168
|
)?[(_vm.hasManyAgents)?_c('gl-disclosure-dropdown',{attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"toggle-text":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"items":_vm.agents,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","text-sr-only":"","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL,"no-caret":""},on:{"action":_vm.startNewChat},scopedSlots:_vm._u([{key:"list-item",fn:function(ref){
|
|
159
169
|
var item = ref.item;
|
|
160
|
-
return [_c('duo-chat-header-agent-item',{attrs:{"agent":item}})]}}],null,false,1406306174)}):_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL},on:{"click":_vm.startNewChat}})]:_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.currentView === _vm.VIEW_TYPES.CHAT)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_HISTORY_TOOLTIP,"data-testid":"go-back-to-list-button","category":"tertiary","size":"small","icon":"history","aria-label":_vm.$options.i18n.CHAT_BACK_LABEL},on:{"click":function($event){return _vm.$emit('go-back')}}}):_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.activeThreadId && _vm.currentView === _vm.VIEW_TYPES.LIST)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP,"data-testid":"go-back-to-chat-button","category":"tertiary","size":"small","icon":"go-back","aria-label":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP},on:{"click":function($event){return _vm.$emit('go-back-to-chat')}}}):_vm._e(),_vm._v(" "),(_vm.sessionId)?_c('gl-disclosure-dropdown',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip",value:(_vm.showSessionDropdownTooltip),expression:"showSessionDropdownTooltip"}],attrs:{"icon":"ellipsis_v","category":"tertiary","text-sr-only":"","size":"small","toggle-text":_vm.$options.i18n.CHAT_DROPDOWN_MORE_OPTIONS,"items":_vm.sessionIdItems,"no-caret":""},on:{"shown":_vm.showSessionDropdown,"hidden":_vm.hideSessionDropdown}}):_vm._e(),_vm._v(" "),_c('gl-button',{staticClass:"gl-ml-auto",attrs:{"category":"tertiary","variant":"default","icon":"close","size":"small","data-testid":"chat-close-button","aria-label":_vm.$options.i18n.CHAT_CLOSE_LABEL},on:{"click":function($event){return _vm.$emit('close')}}})],2)]),_vm._v(" "),_vm._t("subheader"),_vm._v(" "),(_vm.
|
|
170
|
+
return [_c('duo-chat-header-agent-item',{attrs:{"agent":item}})]}}],null,false,1406306174)}):_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL},on:{"click":_vm.startNewChat}})]:_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.currentView === _vm.VIEW_TYPES.CHAT)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_HISTORY_TOOLTIP,"data-testid":"go-back-to-list-button","category":"tertiary","size":"small","icon":"history","aria-label":_vm.$options.i18n.CHAT_BACK_LABEL},on:{"click":function($event){return _vm.$emit('go-back')}}}):_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.activeThreadId && _vm.currentView === _vm.VIEW_TYPES.LIST)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP,"data-testid":"go-back-to-chat-button","category":"tertiary","size":"small","icon":"go-back","aria-label":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP},on:{"click":function($event){return _vm.$emit('go-back-to-chat')}}}):_vm._e(),_vm._v(" "),(_vm.sessionId)?_c('gl-disclosure-dropdown',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip",value:(_vm.showSessionDropdownTooltip),expression:"showSessionDropdownTooltip"}],attrs:{"icon":"ellipsis_v","category":"tertiary","text-sr-only":"","size":"small","toggle-text":_vm.$options.i18n.CHAT_DROPDOWN_MORE_OPTIONS,"items":_vm.sessionIdItems,"no-caret":""},on:{"shown":_vm.showSessionDropdown,"hidden":_vm.hideSessionDropdown}}):_vm._e(),_vm._v(" "),_c('gl-button',{staticClass:"gl-ml-auto",attrs:{"category":"tertiary","variant":"default","icon":"close","size":"small","data-testid":"chat-close-button","aria-label":_vm.$options.i18n.CHAT_CLOSE_LABEL},on:{"click":function($event){return _vm.$emit('close')}}})],2)]),_vm._v(" "),_vm._t("subheader"),_vm._v(" "),(_vm.infoConfig.message)?_c('gl-alert',{key:"info",staticClass:"gl-m-4 !gl-pl-9",attrs:{"variant":"info","role":"alert","data-testid":"chat-info","dismissible":_vm.infoConfig.dismissible !== false},on:{"dismiss":function($event){return _vm.$emit('dismiss-info')}}},[_c('span',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.infoConfig.message),expression:"infoConfig.message"}]})]):_vm._e(),_vm._v(" "),(_vm.errorConfig.message)?_c('gl-alert',{key:"error",staticClass:"gl-m-4 !gl-pl-9",attrs:{"variant":"danger","role":"alert","data-testid":"chat-error","dismissible":_vm.errorConfig.dismissible !== false},on:{"dismiss":function($event){return _vm.$emit('dismiss-error')}}},[_c('span',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.errorConfig.message),expression:"errorConfig.message"}]})]):_vm._e()],2)};
|
|
161
171
|
var __vue_staticRenderFns__ = [];
|
|
162
172
|
|
|
163
173
|
/* style */
|
|
@@ -4,7 +4,7 @@ import { throttle } from 'lodash-es';
|
|
|
4
4
|
import DuoChatContextItemSelections from '../duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections';
|
|
5
5
|
import { SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED, MESSAGE_MODEL_ROLES } from '../../constants';
|
|
6
6
|
import DocumentationSources from '../duo_chat_message_sources/duo_chat_message_sources';
|
|
7
|
-
import { concatUntilEmpty, copyToClipboard } from '../utils';
|
|
7
|
+
import { messageRenderersValidator, concatUntilEmpty, copyToClipboard } from '../utils';
|
|
8
8
|
import AgenticBinaryFeedback from '../../../agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback';
|
|
9
9
|
import AgenticFeedbackPanel from '../../../agentic_chat/components/agentic_feedback_panel/agentic_feedback_panel';
|
|
10
10
|
import MessageActionBar from '../message_action_bar/message_action_bar';
|
|
@@ -111,6 +111,18 @@ var script = {
|
|
|
111
111
|
type: Boolean,
|
|
112
112
|
required: false,
|
|
113
113
|
default: false
|
|
114
|
+
},
|
|
115
|
+
/**
|
|
116
|
+
* Optional array of custom message renderers to pass to MessageMap.
|
|
117
|
+
* Each entry is an object with `component` (Vue component) and `matchMessage` (Function).
|
|
118
|
+
*/
|
|
119
|
+
messageRenderers: {
|
|
120
|
+
type: Array,
|
|
121
|
+
required: false,
|
|
122
|
+
validator: messageRenderersValidator,
|
|
123
|
+
default() {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
114
126
|
}
|
|
115
127
|
},
|
|
116
128
|
data() {
|
|
@@ -344,7 +356,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
344
356
|
},attrs:{"is-html":_vm.hasContentHtml,"markdown":_vm.messageContent,"trusted-urls":_vm.trustedUrls}}),_vm._v(" "),(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),(_vm.isAssistantMessage)?[_c('message-action-bar',[(_vm.isChunkAndNotCancelled)?_c('gl-animated-loader-icon',{attrs:{"is-on":true}}):_vm._e(),_vm._v(" "),(_vm.shouldShowFeedbackLink && _vm.isBinaryFeedbackEnabled)?[(_vm.showBinaryFeedback)?_c('agentic-binary-feedback',{attrs:{"feedback-choice":_vm.feedbackChoice,"submitted":_vm.feedbackSubmitted,"data-testid":"agentic-feedback-latest"},on:{"select-type":_vm.onFeedbackTypeSelected}}):_c('div',{staticClass:"agentic-feedback-hover-wrapper",class:{
|
|
345
357
|
'-gl-mr-3 gl-w-0 gl-overflow-hidden gl-opacity-0':
|
|
346
358
|
!_vm.feedbackChoice && !_vm.feedbackSubmitted,
|
|
347
|
-
},attrs:{"data-testid":"agentic-feedback-hover-container"}},[_c('agentic-binary-feedback',{attrs:{"feedback-choice":_vm.feedbackChoice,"submitted":_vm.feedbackSubmitted},on:{"select-type":_vm.onFeedbackTypeSelected}})],1)]:(_vm.shouldShowFeedbackLink)?_c('message-feedback',{attrs:{"has-feedback":_vm.hasFeedback},on:{"feedback":_vm.logEvent}}):_vm._e(),_vm._v(" "),(_vm.shouldShowCopyAction)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],class:{ '!gl-text-success': _vm.copied, '!gl-text-subtle': !_vm.copied },attrs:{"title":_vm.copied ? _vm.$options.i18n.CHAT_MESSAGE_COPIED : _vm.$options.i18n.CHAT_MESSAGE_COPY,"icon":_vm.copied ? 'check-circle-filled' : 'copy-to-clipboard',"category":"tertiary","size":"small"},on:{"click":_vm.copyMessage,"focusout":function($event){_vm.copied = false;}}}):_vm._e()],2),_vm._v(" "),(_vm.feedbackChoice && !_vm.feedbackSubmitted)?_c('agentic-feedback-panel',{attrs:{"feedback-type":_vm.feedbackChoice},on:{"submit":_vm.onFeedbackPanelSubmit,"close":_vm.onFeedbackPanelClose}}):_vm._e()]:_vm._e(),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isUserMessage)?_c('duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"user"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e()]:_c('message-map',{attrs:{"message":_vm.message,"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent}})],2)};
|
|
359
|
+
},attrs:{"data-testid":"agentic-feedback-hover-container"}},[_c('agentic-binary-feedback',{attrs:{"feedback-choice":_vm.feedbackChoice,"submitted":_vm.feedbackSubmitted},on:{"select-type":_vm.onFeedbackTypeSelected}})],1)]:(_vm.shouldShowFeedbackLink)?_c('message-feedback',{attrs:{"has-feedback":_vm.hasFeedback},on:{"feedback":_vm.logEvent}}):_vm._e(),_vm._v(" "),(_vm.shouldShowCopyAction)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],class:{ '!gl-text-success': _vm.copied, '!gl-text-subtle': !_vm.copied },attrs:{"title":_vm.copied ? _vm.$options.i18n.CHAT_MESSAGE_COPIED : _vm.$options.i18n.CHAT_MESSAGE_COPY,"icon":_vm.copied ? 'check-circle-filled' : 'copy-to-clipboard',"category":"tertiary","size":"small"},on:{"click":_vm.copyMessage,"focusout":function($event){_vm.copied = false;}}}):_vm._e()],2),_vm._v(" "),(_vm.feedbackChoice && !_vm.feedbackSubmitted)?_c('agentic-feedback-panel',{attrs:{"feedback-type":_vm.feedbackChoice},on:{"submit":_vm.onFeedbackPanelSubmit,"close":_vm.onFeedbackPanelClose}}):_vm._e()]:_vm._e(),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isUserMessage)?_c('duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"user"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e()]:_c('message-map',{attrs:{"message":_vm.message,"message-renderers":_vm.messageRenderers,"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent}})],2)};
|
|
348
360
|
var __vue_staticRenderFns__ = [];
|
|
349
361
|
|
|
350
362
|
/* style */
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { MESSAGE_MODEL_ROLES, VALID_MESSAGE_TYPES } from '../../../constants';
|
|
1
2
|
import AgentMessage from './message_agent';
|
|
2
3
|
import InputRequestedMessage from './message_input_requested';
|
|
3
4
|
import SystemMessage from './message_tool';
|
|
4
5
|
import WorkflowEndMessage from './message_workflow_end';
|
|
5
6
|
import MessageMap from './message_map';
|
|
6
|
-
import { VALID_MESSAGE_TYPES, AGENT_MESSAGE_TYPE, USER_MESSAGE_TYPE, FLOW_END_TYPE, INPUT_REQUEST_TYPE, TOOL_MESSAGE_TYPE } from './constants';
|
|
7
7
|
|
|
8
8
|
// Direct imports for backward compatibility
|
|
9
|
+
|
|
10
|
+
// Import constants and factory functions
|
|
11
|
+
|
|
9
12
|
var index = {
|
|
10
13
|
// Main wrapper component - recommended for new consumers
|
|
11
14
|
MessageMap,
|
|
@@ -17,12 +20,8 @@ var index = {
|
|
|
17
20
|
ToolMessage: SystemMessage,
|
|
18
21
|
WorkflowEndMessage,
|
|
19
22
|
// Constants and utility functions
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
USER_MESSAGE_TYPE,
|
|
23
|
-
FLOW_END_TYPE,
|
|
24
|
-
INPUT_REQUEST_TYPE,
|
|
25
|
-
TOOL_MESSAGE_TYPE
|
|
23
|
+
MESSAGE_MODEL_ROLES,
|
|
24
|
+
VALID_MESSAGE_TYPES
|
|
26
25
|
};
|
|
27
26
|
|
|
28
27
|
export default index;
|
|
@@ -1,18 +1,35 @@
|
|
|
1
|
+
import { MESSAGE_MODEL_ROLES, APPROVAL_TOOL_NAMES } from '../../../constants';
|
|
2
|
+
import { messageRenderersValidator } from '../../utils';
|
|
1
3
|
import AgentMessage from './message_agent';
|
|
2
4
|
import UserMessage from './message_user';
|
|
3
5
|
import InputRequestedMessage from './message_input_requested';
|
|
4
|
-
import
|
|
6
|
+
import MessageToolVisualization from './message_tool';
|
|
7
|
+
import MessageToolApproved from './message_tool_approved';
|
|
5
8
|
import WorkflowEndMessage from './message_workflow_end';
|
|
6
|
-
import { AGENT_MESSAGE_TYPE, FLOW_END_TYPE, INPUT_REQUEST_TYPE, TOOL_MESSAGE_TYPE, USER_MESSAGE_TYPE } from './constants';
|
|
7
9
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
8
10
|
|
|
9
|
-
const DEFAULT_COMPONENT_MAP = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
11
|
+
const DEFAULT_COMPONENT_MAP = [{
|
|
12
|
+
component: AgentMessage,
|
|
13
|
+
matchMessage: message => message.message_type === MESSAGE_MODEL_ROLES.agent
|
|
14
|
+
}, {
|
|
15
|
+
component: WorkflowEndMessage,
|
|
16
|
+
matchMessage: message => message.message_type === MESSAGE_MODEL_ROLES.workflow_end
|
|
17
|
+
}, {
|
|
18
|
+
component: InputRequestedMessage,
|
|
19
|
+
matchMessage: message => message.message_type === MESSAGE_MODEL_ROLES.request
|
|
20
|
+
}, {
|
|
21
|
+
component: MessageToolApproved,
|
|
22
|
+
matchMessage: message => {
|
|
23
|
+
var _message$tool_info;
|
|
24
|
+
return message.message_type === MESSAGE_MODEL_ROLES.tool && Object.values(APPROVAL_TOOL_NAMES).includes((_message$tool_info = message.tool_info) === null || _message$tool_info === void 0 ? void 0 : _message$tool_info.name);
|
|
25
|
+
}
|
|
26
|
+
}, {
|
|
27
|
+
component: MessageToolVisualization,
|
|
28
|
+
matchMessage: message => message.message_type === MESSAGE_MODEL_ROLES.tool
|
|
29
|
+
}, {
|
|
30
|
+
component: UserMessage,
|
|
31
|
+
matchMessage: message => message.message_type === MESSAGE_MODEL_ROLES.user
|
|
32
|
+
}];
|
|
16
33
|
var script = {
|
|
17
34
|
name: 'MessageMap',
|
|
18
35
|
props: {
|
|
@@ -27,13 +44,16 @@ var script = {
|
|
|
27
44
|
}
|
|
28
45
|
},
|
|
29
46
|
/**
|
|
30
|
-
* Optional custom
|
|
47
|
+
* Optional array of custom message renderers to override or extend the default message components.
|
|
48
|
+
* Each entry is an object with `component` (Vue component) and `matchMessage` (Function).
|
|
49
|
+
* Custom entries are evaluated before defaults, allowing overrides.
|
|
31
50
|
*/
|
|
32
|
-
|
|
33
|
-
type:
|
|
51
|
+
messageRenderers: {
|
|
52
|
+
type: Array,
|
|
34
53
|
required: false,
|
|
54
|
+
validator: messageRenderersValidator,
|
|
35
55
|
default() {
|
|
36
|
-
return
|
|
56
|
+
return [];
|
|
37
57
|
}
|
|
38
58
|
},
|
|
39
59
|
/**
|
|
@@ -54,22 +74,22 @@ var script = {
|
|
|
54
74
|
}
|
|
55
75
|
},
|
|
56
76
|
computed: {
|
|
57
|
-
messageMap() {
|
|
58
|
-
return {
|
|
59
|
-
...DEFAULT_COMPONENT_MAP,
|
|
60
|
-
...this.componentMap
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
77
|
messageComponent() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
const combined = [...this.messageRenderers, ...DEFAULT_COMPONENT_MAP];
|
|
79
|
+
try {
|
|
80
|
+
var _match$component;
|
|
81
|
+
const match = combined.find(_ref => {
|
|
82
|
+
let {
|
|
83
|
+
matchMessage
|
|
84
|
+
} = _ref;
|
|
85
|
+
return matchMessage(this.message);
|
|
86
|
+
});
|
|
87
|
+
return (_match$component = match === null || match === void 0 ? void 0 : match.component) !== null && _match$component !== void 0 ? _match$component : AgentMessage;
|
|
88
|
+
} catch (e) {
|
|
89
|
+
// eslint-disable-next-line no-console
|
|
90
|
+
console.warn('Invalid message renderer found. Falling back to the default agent message renderer', e);
|
|
91
|
+
return AgentMessage;
|
|
92
|
+
}
|
|
73
93
|
}
|
|
74
94
|
}
|
|
75
95
|
};
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { GlButton, GlCollapse, GlIcon, GlLink } from '@gitlab/ui';
|
|
2
2
|
import { translate } from '../../../../../utils/i18n';
|
|
3
|
-
import MessageToolApproval from '../../duo_chat_message_tool_approval/message_tool_approval';
|
|
4
|
-
import { APPROVAL_TOOL_NAMES } from '../../../constants';
|
|
5
3
|
import MessageToolDetails from './message_tool_details';
|
|
6
4
|
import BaseMessage from './message_base';
|
|
7
5
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
@@ -20,7 +18,6 @@ var script = {
|
|
|
20
18
|
name: 'DuoToolMessage',
|
|
21
19
|
components: {
|
|
22
20
|
BaseMessage,
|
|
23
|
-
MessageToolApproval,
|
|
24
21
|
MessageToolDetails,
|
|
25
22
|
GlButton,
|
|
26
23
|
GlCollapse,
|
|
@@ -156,9 +153,6 @@ var script = {
|
|
|
156
153
|
collapseIconName() {
|
|
157
154
|
return this.isDetailsOpen ? 'chevron-down' : 'chevron-right';
|
|
158
155
|
},
|
|
159
|
-
requiresApproval() {
|
|
160
|
-
return Object.values(APPROVAL_TOOL_NAMES).includes(this.toolName);
|
|
161
|
-
},
|
|
162
156
|
shouldShowDetails() {
|
|
163
157
|
var _this$message;
|
|
164
158
|
return !hiddenSubTypes.includes((_this$message = this.message) === null || _this$message === void 0 ? void 0 : _this$message.message_sub_type) && (this.hasToolInfoArgs || this.hasToolInfoResponse);
|
|
@@ -189,7 +183,7 @@ var script = {
|
|
|
189
183
|
const __vue_script__ = script;
|
|
190
184
|
|
|
191
185
|
/* template */
|
|
192
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return
|
|
186
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-message',{attrs:{"message":_vm.message},scopedSlots:_vm._u([{key:"message",fn:function(ref){
|
|
193
187
|
var content = ref.content;
|
|
194
188
|
return [_c('div',{staticClass:"gl-border gl-flex-col gl-rounded-lg gl-border-default gl-p-4"},[_c('div',{staticClass:"gl-flex gl-flex-col gl-gap-2 gl-text-base gl-text-subtle"},[_c('div',{staticClass:"gl-flex gl-items-start gl-gap-x-3"},[_c('div',{staticClass:"gl-mt-1 gl-flex gl-flex-shrink-0"},[_c('gl-icon',{attrs:{"name":_vm.iconName}})],1),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-min-w-0 gl-grow gl-flex-wrap gl-items-center gl-gap-x-2"},[_c('span',{attrs:{"data-testid":"tool-message-content"}},[_vm._v(_vm._s(content))]),_vm._v(" "),(_vm.shouldShowFilePath)?_c('gl-link',{staticClass:"file-path-link gl-min-w-0 gl-break-all gl-font-monospace",attrs:{"data-testid":"tool-message-file-path-link"},on:{"click":function($event){$event.preventDefault();return _vm.onOpenFilePath(_vm.messageFilePath)}}},[_c('code',{staticClass:"gl-rounded-base gl-px-2 gl-py-1 gl-text-default"},[_vm._v(_vm._s(_vm.messageFilePath))])]):_vm._e()],1),_vm._v(" "),(_vm.shouldShowDetails)?_c('gl-button',{staticClass:"-gl-mt-1",attrs:{"category":"tertiary","size":"small","icon":_vm.collapseIconName,"aria-label":_vm.isDetailsOpen ? _vm.$options.i18n.COLLAPSE_DETAILS : _vm.$options.i18n.EXPAND_DETAILS,"data-testid":"tool-message-toggle-button"},on:{"click":_vm.toggleDetails}}):_vm._e()],1),_vm._v(" "),(_vm.hasMetadataToShow)?_c('div',{staticClass:"gl-ml-5 gl-flex gl-flex-wrap gl-gap-2 gl-text-sm"},[(_vm.shouldShowProjectId)?_c('div',{staticClass:"gl-flex gl-min-w-0 gl-gap-x-2 gl-rounded-full gl-bg-strong gl-px-3",attrs:{"data-testid":"tool-message-project-info"}},[_c('span',{staticClass:"gl-whitespace-nowrap"},[_vm._v(_vm._s(_vm.$options.i18n.PROJECT_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-truncate",attrs:{"data-testid":"tool-message-project-id"}},[_vm._v(_vm._s(_vm.projectId))])]):_vm._e(),_vm._v(" "),(_vm.shouldShowBranch)?_c('div',{staticClass:"gl-flex gl-min-w-0 gl-gap-x-2 gl-rounded-full gl-bg-strong gl-px-3",attrs:{"data-testid":"tool-message-branch-info"}},[_c('span',{staticClass:"gl-whitespace-nowrap"},[_vm._v(_vm._s(_vm.$options.i18n.BRANCH_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-truncate",attrs:{"data-testid":"tool-message-branch-name"}},[_vm._v(_vm._s(_vm.branchName))])]):_vm._e(),_vm._v(" "),(_vm.shouldShowStartBranch)?_c('div',{staticClass:"gl-flex gl-min-w-0 gl-gap-x-2 gl-rounded-full gl-bg-strong gl-px-3",attrs:{"data-testid":"tool-message-start-branch-info"}},[_c('span',{staticClass:"gl-whitespace-nowrap"},[_vm._v(_vm._s(_vm.$options.i18n.START_BRANCH_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-truncate",attrs:{"data-testid":"tool-message-start-branch-name"}},[_vm._v(_vm._s(_vm.startBranch))])]):_vm._e()]):_vm._e()]),_vm._v(" "),(_vm.shouldShowDetails)?_c('gl-collapse',{staticClass:"gl-overflow-hidden",attrs:{"visible":_vm.isDetailsOpen}},[_c('message-tool-details',{attrs:{"message":_vm.message,"is-expanded":_vm.isDetailsOpen},on:{"copy-code-snippet":_vm.onCopyCodeSnippet}})],1):_vm._e()],1)]}}])})};
|
|
195
189
|
var __vue_staticRenderFns__ = [];
|
package/dist/components/chat/components/duo_chat_message/message_types/message_tool_approved.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import MessageToolApproval from '../../duo_chat_message_tool_approval/message_tool_approval';
|
|
2
|
+
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
3
|
+
|
|
4
|
+
var script = {
|
|
5
|
+
name: 'MessageToolApproved',
|
|
6
|
+
components: {
|
|
7
|
+
MessageToolApproval
|
|
8
|
+
},
|
|
9
|
+
props: {
|
|
10
|
+
message: {
|
|
11
|
+
required: true,
|
|
12
|
+
type: Object
|
|
13
|
+
},
|
|
14
|
+
workingDirectory: {
|
|
15
|
+
required: false,
|
|
16
|
+
type: String,
|
|
17
|
+
default: ''
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
computed: {
|
|
21
|
+
messages() {
|
|
22
|
+
return [this.message];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/* script */
|
|
28
|
+
const __vue_script__ = script;
|
|
29
|
+
|
|
30
|
+
/* template */
|
|
31
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('message-tool-approval',_vm._g({attrs:{"messages":_vm.messages,"working-directory":_vm.workingDirectory,"approval-status":"approved"}},_vm.$listeners))};
|
|
32
|
+
var __vue_staticRenderFns__ = [];
|
|
33
|
+
|
|
34
|
+
/* style */
|
|
35
|
+
const __vue_inject_styles__ = undefined;
|
|
36
|
+
/* scoped */
|
|
37
|
+
const __vue_scope_id__ = undefined;
|
|
38
|
+
/* module identifier */
|
|
39
|
+
const __vue_module_identifier__ = undefined;
|
|
40
|
+
/* functional template */
|
|
41
|
+
const __vue_is_functional_template__ = false;
|
|
42
|
+
/* style inject */
|
|
43
|
+
|
|
44
|
+
/* style inject SSR */
|
|
45
|
+
|
|
46
|
+
/* style inject shadow dom */
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
const __vue_component__ = __vue_normalize__(
|
|
51
|
+
{ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
|
|
52
|
+
__vue_inject_styles__,
|
|
53
|
+
__vue_script__,
|
|
54
|
+
__vue_scope_id__,
|
|
55
|
+
__vue_is_functional_template__,
|
|
56
|
+
__vue_module_identifier__,
|
|
57
|
+
false,
|
|
58
|
+
undefined,
|
|
59
|
+
undefined,
|
|
60
|
+
undefined
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
export default __vue_component__;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const isValidMessageRenderer = renderer => renderer !== null && typeof renderer === 'object' && typeof renderer.component === 'object' && typeof renderer.matchMessage === 'function';
|
|
2
|
+
const messageRenderersValidator = renderers => Array.isArray(renderers) && renderers.every(renderer => isValidMessageRenderer(renderer));
|
|
1
3
|
const concatUntilEmpty = arr => {
|
|
2
4
|
if (!arr) return '';
|
|
3
5
|
let end = arr.findIndex(el => !el);
|
|
@@ -53,4 +55,4 @@ const copyToClipboard = (textToCopy, el) => {
|
|
|
53
55
|
}
|
|
54
56
|
};
|
|
55
57
|
|
|
56
|
-
export { concatUntilEmpty, copyToClipboard };
|
|
58
|
+
export { concatUntilEmpty, copyToClipboard, isValidMessageRenderer, messageRenderersValidator };
|
|
@@ -25,6 +25,7 @@ const MESSAGE_MODEL_ROLES = {
|
|
|
25
25
|
request: 'request',
|
|
26
26
|
workflow_end: 'workflow_end'
|
|
27
27
|
};
|
|
28
|
+
const VALID_MESSAGE_TYPES = [MESSAGE_MODEL_ROLES.agent, MESSAGE_MODEL_ROLES.workflow_end, MESSAGE_MODEL_ROLES.request, MESSAGE_MODEL_ROLES.tool, MESSAGE_MODEL_ROLES.user, MESSAGE_MODEL_ROLES.system, MESSAGE_MODEL_ROLES.assistant];
|
|
28
29
|
const SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED = true;
|
|
29
30
|
|
|
30
31
|
// TODO this should be a shared util in GitLab UI
|
|
@@ -60,4 +61,4 @@ const APPROVAL_TOOL_NAMES = {
|
|
|
60
61
|
runGitCommand: 'run_git_command'
|
|
61
62
|
};
|
|
62
63
|
|
|
63
|
-
export { APPROVAL_TOOL_NAMES, CHAT_BASE_COMMANDS, CHAT_CLEAR_MESSAGE, CHAT_INCLUDE_MESSAGE, CHAT_NEW_MESSAGE, CHAT_RESET_MESSAGE, DEFAULT_DEBOUNCE_AND_THROTTLE_MS, DOCUMENTATION_SOURCE_TYPES, LOADING_TRANSITION_DURATION, MAX_PROMPT_LENGTH, MESSAGE_MODEL_ROLES, PROMPT_LENGTH_WARNING, SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED, acceptedApproveToolPayloads, badgeTypeValidator, badgeTypes };
|
|
64
|
+
export { APPROVAL_TOOL_NAMES, CHAT_BASE_COMMANDS, CHAT_CLEAR_MESSAGE, CHAT_INCLUDE_MESSAGE, CHAT_NEW_MESSAGE, CHAT_RESET_MESSAGE, DEFAULT_DEBOUNCE_AND_THROTTLE_MS, DOCUMENTATION_SOURCE_TYPES, LOADING_TRANSITION_DURATION, MAX_PROMPT_LENGTH, MESSAGE_MODEL_ROLES, PROMPT_LENGTH_WARNING, SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED, VALID_MESSAGE_TYPES, acceptedApproveToolPayloads, badgeTypeValidator, badgeTypes };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { MESSAGE_MODEL_ROLES } from './components/chat/constants';
|
|
2
|
+
export { MESSAGE_MODEL_ROLES, VALID_MESSAGE_TYPES } from './components/chat/constants';
|
|
1
3
|
export { default as DuoUserFeedback } from './components/user_feedback/user_feedback';
|
|
2
4
|
export { default as DuoChat } from './components/chat/duo_chat';
|
|
3
5
|
export { default as DuoChatContextConversation } from './components/chat/components/duo_chat_conversation/duo_chat_conversation';
|
|
@@ -5,7 +7,6 @@ export { default as DuoChatLoader } from './components/chat/components/duo_chat_
|
|
|
5
7
|
export { default as DuoChatMessage } from './components/chat/components/duo_chat_message/duo_chat_message';
|
|
6
8
|
export { default as DuoChatMessageSources } from './components/chat/components/duo_chat_message_sources/duo_chat_message_sources';
|
|
7
9
|
export { default as DuoChatPredefinedPrompts } from './components/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts';
|
|
8
|
-
export { AGENT_MESSAGE_TYPE, FLOW_END_TYPE, INPUT_REQUEST_TYPE, TOOL_MESSAGE_TYPE, USER_MESSAGE_TYPE, VALID_MESSAGE_TYPES } from './components/chat/components/duo_chat_message/message_types/constants';
|
|
9
10
|
export { default as MessageMap } from './components/chat/components/duo_chat_message/message_types/message_map';
|
|
10
11
|
export { default as AgentMessage } from './components/chat/components/duo_chat_message/message_types/message_agent';
|
|
11
12
|
export { default as InputRequestedMessage } from './components/chat/components/duo_chat_message/message_types/message_input_requested';
|
|
@@ -27,3 +28,12 @@ export { default as DuoLayout } from './components/ui/duo_layout/duo_layout';
|
|
|
27
28
|
export { default as SideRail } from './components/ui/side_rail/side_rail';
|
|
28
29
|
export { default as WebDuoChat } from './components/chat/web_duo_chat';
|
|
29
30
|
export { default as WebAgenticDuoChat } from './components/agentic_chat/web_agentic_duo_chat';
|
|
31
|
+
|
|
32
|
+
// Legacy message type exports for backward compatibility
|
|
33
|
+
const AGENT_MESSAGE_TYPE = MESSAGE_MODEL_ROLES.agent;
|
|
34
|
+
const USER_MESSAGE_TYPE = MESSAGE_MODEL_ROLES.user;
|
|
35
|
+
const FLOW_END_TYPE = MESSAGE_MODEL_ROLES.workflow_end;
|
|
36
|
+
const INPUT_REQUEST_TYPE = MESSAGE_MODEL_ROLES.request;
|
|
37
|
+
const TOOL_MESSAGE_TYPE = MESSAGE_MODEL_ROLES.tool;
|
|
38
|
+
|
|
39
|
+
export { AGENT_MESSAGE_TYPE, FLOW_END_TYPE, INPUT_REQUEST_TYPE, TOOL_MESSAGE_TYPE, USER_MESSAGE_TYPE };
|