n8n-editor-ui
Version:
Workflow Editor UI for n8n
2 lines • 18.1 kB
JavaScript
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.13.4`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`1dc5ce30-7d13-4953-9a6f-071d7b7536f5`,e._sentryDebugIdIdentifier=`sentry-dbid-1dc5ce30-7d13-4953-9a6f-071d7b7536f5`)})()}catch{}import{o as e}from"./chunk-DxpFCn6T.js";import{$ as t,A as n,C as r,E as i,Ft as a,N as o,S as s,Sn as c,T as l,W as u,Wt as d,X as f,_ as p,_n as m,at as h,dt as g,gt as _,h as v,j as y,pt as ee,rt as te,w as b,yt as x}from"./vue.runtime.esm-bundler-D9KLAxvJ.js";import{B as ne,bt as S,w as re,xt as ie}from"./_MapCache-CUJwh2qp.js";import{$i as C,Fi as w,Ii as T,Mi as E,O as ae,Qi as D,Xi as oe,Yi as se,Zi as O,vt as k}from"./src-wni2AGA3.js";import{t as A}from"./_plugin-vue_export-helper-Dm3nT7Ps.js";import"./sanitize-html-my1ogl5v.js";import{As as ce,Hr as le,Tr as ue,at as de,en as fe,jr as pe,r as me,t as he}from"./users.store-BHWXXawf.js";import{Kc as ge,_i as _e}from"./constants-CIP7tKq1.js";import"./merge-BqvKZ38d.js";import{r as ve,v as j}from"./_baseOrderBy-CaKruttV.js";import{t as M}from"./dateformat-CYfyw486.js";import"./useDebounce-CTeIt-cH.js";import{t as ye}from"./Modal-CfEU2AWh.js";import"./nodeIcon-BFJyt77y.js";import"./CredentialIcon-BKhP7Biv.js";import"./NodeIcon-0naEDfOR.js";import"./dist-DG6crvT0.js";import{c as be,y as N}from"./constants-B7scOakb.js";import{D as xe,E as Se,g as Ce,t as we,y as Te}from"./chat.store-Bg89IR0u.js";import"./ChatAgentAvatar-Dxv-BN__.js";import{n as Ee,t as De}from"./ToolsSelector-C3Jxpxix.js";import{n as Oe,t as ke}from"./useCustomAgent-CI-guKOt.js";var P=6,Ae=A(o({__name:`SuggestedPromptsEditor`,props:{modelValue:{required:!0},modelModifiers:{}},emits:[`update:modelValue`],setup(e){let r={type:`icon`,value:`comment`},o=S(),s=g(e,`modelValue`),l=a([]);function f(){s.value.length>=P||(s.value=[...s.value,{text:``,icon:r}],u(()=>{l.value[s.value.length-1]?.focus()}))}function h(e){s.value=s.value.filter((t,n)=>n!==e)}function _(e,t){s.value=s.value.map((n,r)=>r===e?{...n,text:t}:n)}function v(e,t){s.value=s.value.map((n,r)=>r===e?{...n,icon:t}:n)}function ee(e,t){e.key===`Enter`?(e.preventDefault(),s.value[t].text.trim().length>0&&f()):e.key===`Backspace`&&s.value[t].text===``&&(e.preventDefault(),h(t),t>0&&u(()=>{l.value[t-1]?.focus()}))}return(e,a)=>(t(),i(`div`,{class:m([e.$style.container,`suggested-prompts-editor`])},[(t(!0),i(p,null,te(s.value,(n,a)=>(t(),i(`div`,{key:a,class:m(e.$style.row)},[y(d(ae),{"model-value":n.icon??r,"button-tooltip":d(o).baseText(`chatHub.agent.editor.iconPicker.button.tooltip`),"onUpdate:modelValue":e=>v(a,e)},null,8,[`model-value`,`button-tooltip`,`onUpdate:modelValue`]),y(d(w),{ref_for:!0,ref:e=>{l.value[a]=e},"model-value":n.text,placeholder:d(o).baseText(`chatHub.agent.editor.suggestedPrompts.placeholder`),maxlength:256,class:m(e.$style.input),"onUpdate:modelValue":e=>_(a,e),onKeydown:e=>ee(e,a)},null,8,[`model-value`,`placeholder`,`class`,`onUpdate:modelValue`,`onKeydown`]),y(d(D),{variant:`ghost`,icon:`x`,size:`small`,"data-testid":`remove-prompt-button`,onClick:e=>h(a)},null,8,[`onClick`])],2))),128)),y(d(D),{variant:`subtle`,icon:`plus`,size:`small`,disabled:s.value.length>=P,"data-testid":`add-prompt-button`,onClick:f},{default:x(()=>[n(c(d(o).baseText(`chatHub.agent.editor.suggestedPrompts.addButton`)),1)]),_:1},8,[`disabled`])],2))}}),[[`__cssModules`,{$style:{container:`_container_kc4ev_125`,row:`_row_kc4ev_131`,input:`_input_kc4ev_137`}}]]),je=e(M(),1),Me=A(o({__name:`AgentEditorModalFileRow`,props:{item:{},semanticSearchReady:{type:Boolean},currentEmbeddingProvider:{}},emits:[`remove`],setup(e,{emit:a}){let o=e,u=a,f=S(),h=s(()=>{let e=o.item.createdAt??new Date().toISOString(),t=new Date().getFullYear().toString(),n=(0,je.default)(e,`mmmm d${e.startsWith(t)?``:`, yyyy`}`);return f.baseText(`chatHub.agent.editor.files.createdAt`,{interpolate:{date:n}})}),g=s(()=>{if(!(o.item.isNew||o.item.status!==`indexed`)){if(!o.semanticSearchReady)return f.baseText(`chatHub.agent.editor.files.semanticSearchNotReady.tooltip`);if(o.item.provider&&o.item.provider!==o.currentEmbeddingProvider)return f.baseText(`chatHub.agent.editor.files.embeddingMismatch.tooltip`,{interpolate:{fileProvider:N[o.item.provider],currentProvider:o.currentEmbeddingProvider?N[o.currentEmbeddingProvider]:`unknown`}})}});return(a,o)=>(t(),i(`div`,{class:m(a.$style.fileRow)},[r(`div`,{class:m(a.$style.fileName)},[r(`span`,{class:m(a.$style.fileNameText)},c(e.item.fileName),3),r(`span`,{class:m(a.$style.createdAt)},c(h.value),3)],2),r(`div`,{class:m(a.$style.indexedCell)},[g.value?(t(),b(d(E),{key:0,content:g.value},{default:x(()=>[y(d(O),{size:`small`,class:m(a.$style.statusText)},{default:x(()=>[y(d(C),{icon:`triangle-alert`,size:`medium`,class:m(a.$style.iconWarning)},null,8,[`class`]),n(` `+c(d(f).baseText(`chatHub.agent.editor.files.unavailable`)),1)]),_:1},8,[`class`])]),_:1},8,[`content`])):e.item.status===`indexing`?(t(),i(p,{key:1},[y(d(C),{icon:`loader`,class:m(a.$style.iconIndexing),size:`medium`},null,8,[`class`]),y(d(O),{size:`small`,color:`text-light`},{default:x(()=>[n(c(d(f).baseText(`chatHub.agent.editor.files.indexing`)),1)]),_:1})],64)):e.item.status===`error`?(t(),b(d(E),{key:2,content:d(f).baseText(`chatHub.agent.editor.files.indexingError.tooltip`,{interpolate:{error:e.item.error??`Unknown error`}})},{default:x(()=>[y(d(O),{size:`small`,color:`danger`,class:m(a.$style.statusText)},{default:x(()=>[y(d(C),{icon:`circle-x`,size:`medium`}),n(` `+c(d(f).baseText(`chatHub.agent.editor.files.failed`)),1)]),_:1},8,[`class`])]),_:1},8,[`content`])):l(``,!0)],2),e.item.status===`indexing`?l(``,!0):(t(),b(d(T),{key:0,icon:`trash-2`,size:`small`,variant:`subtle`,onClick:o[0]||=v(e=>u(`remove`),[`stop`])}))],2))}}),[[`__cssModules`,{$style:{fileRow:`_fileRow_17tdo_125`,fileName:`_fileName_17tdo_137`,fileNameText:`_fileNameText_17tdo_144`,createdAt:`_createdAt_17tdo_152`,indexedCell:`_indexedCell_17tdo_158`,iconWarning:`_iconWarning_17tdo_165`,iconIndexing:`_iconIndexing_17tdo_169`,spin:`_spin_17tdo_1`,statusText:`_statusText_17tdo_183`}}]]),Ne=A(o({__name:`AgentEditorModal`,props:{modalName:{},data:{}},setup(e){let o=e,u=we(),g=he(),v=ce(),C=de(),T=S(),E=s(()=>g.isInstanceOwner),A=s(()=>u.semanticSearchReadiness.isReadyForCurrentUser),M=ue(),N=pe(),P=me(),je=re(),{customAgent:Ne,isLoading:Pe}=ke(o.data.agentId),F=a(``),I=a(``),L=a(``),R=a(null),z=a(!1),B=a(!1),V=a([]),Fe=a(_e),H=a(!1),Ie=ee(`nameInput`),U=a(Te),W=a([]),G=a([]),K=a([]),Le=ee(`fileInput`),Re=s(()=>v.moduleSettings[`chat-hub`]?.semanticSearch.embeddingModel.provider??null),ze=s(()=>v.moduleSettings[`chat-hub`]?.agentUploadMaxSizeMb??20),Be=s(()=>[...W.value.map(e=>({...e,isNew:!1})),...G.value.map((e,t)=>({id:`new-${t}`,type:`embedding`,provider:Re.value,fileName:e.name,mimeType:e.type,isNew:!0}))]),q=a([]),J=a({}),Y=s(()=>R.value&&Ge.value[R.value.provider]),X=s(()=>R.value&&u.getAgent(R.value,{name:R.value.model})),Z=s(()=>!!o.data.agentId),Ve=s(()=>Z.value&&Pe.value),He=s(()=>Z.value?T.baseText(`chatHub.agent.editor.title.edit`):T.baseText(`chatHub.agent.editor.title.new`)),Ue=s(()=>z.value?T.baseText(`chatHub.agent.editor.saving`):T.baseText(`chatHub.agent.editor.save`)),We=s(()=>F.value.trim().length>0&&R.value!==null&&!!Y.value),Ge=s(()=>({...o.data.credentials,...J.value})),Ke=s(()=>X.value?.metadata.capabilities.functionCalling??!1);function qe(){P.closeModal(o.modalName)}_(X,e=>{e&&!e.metadata.capabilities.functionCalling&&(V.value=[])},{immediate:!0}),_(Ne,e=>{e&&(U.value=e.icon??Te,F.value=e.name,I.value=e.description??``,L.value=e.systemPrompt,R.value={provider:e.provider,model:e.model},W.value=e.files,G.value=[],K.value=[],q.value=e.suggestedPrompts,V.value=e.toolIds??[],e.credentialId&&(J.value[e.provider]=e.credentialId))},{immediate:!0}),f(()=>{_([Ve,Ie],([e,t])=>{e||t?.focus()},{immediate:!0,flush:`post`})}),_(Ge,async e=>{if(e){H.value=!0;try{Fe.value=await xe(ve().restApiContext,{credentials:e})}finally{H.value=!1}}},{immediate:!0});function Je(e,t){J.value={...J.value,[e]:t}}function Ye(e){V.value.includes(e)?V.value=V.value.filter(t=>t!==e):V.value=[...V.value,e]}function Xe(e){j(Ce(e)),R.value=e}async function Ze(){if(!(!We.value||z.value)){z.value=!0;try{j(R.value),j(Y.value);let e=q.value.filter(e=>e.text.trim().length>0),t={name:F.value.trim(),description:I.value.trim()||void 0,systemPrompt:L.value.trim(),...R.value,credentialId:Y.value,toolIds:V.value,icon:U.value,suggestedPrompts:e.length>0?e:void 0},n=G.value.length>0,r=[...G.value];if(Z.value&&o.data.agentId){if(await u.updateCustomAgent(o.data.agentId,t,r,K.value,o.data.credentials),r.length>0){let e=r.reduce((e,t)=>e+t.size,0)/(1024*1024);ot.track(`User added files to personal agent`,{count:r.length,total_size_mb:e,agent_id:o.data.agentId})}M.showMessage({title:T.baseText(`chatHub.agent.editor.success.update`),message:n?T.baseText(`chatHub.agent.editor.success.withFiles`):void 0,type:`success`})}else{let e=await u.createCustomAgent(t,r,o.data.credentials);if(r.length>0){let t=r.reduce((e,t)=>e+t.size,0)/(1024*1024);ot.track(`User added files to personal agent`,{count:r.length,total_size_mb:t,agent_id:e.model.provider===`custom-agent`?e.model.agentId:void 0})}o.data.onCreateCustomAgent?.(e),M.showMessage({title:T.baseText(`chatHub.agent.editor.success.create`),message:n?T.baseText(`chatHub.agent.editor.success.withFiles`):void 0,type:`success`})}qe()}catch(e){let t=e instanceof Error?e.message:``;M.showError(e,T.baseText(`chatHub.agent.editor.error.save`),t)}finally{z.value=!1}}}async function Qe(){if(!(!Z.value||!o.data.agentId||B.value)&&await N.confirm(T.baseText(`chatHub.agent.editor.delete.confirm.message`),T.baseText(`chatHub.agent.editor.delete.confirm.title`),{confirmButtonText:T.baseText(`chatHub.agent.editor.delete.confirm.button`),cancelButtonText:T.baseText(`chatHub.agent.editor.delete.cancel.button`),type:`warning`})===`confirm`){B.value=!0;try{await u.deleteCustomAgent(o.data.agentId,o.data.credentials),M.showMessage({title:T.baseText(`chatHub.agent.editor.success.delete`),type:`success`}),o.data.onClose?.(),qe()}catch(e){let t=e instanceof Error?e.message:``;M.showError(e,T.baseText(`chatHub.agent.editor.error.delete`),t)}finally{B.value=!1}}}function $e(e){return e.type===`application/pdf`}function et(e){let t=ze.value*1024*1024;for(let n of e)if(n.size>t)return M.showMessage({title:T.baseText(`chatHub.agent.editor.files.tooLarge`,{interpolate:{fileName:n.name,maxSizeMb:ze.value}}),type:`error`}),!1;return!0}function tt(e){let t=e.filter(e=>$e(e));t.length!==0&&et(t)&&(G.value=[...G.value,...t])}function nt(e){let t=e.target;if(!t.files)return;let n=Array.from(t.files).filter(e=>$e(e));if(n.length===0){t.value=``;return}if(!et(n)){t.value=``;return}G.value=[...G.value,...n],t.value=``}function rt(){Le.value?.click()}function it(e){e.isNew?G.value=G.value.filter((t,n)=>`new-${n}`!==e.id):(K.value=[...K.value,e.id],W.value=W.value.filter(t=>t.id!==e.id))}let at=le(),ot=fe(),Q=s(()=>at.isVariantEnabled(ge.name,ge.variant)),$=Ee(!0,tt,[`application/pdf`]),st=s(()=>W.value.some(e=>e.status===`indexing`)),{pause:ct,resume:lt}=ne(async()=>{if(o.data.agentId)try{W.value=(await Se(ve().restApiContext,o.data.agentId)).files}catch{}},5e3);return _(st,e=>{e&&o.data.agentId?lt():ct()},{immediate:!0}),_(je,e=>{e===`visible`&&!A.value&&(v.getModuleSettings(),C.fetchAllCredentials())}),(a,o)=>{let s=h(`RouterLink`);return t(),b(ye,{name:e.modalName,width:`640px`,loading:Ve.value},{header:x(()=>[r(`div`,{class:m(a.$style.header)},[y(d(se),{tag:`h2`,size:`large`},{default:x(()=>[n(c(He.value),1)]),_:1}),Z.value?(t(),b(d(D),{key:0,variant:`subtle`,icon:`trash-2`,class:m(a.$style.deleteButton),disabled:B.value,loading:B.value,onClick:Qe},null,8,[`class`,`disabled`,`loading`])):l(``,!0)],2)]),content:x(()=>[r(`div`,{class:m(a.$style.contentWrapper)},[Q.value&&d($).isDragging.value?(t(),i(`div`,{key:0,class:m(a.$style.dropOverlay)},[d($).isDraggingUnsupported.value?(t(),b(d(O),{key:0,size:`large`,color:`text-dark`},{default:x(()=>[n(c(d(T).baseText(`chatHub.agent.editor.dropOverlay.unsupportedFileType`)),1)]),_:1})):(t(),b(d(O),{key:1,size:`large`,color:`text-dark`},{default:x(()=>[n(c(d(T).baseText(`chatHub.agent.editor.dropOverlay.addFile`)),1)]),_:1}))],2)):l(``,!0),r(`div`,{class:m([a.$style.content,{[a.$style.isDraggingFile]:Q.value&&d($).isDragging.value}]),onDragenter:o[5]||=e=>Q.value&&A.value?d($).handleDragEnter(e):void 0,onDragleave:o[6]||=e=>Q.value&&A.value?d($).handleDragLeave(e):void 0,onDragover:o[7]||=e=>Q.value&&A.value?d($).handleDragOver(e):void 0,onDrop:o[8]||=e=>Q.value&&A.value?d($).handleDrop(e):void 0},[y(d(k),{"input-name":`agent-name`,label:d(T).baseText(`chatHub.agent.editor.name.label`),required:!0},{default:x(()=>[r(`div`,{class:m(a.$style.agentName)},[y(d(ae),{modelValue:U.value,"onUpdate:modelValue":o[0]||=e=>U.value=e,"button-tooltip":d(T).baseText(`chatHub.agent.editor.iconPicker.button.tooltip`)},null,8,[`modelValue`,`button-tooltip`]),y(d(w),{id:`agent-name`,ref:`nameInput`,modelValue:F.value,"onUpdate:modelValue":o[1]||=e=>F.value=e,placeholder:d(T).baseText(`chatHub.agent.editor.name.placeholder`),maxlength:128,class:m(a.$style.agentNameInput)},null,8,[`modelValue`,`placeholder`,`class`])],2)]),_:1},8,[`label`]),y(d(k),{"input-name":`agent-description`,label:d(T).baseText(`chatHub.agent.editor.description.label`)},{default:x(()=>[y(d(w),{id:`agent-description`,modelValue:I.value,"onUpdate:modelValue":o[2]||=e=>I.value=e,type:`textarea`,placeholder:d(T).baseText(`chatHub.agent.editor.description.placeholder`),maxlength:512,rows:3,class:m(a.$style.input)},null,8,[`modelValue`,`placeholder`,`class`])]),_:1},8,[`label`]),y(d(k),{"input-name":`agent-system-prompt`,label:d(T).baseText(`chatHub.agent.editor.systemPrompt.label`)},{default:x(()=>[y(d(w),{id:`agent-system-prompt`,modelValue:L.value,"onUpdate:modelValue":o[3]||=e=>L.value=e,type:`textarea`,placeholder:d(T).baseText(`chatHub.agent.editor.systemPrompt.placeholder`),rows:6,class:m(a.$style.input)},null,8,[`modelValue`,`placeholder`,`class`])]),_:1},8,[`label`]),y(d(k),{"input-name":`agent-suggested-prompts`,label:d(T).baseText(`chatHub.agent.editor.suggestedPrompts.label`),"tooltip-text":d(T).baseText(`chatHub.agent.editor.suggestedPrompts.tooltip`),"show-tooltip":!0},{default:x(()=>[y(Ae,{modelValue:q.value,"onUpdate:modelValue":o[4]||=e=>q.value=e},null,8,[`modelValue`])]),_:1},8,[`label`,`tooltip-text`]),r(`div`,{class:m(a.$style.row)},[y(d(k),{"input-name":`agent-model`,class:m(a.$style.input),label:d(T).baseText(`chatHub.agent.editor.model.label`),required:!0},{default:x(()=>[y(Oe,{"selected-agent":X.value,"include-custom-agents":!1,credentials:Ge.value,agents:Fe.value,"is-loading":H.value,class:m(a.$style.modelSelector),"warn-missing-credentials":``,onChange:Xe,onSelectCredential:Je},null,8,[`selected-agent`,`credentials`,`agents`,`is-loading`,`class`])]),_:1},8,[`class`,`label`]),y(d(k),{"input-name":`agent-tool`,class:m(a.$style.input),label:d(T).baseText(`chatHub.agent.editor.tools.label`),required:!1},{default:x(()=>[r(`div`,null,[y(De,{disabled:!Ke.value,"disabled-tooltip":Ke.value?void 0:R.value?d(T).baseText(`chatHub.tools.selector.disabled.tooltip`):d(T).baseText(`chatHub.tools.selector.disabled.noModel.tooltip`),"checked-tool-ids":V.value,onToggle:Ye},null,8,[`disabled`,`disabled-tooltip`,`checked-tool-ids`])])]),_:1},8,[`class`,`label`])],2),Q.value?(t(),b(d(k),{key:0,"input-name":`agent-files`,label:d(T).baseText(`chatHub.agent.editor.files.label`),required:!1},{default:x(()=>[r(`input`,{ref:`fileInput`,type:`file`,class:m(a.$style.fileInput),accept:`application/pdf`,multiple:``,onChange:nt},null,34),A.value?l(``,!0):(t(),b(d(oe),{key:0,theme:`info`,icon:`info`,class:m(a.$style.vectorStoreCallout)},{default:x(()=>[y(d(ie),{keypath:E.value?`chatHub.agent.editor.semanticSearch.notReady.canConfigure`:`chatHub.agent.editor.semanticSearch.notReady`,tag:`span`,scope:`global`},{settingsLink:x(()=>[y(s,{to:{name:d(be)},target:`_blank`,class:m(a.$style.settingsLink)},{default:x(()=>[n(c(d(T).baseText(`chatHub.agent.editor.semanticSearch.settingsLink`)),1)]),_:1},8,[`to`,`class`])]),_:1},8,[`keypath`])]),_:1},8,[`class`])),Be.value.length>0?(t(),i(`div`,{key:1,class:m(a.$style.fileList)},[(t(!0),i(p,null,te(Be.value,e=>(t(),b(Me,{key:e.id,item:e,"semantic-search-ready":A.value,"current-embedding-provider":Re.value,onRemove:t=>it(e)},null,8,[`item`,`semantic-search-ready`,`current-embedding-provider`,`onRemove`]))),128))],2)):l(``,!0),y(d(D),{type:`tertiary`,icon:`plus`,variant:`subtle`,class:m(a.$style.addFileButton),disabled:!A.value,onClick:rt},{default:x(()=>[...o[9]||=[n(` Add file `,-1)]]),_:1},8,[`class`,`disabled`])]),_:1},8,[`label`])):l(``,!0)],34)],2)]),footer:x(()=>[r(`div`,{class:m(a.$style.footer)},[y(d(D),{variant:`subtle`,onClick:qe},{default:x(()=>[n(c(d(T).baseText(`chatHub.tools.editor.cancel`)),1)]),_:1}),y(d(D),{variant:`solid`,disabled:!We.value||z.value,onClick:Ze},{default:x(()=>[n(c(Ue.value),1)]),_:1},8,[`disabled`])],2)]),_:1},8,[`name`,`loading`])}}}),[[`__cssModules`,{$style:{header:`_header_c3h8p_125`,deleteButton:`_deleteButton_c3h8p_133`,contentWrapper:`_contentWrapper_c3h8p_137`,content:`_content_c3h8p_137`,vectorStoreCallout:`_vectorStoreCallout_c3h8p_152`,settingsLink:`_settingsLink_c3h8p_156`,isDraggingFile:`_isDraggingFile_c3h8p_161`,dropOverlay:`_dropOverlay_c3h8p_165`,input:`_input_c3h8p_179`,agentName:`_agentName_c3h8p_183`,agentNameInput:`_agentNameInput_c3h8p_189`,row:`_row_c3h8p_193`,modelSelector:`_modelSelector_c3h8p_199`,footer:`_footer_c3h8p_203`,fileInput:`_fileInput_c3h8p_209`,addFileButton:`_addFileButton_c3h8p_213`,fileList:`_fileList_c3h8p_218`,credentialPickerRow:`_credentialPickerRow_c3h8p_224`,credentialPicker:`_credentialPicker_c3h8p_224`}}]]);export{Ne as default};
//# sourceMappingURL=AgentEditorModal-BbIio_yx.js.map